真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

在CentOS8下搭建PXC集群

PXC簡(jiǎn)介

PXC是Percona XtraDB Cluster的縮寫,是 Percona 公司出品的免費(fèi)MySQL集群產(chǎn)品。PXC的作用是通過mysql自帶的Galera集群技術(shù),將不同的mysql實(shí)例連接起來,實(shí)現(xiàn)多主集群。在PXC集群中每個(gè)mysql節(jié)點(diǎn)都是可讀可寫的,也就是主從概念中的主節(jié)點(diǎn),不存在只讀的節(jié)點(diǎn)。

專注于為中小企業(yè)提供成都網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計(jì)服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)果洛州免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了千余家企業(yè)的穩(wěn)健成長(zhǎng),幫助中小企業(yè)通過網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。

PXC實(shí)際上是基于Galera的面向OLTP的多主同步復(fù)制插件,PXC主要用于解決MySQL集群中數(shù)據(jù)同步強(qiáng)一性問題。PXC可以集群任何mysql的衍生版本,例如MariaDB和Percona Server。由于Percona Server的性能最接近于mysql企業(yè)版,性能相對(duì)于標(biāo)準(zhǔn)版的mysql有顯著的提升,并且對(duì)mysql基本兼容。所以在搭建PXC集群時(shí),通常建議基于Percona Server進(jìn)行搭建。

關(guān)于數(shù)據(jù)庫集群方案的選擇可以參考:

  • 淺談數(shù)據(jù)庫集群方案

PXC的特點(diǎn)

  • 同步復(fù)制,事務(wù)在所有集群節(jié)點(diǎn)要么全部提交完成,要么全部失敗
  • 多主復(fù)制,不存在主從角色的劃分,可以在任意一個(gè)節(jié)點(diǎn)進(jìn)行讀/寫操作
  • 數(shù)據(jù)同步的強(qiáng)一致性,所有節(jié)點(diǎn)的數(shù)據(jù)是實(shí)時(shí)一致的
  • PXC集群節(jié)點(diǎn)越多,數(shù)據(jù)同步的速度就越慢,所以PXC集群的規(guī)模不能太大
  • PXC集群數(shù)據(jù)同步的速度取決于配置最低的節(jié)點(diǎn),所以PXC集群中所有節(jié)點(diǎn)的硬件配置盡量保持一致
  • PXC集群只支持InnoDB引擎,所以只有InnoDB引擎的數(shù)據(jù)才會(huì)被同步

安裝PXC并組建集群

環(huán)境準(zhǔn)備

環(huán)境版本說明:

  • VMware Workstation Pro 15.5
  • Percona XtraDB Cluster 5.7
  • CentOS 8

MySQL有幾個(gè)常見的衍生版,Percona Server就是其一。這里選擇Percona Server是因?yàn)樗亲罱咏谄髽I(yè)版的MySQL。各衍生版的對(duì)比圖如下:
在CentOS8下搭建PXC集群

本文的PXC集群設(shè)計(jì)如圖:
在CentOS8下搭建PXC集群

  • Tips:實(shí)際上最小的PXC集群是兩個(gè)節(jié)點(diǎn)的,但課程中設(shè)計(jì)為三個(gè)節(jié)點(diǎn)。這是因?yàn)镻XC集群為了防止腦裂,在一半以上的節(jié)點(diǎn)因意外宕機(jī)無法訪問時(shí),PXC集群就會(huì)自動(dòng)停止運(yùn)行。所以如果設(shè)計(jì)為兩個(gè)節(jié)點(diǎn),其中一個(gè)節(jié)點(diǎn)掛掉了就滿足半數(shù)以上節(jié)點(diǎn)無法訪問,那么集群就會(huì)停止運(yùn)行,而另一個(gè)節(jié)點(diǎn)也就無法使用了。這樣的容災(zāi)性太差,所以這里設(shè)計(jì)為至少三個(gè)節(jié)點(diǎn),以提高PXC集群的可用性。

