Percona XtraDB Cluster(下文簡稱PXC集群)提供了MySQL高可用的一種實(shí)現(xiàn)方法。PXC集群以節(jié)點(diǎn)組成(推薦至少3節(jié)點(diǎn),便于故障恢復(fù),后面會(huì)討論兩節(jié)點(diǎn)的情況),每個(gè)節(jié)點(diǎn)都是基于常規(guī)的 MySQL/Percona Server,意味著你可以從集群中分離出某節(jié)點(diǎn)單獨(dú)使用。集群中每個(gè)節(jié)點(diǎn)都包含完整的數(shù)據(jù)。
PXC集群主要由兩部分組成:Percona Server with XtraDB和Write Set Replication patches(使用了Galera library,一個(gè)通用的用于事務(wù)型應(yīng)用的同步、多主復(fù)制插件)。
PXC的特性和優(yōu)點(diǎn):
1、同步復(fù)制
2、支持多主復(fù)制
3、支持并行復(fù)制
4、作為高可用方案,相比其他方案其結(jié)構(gòu)和實(shí)施相對(duì)簡單明了
PXC的局限和劣勢(shì):
1、 版本(5.6.20)的復(fù)制只支持InnoDB引擎,其他存儲(chǔ)引擎的更改不復(fù)制。然而,DDL(Data Definition Language) 語句在statement級(jí)別被復(fù)制,并且,對(duì)mysql.*表的更改會(huì)基于此被復(fù)制。例如CREATE USER...語句會(huì)被復(fù)制,但是 INSERT INTO mysql.user...語句則不會(huì)。(也可以通過wsrep_replicate_myisam參數(shù)開啟myisam引擎的 復(fù)制,但這是一個(gè)實(shí)驗(yàn)性的參數(shù))。
2、 由于PXC集群內(nèi)部一致性控制的機(jī)制,事務(wù)有可能被終止,原因如下:集群允許在兩個(gè)節(jié)點(diǎn)上通知執(zhí)行操作同一行的兩個(gè)事務(wù),但是只有一個(gè)能執(zhí)行成功,另一個(gè) 會(huì)被終止,同時(shí)集群會(huì)給被終止的客戶端返回死鎖錯(cuò)誤(Error: 1213 SQLSTATE: 40001 (ER_LOCK_DEADLOCK)).
3、寫入效率取決于節(jié)點(diǎn)中最弱的一臺(tái),因?yàn)镻XC集群采用的是強(qiáng)一致性原則,一個(gè)更改操作在所有節(jié)點(diǎn)都成功才算執(zhí)行成功。
部署環(huán)境: CentOS7.X
1、執(zhí)行 命令 vi /etc/selinux/config
SELINUX=disabled #修改該項(xiàng)為disabled
2、執(zhí)行命令 setenforce 0
3、查看防火墻是否開啟 systemctl status firewalld
如果防火墻是開啟狀態(tài),則開放端口 3306 、4444、4567、4568
firewall-cmd --add-port=3306/tcp --permanent #開放了3306端口
開放完4個(gè)端口后,重新加載防火墻規(guī)則
firewall-cmd --reload
4、安裝Persona倉庫
yum install http://www.percona.com/downloads/percona-release/redhat/0.1-4/percona-release-0.1-4.noarch.rpm
5、安裝PXC(保證服務(wù)器沒有裝MySQL)卸載MySQL 參考鏈接:https://blog.csdn.net/tjcyjd/article/details/52189182
yum install Percona-XtraDB-Cluster-57
6、開啟PXC服務(wù)
service mysql start
7、查看安裝數(shù)據(jù)庫的臨時(shí)密碼并記住
grep 'temporary password' /var/log/mysqld.log
8、登錄MySQL數(shù)據(jù)庫
mysql -u root -p
輸入臨時(shí)密碼
登錄成功后修改密碼
ALTER USER 'root'@'localhost' IDENTIFIED BY '你的密碼';
9、停止MySQL服務(wù)
service mysql stop (某些版本使用mysqld)
10、配置節(jié)點(diǎn)
vi /etc/percona-xtradb-cluster.conf.d/wsrep.cnf
修改配置文件
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
集群中節(jié)點(diǎn)的IP地址(本機(jī)填最后)
wsrep_cluster_address=gcomm://ip地址,IP地址,IP地址(用,號(hào)隔開)
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
Slave thread to use
wsrep_slave_threads= 8
wsrep_log_conflicts
This changes how InnoDB autoincrement locks are managed and is a requirement for Galera
innodb_autoinc_lock_mode=2
Node IP address
當(dāng)前節(jié)點(diǎn)IP
wsrep_node_address=IP地址
Cluster name
集群名稱
wsrep_cluster_name=pxc-cluster
If wsrep_node_name is not specified, then system hostname will be used
當(dāng)前節(jié)點(diǎn)名稱
wsrep_node_name=pxc-cluster-node-1
pxc_strict_mode allowed values: DISABLED,PERMISSIVE,ENFORCING,MASTER
不使用實(shí)驗(yàn)功能
pxc_strict_mode=ENFORCING
SST method
狀態(tài)快照傳輸(sst)方法,官方建議
wsrep_sst_method=xtrabackup-v2
Authentication for SST method
用戶憑證(mysql的用戶名和密碼)
wsrep_sst_auth="用戶名:密碼"
剩下的節(jié)點(diǎn)修改當(dāng)前節(jié)點(diǎn)名、當(dāng)前節(jié)點(diǎn)IP、集群中的節(jié)點(diǎn)IP,其他相同
1---10步驟 每個(gè)節(jié)點(diǎn)都要配置一次
11、初始化集群節(jié)點(diǎn)
其中一個(gè)節(jié)點(diǎn)使用 systemctl start mysql@bootstrap.service 啟動(dòng)
登錄mysql
mysql -u root -p
開啟 wsrep_causal_reads
set wsrep_causal_reads =1;
12、創(chuàng)建配置文件中對(duì)應(yīng)的用戶 所有節(jié)點(diǎn)的IP都要?jiǎng)?chuàng)建
創(chuàng)建用戶: CREATE USER '用戶名'@'localhost' IDENTIFIED BY '密碼';
刷新權(quán)限: GRANT all privileges ON . TO '用戶名'@'localhost' ;
FLUSH PRIVILEGES;
創(chuàng)建用戶: CREATE USER '用戶名'@'當(dāng)前需要訪問數(shù)據(jù)庫的IP地址' IDENTIFIED BY '密碼';
刷新權(quán)限: GRANT all privileges ON *.* TO '用戶名'@'當(dāng)前節(jié)點(diǎn)IP地址' ;
FLUSH PRIVILEGES;
13、其他節(jié)點(diǎn)使用 service mysql start 啟動(dòng) ,登錄mysql,配置wsrep_causal_reds,set wsrep_causal_reads =1;
14、其他節(jié)點(diǎn)啟動(dòng)成功后在引導(dǎo)節(jié)點(diǎn)(使用 systemctl start mysql@bootstrap.service 命令啟動(dòng)的節(jié)點(diǎn))
驗(yàn)證集群:show status like 'wsrep%';
15、節(jié)點(diǎn)數(shù)據(jù)同步驗(yàn)證
在當(dāng)前節(jié)點(diǎn)創(chuàng)建一個(gè)數(shù)據(jù)庫
CREATE DATABASE percona;
啟動(dòng)其他節(jié)點(diǎn)的數(shù)據(jù)庫服務(wù),進(jìn)去后會(huì)發(fā)現(xiàn)新建的數(shù)據(jù)庫,同理 其他節(jié)點(diǎn)創(chuàng)建的數(shù)據(jù) 當(dāng)前節(jié)點(diǎn)也能看到
注意:服務(wù)的啟動(dòng)和停止要對(duì)應(yīng)
service mysql stop ------> 啟動(dòng)時(shí)用service mysql start
或者
systemctl stop mysql@bootstrap.service -----> 啟用是用 systemctl start mysql@bootstrap.service
注意出現(xiàn)如下錯(cuò)誤
GPG key retrieval failed: [Errno 14] Could not open/read file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6
第一種是把這個(gè)key從這個(gè)源站copy過來,放到/etc/pki/rpm-gpg目錄下
第二種是修改repo文件
vim /etc/yum.repos.d/epel.repo
[epel]
name=Extra Packages for Enterprise Linux 6 – $basearch
baseurl=http://download.fedoraproject.org/pub/epel/6/$basearch
mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-6&arch=$basearch
failovermethod=priority
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6
把gpgcheck=1改為gpgcheck=0