sql >> Base de Datos >  >> RDS >> Mysql

Instalación del clúster Percona XtraDB en CentOS 7

Bienvenidos a otro blog. Esta vez estoy aquí para mostrarles cómo configurar el clúster percona XtraDB. Bien, entonces, ¿qué es percona XtraDB? XtraDB es una solución de agrupación en clúster de MySQL que garantiza una alta disponibilidad, evita el tiempo de inactividad y la pérdida de datos y proporciona escalabilidad lineal para un entorno en crecimiento. Cuando ejecuta una consulta, se ejecuta localmente en el nodo. Todos los datos están disponibles localmente, sin necesidad de acceso remoto. Una buena solución para escalar una carga de trabajo de lectura. Puede enviar consultas de lectura a cualquiera de los nodos. Una vez que instale percona XtraDB, no necesita instalar MySQL por separado, XtraDB lo obtendrá del repositorio de percona y podrá preparar el clúster después de leer este artículo.

requisito previo:

Para configurar un cluster percona XtraDB en Servidores Linux necesitamos tres servidores, la información es como la siguiente:

servidor percona1:192.168.56.110

servidor percona2:192.168.56.113

Servidor percona3:192.168.56.114

SO:CentOS 7

también puede optar por dos servidores, pero el documento oficial recomienda un número impar de servidores. por ejemplo, 3,5,7 y así sucesivamente. simplemente no elijas un número par de nodos, lo llaman cerebro dividido. Un cerebro dividido es un estado en el que los nodos pierden contacto entre sí y luego ambos intentan tomar el control de los recursos compartidos o proporcionar simultáneamente el servicio de clúster

