内容简介:很久没写文章了,主要一个原因是从年初开始就逐步转入到开源阵营了。上半年是一个逐步摸索的过程。我现在主要是学习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 【送安装包】
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
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》 这本书的介绍吧!