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.
[[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 | +--------------------+