Percona XtraDB Cluster (簡稱 PXC) 是 Percona 公司開源的實現 MySQL 高可用的解決方案。它將 Percona Server 和 Percona XtraBackup 與 Galera 庫集成,以實現多主同步複製。和 MySQL 傳統的異步複製相比,它可以保證數據的強一致性,在任什麼時候刻集羣中任意節點上的數據狀態都是徹底一致的,而且整個架構實現了去中心化,全部節點都是對等的,即容許你在任意節點上進行寫入和讀取,集羣會把數據狀態同步至其餘全部節點。但目前 PXC 集羣只支持 InnoDB 存儲引擎,並具備如下限制:html
雖然 PXC 集羣存在以上限制,但就目前而言,它仍然是解決數據一致性和高可用性的最好方案,其搭建步驟以下:node
爲保證集羣高可用,羣集最少要有 3 個節點,這裏以搭建一個 3 節點的集羣爲例,具體以下:mysql
1. 刪除 MariaDBlinux
1.這裏個人服務器版本爲 Centos 7.x ,須要刪除自帶的 MariaDB 數據庫,避免對後面安裝形成影響:git
yum -y remove mari*
複製代碼
2. 開放訪問牆端口github
開放如下四個防火牆端口,其做用和開放命令分別以下:sql
# MySQL 對外提供服務的端口
firewall-cmd --zone=public --add-port=3306/tcp --permanent
# 請求進行全量同步(SST)的端口
firewall-cmd --zone=public --add-port=4444/tcp --permanent
# 集羣中各個節點間的通信端口
firewall-cmd --zone=public --add-port=4567/tcp --permanent
# 請求進行增量同步(IST)的端口
firewall-cmd --zone=public --add-port=4568/tcp --permanent
複製代碼
3. 關閉SELINUXshell
SELinux 安全模塊可能會限制對 Percona XtraDB Cluster 的數據訪問。此時能夠在運行時使用 setenforce 0
命令進行更改,也能夠經過修改 /etc/selinux/config
文件中的 SELINUX 屬性的值爲 disabled ,從而進行永久性的更改:數據庫
vi /etc/selinux/config
# 修改
SELINUX=disabled
複製代碼
修改該文件後須要重啓才能生效:bootstrap
reboot
複製代碼
配置 yum 源後,直接使用 yum 命令進行在線安裝,命令以下:
sudo yum install https://repo.percona.com/yum/percona-release-latest.noarch.rpm
sudo yum install Percona-XtraDB-Cluster-57
複製代碼
使用以上命令安裝完成後,會同時安裝好 Percona Server 數據庫,它基於 MySQL 社區版進行了擴展加強,並徹底兼容原有版本,使用方式也徹底一致,啓動命令以下:
sudo systemctl start mysql
複製代碼
使用如下命令獲取安裝時自動生成的 root 帳戶的密碼:
sudo grep 'temporary password' /var/log/mysqld.log
複製代碼
使用 root 帳戶登陸,並修改其帳戶密碼:
# 登陸服務
mysql -u root -p
# 修改密碼
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
# 退出服務
mysql> exit
複製代碼
以後使用如下命令中止 MySQL 服務:
sudo systemctl stop mysql
複製代碼
以上安裝過程在三臺主機上均相同執行,以後就能夠開始集羣的搭建。首先須要修改每一個服務器上的 /etc/my.cnf
文件,第一個節點上須要增長的內容以下:
[mysqld]
# PXC集羣中每一個MySQL實例的惟一標識,不能重複
server-id=1
wsrep_provider=/usr/lib64/galera3/libgalera_smm.so
# PXC集羣的名稱和全部服務地址
wsrep_cluster_name=pxc-cluster
wsrep_cluster_address=gcomm://192.168.0.226,192.168.0.227,192.168.0.228
# 當前節點的名稱和服務地址
wsrep_node_name=pxc1
wsrep_node_address=192.168.0.226
# 指定同步方法和帳戶信息,這個用戶在下文會進行建立
wsrep_sst_method=xtrabackup-v2
wsrep_sst_auth= sstuser:123456
#開啓嚴厲模式,它會阻止用戶執行 Percona XtraDB Cluster 所不支持的功能。
pxc_strict_mode=ENFORCING
# 指定二進制日誌的格式
binlog_format=ROW
# 指定默認的存儲引擎
default_storage_engine=InnoDB
# Galera 僅支持 InnoDB 的 interleaved(2) 鎖定模式:
# 該模式下全部 INSERT SQL 都不會有表級 AUTO-INC 鎖,多個語句能夠同時執行
innodb_autoinc_lock_mode=2
複製代碼
第2、三個節點的配置與上面基本相同,可是須要修改 server id 以及當前節點的名稱和地址,具體以下:
server-id=2
wsrep_node_name=pxc2
wsrep_node_address=192.168.0.227
複製代碼
server-id=3
wsrep_node_name=pxc3
wsrep_node_address=192.168.0.228
複製代碼
第一個節點須要以引導模式啓動:
sudo systemctl start mysql@bootstrap.service
複製代碼
在將其餘節點添加到羣集以前,須要登陸當前節點,來爲 SST 操做建立用戶並提供權限,命令以下:
# 建立用戶
CREATE USER 'sstuser'@'localhost' IDENTIFIED BY '123456';
# 授予權限
GRANT RELOAD, LOCK TABLES, PROCESS, REPLICATION CLIENT ON *.* TO 'sstuser'@'localhost';
# 刷新權限
FLUSH PRIVILEGES;
複製代碼
接着在第二和第三個節點上正常啓動數據庫服務,命令以下:
sudo systemctl start mysql
複製代碼
啓動後,能夠登陸任意節點並使用如下命令查看集羣狀態。輸出中的 wsrep_cluster_size 的值應該爲 3 ,即集羣中節點總數爲 3,此時表明全部節點都已成功加入集羣,至此集羣已經搭建完成。
mysql> show status like 'wsrep%';
+----------------------------------+----------------------------------------------------------+
| Variable_name | Value |
+----------------------------------+----------------------------------------------------------+
| wsrep_local_state_uuid | 8bcc22cf-bfab-11e9-8a49-6e46c7af709e |
.......
| wsrep_incoming_addresses | 192.168.0.227:3306,192.168.0.228:3306,192.168.0.226:3306 |
| wsrep_gcomm_uuid | c8afc276-c623-11e9-a9ea-677d72419479 |
| wsrep_cluster_conf_id | 3 |
| wsrep_cluster_size | 3 |
| wsrep_cluster_state_uuid | 8bcc22cf-bfab-11e9-8a49-6e46c7af709e |
| wsrep_cluster_status | Primary |
| wsrep_connected | ON |
| wsrep_local_bf_aborts | 0 |
| wsrep_local_index | 2 |
| wsrep_provider_name | Galera |
| wsrep_provider_vendor | Codership Oy <info@codership.com> |
| wsrep_provider_version | 3.37(rff05089) |
| wsrep_ready | ON |
+----------------------------------+----------------------------------------------------------+
複製代碼
PXC 集羣容許動態下線節點,但須要注意的是節點的啓動命令和關閉命令必須一致,如以引導模式啓動的第一個節點必須以引導模式來進行關閉:
systemctl stop mysql@bootstrap.service
複製代碼
其餘節點則能夠按照正常方式關閉:
service stop mysql
複製代碼
因爲全部節點都是對等的,因此下線第一個節點和下線其餘節點在效果上都是相同的,以上就是關於 PXC 集羣搭建的所有內容。
Percona XtraDB Cluster 5.7 Documentation
更多文章,歡迎訪問 [全棧工程師手冊] ,GitHub 地址:github.com/heibaiying/…