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个节点

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之间提供接口

posted @ 2019-12-20 17:01  KeepBetter  阅读(655)  评论(9编辑  收藏  举报