NOTA:Necesitamos acceso de root en el nodo donde instalaremos Percona XtraDB Cluster
(ya sea que haya iniciado sesión como usuario con privilegios de root o pueda ejecutar comandos con Sudo

Comprobaciones previas:

Agregue las siguientes entradas en su archivo /etc/hosts ——> en todos los servidores (percona1,percona2,percona3)

192.168.56.110 percona1.dominio local percona1
192.168.56.113 percona2.dominio local percona2
192.168.56.114 percona3.dominio local percona3

Abrir puertos de cortafuegos:

Necesitamos abrir los siguientes puertos en todos los servidores (percona1,percona2,percona3)
3306
4444
4567
4568

firewall-cmd --zone=public --add-service=mysql --permanent
firewall-cmd --zone=public --add-port=3306/tcp --permanent
firewall-cmd --zone=public --add-port=4567/tcp --permanent
firewall-cmd --zone=public --add-port=4568/tcp --permanent
firewall-cmd --zone=public --add-port=4444/tcp --permanent
firewall-cmd --zone=public --add-port=4567/udp --permanent
firewall-cmd --reload
firewall-cmd --list-all
[[email protected] ~]# firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: enp0s3 enp0s8
sources: 
services: ssh dhcpv6-client mysql
ports: 3306/tcp 4567/tcp 4568/tcp 4444/tcp 4567/udp
protocols: 
masquerade: no
forward-ports: 
source-ports: 
icmp-blocks: 
rich rules

Deshabilitar SELinux:——->en todos los servidores (percona1,percona2,percona3)

[[email protected] ~]# setenforce 0

Esto pondrá a SELinux en modo permisivo para la sesión actual, pero debemos deshabilitarlo permanentemente.
Edite el archivo /etc/sysconfig/selinux y configure la variable selinux como deshabilitada en todos los servidores (percona1, percona2, percona3):
vi /etc/sysconfig/selinux
SELINUX=deshabilitado

Todos los servidores deben ser accesibles entre sí. Para verificar la accesibilidad, haga ping a cada servidor.

Instálelo debajo de RPM prerrequisito:——->en todos los servidores (percona1,percona2,percona3)

epel-release
libev
socat

[[email protected] ~]# yum -y install epel-release 
Installed:
epel-release.noarch 0:7-11

[[email protected] yum.repos.d]# yum -y install libev 
Installed:
libev.x86_64 0:4.15-7.el7

[[email protected] Desktop]# yum -y install socat 
Installed:
socat.x86_64 0:1.7.3.2-2.el7

Añadir Repositorio Percona:——->en todos los servidores(percona1,percona2,percona3)

Ahora agregaremos el repositorio percona en los tres servidores (percona1,percona2,percona3):

[[email protected] ~]# sudo yum -y install https://repo.percona.com/yum/percona-release-latest.noarch.rpm
Installed:
percona-release.noarch 0:1.0-13 
Complete!

Instalar Percona-XtraDB-Cluster:——->en todos los servidores (percona1,percona2,percona3)

[[email protected] ~]# yum install -y Percona-XtraDB-Cluster-57
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
.
.
.

Installed:
Percona-XtraDB-Cluster-57.x86_64 0:5.7.27-31.39.1.el7 Percona-XtraDB-Cluster-shared-57.x86_64 0:5.7.27-31.39.1.el7 
Percona-XtraDB-Cluster-shared-compat-57.x86_64 0:5.7.27-31.39.1.el7

Dependency Installed:
Percona-XtraDB-Cluster-client-57.x86_64 0:5.7.27-31.39.1.el7 Percona-XtraDB-Cluster-server-57.x86_64 0:5.7.27-31.39.1.el7 
percona-xtrabackup-24.x86_64 0:2.4.17-1.el7 perl-DBD-MySQL.x86_64 0:4.023-6.el7 
perl-Digest.noarch 0:1.17-245.el7 perl-Digest-MD5.x86_64 0:2.52-3.el7 
qpress.x86_64 0:11-1.el7

Replaced:
mariadb-libs.x86_64 1:5.5.60-1.el7_5
Complete!

Veamos si Percona XtraDB está instalado o no.

[[email protected] ~]# yum search Percona-XtraDB

NOTE: Till here all above steps should be perfomed on all servers (percona1,percona2,percona3)
Configuración de nodos para replicación de conjuntos de escritura
ON Percona1:

Inicie el servidor MySQL y cambie la contraseña de root solo en el servidor percona1

[[email protected] ~]# systemctl start mysql
[[email protected] ~]# grep password /var/log/mysqld.log
2019-12-11T10:35:12.135133Z 1 [Note] A temporary password is generated for [email protected]: hJ(l8ySe>f>E

Note : copy the password "hJ(l8ySe>f>E" we are going to change this password :

[[email protected] ~]# mysql_secure_installation ------->on all server(percona1,percona2,percona3)

Securing the MySQL server deployment.
Enter password for user root:

The existing password for the user account root has expired. Please set a new password.

New password:

Re-enter new password:

VALIDATE PASSWORD PLUGIN can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD plugin?

Press y|Y for Yes, any other key for No: 
Using existing password for root.
Change the password for root ? ((Press y|Y for Yes, any other key for No) :

... skipping.
By default, a MySQL installation has an anonymous user,
allowing anyone to log into MySQL without having to have
a user account created for them. This is intended only for
testing, and to make the installation go a bit smoother.
You should remove them before moving into a production
environment.

Remove anonymous users? (Press y|Y for Yes, any other key for No) : yes
Success.

Normally, root should only be allowed to connect from
'localhost'. This ensures that someone cannot guess at
the root password from the network.

Disallow root login remotely? (Press y|Y for Yes, any other key for No) : yes
Success.

By default, MySQL comes with a database named 'test' that
anyone can access. This is also intended only for testing,
and should be removed before moving into a production
environment.

Remove test database and access to it? (Press y|Y for Yes, any other key for No) :

... skipping.
Reloading the privilege tables will ensure that all changes
made so far will take effect immediately.

Reload privilege tables now? (Press y|Y for Yes, any other key for No) : yes
Success.

All done!

Ahora detenga el servidor MySQL en percona1.

[[email protected] ~]# systemctl stop mysql

Ahora configuraremos nuestra replicación, agregaremos información de replicación en el archivo my.cnf.

Configurar ajustes de replicación en percona1:
cat >>/etc/my.cnf<<EOF
[mysqld]
wsrep_provider=/usr/lib64/galera3/libgalera_smm.so
wsrep_cluster_name=perconacluster
wsrep_cluster_address=gcomm://192.168.56.110,192.168.56.113,192.168.56.114
wsrep_node_name=percona1
wsrep_node_address=192.168.56.110
wsrep_sst_method=xtrabackup-v2
wsrep_sst_auth=perconarep:perconapasswd
pxc_strict_mode=ENFORCING
binlog_format=ROW
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2
EOF

Ahora inicialice el clúster arrancando el primer nodo. Este debe ser el nodo con su base de datos principal, que se utilizará como fuente de datos para el clúster en nuestro caso es el servidor percona1

[[email protected] ~]# systemctl start [email protected]

Before configuring replication we need to create a separate user for replication which will be used for the replication process. why we need replication user? when you add a new node to the cluster it dumps the current node configuration and transfers it to the second node for that reason we need a separate user.

NOTA: Asegúrese de que el usuario sea el mismo mencionado en la variable “wsrep_sst_auth” en la configuración de replicación utilizada en el archivo my.cnf.

[[email protected] ~]#mysql -u root -p 
mysql>create user [email protected]'%' identified by 'perconapasswd';
mysql>grant all on *.* to [email protected]'%';
mysql>flush privileges;
ON Percona2:

Configure los ajustes de replicación en percona2:

cat >>/etc/my.cnf<<EOF
[mysqld]
wsrep_provider=/usr/lib64/galera3/libgalera_smm.so
wsrep_cluster_name=perconacluster
wsrep_cluster_address=gcomm://192.168.56.110,192.168.56.113,192.168.56.114
wsrep_node_name=percona2
wsrep_node_address=192.168.56.113
wsrep_sst_method=xtrabackup-v2
wsrep_sst_auth=perconarep:perconapasswd
pxc_strict_mode=ENFORCING
binlog_format=ROW
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2
EOF

Ahora inicie mysql y esto agregará este nodo al clúster.

[[email protected] ~]# systemctl start mysql
ON Percona3:

Configure los ajustes de replicación en percona3:

cat >>/etc/my.cnf<<EOF
[mysqld]
wsrep_provider=/usr/lib64/galera3/libgalera_smm.so
wsrep_cluster_name=perconacluster
wsrep_cluster_address=gcomm://192.168.56.110,192.168.56.113,192.168.56.114
wsrep_node_name=percona3
wsrep_node_address=192.168.56.114
wsrep_sst_method=xtrabackup-v2
wsrep_sst_auth=perconarep:perconapasswd
pxc_strict_mode=ENFORCING
binlog_format=ROW
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2
EOF

Ahora inicie mysql y esto agregará este nodo al clúster.

[[email protected] ~]# systemctl start mysql

observará dichos mensajes en el registro de mysql (var/log/mysqld.log)

(percona2):transferencia de estado desde 0.0 (percona1) completa

1.0 (percona3):transferencia de estado desde 0.0 (percona1) completa

Para asegurarse de que el clúster se haya inicializado, ejecute lo siguiente:

mysql> show status like 'wsrep%';
+----------------------------------+-------------------------------------------------------------+
| Variable_name | Value |
+----------------------------------+-------------------------------------------------------------+
| wsrep_local_state_uuid | 6d95cd36-1c1a-11ea-999a-83631204f6e3 |
| wsrep_protocol_version | 9 |
| wsrep_last_applied | 6 |
.
.
.
| wsrep_flow_control_recv | 0 |
| wsrep_flow_control_interval | [ 173, 173 ] |
| wsrep_flow_control_interval_low | 173 |
| wsrep_flow_control_interval_high | 173 |
| wsrep_flow_control_status | OFF |
.
.
| wsrep_local_state | 4 |
| wsrep_local_state_comment | Synced |
| wsrep_cert_index_size | 1 |
| wsrep_cert_bucket_count | 22 |
| wsrep_gcache_pool_size | 2384 |
.
.
| wsrep_incoming_addresses | 192.168.56.110:3306,192.168.56.114:3306,192.168.56.113:3306 |
| wsrep_cluster_weight | 3 |
| wsrep_desync_count | 0 |
| wsrep_evs_delayed | |
| wsrep_evs_evict_list | |
| wsrep_evs_repl_latency | 0/0/0/0/0 |
| wsrep_evs_state | OPERATIONAL |
| wsrep_gcomm_uuid | 1d16f574-1c1b-11ea-b5dd-574c9a653584 |
| wsrep_cluster_conf_id | 3 |
| wsrep_cluster_size | 3 |
| wsrep_cluster_state_uuid | 6d95cd36-1c1a-11ea-999a-83631204f6e3 |
| wsrep_cluster_status | Primary |
| wsrep_connected | ON |
| wsrep_local_bf_aborts | 0 |
| wsrep_local_index | 0 |
| wsrep_provider_name | Galera |
| wsrep_provider_vendor | Codership Oy <[email protected]> |
| wsrep_provider_version | 3.39(rb3295e6) |
| wsrep_ready | ON |
+----------------------------------+-------------------------------------------------------------+
71 rows in set (0.00 sec)

Como puede ver, el tamaño del clúster es 3 “wsrep_cluster_size | 3” y también puedes ver la IP de nuestros tres nodos
wsrep_incoming_addresses | 192.168.56.110:3306,192.168.56.114:3306,192.168.56.113:3306

Probar nuestro clúster:

Estoy creando una base de datos en percona 1 y luego comprobaremos en percoan 3 que se haya replicado.

mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.03 sec)
mysql> CREATE DATABASE perconatest;
Query OK, 1 row affected (0.03 sec)

Ahora comprobemos en percona3 y veremos que se creará la base de datos 'perconatest'

[[email protected] ~]# mysql -uroot -p -e "show databases"
Enter password: 
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| perconatest |
| performance_schema |
| sys |
+--------------------+