CentOS 7安装Percona XtraDB Cluster 5.7

版权声明:本文为Buddy Yuan原创文章,转载请注明出处。原文地址:CentOS 7安装Percona XtraDB Cluster 5.7
很久没写文章了,主要一个原因是从年初开始就逐步转入到开源阵营了。上半年是一个逐步摸索的过程。我现在主要是学习MySQL、PostgreSQL、Redis、Kafka等等,学的东西很多很杂。今天是下半年第一天,准备把自己学的MySQL相关的东西做个记录吧。那么首先我就来写写Percona XtraDB Cluster的安装。它基于Galera的协议。
说实话,在很久以前,我学习RAC的时候,同事给了我一份RAC安装文档,结果我安装了3天都没安装上,那几天几夜搞的我没睡好,精神压力还很大。后面研究了很久才发现同事给的文档是阉割版的文档,那种根本就装不了的。所以后来我安装喜欢参考的是官方文档,PXC安装我参考的文档是Percona XtraDB Cluster Documentation Release 5.7.26-31.37
安装之前,我们先来初步看一下架构吧。如图所示,PXC是一个组复制的架构,图中有三个节点,这三个节点都是可以对外提供读和写的。客户端写入和读取数据时,连接哪个实例都是一样的,读取到的数据都是相同的,写入任意一个实例之后,集群自己会将新写入的数据同步到其他实例上。

感觉很酷啊,让我们开始吧。
PXC安装,首先要准备三台虚拟机,IP配置如下所示。

192.168.56.161 node1
192.168.56.162 node2
192.168.56.163 node3
1.安装之前要保证三台机器的防火墙和selinux都要做设置。

确保以下端口未被防火墙阻止或未被其他软件使用。PXC集群需要它们进行通信。

  • 3306 数据库服务的端口号
  • 4444请求SST的端口,SST是指数据库一个备份全量文件的传输
  • 4567 组成员之间进行沟通的一个端口号
  • 4568 用于传输IST(相对SST来说的一个增量)

为了实验的简洁性,我这里直接关闭防火墙。当然最好是防火墙打开,并相对应端口放开限制。

systemctl stop firewalld.service            #停止firewall
systemctl disable firewalld.service        #禁止firewall开机启动

修改/etc/selinux/config
设置SELINUX=permissive
2.创建MySQL用户。
groupadd mysql
useradd -r -g mysql -s /bin/false mysql
3.安装Percona Repository
yum install https://repo.percona.com/yum/percona-release-latest.noarch.rpm

安装了源才可以方便下载Percona软件包。

4.安装Percona XtraDB Cluster 5.7相关软件
yum install Percona-XtraDB-Cluster-57

这一步会把Percona XtraDB Cluster需要的软件包全部安装上。

5.启动数据库并修改密码,修改完成停止服务。
[root@pxc1 ~]# service mysql start
Redirecting to /bin/systemctl start mysql.service
找到root密码,登录修改密码
grep 'temporary password' /var/log/mysqld.log
mysql -u root -p
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'root123';
Query OK, 0 rows affected (0.00 sec)
mysql> exit
Bye
停止mysql服务
service mysql stop
6.配置pxc,增加相关参数
vi /etc/my.cnf

wsrep_provider=/usr/lib64/galera3/libgalera_smm.so
wsrep_cluster_name=pxc-cluster
wsrep_cluster_address=gcomm://192.168.56.161,192.168.56.162,192.168.56.163
wsrep_node_name=pxc1
wsrep_node_address=192.168.56.161
wsrep_sst_method=xtrabackup-v2
wsrep_sst_auth=sstuser:passw0rd
pxc_strict_mode=ENFORCING

binlog_format=ROW
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2

这些参数的含义如下:
wsrep_cluster_name   ##标识该集群的名字
wsrep_cluster_address=gcomm:  ##列出集群中的成员
wsrep_node_address   ##当前节点的IP地址
wsrep_provider=/usr/lib64/galera3/libgalera_smm.so   ##指定Galera库的路径和文件名
wsrep_sst_method=xtrabackup-v2         ##传输数据的方法,现在都推荐使用xtrabackup-v2方式
wsrep_sst_auth=sstuser:passw0rd          ##节点使用SST来同步的数据库用户账号和密码
pxc_strict_mode                                    ##PXC严格模式旨在避免在Percona XtraDB群集中使用实验性和不受支持的功能。它在启动时和运行时执行一些验证。推荐设置成ENFORCING
binlog_format                                       ##Galera只支持row级别的复制
default_storage_engine                        ## Galera只支持InnoDB存储引擎
innodb_autoinc_lock_mode                ##Galera仅支持InnoDB的交错锁模式,也就是2。设置传统模式(0)或连续锁定模式(1)可能会导致复制由于未解决的死锁而失败。

