内容简介:很久没写文章了,主要一个原因是从年初开始就逐步转入到开源阵营了。上半年是一个逐步摸索的过程。我现在主要是学习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是一个组复制的架构,图中有三个节点,这三个节点都是可以对外提供读和写的。客户端写入和读取数据时,连接哪个实例都是一样的,读取到的数据都是相同的,写入任意一个实例之后,集群自己会将新写入的数据同步到其他实例上。
感觉很酷啊,让我们开始吧。
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。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- Golang入门:从安装、部署以及GoLand的安装开始
- Win2016上安装SFB2015先决条件安装失败:RewriteModule
- mac:Go安装和配置+GoLand安装和使用之完整教程
- Pulsar本地单机(伪)集群 (裸机安装与docker方式安装) 2.2.0
- 如何将Rancher 2.1.x 从单节点安装迁移到高可用安装
- (教科书式教程!)在VMware Workstation 14 上安装CentOS 7 【送安装包】
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。