1.PXCプロフィール
PXCは、Percona XtraDBクラスタの略で有名な会社Perconaは無料のMySQLデータベースクラスタ製品を生産しています。
PXCマルチマスターガレラOLTP指向同期レプリケーションプラグインのデータベースクラスタに基づいています。
公式プログラムクラスタmysqlはネイティブ欠け長い間、それはまた、多くのmysqlガレラクラスター技術は、より有名なの技術であるので、サードパーティの企業の多くは、機会を提供できます、mysqlのマスタースレーブのレプリケーションモードは、自然に来るデータを保証できません完全で一貫したの同期は、非常に多くの大企業がこの問題を解決するための人材や物的資源の多くを費やすが、ほとんど成功し、幸いガレラように、マルチマスター・アーキテクチャ、同期レプリケーション、並行コピー機能のシリーズ、フェイルオーバーとをもたらします。これが本当の意味でのデータの一貫性、正確性および完全性を確保することです。
PXCは主にMySQL Clusterのデータ同期強い整合性の問題を解決するために使用されます。
PXCは、MySQL Clusterのプログラム認識優先プログラムの一つであります
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
3.安装PXC
3.1 PXC集群要使用4个端口,开放4个端口
直接关闭iptables
service iptables stop
chekconfig iptables off
3.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
3.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
4.配置PXC
4.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
4.2 启动
启动第一个节点
/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;
启动其他节点
service mysql start
各个加点都采用第一个几点修改的root密码登录。
查看节点数:
show global status like 'wsrep_cluster_size';
查看集群状态:
show global status like 'wsrep%';
查看当前节点状态:
show global status like 'wsrep_cluster_status';
5.一些参数说明
- 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之间提供接口