Percona XtraDB Cluster是一套 MySQL 高可用集群解决方案,与传统的基于主从复制模式的集群架构相比 PXC 最突出特点就是解决了诟病已久的数据复制延迟问题,基本上可以达到实时同步。而且节点与节点之间,他们相互的关系是对等的。PXC 最关注的是数据的一致性,对待事物的行为时,要么在所有节点上执行,要么都不执行,它的实现机制决定了它对待一致性的行为非常严格,这也能非常完美的保证 MySQL 集群的数据一致性
完全兼容 MySQL。 同步复制,事务要么在所有节点提交或不提交。 多主复制,可以在任意节点进行写操作。 在从服务器上并行应用事件,真正意义上的并行复制。 节点自动配置,数据一致性,不再是异步复制。 故障切换:因为支持多点写入,所以在出现数据库故障时可以很容易的进行故障切换。 自动节点克隆:在新增节点或停机维护时,增量数据或基础数据不需要人工手动备份提供,galera cluster会自动拉取在线节点数据,集群最终会变为一致;
PXC最大的优势:强一致性、无同步延迟
复制只支持InnoDB 引擎,其他存储引擎的更改不复制 写入效率取决于节点中最慢的一台
1.进入配置文件编辑
vim /etc/hosts2.将两台服务器的IP加入其中 第一台配置信息如图:
第二台配置信息如图:
【查看防火墙】
sudo systemctl status firewalld【关闭防火墙】
sudo systemctl stop firewalld查看了一下发现默认是关闭的,inactive(dead) 代表关闭了,如果是active(running)就意味着防火墙开启了,我这里是测试也就让防火墙关闭着,如果不可以关就把上文中那四个需要的端口给开放即可
1.输入命令进入配置文件
vim /etc/selinux/config2.将SELINUX的值设置为disabled 修改后的文件如图所示 3.输入命令使关闭生效
setenforce 01.输入安装命令
sudo yum install https://repo.percona.com/yum/percona-release-latest.noarch.rpm2.按【y】继续 3.安装完成
1.输入安装命令
sudo yum install Percona-XtraDB-Cluster-572.按【y】继续 3.按【y】继续 4.安装完成
1.先启动 Percona XtraDB Cluster 服务
sudo systemctl start mysqld2.查看自动生成的ROOT临时密码
sudo grep 'temporary password' /var/log/mysqld.log如图所示,这次我的临时密码就是 wBL(K6HD9yml 3.登录 MySQL
mysql -u root -p将临时密码复制粘贴,注意密码录入会自动隐藏,粘贴完直接回车即可 登录成功进入Mysql命令行 4.输入命令,将密码修改为molimoli
ALTER USER 'root'@'localhost' IDENTIFIED BY 'molimoli';5.退出
exit6.关闭 MySQL 服务
sudo systemctl start mysqld1.输入命令编辑my.cnf文件
sudo vim /etc/my.cnf2.按下Ins建 开启编辑模式(开启后左下角有提示) 3.在内容尾部追加信息 注意:将【88.88.88.88】改为你第一个服务器的IP,将【99.99.99.99】改为你第二个服务器的IP
[mysqld] wsrep_provider=/usr/lib64/galera3/libgalera_smm.so wsrep_cluster_name=pxc-cluster wsrep_cluster_address=gcomm://99.99.99.99,88.88.88.88 wsrep_node_name=ml1 wsrep_node_address=88.88.88.88 wsrep_sst_method=xtrabackup-v2 wsrep_sst_auth=sstuser:molimoli pxc_strict_mode=ENFORCING binlog_format=ROW default_storage_engine=InnoDB innodb_autoinc_lock_mode=2 配置参数说明 wsrep_provider 指定 Galera 库的路径。 wsrep_cluster_name 指定集群的逻辑名称,集群内的所有节点,这个名称必须一致。 wsrep_cluster_address 指定集群内节点的 IP 地址,建议将集群节点都配上。 wsrep_node_name 指定单个节点的逻辑名称,如果没有指定,将使用 hostname 作为逻辑名称。 wsrep_node_address 指定此特定节点的 IP 地址。 wsrep_sst_method 默认的使用 Percona Xtrabackup 进行 State Snapshot Transfer (SST),强烈建议使用 wsrep_sst_method=xtrabackup-v2 wsrep_sst_auth 指定 sst 的身份验证凭据,使用<sst_user>:<sst_pass> 这种格式,启动第一个节点时必须创建,并且提供相应的权限。 pxc_strict_mode 关闭实验性的或者不支持的特性 binlog_format Galera 只支持 row-level replication,所以设置为 binlog_format=ROW。 default_storage_engine Galera 只支持 InnoDB 引擎,所以设置为 default_storage_engine=InnoDB。 innodb_autoinc_lock_mode Galera 只支持 lock mode 为 2 的 InnoDB 引擎,所以设置为 innodb_autoinc_lock_mode=2。4.按ESC退出编辑模式,然后按shift + Z +Z 退出并保存
1.输入该命令启动第一个节点 注:使用 bootstrap 模式启动,默认会设置 wsrep_cluster_address=gcomm://,后面没有 IP,表示初始化集群。
sudo systemctl start mysql@bootstrap2.登录Mysql
mysql -u root -p3.查看PXC集群状态
show status like 'wsrep%';打印了一长串信息,这就是PXC集群状态监控指标,可以看到集群数量时 1,本节点为 Synced 状态,表示连接成功,并且准备好进行 write-set replication。 常用PXC集群状态监控指标说明:
(1)wsrep_local_state_uuid:与wsrep_cluster_state_uuid的值一致,且所有节点该值都相同 (2)wsrep_cluster_state_uuid:所有节点该值都相同,如果有不同值的节点,说明该节点没有与集群建立连接 (3)wsrep_last_committed:集群已经提交事务的数量,是一个累计值,所有节点该值都相同,如果出现不一致,说明事务有延迟,可以用来计算延 (4)wsrep_replicated:从本节点复制出去的写集数量,wsrep_replicated_bytes为写集的总字节数,可以用于参考节点间的负载均衡是否平衡,该值较大的节点较为繁忙 (5)wsrep_received:与wsrep_replicated对应,本节点接收来自其它节点的写集数量 (6)wsrep_local_state:所有节点该值都应该为4,表示正常,节点状态有如下6个取值 a、取值1:节点启动并与集群建立连接 b、取值2:当节点成功执行状态传输请求时,该节点开始缓存写集 c、取值3:节点接收了SST全量数据传输,该节点现在拥有所有集群数据,并开始应用已缓存的写集 d、取值4:节点完成与集群数据的同步,它的从属队列现在是空的,并启用流控使其保持为空 e、取值5:节点接收了状态传输请求,该节点现在对donor不执行流控,该节点已缓存所有的写集但无法应用 f、取值6:节点完成对joiner节点的状态传输 (7)wsrep_incoming_addresses:集群中所有节点的IP,且每个节点该值都相同 (8)wsrep_cluster_size:集群中的节点数量,所有节点该值都相同 (9)wsrep_cluster_conf_id:所有节点该值都相同,如果值不同,说明该节点被临时“分区”了 (10)wsrep_cluster_status:集群组成的状态,所有节点该值都为“Primary”,如果该值不为“Primary”,说明该节点出现“分区”或“脑裂”现象 (11)wsrep_connected:所有节点该值都为“ON”,表示本节点已经与集群建立连接 (12)wsrep_ready:所有节点该值都为“ON”,表示本节点可以正常提供服务1.创建用户 注:用户名和密码必须跟配置文件匹配
CREATE USER 'sstuser'@'localhost' IDENTIFIED BY 'molimoli';2.授权
GRANT RELOAD, LOCK TABLES, PROCESS, REPLICATION CLIENT ON *.* TO 'sstuser'@'localhost';3.刷新
FLUSH PRIVILEGES;1.输入命令编辑my.cnf文件
sudo vim /etc/my.cnf2.在内容尾部追加信息 注意:将【88.88.88.88】改为你第一个服务器的IP,将【99.99.99.99】改为你第二个服务器的IP
[mysqld] wsrep_provider=/usr/lib64/galera3/libgalera_smm.so wsrep_cluster_name=pxc-cluster wsrep_cluster_address=gcomm://88.88.88.88,99.99.99.99 wsrep_node_name=ml2 wsrep_node_address=99.99.99.99 wsrep_sst_method=xtrabackup-v2 wsrep_sst_auth=sstuser:molimoli pxc_strict_mode=ENFORCING binlog_format=ROW default_storage_engine=InnoDB innodb_autoinc_lock_mode=2第二节点的配置文件与第一节点的配置文件区别是
wsrep_node_name=ml1 wsrep_node_address=88.88.88.88变为
wsrep_node_name=ml2 wsrep_node_address=99.99.99.99也就是将逻辑名改为第二节点,IP改为第二节点的IP,如果你要创建第三节点,同理只需要改这两处即可
1.输入命令启动第二节点
sudo systemctl start mysqld2.登录Mysql,并查询状态
mysql -u root -p show status like 'wsrep%';可以看到 wsrep_cluster_size 的值是 2 表示集群已经有 2 个节点了。wsrep_local_state_comment 的值是 Synced 表示已经同步了。
注意 如果 wsrep_local_state_comment 的状态是 Joiner,表示正在同步,请不要启动第三个第四个节点的服务。
在sql命令行下输入
grant all on *.* to root@'%' identified by 'molimoli' with grant option;1.填写信息 2.点击测试按钮,确保可以正常连接,然后单击确定即可完成节点1的添加 3.节点2添加同理,最终效果如图
1.随便建立一个库【MoLiTest】
2.随便建立个表【moli】 3.往这个表中加点数据
可以看到节点2同步了节点1的数据,如果开启更多的节点也都是同样的效果
1.所有其他节点的数据和配置都会被第一个节点的数据覆盖 2.不用同时加入多个节点,避免数据或网络开销过大
这是我通过学习对知识的整理及备忘,本博客的所有内容,仅是自己的一些学习笔记,如有错误,欢迎指正。如有侵权,请告知修改。
参考文章: http://www.mamicode.com/info-detail-2652214.html http://www.imooc.com/article/28832?block_id=tuijian_wz https://qizhanming.com/blog/2019/05/16/how-to-install-percona-xtradb-cluster-on-centos-7 https://cloud.tencent.com/developer/article/1177822