根據(jù)該圖,我們需要?jiǎng)?chuàng)建三個(gè)虛擬機(jī)來搭建一個(gè)三節(jié)點(diǎn)的PXC集群:
在CentOS8下搭建PXC集群

節(jié)點(diǎn)說明:

NodeHostIP
Node1 PXC-Node1 192.168.190.132
Node2 PXC-Node2 192.168.190.133
Node3 PXC-Node3 192.168.190.134

每個(gè)虛擬機(jī)的配置如下圖:
在CentOS8下搭建PXC集群

關(guān)于 PXC 集群是以犧牲性能來保證數(shù)據(jù)的強(qiáng)一致性問題。PXC 集群中的節(jié)點(diǎn)越多就意味著數(shù)據(jù)同步的時(shí)間就越長(zhǎng),那么應(yīng)該用幾臺(tái)數(shù)據(jù)庫服務(wù)器來做集群最合適,相對(duì)來說算是能達(dá)到一個(gè)性能上最優(yōu)的結(jié)果呢 ?

通常來說不超過15臺(tái)節(jié)點(diǎn)組成一個(gè)PXC集群,性能上很好,多了就不行。然后這個(gè)PXC集群作為一個(gè)分片,MyCat上多設(shè)置幾個(gè)分片,就能應(yīng)對(duì)數(shù)據(jù)切分和并發(fā)訪問了


系統(tǒng)準(zhǔn)備

有些 CentOS 版本默認(rèn)捆綁了mariadb-libs,在安裝PXC之前需要先將其卸載:

[root@PXC-Node1 ~]# yum -y remove mari*

PXC集群要使用四個(gè)端口:

端口描述
3306 MySQL服務(wù)端口
4444 請(qǐng)求全量同步(SST)端口
4567 數(shù)據(jù)庫節(jié)點(diǎn)之間的通信端口
4568 請(qǐng)求增量同步(IST)端口

所以如果系統(tǒng)啟用了防火墻則需要開放這些端口:

[root@PXC-Node1 ~]# firewall-cmd --zone=public --add-port=3306/tcp --permanent
[root@PXC-Node1 ~]# firewall-cmd --zone=public --add-port=4444/tcp --permanent
[root@PXC-Node1 ~]# firewall-cmd --zone=public --add-port=4567/tcp --permanent
[root@PXC-Node1 ~]# firewall-cmd --zone=public --add-port=4568/tcp --permanent
[root@PXC-Node1 ~]# firewall-cmd --reload

安裝PXC

先上官方文檔:

  • Installing Percona XtraDB Cluster

PXC有兩種較為簡(jiǎn)單的安裝方式,一是到官網(wǎng)下載rpm包到系統(tǒng)本地進(jìn)行安裝,二是使用官方提供的yum倉庫進(jìn)行在線安裝。本文演示的是本地安裝這種方式,首先打開如下網(wǎng)址:

  • https://www.percona.com/downloads/Percona-XtraDB-Cluster-LATEST/

選擇相應(yīng)的版本后,復(fù)制下載鏈接:
在CentOS8下搭建PXC集群

然后到CentOS上使用wget命令進(jìn)行下載,如下示例:

[root@PXC-Node1 ~]# cd /usr/local/src
[root@PXC-Node1 /usr/local/src]# wget https://www.percona.com/downloads/Percona-XtraDB-Cluster-LATEST/Percona-XtraDB-Cluster-5.7.28-31.41/binary/redhat/8/x86_64/Percona-XtraDB-Cluster-5.7.28-31.41-r514-el8-x86_64-bundle.tar

創(chuàng)建存放rpm文件的目錄,并將下載好的PXC安裝包解壓縮到新建的目錄中:

