一、与MHA集群相比PXC有很明显的优点:
1、数据实时同步
2、不需要配置主从,每一套主机都是master,不需要使用vip
3、支持InnoDB存储引擎
4、在数据同步的时候采用多线程复制
5、支持节点自动加入集群,无需手动同步数据
PXC服务端口:
3306:mysql服务端口
4567:集群通信端口,用于集群间的数据同步
4444:sst完全同步端口,进行数据同步时才开启
4568:ist增量同步端口,数据进行同步时才开启
二、准备工作:
准备服务器:
192.168.4.71,192.168.4.72,192.168.4.73
为这三台数据库配置hosts
vim /etc/hosts
192.168.4.71 pxcnode1
192.168.4.72 pxcnode2
192.168.4.73 pxcnode3
三、部署集群:
1、安装相关依赖以及软件包:(按照顺序,71,72,73都做这个操作)
rpm -ivh libev-4.15-1.el6.rf.x86_64.rpm #相关依赖
yum -y install percona-xtrabackup-24-2.4.13-1.el7.x86_64.rpm #在线热备份工具
rpm -ivh qpress-1.1-14.11.x86_64.rpm #递归压缩程序
tar -xvf Percona-XtraDB-Cluster-5.7.25-31.35-r463-el7-x86_64-bundle.tar #集群程序包,自带mysql
yum -y install Percona-XtraDB-Cluster-*.rpm #安装集群相关程序
2、配置文件:(71,72,73都需要做)
配置文件在:/etc/percona-xtradb-cluster.conf.d/这个目录下
mysqld.cnf #s数据库配置文件,相当于my.cnf
mysq_safe,cnf #mysql进程配置文件,指定了pid文件的位置,socket文件的位置等
wsrep.cnf #集群主配置文件
# 这三个配置文件中mysqld.cnf、wsrep.cnf需要修改
①:修改mysqld.cnf
vim mysqld.cnf
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
②:修改wsrep.cnf
vim mysqld_safe.cnf
#仅需对以下行进行修改
wsrep_cluster_address=gcomm://192.168.4.73,192.168.4.72,192.168.4.71 #成员列表,本机的ip地址写在最后,便于首先到其他主机进行数据同步
wsrep_node_address=192.168.4.71 #本机ip
wsrep_cluster_name=pxc-cluster #集群名,同一个集群中所有主机必须相同
wsrep_node_name=pxcnode71 #本机主机名,/etc/hosts配置的主机名
wsrep_sst_auth="sstuser:123456" #SST数据完全同步授权用户及密码
3、启动集群服务:
# 仅需在集群中的一台主机上启动pxc集群,其余主机只需要启动mysql服务就可以了,数据会自动同步
# 任选一台主机,这里我选192.168.4.71
systemctl start mysql@bootstrap.service #自动集群服务,首次会进行初始化,/var/lib/mysql下会产生相关数据文件
grep pass /var/log/mysqld.log #到日志文件中查看初始密码,root@localhost: waHiOb8.ok.3
mysql -uroot -p’ waHiOb8.ok.3’ #连接数据库
alter user root@”localhost” identified by “123456” #修改初始密码
Mysql> garnt reload, lock tables,replication client,process on *.* to \
sstuser@"localhost” identified by “123456”; #创建授权用户,要和wsrep.cnf中相匹配
启动其余两台主机mysql:(4.72,4.73)
systemctl start mysql #是mysql,不是mysqld
四、测试:
在集群中选任意一台登录mysql:(这里选4.71)
mysql -uroot -p123456
mysql> show status like "%wsrep%" #查看集群状态
mysql> grant all on gamedb.* to admin@"%" identified by "123456"; #添加用户方便client连接
# 用户会添加在mysql的user表中,因此会同步到其他服务器上
# 72,73服务器都可以使用这个用户进行登录,在mysql下的user表中也可以找到admin用户
模拟故障以及恢复:
关闭71的mysql服务,在72或者73中添加数据
再启动71的mysql服务,会自动同步宕机期间的数据
client连接:
mysql -h192.168.4.71 -uadmin -p123456
# 当71宕机之后,就不能通过192.168.4.71连接了,但是4.72,4.73都可以连接
# 如果想要通过一个ip连接,可是使用调度器,nginx,haproxy都可以
主键自增问题:
如果为数据库某表的id字段设置了自动递增
那么id每次增加的大小不是每次加1
id每次增加的大小是集群中节点的个数,集群中有三个节点,就是 id+=3
写总结的第四十四天!!!