CentOS 7安装Percona XtraDB Cluster 5.7

栏目: 数据库 · 发布时间: 6年前

内容简介:很久没写文章了,主要一个原因是从年初开始就逐步转入到开源阵营了。上半年是一个逐步摸索的过程。我现在主要是学习MySQL、PostgreSQL、Redis、Kafka等等,学的东西很多很杂。今天是下半年第一天,准备把自己学的MySQL相关的东西做个记录吧。那么首先我就来写写Percona XtraDB Cluster的安装。它基于Galera的协议。

版权声明:本文为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是一个组复制的架构,图中有三个节点,这三个节点都是可以对外提供读和写的。客户端写入和读取数据时,连接哪个实例都是一样的,读取到的数据都是相同的,写入任意一个实例之后,集群自己会将新写入的数据同步到其他实例上。

CentOS 7安装Percona XtraDB Cluster 5.7

感觉很酷啊,让我们开始吧。

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。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

High Performance Python

High Performance Python

Micha Gorelick、Ian Ozsvald / O'Reilly Media / 2014-9-10 / USD 39.99

If you're an experienced Python programmer, High Performance Python will guide you through the various routes of code optimization. You'll learn how to use smarter algorithms and leverage peripheral t......一起来看看 《High Performance Python》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试