[root@PXC-Node1 /usr/local/src]# mkdir pxc-rpms
[root@PXC-Node1 /usr/local/src]# tar -xvf Percona-XtraDB-Cluster-5.7.28-31.41-r514-el8-x86_64-bundle.tar -C pxc-rpms
[root@PXC-Node1 /usr/local/src]# ls pxc-rpms
Percona-XtraDB-Cluster-57-5.7.28-31.41.1.el8.x86_64.rpm
Percona-XtraDB-Cluster-57-debuginfo-5.7.28-31.41.1.el8.x86_64.rpm
Percona-XtraDB-Cluster-57-debugsource-5.7.28-31.41.1.el8.x86_64.rpm
Percona-XtraDB-Cluster-client-57-5.7.28-31.41.1.el8.x86_64.rpm
Percona-XtraDB-Cluster-client-57-debuginfo-5.7.28-31.41.1.el8.x86_64.rpm
Percona-XtraDB-Cluster-devel-57-5.7.28-31.41.1.el8.x86_64.rpm
Percona-XtraDB-Cluster-full-57-5.7.28-31.41.1.el8.x86_64.rpm
Percona-XtraDB-Cluster-garbd-57-5.7.28-31.41.1.el8.x86_64.rpm
Percona-XtraDB-Cluster-garbd-57-debuginfo-5.7.28-31.41.1.el8.x86_64.rpm
Percona-XtraDB-Cluster-server-57-5.7.28-31.41.1.el8.x86_64.rpm
Percona-XtraDB-Cluster-server-57-debuginfo-5.7.28-31.41.1.el8.x86_64.rpm
Percona-XtraDB-Cluster-shared-57-5.7.28-31.41.1.el8.x86_64.rpm
Percona-XtraDB-Cluster-shared-57-debuginfo-5.7.28-31.41.1.el8.x86_64.rpm
Percona-XtraDB-Cluster-test-57-5.7.28-31.41.1.el8.x86_64.rpm
Percona-XtraDB-Cluster-test-57-debuginfo-5.7.28-31.41.1.el8.x86_64.rpm

另外,PXC的安裝需要依賴于qpresspercona-xtrabackup-24,可以在percona提供的倉庫中獲取到相應(yīng)的rpm包下載鏈接。然后進(jìn)入pxc-rpms目錄下載這兩個(gè)組件的rpm包,如下:

[root@PXC-Node1 /usr/local/src]# cd pxc-rpms
[root@PXC-Node1 /usr/local/src/pxc-rpms]# wget https://repo.percona.com/release/8/RPMS/x86_64/qpress-11-1.el8.x86_64.rpm
[root@PXC-Node1 /usr/local/src/pxc-rpms]# wget https://repo.percona.com/release/8/RPMS/x86_64/percona-xtrabackup-24-2.4.18-1.el8.x86_64.rpm

完成以上步驟后,現(xiàn)在就可以通過yum命令以本地形式安裝PXC了:

[root@PXC-Node1 /usr/local/src/pxc-rpms]# yum localinstall -y *.rpm

成功安裝后,系統(tǒng)中就會(huì)有mysql的相關(guān)命令。如下,能正常查看到版本信息代表已安裝成功:

[root@PXC-Node1 /usr/local/src/pxc-rpms]# mysql --version
mysql  Ver 14.14 Distrib 5.7.28-31, for Linux (x86_64) using  7.0
[root@PXC-Node1 /usr/local/src/pxc-rpms]#

配置PXC集群

安裝后需要進(jìn)行一些配置才能啟動(dòng)集群,PXC的配置文件默認(rèn)位于/etc/percona-xtradb-cluster.conf.d/目錄下,/etc/my.cnf文件只是對(duì)其引用:

[root@PXC-Node1 ~]# cd /etc/percona-xtradb-cluster.conf.d/
[root@PXC-Node1 /etc/percona-xtradb-cluster.conf.d]# ll
總用量 12
-rw-r--r-- 1 root root  381 12月 13 17:19 mysqld.cnf  # mysql相關(guān)配置
-rw-r--r-- 1 root root  440 12月 13 17:19 mysqld_safe.cnf  # mysqld_safe相關(guān)配置
-rw-r--r-- 1 root root 1066 12月 13 17:19 wsrep.cnf  # PXC集群的相關(guān)配置