7.节点1启动
systemctl start mysql@bootstrap.service

需要注意的是centos 7需要使用systemctl命令来启动,并在后面跟上@bootstrap.service,启动完成后可以查看服务的状态。

[root@pxc1 init.d]# systemctl status mysql@bootstrap.service
● mysql@bootstrap.service - Percona XtraDB Cluster with config /etc/sysconfig/mysql.bootstrap
   Loaded: loaded (/usr/lib/systemd/system/mysql@.service; disabled; vendor preset: disabled)
   Active: active (running) since 一 2019-07-01 15:53:37 CST; 8s ago
  Process: 16985 ExecStartPost=/usr/bin/mysql-systemd start-post $MAINPID (code=exited, status=0/SUCCESS)
  Process: 16944 ExecStartPre=/usr/bin/mysql-systemd start-pre (code=exited, status=0/SUCCESS)
 Main PID: 16984 (mysqld_safe)
   CGroup: /system.slice/system-mysql.slice/mysql@bootstrap.service
           ├─16984 /bin/sh /usr/bin/mysqld_safe --basedir=/usr  --wsrep-new-cluster
           └─17545 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql/plugin --user=mysql --wsrep-provider=/usr/lib64/galera3/libgaler...

7月 01 15:53:27 pxc1.localdomain systemd[1]: Starting Percona XtraDB Cluster with config /etc/sysconfig/mysql.bootstrap...
7月 01 15:53:27 pxc1.localdomain mysql-systemd[16985]: State transfer in progress, setting sleep higher
7月 01 15:53:27 pxc1.localdomain mysqld_safe[16984]: 2019-07-01T07:53:27.913874Z mysqld_safe Logging to '/var/log/mysqld.log'.
7月 01 15:53:27 pxc1.localdomain mysqld_safe[16984]: 2019-07-01T07:53:27.916617Z mysqld_safe Logging to '/var/log/mysqld.log'.
7月 01 15:53:27 pxc1.localdomain mysqld_safe[16984]: 2019-07-01T07:53:27.938342Z mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql
7月 01 15:53:27 pxc1.localdomain mysqld_safe[16984]: 2019-07-01T07:53:27.948292Z mysqld_safe Skipping wsrep-recover for 428f9095-9980-11e9-b8b6-1322440f5dbe:7 pair
7月 01 15:53:27 pxc1.localdomain mysqld_safe[16984]: 2019-07-01T07:53:27.949778Z mysqld_safe Assigning 428f9095-9980-11e9-b8b6-1322440f5dbe:7 to wsrep_start_position
7月 01 15:53:37 pxc1.localdomain mysql-systemd[16985]: SUCCESS!
7月 01 15:53:37 pxc1.localdomain systemd[1]: Started Percona XtraDB Cluster with config /etc/sysconfig/mysql.bootstrap.
8.创建SST用户
mysql> create user 'sstuser'@'localhost' identified by 'passw0rd';
Query OK, 0 rows affected (0.01 sec)
mysql> grant reload,lock tables,process,replication client on *.* to 'sstuser'@'localhost';
Query OK, 0 rows affected (0.01 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)
9.查看集群的状态

此时可以查看集群的状态。

mysql> show status like 'wsrep%';
+----------------------------------+-----------------------------------------+
| Variable_name                    | Value                                   |
+----------------------------------+-----------------------------------------+
| wsrep_local_state_uuid           | 428f9095-9980-11e9-b8b6-1322440f5dbe    |
| wsrep_local_state                | 4                                       |
| wsrep_local_state_comment        | Synced                                  |
| wsrep_cluster_size               | 1                                       |
| wsrep_cluster_status             | Primary                                 |
| wsrep_connected                  | ON                                      |
| wsrep_ready                      | ON                                      |
+----------------------------------+-----------------------------------------+

