簡介
Percona XtraDB Cluster是針對MySQL用戶的高可用性和擴展性解決方案,基於Percona Server 。其包括了Write Set REPlication補丁,使用Galera 2.0庫,這是一個針對事務性應用程序的同步多主機複製插件。
Percona XtraDB Cluster特點:
(1)同步複製,事務在所有集羣節點要麼同時提交,要麼不提交。
(2)多主複製,可以在任意一個節點寫入。
(3)從服務器上的並行應用事件,真正的“並行複製”。
(4)自動配置節點。
(5)數據一致性,沒有不同步的從服務器。
pxc框架圖
可以達到時時同步,無延遲現象發生
完全兼容MySQL
對於集羣中新節點的加入,維護起來很簡單
數據的強一致性
不足之處總結:
只支持Innodb存儲引擎
最大的缺點是多寫問題,最短板性能上限問題
在線DDL語句,鎖表問題
sst針對新節點加入的傳輸代價過高的問題
測試場景測試:
在我們硬件水平是256G內存,32核CPU,SSD硬件,單行數據大概1K,單表1千萬,512表。 QPS在2.5k寫+5K讀時,就會有節點同步阻塞問題。當時我們臨時切成只讀(不執行寫SQL)10分鐘後,才緩解過來。寫queue配置參數在下面。
建議場景:低寫QPS的DB,使用PXC集羣,以防硬件故障,達到高可用。
一、環境準備
1、系統環境
[root@master ~]# cat /etc/redhat-release
CentOS Linux release 7.5.1804 (Core)
2、數據庫環境
3、注意事項
暫時關閉防火牆和selinux服務
使用端口 3306 、4444、4567、4568
二、搭建(yum安裝)(三臺都要)
1、安裝percona環境
1.1、配置yum源
[root@master ~]# yum install http://www.percona.com/downloads/percona-release/redhat/0.1-4/percona-release-0.1-4.noarch.rpm
[root@master ~]# yum install perl-IO-Socket-SSL perl-DBD-MySQL perl-Time-HiRes socat nc openssl -y
1.3、下載安裝Percona-XtraDB-Cluster
[root@master ~]# yum install -y libaio*
[root@master ~]# yum groupinstall -y 'Development tools'
[root@master ~]# yum install -y libssl.so.6
[root@master lib64]# ln -sf /usr/lib64/libssl.so.10 /usr/lib64/libssl.so.6
[root@master lib64]# ln -sf /usr/lib64/libcrypto.so.10 /usr/lib64/libcrypto.so.6
yum安裝
[root@master ~]# yum install Percona-XtraDB-Cluster-57
2、啓動服務
[root@master ~]# systemctl start mysqld.service (第一個節點啓動方式不一樣)
查看默認密碼
[root@master ~]# grep "temporary password" /var/log/mysqld.log
3、登錄數據庫修改
mysql> alter user 'root'@'localhost' identified by 'Jsq@2018';
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
4、創建sst賬號密碼(只在第一個節點添加,其他同步即可)
mysql> GRANT RELOAD,LOCK TABLES,PROCESS,REPLICATION CLIENT ON *.* TO 'sstuser1'@'localhost' IDENTIFIED BY '123456';
mysql> FLUSH PRIVILEGES;
5、配置mysqld.cnf文件
cat /etc/percona-xtradb-cluster.conf.d/mysqld.cnf
默認狀態
現在在/etc/my.cnf第一行添加[mysqld],然後重新啓動服務成功(節點2和節點3的也需要參照節點1在配置文件/etc/my.cnf的第一行添加[mysqld])。
master配置如下:
[mysqld]
#!includedir /etc/my.cnf.d/
#!includedir /etc/percona-xtradb-cluster.conf.d/
#PXC
# Path to Galera library
wsrep_provider=/usr/lib64/galera3/libgalera_smm.so
# Cluster connection URL contains the IPs of node#1, node#2 and node#3
wsrep_cluster_address=gcomm://192.168.56.129,192.168.56.130,192.168.56.131
# 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
# Node #1 address
wsrep_node_address=192.168.56.129
wsrep_node_name=pxc1
# SST method
wsrep_sst_method=xtrabackup-v2
# Cluster name
wsrep_cluster_name=pxc-cluster
# Authentication for SST method
wsrep_sst_auth="sstuser1:123456"
slave1配置如下:
[mysqld]
#PXC
wsrep_provider=/usr/lib64/galera3/libgalera_smm.so
wsrep_cluster_address=gcomm://192.168.56.129,192.168.56.130,192.168.56.131
binlog_format=ROW
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2
wsrep_node_address=192.168.56.130
wsrep_node_name=pxc2
wsrep_sst_method=xtrabackup-v2
wsrep_cluster_name=pxc-cluster
wsrep_sst_auth="sstuser1:123456"
slave2配置如下:
[mysqld]
#PXC
wsrep_provider=/usr/lib64/galera3/libgalera_smm.so
wsrep_cluster_address=gcomm://192.168.56.129,192.168.56.130,192.168.56.131
binlog_format=ROW
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2
wsrep_node_address=192.168.56.131
wsrep_node_name=pxc3
wsrep_sst_method=xtrabackup-v2
wsrep_cluster_name=pxc-cluster
wsrep_sst_auth="sstuser1:123456"
啓動第一個節點
[root@master ~]# systemctl start [email protected]
[root@master ~]# systemctl status [email protected]
[root@master ~]# ss -tnl
其他節點採用正確方式啓動
[root@slave1 ~]# systemctl start mysqld.service
[root@slave2 ~]# systemctl start mysqld.service
6、查看三個節點狀態
mysql> show status like '%wsrep%';
三、測試
在master更新數據
在slave1更新數據
在slave2更新數據
到此即可!!!!!!!!!!!!!!!!!