mysqld.cnf文件中添加一些字符集等基本配置:

[root@PXC-Node1 /etc/percona-xtradb-cluster.conf.d]# vim mysqld.cnf
[mysqld]
...

# 設(shè)置字符集
character_set_server=utf8
# 設(shè)置監(jiān)聽的ip
bind-address=0.0.0.0
# 跳過DNS解析
skip-name-resolve

然后是配置PXC集群,修改wsrep.cnf文件中的如下配置項(xiàng):

[root@PXC-Node1 /etc/percona-xtradb-cluster.conf.d]# vim wsrep.cnf
[mysqld]
# PXC集群中MySQL實(shí)例的唯一ID,不能重復(fù),且必須是數(shù)字
server-id=1
# Galera庫文件的路徑
wsrep_provider=/usr/lib64/galera3/libgalera_smm.so
# PXC集群的名稱
wsrep_cluster_name=pxc-cluster
# 集群中所有節(jié)點(diǎn)的ip
wsrep_cluster_address=gcomm://192.168.190.132,192.168.190.133,192.168.190.134
# 當(dāng)前節(jié)點(diǎn)的名稱
wsrep_node_name=pxc-node-01
# 當(dāng)前節(jié)點(diǎn)的IP
wsrep_node_address=192.168.190.132
# 同步方法(mysqldump、 rsync、 xtrabackup)
wsrep_sst_method=xtrabackup-v2
# 同步時(shí)使用的帳戶密碼
wsrep_sst_auth=admin:Abc_123456
# 采用嚴(yán)格的同步模式
pxc_strict_mode=ENFORCING
# 基于ROW復(fù)制(安全可靠)
binlog_format=ROW
# 默認(rèn)引擎
default_storage_engine=InnoDB
# 主鍵自增長(zhǎng)不鎖表
innodb_autoinc_lock_mode=2

啟動(dòng)PXC集群

到此為止,我們?cè)?code>PXC-Node1這臺(tái)虛擬機(jī)上完成了PXC的安裝及配置。然后到其他兩個(gè)節(jié)點(diǎn)上完成同樣的步驟即可,這里就不再重復(fù)了。

當(dāng)所有的節(jié)點(diǎn)都準(zhǔn)備完成后,使用如下命令啟動(dòng)PXC集群。注意這條的命令是用于啟動(dòng)首節(jié)點(diǎn)的,初次啟動(dòng)集群時(shí)首節(jié)點(diǎn)可以是這三個(gè)節(jié)點(diǎn)中的任意一個(gè),這里我采用PXC-Node1作為首節(jié)點(diǎn)。故在該虛擬機(jī)下執(zhí)行這條命令:

[root@PXC-Node1 ~]# systemctl start mysql@bootstrap.service

而其他節(jié)點(diǎn)只需要正常啟動(dòng)MySQL服務(wù)即可,啟動(dòng)之后會(huì)根據(jù)wsrep.cnf文件中的配置自動(dòng)加入集群中:

[root@PXC-Node2 ~]# systemctl start mysqld

禁用Percona Server的開機(jī)自啟動(dòng):

[root@localhost ~]# systemctl disable mysqld
Removed /etc/systemd/system/multi-user.target.wants/mysqld.service.
Removed /etc/systemd/system/mysql.service.
[root@localhost ~]# 
  • Tips:之所以要禁用開機(jī)自啟,是因?yàn)樵赑XC集群中,當(dāng)一個(gè)節(jié)點(diǎn)宕機(jī)重啟后,它會(huì)隨機(jī)與一個(gè)PXC節(jié)點(diǎn)進(jìn)行數(shù)據(jù)同步。如果該節(jié)點(diǎn)宕機(jī)時(shí)間過長(zhǎng),那么需要同步的數(shù)據(jù)量就會(huì)比較大。當(dāng)發(fā)生大量數(shù)據(jù)同步時(shí),PXC集群會(huì)限制其他的寫入操作,直到數(shù)據(jù)全部同步成功。所以長(zhǎng)時(shí)間宕機(jī)之后,正確的做法是不要馬上啟動(dòng)節(jié)點(diǎn),而是先從其他節(jié)點(diǎn)拷貝數(shù)據(jù)文件到該節(jié)點(diǎn)中,然后再進(jìn)行啟動(dòng)。這樣需要同步的數(shù)據(jù)就會(huì)少很多,不會(huì)引起長(zhǎng)時(shí)間的限速。

