Galera Cluster是Codership公司开发的一套免费开源的高可用方案
PXC集群主要由两部分组成:Percona Server with XtraDB和Write Set Replication patches(同步、多主复制插件)
全主全备
SST:State Snapshot Transfer 全量同步
IST:Incremental State Transfer 增量同步
实验环境:
三台全新的centos7,不要安装MySQL,关闭防火墙和selinux
pxc1:192.168.8.20
pxc2:192.168.8.21
pxc3:192.168.8.22
删除mariadb的依赖关系(三台都需要做)
rpm -e mariadb-libs --nodeps
修改主机名:
8.20:
[root@node13 ~]# hostnamectl set-hostname pxc1
[root@node13 ~]# bash
8.21:
[root@node13 ~]# hostnamectl set-hostname pxc2
[root@node13 ~]# bash
8.22:
[root@node13 ~]# hostnamectl set-hostname pxc3
[root@node13 ~]# bash
修改/etc/hosts文件
[root@pxc1 ~]# vim /etc/hosts
添加:
192.168.8.5 pxc1
将本机(8.20)的hosts文件拷贝到8.21,8.22的/etc目录下
[root@pxc1 ~]# scp /etc/hosts root@192.168.8.6:/etc
[root@pxc1 ~]# scp /etc/hosts root@192.168.8.7:/etc
在线安装
yum -y install https://repo.percona.com/yum/percona-release-latest.noarch.rpm
yum -y install Percona-XtraDB-Cluster-57
或者拖包安装pxc(三台都需要拖包)
创建安装目录
[root@pxc1 ~]# mkdir /pxc
[root@pxc1 ~]# cd /pxc/
pxc目录下的所有软件包
pxc1(8.20)安装pxc
[root@pxc1 pxc] # yum -y localinstall *.rpm
pxc2(8.21)上安装pxc
[root@pxc2 pxc] # yum -y localinstall *.rpm
pxc3(8.22)上安装pxc
[root@pxc3 pxc] # yum -y localinstall *.rpm
重启mysql服务(三台都需要重启服务)
[root@pxc1 pxc]# systemctl start mysqld
[root@pxc2 pxc]# systemctl start mysqld
[root@pxc3 pxc]# systemctl start mysqld
在pxc1(8.20)查找与临时密码相关的日志条目
[root@pxc1 pxc]# grep 'temporary password' /var/log/mysqld.log
会生成一个临时密码
复制临时密码,使用 root 账户登录
[root@pxc1 pxc]# mysql -uroot -p
修改密码数据库密码为:123456
mysql> alter user 'root'@'localhost' identified by '123456';
退出服务
mysql> exit
复制代码之后使用以下命令停止 MySQL 服务:
[root@pxc1 pxc]# systemctl stop mysqld
在pxc2(8.21)查找与临时密码相关的日志条目
[root@pxc2 pxc]# grep 'temporary password' /var/log/mysqld.log
复制临时密码,使用 root 账户登录
[root@pxc2 pxc]# mysql -uroot -p
修改密码
mysql> alter user 'root'@'localhost' identified by '123456';
退出服务
mysql> exit
复制代码之后使用以下命令停止 MySQL 服务:
[root@pxc2 pxc]# systemctl stop mysqld
在pxc3(8.22)查找与临时密码相关的日志条目
[root@pxc3 pxc]# grep 'temporary password' /var/log/mysqld.log
复制临时密码,使用 root 账户登录
[root@pxc3 pxc]# mysql -uroot -p
修改密码
mysql> alter user 'root'@'localhost' identified by '123456';
退出服务
mysql> exit
复制代码之后使用以下命令停止 MySQL 服务:
[root@pxc3 pxc]# systemctl stop mysqld
以上安装过程在三台主机上均相同执行,之后就可以开始集群的搭建。
搭建集群
首先需要修改每台服务器上的 /etc/my.cnf 文件,第一个节点上(8.20)需要增加的内容如下:
[root@pxc1 pxc]# vim /etc/my.cnf
删除所有添加以下内容:
[mysqld]
wsrep_provider=/usr/lib64/galera3/libgalera_smm.so
wsrep_cluster_address=gcomm://192.168.8.5,192.168.8.6,192.168.8.7
wsrep_node_address=192.168.8.5
wsrep_sst_method=xtrabackup-v2
wsrep_sst_auth= sstuser:123456
修改第二个节点(8.21)的配置文件
[root@pxc2 pxc]# vim /etc/my.cnf
删除所有添加以下内容:
[mysqld]
server-id=2
wsrep_provider=/usr/lib64/galera3/libgalera_smm.so
wsrep_cluster_name=mysql1
wsrep_cluster_address=gcomm://192.168.8.5,192.168.8.6,192.168.8.7
wsrep_node_name=pxc2
wsrep_node_address=192.168.8.6
wsrep_sst_method=xtrabackup-v2
wsrep_sst_auth= sstuser:123456
pxc_strict_mode=ENFORCING
binlog_format=ROW
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2
修改第三个节点(8.22)的配置文件
[root@pxc3 pxc]# vim /etc/my.cnf
删除所有添加以下内容:
[mysqld]
wsrep_provider=/usr/lib64/galera3/libgalera_smm.so
wsrep_cluster_address=gcomm://192.168.8.5,192.168.8.6,192.168.8.7
wsrep_node_address=192.168.8.7
wsrep_sst_method=xtrabackup-v2
wsrep_sst_auth= sstuser:123456
启动集群
第一个节点(8.20)需要以引导模式启动:(注意:另外两台不用)
[root@pxc1 pxc]# systemctl start mysql@bootstrap.service
在将其他节点添加到群集之前,需要登录当前节点(8.20),来为 SST 操作创建用户并提供权限,命令如下:
只在pxc1(8.20)上做,其他两个节点不需要
创建用户
[root@pxc1 pxc]# mysql -uroot -p
mysql> CREATE USER 'sstuser'@'localhost' IDENTIFIED BY '123456';
授予权限
mysql> grant reload, lock tables, process, replication client on *.* to 'sstuser'@'localhost';
mysql> flush privileges;
接着在第二和第三个节点上(8.21,8.22)正常启动数据库服务
[root@pxc2 pxc]# systemctl start mysqld
[root@pxc3 pxc]# systemctl start mysqld
启动后,可以登录任意节点并使用以下命令查看集群状态。输出中的 wsrep_cluster_size 的值应该为 3,即集群中节点总数为 3,此时代表所有节点都已成功加入集群,至此集群已经搭建完成。
mysql> show status like 'wsrep%';
pxc1(8.20)上创建数据库
mysql> show databases;
mysql> create database pxc1;
pxc2(8.21)上查看是否同步
mysql> show databases;
pxc3(8.22)上创建数据库
mysql> create database pxc3;
mysql> show databases;
pxc1(8.20)上查看是否同步
mysql> show databases;
节点下线
PXC 集群允许动态下线节点,但需要注意的是节点的启动命令和关闭命令必须一致,
systemctl stop mysql@bootstrap.service
关闭pxc1(8.20)的mysql服务
[root@pxc1 pxc]# systemctl stop mysql@bootstrap.service
在pxc2或pxc3上查看集群节点总数
mysql> show status like 'wsrep%';
在pxc2(8.21)上创建数据库
mysql> create database pxc2;
在pxc3(8.22)上查看是否同步
mysql> show databases;
将pxc1(8.20)的MySQL服务器重新启动
[root@pxc1 pxc]# systemctl start mysqld
pxc2(8.21)查看集群节点
mysql> show status like 'wsrep%';
当pxc1(8.20)的MySQL服务启动后,会自动加入群集中
在pxc1(8.20)上创建数据库
mysql> create database pxc4;
在pxc2(8.21)和pxc3(8.22)上查看是否同步
mysql> show databases;
可以同步
当把pxc1(8.20)的虚拟机关机之后,集群节点只显示2个节点
,重新开机之后pxc1(8.20)会自动接入集群中