Percona XtraDB Cluster(下文簡稱PXC集群)提供了MySQL高可用的一種實現方法。集群是有節點組成的,推薦配置至少3個節點,但是也可以運行在2個節點上。
PXC原理描述:
分布式系統的CAP理論:C:一致性,所有的節點數據一致A:可用性,一個或者多個節點失效,不影響服務請求P:分區容忍性,節點間的連接失效,仍然可以處理請求其實,任何一個分布式系統,需要滿足這三個中的兩個。PXC的優點:1)服務高可用;2)數據同步複製(並發複製),幾乎無延遲;3)多個可同時讀寫節點,可實現寫擴展,不過最好事先進行分庫分表,讓各個節點分別寫不同的表或者庫,避免讓galera解決數據衝突;4)新節點可以自動部署,部署操作簡單;5)數據嚴格一致性,尤其適合電商類應用;6)完全兼容MySQL;
一些名詞介紹:
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-v2UUID:節點狀態改變及順序的唯一標識GTID:Global Transaction ID,由UUID和sequence number偏移量組成。wsrep api中定義的集群內部全局事務id,用於記錄集群中發生狀態改變的唯一標識以及隊列中的偏移量。WSRWP API:在DBMS庫和wsrep provider之間提供接口
PXC環境所涉及的埠:
#mysql實例埠:3306#PXC cluster相互通訊的埠:4567 #用於SST傳送的埠:4444 #用於IST傳送的埠:4568
1.有3個節點
pxc_node0 192.0.0.197 pxc_node1 192.0.0.198 pxc_node2 192.0.0.199
2.防火牆設置
01關閉防火牆
# systemctl stop firewalld.service # systemctl disable firewalld.servie
02或開啟防火牆對應的埠:
firewall-cmd --zone=public --add-port=3306/tcp --permanentfirewall-cmd --zone=public --add-port=4444/tcp --permanentfirewall-cmd --zone=public --add-port=4567/tcp --permanentfirewall-cmd --zone=public --add-port=4568/tcp --permanent
開放完4個埠後,重新加載防火牆規則
firewall-cmd --reload
3.關閉SELINUX ,安全增強型 Linux(Security-Enhanced Linux)SELinux主要由美國國家安全局開發
01執行命令 永久關閉Selinux
vi /etc/selinux/config 把SELINUX屬性值設置成disabled
02或者執行命令 Linux臨時關閉Selinux
setenforce 0
4.下載安裝,在pxc_node0,pxc_node2,pxc_node2分別進行如下安裝
基礎安裝[root@percona1 ~]# yum -y groupinstall Base Compatibility libraries Debugging Tools Dial-up Networking suppport Hardware monitoring utilities Performance Tools Development tools組件安裝[root@percona1 ~]# yum install http://www.percona.com/downloads/percona-release/redhat/0.1-3/percona-release-0.1-3.noarch.rpm -y[root@percona1 ~]# yum install Percona-XtraDB-Cluster-55 -y
5.停止mysql服務,選擇一個node作為名義上的master,只需要修改mysql的配置文件/etc/my.cnf(需要分別配置)
#PXC集群中MySQL實例的唯一ID,不能重複,必須是數字server-id=1 wsrep_provider=/usr/lib64/galera3/libgalera_smm.so#PXC集群的名稱wsrep_cluster_name=pxc-cluster wsrep_cluster_address=gcomm://192.0.0.197,192.0.0.198,192.0.0.199#當前節點的名稱wsrep_node_name=pxc1 #當前節點的IPwsrep_node_address=192.0.0.197 #同步方法(mysqldump、rsync、xtrabackup)wsrep_sst_method=xtrabackup-v2 #同步使用的帳戶wsrep_sst_auth= admin:Abc_123456 #同步嚴厲模式pxc_strict_mode=ENFORCING #基於ROW複製(安全可靠)binlog_format=ROW #默認引擎default_storage_engine=InnoDB #主鍵自增長不鎖表innodb_autoinc_lock_mode=2
6.啟動第一個節點
/etc/init.d/mysql bootstrap-pxc 如果是centos7,則啟動命令如下:systemctl start mysql@bootstrap.service若是重啟的話,就先kill,然後刪除pid文件後再執行上面的啟動命令
7.資料庫用戶名密碼的設置
mysql> UPDATE mysql.user SET password=PASSWORD("Passw0rd") where user='root';
8.配置SST認證帳號
mysql> CREATE USER 'sstuser'@'localhost' IDENTIFIED BY 's3cret';mysql> GRANT RELOAD, LOCK TABLES, PROCESS, REPLICATION CLIENT ON *.* TO 'sstuser'@'localhost';mysql> FLUSH PRIVILEGES;
9.啟動其他節點
/etc/init.d/mysql start
各個節點都採用第一個修改的root密碼登錄
10.常用命令
查看節點數:
show global status like 'wsrep_cluster_size';
查看集群狀態:
show global status like 'wsrep_cluster_size';
查看當前節點狀態:
show global status like 'wsrep_cluster_status';
通過查看4567 埠確認集群是否啟動:
netstat -plantu | grep mysqld
集群關閉:所有節點都用
/etc/init.d/mysql stop
節點重啟第一個節點用:
/etc/init.d/mysql restart-bootstrap
其他節點用:
/etc/init.d/mysql restart
11.其他注意事項:
集群關閉之後,再啟動,誰做第一個節點誰就執行/etc/init.d/mysql bootstrap-pxc
如果最後關閉的PXC節點是安全退出的,那麼下次啟動要最先啟動這個節點,而且要以主節點啟動 如果最後關閉的PXC節點不是安全退出的,
那麼要先修改/var/lib/mysql/grastate.dat 文件, 把其中的safe_to_bootstrap屬性值設置為1, 再安裝主節點啟動。
除了名義上的master之外,其它的node節點只需要啟動mysql即可。
節點的資料庫的登陸和master節點的用戶名密碼一致,自動同步。所以其它的節點資料庫用戶名密碼無須重新設置。
只需要在名義上的master節點上設置權限,其它的節點配置好/etc/my.cnf後,只需要啟動mysql就行,權限會自動同步過來。
吉海波