Percona XtraDB Cluster 5.7 安装步骤
Percona XtraDB Cluster是一个完全开源的 MySQL 高可用性解决方案。
它将Percona Server和Percona XtraBackup与Galera库集成以实现同步多源复制。 集群由节点组成,其中每个节点包含跨节点同步的相同数据集。推荐的配置是至少有 3 个节点,但您也可以有 2 个节点。每个节点都是一个常规的 MySQL 服务器实例(例如,Percona 服务器)。您可以将现有的 MySQL 服务器实例转换为节点并使用此节点作为基础运行集群。您还可以从集群中分离任何节点并将其用作常规 MySQL 服务器实例。
先决条件
- 建议使用yum从官方存储库安装 Percona XtraDB Cluster 。
- 您需要在要安装 Percona XtraDB Cluster 的节点上具有 root 访问权限
- 确保以下端口未被防火墙阻止或被其他软件使用:3306,4444,4567,4568
- 将Selinux模式更改为:enforcing=permissive
- 开启NTP时钟同步,确保各节点时钟一致。
node1,IP:192.0.0.11 版本:CentOS Linux release 7.9.2009 (Core)
node2,IP:192.0.0.12 版本:CentOS Linux release 7.9.2009 (Core)
node3,IP:192.0.0.13 版本:CentOS Linux release 7.9.2009 (Core)
一、root以用户身份运行以下命令:
yum install ntp wget net-tools nc
yum install https://repo.percona.com/yum/percona-release-latest.noarch.rpm
二、安装 Percona XtraDB 集群包:
yum install Percona-XtraDB-Cluster-57
三、启动 Percona XtraDB 集群服务器:
service mysql start
复制超级用户帐户自动生成的临时密码:
grep 'temporary password' /var/log/mysqld.log
使用此密码登录root:
mysql -u root -p
更改超级用户帐户的密码并注销:
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'rootPass';
Query OK, 0 rows affected (0.00 sec)
mysql> exit
Bye
停止mysql服务:
systemctl stop mysql
另外两台重复上述步骤并确保mysql服务停止状态
四、配置变量/etc/percona-xtradb-cluster.conf.d/wsrep.cnf
node1:
[mysqld]
wsrep_provider=/usr/lib64/galera3/libgalera_smm.so
wsrep_cluster_name=pxc-cluster
wsrep_cluster_address=gcomm://1192.0.0.11,192.0.0.12,192.0.0.13
wsrep_node_name=node1
wsrep_node_address=192.0.0.11
wsrep_sst_method=xtrabackup-v2
wsrep_sst_auth=sstuser:passw0rd
pxc_strict_mode=ENFORCING
binlog_format=ROW
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2
node2:
[mysqld]
wsrep_provider=/usr/lib64/galera3/libgalera_smm.so
wsrep_cluster_name=pxc-cluster
wsrep_cluster_address=gcomm://1192.0.0.11,192.0.0.12,192.0.0.13
wsrep_node_name=node2
wsrep_node_address=192.0.0.12
wsrep_sst_method=xtrabackup-v2
wsrep_sst_auth=sstuser:passw0rd
pxc_strict_mode=ENFORCING
binlog_format=ROW
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2
node3:
[mysqld]
wsrep_provider=/usr/lib64/galera3/libgalera_smm.so
wsrep_cluster_name=pxc-cluster
wsrep_cluster_address=gcomm://1192.0.0.11,192.0.0.12,192.0.0.13
wsrep_node_name=node3
wsrep_node_address=192.0.0.13
wsrep_sst_method=xtrabackup-v2
wsrep_sst_auth=sstuser:passw0rd
pxc_strict_mode=ENFORCING
binlog_format=ROW
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2
wsrep_cluster_name
指定集群的逻辑名称。对于集群中的所有节点,它必须相同。
wsrep_cluster_address
指定集群中节点的 IP地址。一个节点加入集群至少需要一个,但建议列出所有节点的地址。这样,如果列表中的第一个节点不可用,则加入节点可以使用其他地址。
wsrep_node_name
为节点指定逻辑名称。如果未指定此变量,将使用主机名。
wsrep_node_address
指定此节点的IP 地址。
wsrep_sst_method
默认情况下,Percona XtraDB Cluster 使用Percona XtraBackup进行状态快照传输( SST) wsrep_sst_method=xtrabackup-v2强烈推荐设置。此方法需要在初始节点上设置 SST用户。提供带有wsrep_sst_auth变量的 SST 用户凭据。
wsrep_sst_auth
将SST的身份验证凭据指定为:<sst_pass> . 必须在引导第一个节点时创建此用户 并为其提供必要的权限
pxc_strict_mode
PXC Strict Mode默认启用并设置为ENFORCING,这会阻止在 Percona XtraDB Cluster中使用实验性和不支持的功能。
binlog_format
Galera仅支持行级复制,因此设置binlog_format=ROW.
default_storage_engine
Galera仅支持 InnoDB 存储引擎。它不能与 MyISAM或任何其他非事务性存储引擎一起正常工作。将此变量设置为default_storage_engine=InnoDB。
innodb_autoinc_lock_mode
Galera仅支持2InnoDB 的交错 () 锁定模式。设置传统 ( 0) 或连续 (1) 锁定模式可能会导致复制由于未解决的死锁而失败。将此变量设置为innodb_autoinc_lock_mode=2。
五、引导第一个节点
配置所有 PXC 节点后,通过引导第一个节点来初始化集群。初始节点必须包含要复制到其他节点的所有数据。
引导意味着在没有任何已知集群地址的情况下启动第一个节点:如果wsrep_cluster_address变量为空, Percona XtraDB Cluster假定这是第一个节点并初始化集群。
systemctl start mysql@bootstrap.service
要确保集群已初始化,请运行以下命令:
mysql@node1> show status like 'wsrep%';
+----------------------------+--------------------------------------+
| Variable_name | Value |
+----------------------------+--------------------------------------+
| wsrep_local_state_uuid | c2883338-834d-11e2-0800-03c9c68e41ec |
| ... | ... |
| wsrep_local_state | 4 |
| wsrep_local_state_comment | Synced |
| ... | ... |
| wsrep_cluster_size | 1 |
| wsrep_cluster_status | Primary |
| wsrep_connected | ON |
| ... | ... |
| wsrep_ready | ON |
+----------------------------+--------------------------------------+
40 rows in set (0.01 sec)
输出显示集群大小为 1 个节点,它是主节点,节点处于Synced状态,说明已完全连接并准备好进行写入集复制。
为SST创建一个用户并为该用户帐户提供必要的权限。
用户必须与配置文件中的账户一致。
mysql@node1> CREATE USER 'sstuser'@'localhost' IDENTIFIED BY 'passw0rd';
mysql@node1> GRANT RELOAD, LOCK TABLES, PROCESS, REPLICATION CLIENT ON *.* TO
'sstuser'@'localhost';
mysql@node1> FLUSH PRIVILEGES;
六、启动第二个节点
systemctl start mysql
服务器启动后,它应该会自动接收SST。
要检查第二个节点的状态,请运行以下命令:
mysql@node2> show status like 'wsrep%';
+----------------------------+--------------------------------------+
| Variable_name | Value |
+----------------------------+--------------------------------------+
| wsrep_local_state_uuid | c2883338-834d-11e2-0800-03c9c68e41ec |
| ... | ... |
| wsrep_local_state | 4 |
| wsrep_local_state_comment | Synced |
| ... | ... |
| wsrep_cluster_size | 2 |
| wsrep_cluster_status | Primary |
| wsrep_connected | ON |
| ... | ... |
| wsrep_ready | ON |
+----------------------------+--------------------------------------+
40 rows in set (0.01 sec)
输出显示新节点已成功添加到集群中。集群大小现在是 2 个节点,并且它已完全连接并准备好接收写入集复制。
如果第二个节点的状态Synced如上例所示,则该节点收到完整的 SST,与集群同步,您可以继续添加下一个节点。
七、启动第三个节点
systemctl start mysql
要检查第三个节点的状态,请运行以下命令:
mysql@node3> show status like 'wsrep%';
+----------------------------+--------------------------------------+
| Variable_name | Value |
+----------------------------+--------------------------------------+
| wsrep_local_state_uuid | c2883338-834d-11e2-0800-03c9c68e41ec |
| ... | ... |
| wsrep_local_state | 4 |
| wsrep_local_state_comment | Synced |
| ... | ... |
| wsrep_cluster_size | 3 |
| wsrep_cluster_status | Primary |
| wsrep_connected | ON |
| ... | ... |
| wsrep_ready | ON |
+----------------------------+--------------------------------------+
40 rows in set (0.01 sec)
输出显示新节点已成功添加到集群中。集群大小现在是 3 个节点,并且它已完全连接并准备好接收写入集复制。
八、验证复制
使用以下过程通过在第二个节点上创建一个新数据库、在第三个节点上为该数据库创建一个表并将一些记录添加到第一个节点上的表中来验证复制。
在第二个节点上创建一个新数据库:
mysql@node2> CREATE DATABASE percona;
Query OK, 1 row affected (0.01 sec)
在第三个节点上创建一个表:
mysql@node3> USE percona;
Database changed
mysql@node> CREATE TABLE example (node_id INT PRIMARY KEY, node_name VARCHAR(30));
Query OK, 0 rows affected (0.05 sec)
在第一个节点上插入记录:
mysql@node1> INSERT INTO percona.example VALUES (1, 'percona1');
Query OK, 1 row affected (0.02 sec)
在第二个节点上从该表中检索行:
mysql@node2> SELECT * FROM percona.example;
+---------+-----------+
| node_id | node_name |
+---------+-----------+
| 1 | percona1 |
+---------+-----------+
1 row in set (0.00 sec)
在具有 3 个节点的基本设置中,如果您关闭任何节点,Percona XtraDB Cluster 将继续运行。您可以随时关闭任何节点以执行维护或进行配置更改。即使在计划外的情况下(例如节点崩溃或在网络上变得不可用),Percona XtraDB 集群也将继续工作,您将能够在工作节点上运行查询。
您可以使用以下命令监控节点的当前状态:
SHOW STATUS LIKE 'wsrep_local_state_comment';
当节点处于Synced状态时,说明它是集群的一部分并准备好处理流量。
九、Percona XtraDB Cluster 推荐的高可用性解决方案
- 考虑在客户端节点上安装ProxySQL以实现跨集群的高效工作负载管理,而无需对生成查询的应用程序进行任何更改。
- Percona Monitoring and Management是管理和监控 Percona XtraDB Cluster性能的最佳选择。它提供了集群的可见性并实现了高效的故障排除。