Galera Cluster:集成了Galera插件的MySQL集群,是一种新型的,数据不共享的,高度冗余的高可用方案,目前Galera Cluster有两个版本,分别是Percona Xtradb Cluster及MariaDB Cluster
实验环境:四台服务器:192.168.39.11,192.168.39.12,192.168.39.13,192.168.39.14
如果已安装有MySQL数据必须先把数据库卸载了
pxc1:192.168.39.11
pxc2:192.168.39.12
pxc3:192.168.39.13
pxc4:192.168.39.14
1,在pxc1,pxc2,pxc3上安装Percona Xtradb Cluster5.7(采用清华源安装,官方源太慢)
[root@pxc1 ~]# vi /etc/yum.repos.d/pxc.repo
[root@pxc1 ~]# scp /etc/yum.repos.d/pxc.repo 192.168.39.12:/etc/yum.repos.d
[root@pxc1 ~]# scp /etc/yum.repos.d/pxc.repo 192.168.39.13:/etc/yum.repos.d
[root@pxc1 ~]# yum install Percona-XtraDB-Cluster-57 -y
[root@pxc2 ~]# yum install Percona-XtraDB-Cluster-57 -y
[root@pxc3 ~]# yum install Percona-XtraDB-Cluster-57 -y
2,mysql的配置文件默认就好,但是pxc的配置文件必须要修改,pxc1,pxc2,pxc3都要配置
[root@pxc1 ~]# vi /etc/percona-xtradb-cluster.conf.d/wsrep.cnf
[root@pxc2 ~]# vi /etc/percona-xtradb-cluster.conf.d/wsrep.cnf
[root@pxc3 ~]# vi /etc/percona-xtradb-cluster.conf.d/wsrep.cnf
3,以pxc1为第一个节点启动(第一个节点的启动和其他节点的启动不同),并通过错误日志查找到mysql的密码,然后登录mysql修改mysql密码
[root@pxc1 ~]# systemctl restart [email protected]
[root@pxc1 ~]# grep "temporary password" /var/log/mysqld.log
2019-12-02T12:35:01.209167Z 1 [Note] A temporary password is generated for root@localhost: :vo>834uspyS
[root@pxc1 ~]# mysql -uroot -p":vo>834uspyS"
mysql> alter user root@localhost identified by "123.com";
Query OK, 0 rows affected (0.01 sec)
4,创建配置文件中设定用于SST传输的用户和密码
mysql> create user sstuser@localhost identified by "123.com";
Query OK, 0 rows affected (0.00 sec)
mysql> grant reload,lock tables,process,replication client on *.* to sstuser@localhost;
Query OK, 0 rows affected (0.00 sec)
5,启动其他节点
[root@pxc2 ~]# systemctl start mysql
[root@pxc3 ~]# systemctl start mysql
6,查看当前节点的状态
mysql> show variables like "wsrep_on";
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| wsrep_on | ON |
+---------------+-------+
1 row in set (0.00 sec)
mysql> show status like "wsrep_cluster_size";
+--------------------+-------+
| Variable_name | Value |
+--------------------+-------+
| wsrep_cluster_size | 3 |
+--------------------+-------+
1 row in set (0.00 sec)
三个节点同时创建同一个数据库haha,可以看到只有一个节点成功了,其他两个节点失败了。
这说明galera cluster已经解决了主主复制存在的不可同时操作同一个数据点的问题(这是因为galera cluster在用户修改数据时,所有节点会验证该修改操作是否可行,如果数据有冲突会被打回)
加入新节点和之前新建节点的时候没什么太大的区别
1,将pxc1的pxc yum文件复制到pxc4
[root@pxc1 ~]# scp /etc/yum.repos.d/pxc.repo 192.168.39.14:/etc/yum.repos.d/
2,在pxc4上安装percona-xtradb-cluster
[root@pxc4 ~]# yum install Percona-XtraDB-Cluster-57 -y
3,修改wsrep配置文件
4,启动节点,并查看状态,可以看到处于开启状态,并且集群的节点变成了四个
[root@pxc4 ~]# systemctl start mysql
[root@pxc4 ~]# mysql -uroot -p123.com
mysql> show variables like "wsrep_on";
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| wsrep_on | ON |
+---------------+-------+
1 row in set (0.00 sec)
mysql> show status like "wsrep_cluster_size";
+--------------------+-------+
| Variable_name | Value |
+--------------------+-------+
| wsrep_cluster_size | 4 |
+--------------------+-------+
1 row in set (0.00 sec)
5,创建一个数据库可以看到其他节点同步了
mysql> create database lala;
Query OK, 1 row affected (0.01 sec)
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| haha |
| lala |
| mysql |
| performance_schema |
| sys |
+--------------------+
6 rows in set (0.00 sec)
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| haha |
| lala |
| mysql |
| performance_schema |
| sys |
+--------------------+
6 rows in set (0.00 sec)
6,在加入后最好将新加入的节点都增添到其他节点的配置文件里
[root@pxc1 etc]# vi /etc/percona-xtradb-cluster.conf.d/wsrep.cnf
[root@pxc2 etc]# vi /etc/percona-xtradb-cluster.conf.d/wsrep.cnf
[root@pxc3 etc]# vi /etc/percona-xtradb-cluster.conf.d/wsrep.cnf
期间遇到一个问题。因为做实验时中途有事,所以我将虚拟机做了快照。回来恢复快照继续做时,发现集群不见了。于是把所有节点都停了,重新启动第一个节点,但是重启失败。最后将/var/lib/mysql/grastate.dat文件里的safa_to_bootstrap由1修改成了0,重启成功。