centos6安装mysql PXC集群
1.PXC简介
PXC全称是Percona XtraDB Cluster, 是著名的mysql公司Percona出品的免费的数据库集群产品。
PXC对数据库集群是基于Galera的面向OLTP的多主同步复制插件。
长期以来mysql都缺少官方原生的集群方案,这也给很多第三方公司提供了机会,所以Galera技术就是众多mysql集群技术中较为著名的一种,mysql自带的主从复制模式天生就不能保证数据同步的完整一致,所以很多大公司花了很多人力和物力去解决这个问题,但是收效甚微,幸运的是Galera带来了多主架构,同步复制,并发复制,故障切换等一系列的功能。这才是真正意义上保证了数据的一致性,正确性和完整性。
PXC主要用于解决MySQL集群中数据同步强一致性的问题。
PXC是MySQL集群方案中公认的优先方案之一
1.1 PXC的特点
同步复制,事务在所有集群节点提交成功,要么不成功。
多主复制,可以在任意一个节点写入
数据同步的强一致性,所有节点数据保持一致
1.2 尽可能的控制PXC集群的规模
PXC集群节点越多,数据同步的速度就越慢
1.3 所有PXC节点的硬件配置要相同
PXC集群数据同步的速度取决于配置最低的节点。因为PXC是同步复制,一个节点写入的数据的速度慢,会拖慢整个集群的写入速度。
1.4 PXC集群只支持InnoDB引擎
只有InnoDB的数据才会被同步
2.准备虚拟机
官网推荐至少3个节点
A cluster consists of nodes, where each node contains the same set of data synchronized accross nodes. The recommended configuration is to have at least 3 nodes, but you can have 2 nodes as well.
所以我们要实现的是三台mysql节点集群,所以准备3台虚拟机
192.168.109.101 mysql01
192.168.109.102 mysql02
192.168.109.103 mysql03
3.下载PXC资源包
官网:https://www.percona.com/downloads/Percona-XtraDB-Cluster-LATEST/
下载xtabackup,地址 https://www.percona.com/downloads/Percona-XtraBackup-2.4/LATEST/
可以直接下载tar包解压,也可以下载下方对应的rpm包,这里直接下载两个tar包。
还需要下载qpress-11-1.el7.x86_64.prm
wget https://repo.percona.com/release/centos/6Server/RPMS/x86_64/qpress-11-1.el6.x86_64.rpm
4.安装PXC
4.1 PXC集群要使用4个端口,开放4个端口
直接关闭iptables
service iptables stop
chkconfig iptables off
4.2 关闭selinux
setenforce 0
vim /etc/sysconfig/selinux
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of these two values:
# targeted - Targeted processes are protected,
# mls - Multi Level Security protection.
SELINUXTYPE=targeted
4.3 解压2个tar包 把相关rpm包放在一起
[root@mysql01 percona]# pwd
/softwares/percona
[root@mysql01 percona]# ll
total 314696
-rw-r--r--. 1 root root 74692 Dec 16 13:10 libev-4.15-1.el6.rf.x86_64.rpm
-rw-rw-r--. 1 root root 8521676 Dec 4 17:13 percona-xtrabackup-24-2.4.17-1.el6.x86_64.rpm
-rw-rw-r--. 1 root root 54076376 Dec 4 17:13 percona-xtrabackup-24-debuginfo-2.4.17-1.el6.x86_64.rpm
-rw-rw-r--. 1 root root 17098980 Dec 4 17:13 percona-xtrabackup-test-24-2.4.17-1.el6.x86_64.rpm
-rw-rw-r--. 1 root root 28384 Sep 16 14:44 Percona-XtraDB-Cluster-57-5.7.27-31.39.1.el6.x86_64.rpm
-rw-rw-r--. 1 root root 142296916 Sep 16 14:44 Percona-XtraDB-Cluster-57-debuginfo-5.7.27-31.39.1.el6.x86_64.rpm
-rw-rw-r--. 1 root root 8499424 Sep 16 14:44 Percona-XtraDB-Cluster-client-57-5.7.27-31.39.1.el6.x86_64.rpm
-rw-rw-r--. 1 root root 1222100 Sep 16 14:44 Percona-XtraDB-Cluster-devel-57-5.7.27-31.39.1.el6.x86_64.rpm
-rw-rw-r--. 1 root root 27892 Sep 16 14:44 Percona-XtraDB-Cluster-full-57-5.7.27-31.39.1.el6.x86_64.rpm
-rw-rw-r--. 1 root root 624680 Sep 16 14:44 Percona-XtraDB-Cluster-garbd-57-5.7.27-31.39.1.el6.x86_64.rpm
-rw-rw-r--. 1 root root 55747332 Sep 16 14:44 Percona-XtraDB-Cluster-server-57-5.7.27-31.39.1.el6.x86_64.rpm
-rw-rw-r--. 1 root root 902256 Sep 16 14:44 Percona-XtraDB-Cluster-shared-57-5.7.27-31.39.1.el6.x86_64.rpm
-rw-rw-r--. 1 root root 32717112 Sep 16 14:44 Percona-XtraDB-Cluster-test-57-5.7.27-31.39.1.el6.x86_64.rpm
-rw-r--r--. 1 root root 31512 Mar 19 2019 qpress-11-1.el6.x86_64.rpm
-rw-r--r--. 1 root root 348020 Dec 16 13:13 socat-1.7.2.4-1.el6.rf.x86_64.rpm
安装rpm
yum localinstall *.rpm
centos 6安装pxc cluster会有报错,centos7 没有问题,需要解决。
Error: Package: percona-xtrabackup-24-2.4.11-1.el6.x86_64 (percona-release-x86_64)
Requires: libev.so.4()(64bit)
Error: Package: Percona-XtraDB-Cluster-server-57-5.7.21-29.26.1.el6.x86_64 (percona-release-x86_64)
Requires: socat
You could try using --skip-broken to work around the problem
You could try running: rpm -Va --nofiles --nodigest
因为percona-xtrabackup依赖libev.so.4()(64bit)的包,而这个包只能从EPEL源(Extra Packages for Enterprise Linux,企业版Linux的额外软件包 是Fedora小组维护的一个软件仓库项目,为RHEL/CentOS提供他们默认不提供的软件包)安装 ,所以只要安装了这个包即可解决问题。
从http://rpmfind.net/linux/rpm2html/search.php上下载libev-4.15-1.el6.rf.x86_64.rpm安装包,然后安装即可
rpm -ivh libev-4.15-1.el6.rf.x86_64.rpm
warning: libev-4.15-1.el6.rf.x86_64.rpm: Header V3 DSA/SHA1 Signature, key ID 6b8d79e6: NOKEY
Preparing... ########################################### [100%]
1:libev ########################################### [100%]
从http://rpmfind.net/linux/rpm2html/search.php上下载socat-1.7.2.3-1.el6.x86_64.rpm安装包,这个包有其它的依赖性关系,最简单的方法是用yun localinstall方法安装
yum localinstall socat-1.7.2.3-1.el6.x86_64.rpm
再执行就成功安装了。
yum localinstall *.rpm
5.配置PXC
5.1 进入PXC配置文件目录
[root@mysql01 percona-xtradb-cluster.conf.d]# pwd
/etc/percona-xtradb-cluster.conf.d
[root@mysql01 percona-xtradb-cluster.conf.d]# ll
total 12
-rw-r--r--. 1 root root 381 Sep 16 18:41 mysqld.cnf
-rw-r--r--. 1 root root 440 Sep 16 18:41 mysqld_safe.cnf
-rw-r--r--. 1 root root 1066 Sep 16 18:41 wsrep.cnf
[root@mysql01 percona-xtradb-cluster.conf.d]#
mysql的常用信息都写在了mysqld.cnf文件,wsrep.cnf文件配置的是pxc集群的信息
我们可以简化一下配置文件,将mysqld.cnf文件和wsrep.cnf文件的内容复制到/etc/my.cnf文件中,把所有配置信息写到一个文件中,并添加字符集等配置。
[root@mysql01 percona-xtradb-cluster.conf.d]# more /etc/my.cnf
# Template my.cnf for PXC
# Edit to your requirements.
[client]
socket=/data/mysql/mysql.sock
[mysqld]
server-id=1
datadir=/data/mysql
socket=/data/mysql/mysql.sock
log-error=/data/mysqllog/mysqld.log
pid-file=/data/mysql/mysqld.pid
log-bin
log_slave_updates
expire_logs_days=7
character_set_server = utf8
skip-name-resolve
sync_binlog=1
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
# WSREP CONF #
# Path to Galera library
wsrep_provider=/usr/lib64/galera3/libgalera_smm.so
# Cluster connection URL contains IPs of nodes
#If no IP is found, this implies that a new cluster needs to be created,
#in order to do that you need to bootstrap this node
wsrep_cluster_address=gcomm://192.168.109.101,192.168.109.102,192.168.109.103
# In order for Galera to work correctly binlog format should be ROW
binlog_format=ROW
# MyISAM storage engine has only experimental support
default_storage_engine=InnoDB
# This changes how InnoDB autoincrement locks are managed and is a requirement for Galera
innodb_autoinc_lock_mode=2
# Cluster name
wsrep_cluster_name=pxc-cluster
#If wsrep_node_name is not specified, then system hostname will be used
wsrep_node_name=pxc1
# Node IP address
wsrep_node_address=192.168.109.101
#pxc_strict_mode allowed values: DISABLED,PERMISSIVE,ENFORCING,MASTER
pxc_strict_mode=ENFORCING
# SST method
wsrep_sst_method=xtrabackup-v2
#Authentication for SST method
wsrep_sst_auth= "sstuser:s3cret"
差异化配置:
# 需要根据相应的节点配置
server-id=2
wsrep_node_name=pxc2
wsrep_node_address=192.168.109.102
配置数据目录:
mdkir -p /data/mysql
5.2 启动
启动第一个节点,第一个启动的PXC节点是主节点
/etc/init.d/mysql bootstrap-pxc
查看root密码
# root初始化密码被记录到log-error中
grep 'temporary password' /data/mysqllog/mysqld.log
修改root密码,并配置SST认证账号
mysql> CREATE USER 'sstuser'@'localhost' IDENTIFIED BY 's3cret';
mysql> GRANT RELOAD, LOCK TABLES, PROCESS, REPLICATION CLIENT ON *.* TO 'sstuser'@'localhost';
mysql> FLUSH PRIVILEGES;
启动其他节点,非第一个启动的PXC节点
service mysql start
各个节点都采用第一个几点修改的root密码登录。
5.3 节点的启动和关闭
- 如果最后关闭的PXC节点是安全退出的,那么下次启动要最先启动这个节点,而且要以主节点启动
- 如果最后关闭的PXC节点不是安全退出的,那么要先修改
/var/lib/mysql/grastate.dat
文件,把其中的safe_to_bootstrap
属性值设置为1,再安照主节点启动。
5.4节点的安全关闭操作
/etc/init.d/mysql bootstrap.service stop
service mysql stop
关闭掉主节点之后查看/var/lib/mysql/grastate.dat文件
5.5 PXC节点的不安全或意外关闭操作
宕机,挂起,关机,重启,断电,断网都会让节点意外下线。
意外下线部分节点
安全下线节点不会让剩下的节点宕机,如果节点意外退出,集群的规模不会缩小,意外退出的节点超过半数,比如三个节点意外退出了2个节点,那么剩下的节点就不能够读写了。其他节点按照普通节点启动上线即可恢复pxc集群。
service mysql start
意外下线全部节点,不同时退出
如果三个节点都意外退出,那么查看/var/lib/mysql/grastate.dat文件,看看哪个文件的safe_to_bootstarp的值是1,那么那个节点是最后意外关闭的,再按照safe_to_bootstarp的值启动pxc集群
意外下线全部节点,同时退出
如果三个节点同时意外退出,我们需要修改配置文件,挑选一个节点作为主节点,修改safe_to_bootstarp的值设置为1,那么这个节点可以以主节点启动
5.6 查看节点状态
查看节点数:
show global status like 'wsrep_cluster_size';
查看集群状态:
show global status like 'wsrep%';
查看当前节点状态:
show global status like 'wsrep_cluster_status';
6.一些参数说明
- wsrep_provider:指定Galera库路径,没有这个库,节点只是一个MySQL单实例,无法参与pxc集群
- Debian or Ubuntu: /usr/lib/libgalera_smm.so
- Red Hat or CentOS: /usr/lib64/galera3/libgalera_smm.so
-
wsrep_cluster_name:集群名称,所有节点相同
-
wsrep_cluster_address:集群所有节点IP地址列表
-
wsrep_node_name:节点名称,默认为主机名称
-
wsrep_node_address:节点IP地址
- wsrep_sst_method:指定SST方法,推荐wsrep_sst_method=xtrabackup-v2
- wsrep_sst_auth:SST认证账号密码
- <sst_user>:<sst_pass>
- 当第一个节点启动后手动创建该账号密码,并授予相应的权限
-
pxc_strict_mode:PXC严格控制模式,
一些名词解释
-
WS:write set写数据集,写/更新事务
-
IST:Incremental State Transfer 增量同步
- SST:State Snapshot Transfe 全量同步。
- SST支持的方法有:mysqldump,rsync ,xtrabackup
- mysqldump,rsync同步需要READ LOCK, (SST applies FLUSH TABLES WITH READ LOCK command)
- xtrabackup 在整个同步数据过程中不需要READ LOCK
- 配置参数:wsrep_sst_method=xtrabackup-v2
-
UUID:节点状态改变及顺序的唯一标识
-
GTID:Global Transaction ID,由UUID和sequence number偏移量组成。wsrep api中定义的集群内部全局事务id,用于记录集群中发生状态改变的唯一标识以及队列中的偏移量。
-
WSRWP API:在DBMS库和wsrep provider之间提供接口