創(chuàng)建數(shù)據(jù)庫賬戶

接著修改root賬戶的默認(rèn)密碼。我們可以在mysql的日志文件中找到初始的默認(rèn)密碼。下圖紅框標(biāo)注的就是默認(rèn)密碼:
在CentOS8下搭建PXC集群

  • Tips:默認(rèn)密碼只有在首次啟動(dòng)MySQL服務(wù)后才會(huì)生成

復(fù)制默認(rèn)密碼,然后使用mysql_secure_installation命令修改root賬戶的密碼:

[root@localhost ~]# mysql_secure_installation 

為了安全起見,root賬戶一般是不允許遠(yuǎn)程登錄的,所以我們需要單獨(dú)創(chuàng)建一個(gè)用于遠(yuǎn)程訪問的數(shù)據(jù)庫賬戶。這個(gè)賬戶也是用于PXC集群同步數(shù)據(jù)的賬戶,與wsrep.cnf文件中的wsrep_sst_auth配置項(xiàng)所對(duì)應(yīng):

[root@localhost ~]# mysql -uroot -p
mysql> create user 'admin'@'%' identified by 'Abc_123456';
mysql> grant all privileges on *.* to 'admin'@'%';
mysql> flush privileges;

創(chuàng)建完賬戶后,使用客戶端工具進(jìn)行遠(yuǎn)程連接測(cè)試看看是否能正常連接成功:
在CentOS8下搭建PXC集群

到此為止,我們就算是完成PXC集群的搭建了?,F(xiàn)在應(yīng)該是已經(jīng)可以看到PXC集群的同步效果的,因?yàn)樯厦嫘薷膔oot密碼以及新建賬戶的操作都會(huì)被同步到其他兩個(gè)節(jié)點(diǎn)上。也就是說,此時(shí)其他兩個(gè)節(jié)點(diǎn)的root賬戶密碼已經(jīng)是修改后的密碼,并且也會(huì)有一個(gè)admin賬戶。關(guān)于這一點(diǎn)可以自行驗(yàn)證一下。

除此之外,我們也可以使用如下語句來確認(rèn)集群的狀態(tài)信息:

show status like 'wsrep_cluster%';

執(zhí)行結(jié)果:
在CentOS8下搭建PXC集群

變量說明:

  • wsrep_cluster_weight:該節(jié)點(diǎn)在集群中的權(quán)重值
  • wsrep_cluster_conf_id:集群節(jié)點(diǎn)關(guān)系改變的次數(shù)(每次增加/刪除都會(huì)+1)
  • wsrep_cluster_size:集群中的節(jié)點(diǎn)個(gè)數(shù)
  • wsrep_cluster_state_uuid:集群當(dāng)前狀態(tài)的UUID,這是集群當(dāng)前狀態(tài)及其所經(jīng)歷的更改序列的唯一標(biāo)識(shí)符。也用于比較兩個(gè)或多個(gè)節(jié)點(diǎn)是否處于同一集群,若兩個(gè)節(jié)點(diǎn)的該變量值一致就代表處于一個(gè)集群,如果該值不一致則表示不處于同一集群
  • wsrep_cluster_status:集群的目前狀態(tài)

驗(yàn)證集群的數(shù)據(jù)同步

1、驗(yàn)證創(chuàng)建數(shù)據(jù)庫是否能同步

在節(jié)點(diǎn)1中創(chuàng)建一個(gè)test庫:
在CentOS8下搭建PXC集群

創(chuàng)建完成后,點(diǎn)擊其他節(jié)點(diǎn)也應(yīng)能看到test這個(gè)庫:
在CentOS8下搭建PXC集群

