MYSQL高可用之PXC

簡介

Percona XtraDB Cluster是針對MySQL用戶的高可用性和擴展性解決方案,基於Percona Server 。其包括了Write Set REPlication補丁,使用Galera 2.0庫,這是一個針對事務性應用程序的同步多主機複製插件。

Percona XtraDB Cluster特點:

  (1)同步複製,事務在所有集羣節點要麼同時提交,要麼不提交。

  (2)多主複製,可以在任意一個節點寫入。

  (3)從服務器上的並行應用事件,真正的“並行複製”。

  (4)自動配置節點。

  (5)數據一致性,沒有不同步的從服務器。

pxc框架圖

1.png

優點總結:

  1. 可以達到時時同步,無延遲現象發生

  2. 完全兼容MySQL

  3. 對於集羣中新節點的加入,維護起來很簡單

  4. 數據的強一致性

不足之處總結:

  1. 只支持Innodb存儲引擎

  2. 最大的缺點是多寫問題,最短板性能上限問題

  3. 在線DDL語句,鎖表問題

  4. sst針對新節點加入的傳輸代價過高的問題

測試場景測試:

  1. 在我們硬件水平是256G內存,32核CPU,SSD硬件,單行數據大概1K,單表1千萬,512表。 QPS在2.5k寫+5K讀時,就會有節點同步阻塞問題。當時我們臨時切成只讀(不執行寫SQL)10分鐘後,才緩解過來。寫queue配置參數在下面。

  2. 建議場景:低寫QPS的DB,使用PXC集羣,以防硬件故障,達到高可用。


一、環境準備

1、系統環境

[root@master ~]# cat /etc/redhat-release

CentOS Linux release 7.5.1804 (Core)

2.png

2、數據庫環境

數據庫IP地址

數據庫版本

主機名

server_id

192.168.56.129

master

129

192.168.56.130

slave1

130

192.168.56.131

slave2

131

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

3.png

2、啓動服務

[root@master ~]# systemctl start mysqld.service (第一個節點啓動方式不一樣

查看默認密碼

[root@master ~]# grep "temporary password" /var/log/mysqld.log

3、登錄數據庫修改

4.png

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;

6.png

5、配置mysqld.cnf文件

cat /etc/percona-xtradb-cluster.conf.d/mysqld.cnf

默認狀態

7.png

現在在/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]

8.png

[root@master ~]# ss -tnl

9.png

其他節點採用正確方式啓動

[root@slave1 ~]# systemctl start mysqld.service

[root@slave2 ~]# systemctl start mysqld.service

6、查看三個節點狀態

mysql> show status like '%wsrep%';

10.png

三、測試

在master更新數據

12.png

在slave1更新數據

13.png

在slave2更新數據

14.png

到此即可!!!!!!!!!!!!!!!!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章