MySQL高可用架構之MySQL5.7.19 PXC

CentOS7.3下Percona-XtraDB-Cluster-5.7.19集羣部署
PXC三節點安裝:
node1:10.10.10.11
node2:10.10.10.12
node3:10.10.10.13

軟件版本選擇:
Percona-XtraDB-Cluster-5.7.19-rel17-29.22.3.Linux.x86_64.ssl101
percona-xtrabackup-2.4.11-Linux-x86_64.libgcrypt11.tar.gz/percona-xtrabackup-2.4.12-Linux-x86_64.libgcrypt11.tar.gz

注意openssl版本,ssl100、ssl101、ssl102分別對應三類linux版本,所以下載ssl101

 

#node1、node2、node3
操作系統版本
[root@node1 ~]# cat /etc/redhat-release
CentOS Linux release 7.3.1611 (Core)
[root@node1 ~]# systemctl status firewalld.service
* firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
Active: inactive (dead)
Docs: man:firewalld(1)
[root@node1 ~]#
[root@node1 ~]# getenforce
Disabled

[root@node1 ~]#cat /etc/hosts
#for pxc test
10.10.10.13 node3
10.10.10.11 node1
10.10.10.12 node2

安裝依賴包:
yum install -y git scons gcc gcc-c++ openssl check cmake bison boost-devel asio-devel libaio-devel ncurses-devel readline-devel pam-devel socat

創建MySQL,basedir和datadir,編輯my.cnf
[root@node1 ~]#ls /opt/source
percona-xtrabackup-2.4.12-Linux-x86_64.libgcrypt11.tar.gz
Percona-XtraDB-Cluster-5.7.19-rel17-29.22.3.Linux.x86_64.ssl101.tar.gz
[root@node1 ~]#tar -zxf percona-xtrabackup-2.4.12-Linux-x86_64.libgcrypt11.tar.gz
[root@node1 ~]#tar -zxf Percona-XtraDB-Cluster-5.7.19-rel17-29.22.3.Linux.x86_64.ssl101.tar.gz
[root@node1 ~]#ln -s /opt/source/Percona-XtraDB-Cluster-5.7.14-rel8-26.17.1.Linux.x86_64.ssl100 /usr/local/pxc

ln -s /opt/source/xtrabackup-2.4.11/bin/xtrabackup /opt/source/Percona-XtraDB-Cluster-5.7.22-rel22-29.26.1.Linux.x86_64.ssl101/bin/xtrabackup


[root@node1 ~]#mkdir -p /data/mysql_33071/{data,logs,run,tmp}
[root@node1 ~]#groupadd -g 1000 mysql
[root@node1 ~]#useradd -r -g mysql -u 1000 -s /bin/false mysql
編輯my.cnf配置文件
[root@node1 ~]#vi /data/mysql_33071/my.cnf

[root@node1 ~]#chown -R mysql:mysql /data/mysql_33071
[root@node1 ~]#chown -R mysql:mysql /usr/local/pxc

node1的操作:
#node1:初始化實例和啓動實例方式
/usr/local/pxc/bin/mysqld --defaults-file=/data/mysql_33071/my.cnf --initialize --basedir=/usr/local/pxc --datadir=/data/mysql_33071/data --user=mysql
在錯誤日誌,記錄下root初始密碼!
啓動實例:
/usr/local/pxc/bin/mysqld_safe --defaults-file=/data/mysql_33071/my.cnf --ledir=/usr/local/pxc/bin --wsrep_new_cluster &
#當採用自定義路徑的my.cnf初始化及啓動實例的時候,需要首先指定defaults-file;而且mysqld採用自定義路徑時,需要指定ledir

[root@masterdb ~]#ps -ef |grep mysql
root 27690 1 0 9 ? 00:00:00 /bin/sh /usr/local/pxc/bin/mysqld_safe --defaults-file=/data/mysql_33071/my.cnf --ledir=/usr/local/pxc/bin --wsrep_new_cluster
mysql 28111 27690 0 9 ? 00:11:07 /usr/local/pxc/bin/mysqld --defaults-file=/data/mysql_33071/my.cnf --basedir=/usr/local/pxc --datadir=/data/mysql_33071/data
--plugin-dir=/usr/local/pxc/lib/mysql/plugin --user=mysql --wsrep-provider=/usr/local/pxc/lib/libgalera_smm.so --wsrep-new-cluster --log-error=/data/mysql_33071/logs/mysql_error.log --pid-file=/data/mysql_33071/logs/mysql.pid
--socket=/data/mysql_33071/run/mysql.sock --port=33071 --wsrep_start_position=4946b0f0-ad00-11e8-8524-f2562c72b43b:5
修改root密碼:
[root@node1 ~]#mysql -uroot -p -S /data/mysql_33071/run/mysql.sock
mysql> set password=password('root');
mysql> flush privileges;
創建sst user,並授予相應權限
mysql> CREATE USER 'sstuser'@'localhost' IDENTIFIED BY 'sstuser';
mysql> GRANT RELOAD, LOCK TABLES, PROCESS, REPLICATION CLIENT ON *.* TO 'sstuser'@'localhost';
mysql> FLUSH PRIVILEGES;

備份數據庫
[root@node1 ~]#innobackupex --user=root --password="root" --socket=/data/mysql_33071/run/mysql.sock /tmp/

node2、node3的操作:
###node2、node3:###

用node1的備份,在節點2、節點3進行恢復;啓動,加入複製集

 innobackupex --defaults-file=/etc/my.cnf --user=root --password=xxxxxx --apply-log /data/2019-01-12_22-45-44
 innobackupex --defaults-file=/etc/my.cnf --user=root --password=xxxxxx --copy-back /data/2019-01-12_22-45-44
 

/usr/local/pxc/bin/mysqld_safe --defaults-file=/data/mysql_33071/my.cnf --ledir=/usr/local/pxc/bin &
驗證:
node1檢查pxc狀態
mysql> show global status like 'wsrep_cluster_size';
+--------------------+-------+
| Variable_name | Value |
+--------------------+-------+
| wsrep_cluster_size | 3 |
+--------------------+-------+
1 row in set (0.01 sec)

show status like 'wsrep%';

mysql> show global status like 'wsrep_incoming_addresses';
+--------------------------+-----------------------------------------------------------+
| Variable_name | Value |
+--------------------------+-----------------------------------------------------------+
| wsrep_incoming_addresses | 10.10.10.12:33071,10.10.10.13:33071,10.10.10.11:33071 |
+--------------------------+-----------------------------------------------------------+
1 row in set (0.01 sec)

 node1:my.cnf

 node2:my.cnf

 node3:my.cnf

 

Percona XtraDB Cluster與MySQL Replication區別在於:
分佈式系統的CAP理論:
C— 一致性,所有節點的數據一致;
A— 可用性,一個或多個節點失效,不影響服務請求;
P— 分區容忍性,節點間的連接失效,仍然可以處理請求;
任何一個分佈式系統,需要滿足這三個中的兩個。

MySQL Replication: 可用性和分區容忍性;
Percona XtraDBCluster: 一致性和可用性。
因此MySQL Replication並不保證數據的一致性,而Percona XtraDB Cluster提供數據一致性

 閱讀:

https://www.cnblogs.com/kevingrace/p/5685371.html

分類: MySQL高可用

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