2、驗(yàn)證創(chuàng)建數(shù)據(jù)表是否能同步

在節(jié)點(diǎn)1中的test庫里創(chuàng)建一張student表:
在CentOS8下搭建PXC集群

創(chuàng)建完成后,在其他節(jié)點(diǎn)也應(yīng)能看到這張student表:
在CentOS8下搭建PXC集群

3、驗(yàn)證表數(shù)據(jù)是否能同步

往節(jié)點(diǎn)1中的student表里插入一條數(shù)據(jù):
在CentOS8下搭建PXC集群

此時(shí)其他節(jié)點(diǎn)中也應(yīng)能看到這條數(shù)據(jù):
在CentOS8下搭建PXC集群


集群的狀態(tài)參數(shù)說明

集群的狀態(tài)參數(shù)可以通過SQL語句進(jìn)行查詢的,如下:

show status like '%wsrep%';

由于查詢出來的狀態(tài)參數(shù)變量非常的多,這里針對(duì)一些常用的進(jìn)行說明。PXC集群參數(shù)可以分為以下幾類:

  • 隊(duì)列相關(guān)
    • wsrep_local_send_queue:發(fā)送隊(duì)列的長(zhǎng)度
    • wsrep_local_send_queue_max:發(fā)送隊(duì)列的最大長(zhǎng)度
    • wsrep_local_send_queue_min:發(fā)送隊(duì)列的最小長(zhǎng)度
    • wsrep_local_send_queue_avg:發(fā)送隊(duì)列的平均長(zhǎng)度
    • wsrep_local_recv_queue:接收隊(duì)列的長(zhǎng)度
    • wsrep_local_recv_queue_max:接收隊(duì)列的最大長(zhǎng)度
    • wsrep_local_recv_queue_min:接收隊(duì)列的最小長(zhǎng)度
    • wsrep_local_recv_queue_avg:接收隊(duì)列的平均長(zhǎng)度
  • 復(fù)制相關(guān)
    • wsrep_replicated:同步數(shù)據(jù)到其他節(jié)點(diǎn)的次數(shù)
    • wsrep_replicated_bytes:同步到其他節(jié)點(diǎn)的數(shù)據(jù)總量,單位字節(jié)
    • wsrep_received:接收到其他節(jié)點(diǎn)同步請(qǐng)求的次數(shù)
    • wsrep_received_bytes:接收到其他節(jié)點(diǎn)的同步數(shù)據(jù)總量,單位字節(jié)
    • wsrep_last_applied:同步應(yīng)用次數(shù)
    • wsrep_last_committed:事務(wù)提交次數(shù)
  • 流控相關(guān)
    • wsrep_flow_control_paused_ns:流控暫停狀態(tài)下花費(fèi)的總時(shí)間(納秒)
    • wsrep_flow_control_paused:流控暫停時(shí)間的占比(0 ~ 1)
    • wsrep_flow_control_sent:發(fā)送的流控暫停事件的數(shù)量,即當(dāng)前節(jié)點(diǎn)觸發(fā)流控的次數(shù)
    • wsrep_flow_control_recv:接收的流控暫停事件的數(shù)量
    • wsrep_flow_control_interval:流控的下限和上限。上限是隊(duì)列中允許的最大請(qǐng)求數(shù)。如果隊(duì)列達(dá)到上限,則拒絕新的請(qǐng)求,即觸發(fā)流控。當(dāng)處理現(xiàn)有請(qǐng)求時(shí),隊(duì)列會(huì)減少,一旦到達(dá)下限,將再次允許新的請(qǐng)求,即解除流控
    • wsrep_flow_control_status:流控的開關(guān)狀態(tài)(開啟:ON,關(guān)閉:OFF)
  • 事務(wù)相關(guān)
    • wsrep_cert_deps_distance:事務(wù)執(zhí)行的并發(fā)數(shù)
    • wsrep_apply_oooe:接收隊(duì)列中事務(wù)的占比
    • wsrep_apply_oool:接收隊(duì)列中事務(wù)亂序執(zhí)行的頻率
    • wsrep_apply_window:接收隊(duì)列中事務(wù)的平均數(shù)量
    • wsrep_commit_oooe:發(fā)送隊(duì)列中事務(wù)的占比
    • wsrep_commit_oool:無任何意義(不存在本地亂序提交)
    • wsrep_commit_window:發(fā)送隊(duì)列中事務(wù)的平均數(shù)量
  • 狀態(tài)相關(guān)
    • wsrep_local_state_comment:節(jié)點(diǎn)的當(dāng)前狀態(tài)
    • wsrep_cluster_status:集群的當(dāng)前狀態(tài)
    • wsrep_connected:節(jié)點(diǎn)是否連接到集群
    • wsrep_ready集群是否正常工作
    • wsrep_cluster_size:集群中的節(jié)點(diǎn)個(gè)數(shù)
    • wsrep_desync_count:延時(shí)節(jié)點(diǎn)的數(shù)量
    • wsrep_incoming_addresses:集群中所有節(jié)點(diǎn)的IP地址