这里说明下这些参数的含义:
wsrep_local_state_uuid:集群中所有的值都应该是相同的,如果有不同的值,而说明这个节点没有连接到集群,我们观察三个节点的值都是428f9095-9980-11e9-b8b6-1322440f5dbe
wsrep_local_state: 该值为4表示正常,节点状态有4个值。和下面wsrep_local_state_comment参数相呼应。
wsrep_local_state_comment:
joining —表示节点正在加入集群
donori —表示当前节点是数据奉献者,正在为新加入的节点同步数据
joined —当前节点已经成功加入集群
synced —当前节点与整个集群是同步状态
wsrep_ready 当为on的时候表示节点可以正常服务,如果值为off,则该节点可能发生脑裂或者是网络问题。
wsrep_cluster_status:集群组成的状态,如果不是”primary”,说明出现“分区”或者“脑裂”现象。
wsrep_cluster_size 这个值代表节点数,如果这个值和预期的节点数是一致的,则说明所有的集群节点已经连接。

10.接下来是节点2的操作

节点2和上面的操作类似,需要注意的地方主要有两点:
a.参数配置需要修改,节点名称和节点的IP要更换一下。
wsrep_node_name=pxc2
wsrep_node_address=192.168.56.162
b.配置完成启动的命令使用,不要像节点1一样增加参数。
systemctl start mysql

11.查看节点2的状态

当你配置好参数,通过服务启动之后,会自动和节点1进行同步,此时的root密码还有SST用户都会同步更新,不需要在做修改密码操作。

mysql> show status like 'wsrep%';
+----------------------------------+-----------------------------------------+
| Variable_name                    | Value                                   |
+----------------------------------+-----------------------------------------+
| wsrep_local_state_uuid           | 428f9095-9980-11e9-b8b6-1322440f5dbe    |
| wsrep_local_state                | 4                                       |
| wsrep_local_state_comment        | Synced                                  |
| wsrep_incoming_addresses         | 192.168.56.162:3306,192.168.56.161:3306 |
| wsrep_cluster_size               | 2  =》可以看到集群节点数这里变成了2          |
| wsrep_cluster_status             | Primary                                 |
| wsrep_connected                  | ON                                      |
| wsrep_ready                      | ON                                      |
+----------------------------------+-----------------------------------------+
12.配置节点3

节点3和节点2的操作类似,需要注意的地方主要有两点:
a.参数配置需要修改,节点名称和节点的IP要更换一下。
wsrep_node_name=pxc2
wsrep_node_address=192.168.56.162
b.配置完成启动的命令使用,不要像节点1一样增加参数。
systemctl start mysql

12.查看节点3的状态
mysql> show status like 'wsrep%';
+----------------------------------+-------------------------------------------------------------+
| Variable_name                    | Value                                                       |
+----------------------------------+-------------------------------------------------------------+
| wsrep_local_state_uuid           | 428f9095-9980-11e9-b8b6-1322440f5dbe                        |
| wsrep_local_state                | 4                                                           |
| wsrep_local_state_comment        | Synced                                                      |
| wsrep_incoming_addresses         | 192.168.56.162:3306,192.168.56.161:3306,192.168.56.163:3306 |
| wsrep_cluster_size               | 3  =》可以看到集群节点数这里变成了3                              |
| wsrep_cluster_status             | Primary                                                     |
| wsrep_connected                  | ON                                                          |
| wsrep_ready                      | ON                                                          |
+----------------------------------+-------------------------------------------------------------+
71 rows in set (0.01 sec)
13.当集群配置好之后,可以进行验证verify

a.首先在2节点创建数据库.

create database pxcdb;

b.然后在3节点进入新的数据库,创建一个测试表.

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| pxcdb              |
| sys                |
+--------------------+
5 rows in set (0.02 sec)

mysql> use pxcdb;
Database changed
mysql>
mysql> create table t1(node_id int primary key,node_name varchar(30));
Query OK, 0 rows affected (0.05 sec)

c.最后在1节点插入一些数据.

mysql> use pxcdb;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> insert into t1 values(1,'pxc1');
Query OK, 1 row affected (0.02 sec)

d.然后在2节点上验证数据

mysql> select * from pxcdb.t1;
+---------+-----------+
| node_id | node_name |
+---------+-----------+
|       1 | pxc1      |
+---------+-----------+
1 row in set (0.00 sec)

结尾语,整个安装过程还算比较顺利,比安装RAC简单多了。下一步将要学习在上面搭建Proxy SQL。

分享到: 更多

Post a Comment

Your email is never published nor shared. Required fields are marked *