PXC是percona公司的percona xtraDB cluster,简称PXC。它是基于Galera协议的高可用集群方案。可以实现多个节点间的数据同步复制以及读写,并且可保障数据库的服务高可用及数据强一致性。
PXC架构图:
三个节点都已经启动成功,这样在任意一个节点上面,执行一条DML语句的操作,都会同步到另外两个节点
PXC就属于一套近乎完美的MySQL高可用集群架构方案;
优点总结:
1.可以达到时时同步,无延迟现象发生
2.完全兼容MySQL
3.对于集群中新节点的加入,维护起来很简单
4.数据的强一致性
不足之处总结:
1.只支持Innodb存储引擎
2.存在多节点update更新问题,也就是写放大问题
3.在线DDL语句,锁表问题
4.sst针对新节点加入的传输代价过高的问题
实战过程:
环境介绍:3台centos 7
walt001192.168.150.138
walt002192.168.150.139
walt003192.168.150.143
安装之前的注意事项:
三台机器的防火墙iptables都要关闭,三台机器的server-id不能一样。
PXC软件包下载:
xtrabackup下载地址
Percona-XtraDB-Cluster下载
这里我下载的是:Percona-XtraDB-Cluster-5.6.26-rel74.0-25.12.1.Linux.x86_64
接下来三台机器上都需要针对基础软件包进行安装,使用yum安装即可,解决依赖性。
三台机器都需要操作的步骤:
· 把IP和主机名写到hosts文件里(这个不是主要项,方便主机名解析而已,我没有完全一样的hosts结果也成功,不成功 不用在这里纠结)
[root@xxx]# cat /etc/hosts
192.168.150.138 walt001
192.168.150.139 walt002
192.168.150.143 walt003
因为pxc本身包含mysql主程序,为防止端口占用删除多余数据库安装包
yum remove mariadb-* -y
安装依赖
yum install perl-IO-Socket-SSL.noarch perl-DBD-MySQL.x86_64 perl-Time-HiRes openssl openssl-devel socat -y
提前告诉你,如果系统是最小化安装事先做这两个软连接避免初始化报库文件缺失错误。
[root@xxx ~]# ln -sv /usr/lib64/libcrypto.so.10 /lib64/libcrypto.so.6
[root@xxx ~]# ln -sv /usr/lib64/libssl.so.10 /lib64/libssl.so.6
定位到解压目录
[root@xxx ~]# cd /usr/local/
[root@xxx local]# tar xvf /rrot/percona-xtrabackup-2.4.6-Linux-x86_64.tar.gz
[root@xxx local]# tar xvf /root/Percona-XtraDB-Cluster-5.6.26-rel74.0-25.12.1.Linux.x86_64.tar.gz
建个软连接,方便使用
[root@xxx local]# ln -sv Percona-XtraDB-Cluster-5.6.26-rel74.0-25.12.1.Linux.x86_64 mysql
[root@xxx local]# useradd -s /sbin/nologin mysql
[root@xxx local]# chown mysql.mysql -R mysql
[root@xxx local]# cp percona-xtrabackup-2.4.6-Linux-x86_64/bin/* mysql/bin/
[root@xxx local]# mkdir -p /data/mysql
[root@xxx local]# chown mysql.mysql -R /data/mysql/
先配置第一台机器,并成功启动后再配置其他两台
在第一台主机上创建配置文件:
创建配置文件:
[root@xxx local]# vim /etc/my.cnf
[mysqld]
datadir=/data/mysql
socket = /tmp/mysql.sock
pid-file=/data/mysql/mysql.pid
character_set_server = utf8
max_connections = 3000
back_log= 3000
skip-name-resolve
sync_binlog=0
innodb_flush_log_at_trx_commit=1
server-id = 1
#pxc主要配置项
default_storage_engine=Innodb
innodb_autoinc_lock_mode=2
binlog_format=row
wsrep_cluster_name=pxc_zs #集群名称
wsrep_slave_threads=4 #开启的复制线程数,cpu核数*2
wsrep_cluster_address=gcomm://192.168.150.138,192.168.150.39,192.168.150.143 #集群所有服务器ip都加进来
wsrep_node_address=192.168.150.138 #本机ip
wsrep_provider=/usr/local/mysql/lib/libgalera_smm.so
wsrep_sst_method=xtrabackup-v2
wsrep_sst_auth=sst:zs
把这个文件写好了,传到其他两台机器的 /etc 下面,修改 server-id 和 wsrep_node_address
每个主机的server-id 和wsrep_node_address 保持不同即可
初始化数据:
/usr/local/mysql/scripts/mysql_install_db –basedir=/usr/local/mysql –datadir=/data/mysql/ –defaults-file=/etc/my.cnf –user=mysql
复制进程文件到系统服务目录,启动第一节点的服务:
[root@xxx local]#cd /usr/local/mysql/support-files
[root@xxx support-files]#cp mysql.server /etc/init.d/mysql
[root@xxx support-files]# /etc/init.d/mysql bootstrap-pxc
创建环境变量,让系统变量读到MySQL的路径:
[root@xxx opt]# echo “export PATH=$PATH:/usr/local/mysql/bin” > /etc/profile.d/mysql.sh && source /etc/profile.d/mysql.sh
登陆或者初始化的时候提示缺少库文件,find命令依次查找库文件做软连接到/lib64
[root@xxx ~]# find / -name “libreadline*
/usr/lib64/libreadline.so.6
/usr/lib64/libreadline.so.6.2
[root@xxx ~]# ln -sv /usr/lib64/libreadline.so.6 /lib64/libreadline.so.5
[root@xxx ~]# ln -sv /usr/lib64/libcrypto.so.10 /lib64/libcrypto.so.6
[root@xxx ~]# ln -sv /usr/lib64/libssl.so.10 /lib64/libssl.so.6
启动成功之后,维护数据库环境并创建用户
进入数据库 ,默认密码是空的
#mysql -uroot -p
mysql> delete from mysql.user where user!=’root’ or host!=’localhost’;
mysql> grant all privileges on *.* to ‘sst‘@’%’ identified by ‘zs’;
mysql> grant all privileges on *.* to ‘sst’@’localhost’ identified by ‘zs’;
mysql> flush privileges; #mysql 5.6以后这个命令可以不用,授权都是立即生效的
当第一个主节点成功启动,并创建了授权的用户后,开始配置其他的机器
安装步骤和上面相同,只要保证配置文件的server-id 和wsrep_node_address 不同即可
wsrep_node_address 填写当前机器的IP
启动命令和第一台不同,用下面的命令启动:
[root@xxx mysql]# /etc/init.d/mysql start
第二台动后查看集群状态:
在第一个机器上执行:
[root@xxx mysql]#mysql -v #空密码的状态下这个命令可以直接登录mysql
mysql> show status like ‘wsrep%’;
作者:捌跃科技3343874032
链接:https://www.jianshu.com/p/4b766325bf4a