PXC節(jié)點(diǎn)狀態(tài)圖:
在CentOS8下搭建PXC集群

  • OPEN:節(jié)點(diǎn)啟動(dòng)成功
  • PRIMARY:節(jié)點(diǎn)成功加入集群
  • JOINER:與其他節(jié)點(diǎn)同步數(shù)據(jù)
  • JOINED:與其他節(jié)點(diǎn)同步數(shù)據(jù)成功
  • SYNCED:與集群同步完成,可以對(duì)外提供服務(wù)
  • DONER:接收其他節(jié)點(diǎn)的全量數(shù)據(jù)同步,處于不可用

PXC集群狀態(tài)圖:
在CentOS8下搭建PXC集群

  • PRIMARY:正常狀態(tài)
  • NON_PRIMARY:集群發(fā)生腦裂
  • DISCONNECTED:集群處于無法連接狀態(tài)

官方文檔:

  • Index of wsrep status variables
  • Galera Status Variables

關(guān)于PXC節(jié)點(diǎn)的上線與下線

1、PXC節(jié)點(diǎn)的安全下線姿勢(shì)

節(jié)點(diǎn)是怎么啟動(dòng)的,就使用對(duì)應(yīng)的命令去關(guān)閉即可

  • 首節(jié)點(diǎn)示例:
    • 啟動(dòng)首節(jié)點(diǎn)用的命令是:systemctl start mysql@bootstrap.service
    • 那么對(duì)應(yīng)的關(guān)閉命令就是:systemctl stop mysql@bootstrap.service
  • 其他節(jié)點(diǎn)示例:
    • 啟動(dòng)其他節(jié)點(diǎn)的命令是:systemctl start mysqld
    • 那么對(duì)應(yīng)的關(guān)閉命令就是:systemctl stop mysqld

2、如果所有PXC節(jié)點(diǎn)都是安全下線的,那么在啟動(dòng)集群時(shí),就需要先啟動(dòng)最后下線的節(jié)點(diǎn)

初次啟動(dòng)集群時(shí)可以將任意一個(gè)節(jié)點(diǎn)作為首節(jié)點(diǎn)啟動(dòng)。但如果是一個(gè)已經(jīng)啟動(dòng)過的集群,那么當(dāng)該集群下線再上線時(shí),就需要將最后下線的節(jié)點(diǎn)作為首節(jié)點(diǎn)來啟動(dòng)。其實(shí)關(guān)于某個(gè)節(jié)點(diǎn)是否能作為首節(jié)點(diǎn)啟動(dòng),可以通過查看 grastate.dat 文件得知:

