0. 环境说明
主机名称 IP地址 操作系统
node1 172.16.100.52 CentOS7
node2 172.16.100.53 CentOS7
node3 172.16.100.54 CentOS7
1. 安装相关软件包
# yum install -y https://repo.percona.com/yum/percona-release-latest.noarch.rpm
# yum install -y Percona-XtraDB-Cluster-57
2. 账号密码管理
# systemctl start mysql.service
# grep 'temporary password' /var/log/mysqld.log //记录下临停密码
# mysql -uroot -p
mysql> alter user 'root'@'localhost' identified by 'passwd';
mysql> flush privileges;
mysql> exit
# systemctl stop mysql.service
3. 配置文件说明(分别在node1, node2, node3上配置,其中server_id, wsrep_node_name, wsrep_node_address的值在集群环境中必须唯一)
/etc/percona-xtradb-cluster.conf.d/mysql.cnf
[mysqld]
server_id=1 | 2 | 4
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
log_error=/var/log/mysqld.log
pid_file=/var/run/mysqld/mysqld.pid
log_bin=/var/lib/mysql/mysql-bin
log_slave_updates=1
expire_logs_days=30
/etc/percona-xtradb-cluster.conf.d/wsrep.cnf
binlog_format=row
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2
wsrep_provider=/usr/lib64/galera3/libgalera_smm.so
wsrep_cluster_adress=gcomm://172.16.100.52,172.16.100.53,172.16.100.54
wsrep_cluster_name=pxc-cluster
wsrep_node_name=node1 | node2 | node3
wsrep_node_address=172.16.100.52 | 172.16.100.53 | 172.16.100.54
wsrep_sst_method=xtrabackup-v2
wsrep_sst_auth="sst:passwd"
wsrep_slave_threads=8
wsrep_log_conflicts
pxc_strict_mode=ENFORCING
4. 在各个节点启动服务,添加SST账号
在node1上启动mysql服务
# systemctl start mysql@bootstrap.service
# mysql -uroot -p
mysql> grant reload, lock tables, process, replication client on *.* to 'sst'@'%' identified by 'passwd';//与配置文件中wsrep_sst_auth="sst:passwd"的配置项对应
mysql> flush privileges;
mysql> exit
在node2|node3上启动mysql服务
# systemctl start mysql.service
# mysql -uroot -p
mysql> grant reload, lock tables, process, replication client on *.* to 'sst'@'%' identified by 'passwd';
mysql> flush privileges;
mysql> exit
5. 验证multi-master功能
在node1上,操作数据库
mysql> create schema ishop;
mysql> use ishop;
mysql> create table good(goodNo int not null auto_increment, goodName varchar(20) not null, primary key(goodNo))charset='ut8';
mysql> insert into good(goodName) value('orange'), ('cherry');
在node2|node3上,验证node1操作的数据是否同步
mysql> show schemas;
mysql> use ishop;
mysql> select * from good;(验证数据是否同步)
mysql> insert into good(goodName) value('iphone'), ('ipod'), ('imac');
在node1上,验证node2|node3操作的数据是否同步
mysql> select * from good;(验证数据是否同步)
Trouble shooting:
1. 各个节点的主机非正常关闭后,再次启动无法正常启动集群;
在每个节点的/var/lib/mysql目录下,存在grastate.dat文件,找到safe_to_bootstrap属性值为1的节点(即safe_to_bootstrap: 1),即表示最后一个离开集群的节点,启动集群服务:systemctl start mysql@bootstrap.service;然后依次启动集群的其它节点即可:systemctl start mysql.service
Reference:
1. https://www.percona.com/doc/percona-xtradb-cluster/LATEST/index.html
2. https://www.percona.com/doc/percona-xtradb-cluster/LATEST/configure.html