PXC概述
1)PXC介绍
- 是基于Galera的mysql高可用集群解决方案
- Galera Cluster是Codership公司开发的一套免费开源的高可用方案
- PXC集群主要由两部分组成:Percona Server with XtraDB和Write Set Replication patches(同步、多主复制插件)
- 官网:galeracluster.com
2)特点
- 数据
强一致性
、无同步延迟 - 没有主从切换操作,无需使用虚拟IP
- 支持InnoDB存储引擎
- 多线程复制
- 部署使用简单
- 支持节点自动加入,无需手动拷贝数据
如何实现数据强一致性?
服务器执行客户端的SQL命令时,向集群发送广播,你们能不能执行这个命令?如果能,回复能,所有服务器都能时,所有服务器存储数据,如果有一台服务器回复不能,则不存储该数据,回复客户端存储失败
3)端口
端口 | 说明 |
---|---|
3306 | 数据库服务端口 |
4444 | SST端口 |
4567 | 集群通信端口 |
4568 | IST端口 |
SST | State Snapshot Transfer 全量同步 |
IST | Incremental State Transfer 增量同步 |
部署PXC
本次案例:
主机名 | IP地址 | 角色 |
---|---|---|
pxc1 | 192.168.4.71 | 数据库服务器 |
pxc2 | 192.168.4.72 | 数据库服务器 |
pxc2 | 192.168.4.73 | 数据库服务器 |
- 配置主机名与IP地址绑定:
[root@pxc1,pxc2,pxc3] vim /etc/hosts
192.168.4.71 pxc1
192.168.4.72 pxc2
192.168.4.73 pxc3
- 安装软件包
[root@pxc1,pxc2,pxc3] rpm -ivh libev-4.15-1.el6.rf.x86_64.rpm
[root@pxc1,pxc2,pxc3] yum -y install percona-xtrabackup-24-2.4.13-1.el7.x86_64.rpm #在线热备工具
[root@pxc1,pxc2,pxc3] rpm -ivh qpress-1.1-14.11.x86_64.rpm #递归压缩工具
[root@pxc1,pxc2,pxc3] tar -xvf Percona-XtraDB-Cluster-5.7.25-31.35-r463-el7-x86_64-bundle.tar -C . #集群服务程序
[root@pxc1,pxc2,pxc3] yum -y install Percona-XtraDB-Cluster-*.rpm
- 修改配置文件:(所有服务器都修改)
/etc/percona-xtradb-cluster.conf.d/
配置文件 | 说明 |
---|---|
mysqld.cnf | 数据库服务运行参数配置文件 |
mysqld_safe.cnf | Percona Server 5.7配置文件 |
wsrep.cnf | PXC集群配置文件 |
[root@pxc1,pxc2,pxc3] cd /etc/percona-xtradb-cluster.conf.d/
[root@pxc1,pxc2,pxc3] vim mysqld.cnf
[mysqld]
server-id=71 #server-id 不允许重复
datadir=/var/lib/mysql #数据库目录
socket=/var/lib/mysql/mysql.sock #socket文件
log-error=/var/log/mysqld.log #日志文件
pid-file=/var/run/mysqld/mysqld.pid #pid文件
log-bin #启用binlog日志
log_slave_updates #启用链式复制
expire_logs_days=7 #日志文件保留天数
[root@pxc1,pxc2,pxc3] vim mysqld_safe.cnf #不需要改动
[mysqld_safe]
pid-file = /var/run/mysqld/mysqld.pid #pid配置文件位置及名称
socket = /var/lib/mysql/mysql.sock #socket文件位置及名称
nice = 0 #优先级
[root@pxc1,pxc2,pxc3] vim wsrep.cnf
wsrep_cluster_address=gcomm://192.168.4.71,192.168.4.72,192.168.4.73 #成员列表,所有服务器必须一样
wsrep_node_address=192.168.4.71 #本机ip
wsrep_cluster_name=pxc-cluster #集群名称,所有服务器必须一样
wsrep_node_name=pxc1 #本机主机名
wsrep_sst_auth="sstuser:123qqq...A" #sst数据同步用户名:密码, 所有服务器都一样
- 启动服务
在一台
服务器上执行初始化
即可,其余服务器启动时会同步
该服务器的所有数据
初始化操作:
] systemctl start [email protected] #启动集群服务
] grep root@ /var/log/mysqld.log #查看初始密码
] mysql -uroot -p’W.HiOb8(ok)_’ #初始密码登录
mysql> alter user root@”localhost” identified by “123456”; #修改登录密码
mysql> grant reload,lock tables,replication client,process on *.* to sstuser@"localhost” identified by “123qqq...A”; #添加授权用户
如果启动失败:
] vim /var/log/mysqld.log #查看报错信息
其他服务器:
] systemctl start mysql #启动数据库服务
- 查看集群状态:
mysql> show status like '%wsrep%'; #查看集群状态,每台服务器都可以查看
wsrep_incoming_addresses 192.168.4.72:3306,192.168.4.73:3306,192.168.4.71:3306
#成员列表
wsrep_cluster_size 3 #集群服务器数量
wsrep_cluster_status Primary #集群状态
wsrep_connected ON #连接状态
wsrep_ready ON #服务状态
- 测试集群功能:
- 在任意服务器上添加访问数据的授权用户
- 在客户端使用授权用户连接任意数据库服务器都可以存储数据,且可以查看到相同的数据
- 建表时,必须有主键字段
任何1台数据库服务器宕机都不影响用户存取数据,服务器运行以后,自动同步
宕机期间数据,3台服务器同时损坏
,集群崩溃
- 停止服务:
执行了初始化的主机:
] systemctl stop [email protected]
再次启动时,需要用systemctl start mysql启动
没有执行初始化的主机:
] systemctl stop mysql