[root@PXC-Node1 ~]# cat /var/lib/mysql/grastate.dat 
# GALERA saved state
version: 2.1
uuid:    2c915504-39ac-11ea-bba7-a294386c4285
seqno:   -1
safe_to_bootstrap: 0
[root@PXC-Node1 ~]#
  • 說明:safe_to_bootstrap的值為0時(shí)表示不能作為首節(jié)點(diǎn)啟動(dòng),為1時(shí)表示可以作為首節(jié)點(diǎn)啟動(dòng)。PXC集群中最后一個(gè)下線的節(jié)點(diǎn)就會(huì)將safe_to_bootstrap的值改為1,下次啟動(dòng)集群時(shí)就需要將該節(jié)點(diǎn)作為首節(jié)點(diǎn)啟動(dòng)。這是因?yàn)樽詈笠粋€(gè)下線的節(jié)點(diǎn)數(shù)據(jù)是最新的。將其作為首節(jié)點(diǎn)啟動(dòng),然后讓其他節(jié)點(diǎn)與該節(jié)點(diǎn)進(jìn)行數(shù)據(jù)同步,這樣才能保證集群中的數(shù)據(jù)是最新的。否則,可能會(huì)導(dǎo)致集群中的數(shù)據(jù)是某個(gè)時(shí)間點(diǎn)之前的舊數(shù)據(jù)。

3、如果PXC節(jié)點(diǎn)都是意外退出的,而且不是在同一時(shí)間退出的情況

在本文開頭提到過,PXC集群中一半以上的節(jié)點(diǎn)因意外宕機(jī)而無法訪問時(shí),PXC集群就會(huì)停止運(yùn)行。但如果這些PXC節(jié)點(diǎn)是以安全下線的方式退出,則不會(huì)引發(fā)集群自動(dòng)停止運(yùn)行的問題,只會(huì)縮小集群的規(guī)模。只有意外下線一半以上節(jié)點(diǎn)時(shí)集群才會(huì)自動(dòng)停止,意外下線的情況包括:

  • 宕機(jī)、掛起、關(guān)機(jī)、重啟、斷電、斷網(wǎng)等等,反正就是沒有使用相應(yīng)的停止命令安全下線節(jié)點(diǎn)都屬于意外下線

只要PXC集群中的節(jié)點(diǎn)不是同時(shí)意外退出的,那么當(dāng)集群還剩一個(gè)節(jié)點(diǎn)時(shí),該節(jié)點(diǎn)就會(huì)自動(dòng)將grastate.dat文件中的safe_to_bootstrap值改為1。所以在重啟集群時(shí),也是先啟動(dòng)最后一個(gè)退出的節(jié)點(diǎn)。


4、如果PXC節(jié)點(diǎn)都是同時(shí)意外退出的,則需要修改grastate.dat文件

當(dāng)集群中所有節(jié)點(diǎn)都是在同一時(shí)間因意外情況而退出,那么此時(shí)所有節(jié)點(diǎn)的safe_to_bootstrap都為0,因?yàn)闆]有一個(gè)節(jié)點(diǎn)來得及去修改safe_to_bootstrap的值。當(dāng)所有節(jié)點(diǎn)的safe_to_bootstrap均為0時(shí),PXC集群是無法啟動(dòng)的。

在這種情況下我們就只能手動(dòng)選擇一個(gè)節(jié)點(diǎn),將safe_to_bootstrap修改為1,然后將該節(jié)點(diǎn)作為首節(jié)點(diǎn)進(jìn)行啟動(dòng):

[root@PXC-Node1 ~]# vim /var/lib/mysql/grastate.dat 
...
safe_to_bootstrap: 1
[root@PXC-Node1 ~]# systemctl start mysql@bootstrap.service

接著再依次啟動(dòng)其他節(jié)點(diǎn)即可:

[root@PXC-Node2 ~]# systemctl start mysqld

5、如果集群中還有可運(yùn)行的節(jié)點(diǎn),那么其他下線的節(jié)點(diǎn)只需要按普通節(jié)點(diǎn)上線即可

[root@PXC-Node2 ~]# systemctl start mysqld

網(wǎng)站欄目:在CentOS8下搭建PXC集群
瀏覽地址:http://weahome.cn/article/pgeoso.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部