PXC是Percona XtraDB Cluster的縮寫,是 Percona 公司出品的免費MySQL集群產品。PXC的作用是通過mysql自帶的Galera集群技術,將不同的mysql實例連接起來,實現多主集群。在PXC集群中每個mysql節(jié)點都是可讀可寫的,也就是主從概念中的主節(jié)點,不存在只讀的節(jié)點。
專注于為中小企業(yè)提供成都網站建設、成都網站設計服務,電腦端+手機端+微信端的三站合一,更高效的管理,為中小企業(yè)果洛州免費做網站提供優(yōu)質的服務。我們立足成都,凝聚了一批互聯網行業(yè)人才,有力地推動了千余家企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網站建設實現規(guī)模擴充和轉變。
PXC實際上是基于Galera的面向OLTP的多主同步復制插件,PXC主要用于解決MySQL集群中數據同步強一性問題。PXC可以集群任何mysql的衍生版本,例如MariaDB和Percona Server。由于Percona Server的性能最接近于mysql企業(yè)版,性能相對于標準版的mysql有顯著的提升,并且對mysql基本兼容。所以在搭建PXC集群時,通常建議基于Percona Server進行搭建。
關于數據庫集群方案的選擇可以參考:
環(huán)境版本說明:
MySQL有幾個常見的衍生版,Percona Server就是其一。這里選擇Percona Server是因為它是最接近于企業(yè)版的MySQL。各衍生版的對比圖如下:
本文的PXC集群設計如圖:
根據該圖,我們需要創(chuàng)建三個虛擬機來搭建一個三節(jié)點的PXC集群:
節(jié)點說明:
Node | Host | IP |
---|---|---|
Node1 | PXC-Node1 | 192.168.190.132 |
Node2 | PXC-Node2 | 192.168.190.133 |
Node3 | PXC-Node3 | 192.168.190.134 |
每個虛擬機的配置如下圖:
關于 PXC 集群是以犧牲性能來保證數據的強一致性問題。PXC 集群中的節(jié)點越多就意味著數據同步的時間就越長,那么應該用幾臺數據庫服務器來做集群最合適,相對來說算是能達到一個性能上最優(yōu)的結果呢 ?
通常來說不超過15臺節(jié)點組成一個PXC集群,性能上很好,多了就不行。然后這個PXC集群作為一個分片,MyCat上多設置幾個分片,就能應對數據切分和并發(fā)訪問了
有些 CentOS 版本默認捆綁了mariadb-libs
,在安裝PXC之前需要先將其卸載:
[root@PXC-Node1 ~]# yum -y remove mari*
PXC集群要使用四個端口:
端口 | 描述 |
---|---|
3306 | MySQL服務端口 |
4444 | 請求全量同步(SST)端口 |
4567 | 數據庫節(jié)點之間的通信端口 |
4568 | 請求增量同步(IST)端口 |
所以如果系統啟用了防火墻則需要開放這些端口:
[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有兩種較為簡單的安裝方式,一是到官網下載rpm
包到系統本地進行安裝,二是使用官方提供的yum
倉庫進行在線安裝。本文演示的是本地安裝這種方式,首先打開如下網址:
選擇相應的版本后,復制下載鏈接:
然后到CentOS上使用wget
命令進行下載,如下示例:
[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的安裝需要依賴于qpress
和percona-xtrabackup-24
,可以在percona提供的倉庫中獲取到相應的rpm
包下載鏈接。然后進入pxc-rpms
目錄下載這兩個組件的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
完成以上步驟后,現在就可以通過yum
命令以本地形式安裝PXC了:
[root@PXC-Node1 /usr/local/src/pxc-rpms]# yum localinstall -y *.rpm
成功安裝后,系統中就會有mysql
的相關命令。如下,能正常查看到版本信息代表已安裝成功:
[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的配置文件默認位于/etc/percona-xtradb-cluster.conf.d/
目錄下,/etc/my.cnf
文件只是對其引用:
[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相關配置
-rw-r--r-- 1 root root 440 12月 13 17:19 mysqld_safe.cnf # mysqld_safe相關配置
-rw-r--r-- 1 root root 1066 12月 13 17:19 wsrep.cnf # PXC集群的相關配置
在mysqld.cnf
文件中添加一些字符集等基本配置:
[root@PXC-Node1 /etc/percona-xtradb-cluster.conf.d]# vim mysqld.cnf
[mysqld]
...
# 設置字符集
character_set_server=utf8
# 設置監(jiān)聽的ip
bind-address=0.0.0.0
# 跳過DNS解析
skip-name-resolve
然后是配置PXC集群,修改wsrep.cnf
文件中的如下配置項:
[root@PXC-Node1 /etc/percona-xtradb-cluster.conf.d]# vim wsrep.cnf
[mysqld]
# PXC集群中MySQL實例的唯一ID,不能重復,且必須是數字
server-id=1
# Galera庫文件的路徑
wsrep_provider=/usr/lib64/galera3/libgalera_smm.so
# PXC集群的名稱
wsrep_cluster_name=pxc-cluster
# 集群中所有節(jié)點的ip
wsrep_cluster_address=gcomm://192.168.190.132,192.168.190.133,192.168.190.134
# 當前節(jié)點的名稱
wsrep_node_name=pxc-node-01
# 當前節(jié)點的IP
wsrep_node_address=192.168.190.132
# 同步方法(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
到此為止,我們在PXC-Node1
這臺虛擬機上完成了PXC的安裝及配置。然后到其他兩個節(jié)點上完成同樣的步驟即可,這里就不再重復了。
當所有的節(jié)點都準備完成后,使用如下命令啟動PXC集群。注意這條的命令是用于啟動首節(jié)點的,初次啟動集群時首節(jié)點可以是這三個節(jié)點中的任意一個,這里我采用PXC-Node1
作為首節(jié)點。故在該虛擬機下執(zhí)行這條命令:
[root@PXC-Node1 ~]# systemctl start mysql@bootstrap.service
而其他節(jié)點只需要正常啟動MySQL服務即可,啟動之后會根據wsrep.cnf
文件中的配置自動加入集群中:
[root@PXC-Node2 ~]# systemctl start mysqld
禁用Percona Server的開機自啟動:
[root@localhost ~]# systemctl disable mysqld
Removed /etc/systemd/system/multi-user.target.wants/mysqld.service.
Removed /etc/systemd/system/mysql.service.
[root@localhost ~]#
接著修改root賬戶的默認密碼。我們可以在mysql的日志文件中找到初始的默認密碼。下圖紅框標注的就是默認密碼:
復制默認密碼,然后使用mysql_secure_installation
命令修改root賬戶的密碼:
[root@localhost ~]# mysql_secure_installation
為了安全起見,root賬戶一般是不允許遠程登錄的,所以我們需要單獨創(chuàng)建一個用于遠程訪問的數據庫賬戶。這個賬戶也是用于PXC集群同步數據的賬戶,與wsrep.cnf
文件中的wsrep_sst_auth
配置項所對應:
[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)建完賬戶后,使用客戶端工具進行遠程連接測試看看是否能正常連接成功:
到此為止,我們就算是完成PXC集群的搭建了?,F在應該是已經可以看到PXC集群的同步效果的,因為上面修改root密碼以及新建賬戶的操作都會被同步到其他兩個節(jié)點上。也就是說,此時其他兩個節(jié)點的root賬戶密碼已經是修改后的密碼,并且也會有一個admin賬戶。關于這一點可以自行驗證一下。
除此之外,我們也可以使用如下語句來確認集群的狀態(tài)信息:
show status like 'wsrep_cluster%';
執(zhí)行結果:
變量說明:
wsrep_cluster_weight
:該節(jié)點在集群中的權重值wsrep_cluster_conf_id
:集群節(jié)點關系改變的次數(每次增加/刪除都會+1)wsrep_cluster_size
:集群中的節(jié)點個數wsrep_cluster_state_uuid
:集群當前狀態(tài)的UUID,這是集群當前狀態(tài)及其所經歷的更改序列的唯一標識符。也用于比較兩個或多個節(jié)點是否處于同一集群,若兩個節(jié)點的該變量值一致就代表處于一個集群,如果該值不一致則表示不處于同一集群wsrep_cluster_status
:集群的目前狀態(tài)1、驗證創(chuàng)建數據庫是否能同步
在節(jié)點1中創(chuàng)建一個test
庫:
創(chuàng)建完成后,點擊其他節(jié)點也應能看到test
這個庫:
2、驗證創(chuàng)建數據表是否能同步
在節(jié)點1中的test
庫里創(chuàng)建一張student
表:
創(chuàng)建完成后,在其他節(jié)點也應能看到這張student
表:
3、驗證表數據是否能同步
往節(jié)點1中的student
表里插入一條數據:
此時其他節(jié)點中也應能看到這條數據:
集群的狀態(tài)參數可以通過SQL語句進行查詢的,如下:
show status like '%wsrep%';
由于查詢出來的狀態(tài)參數變量非常的多,這里針對一些常用的進行說明。PXC集群參數可以分為以下幾類:
wsrep_local_send_queue
:發(fā)送隊列的長度wsrep_local_send_queue_max
:發(fā)送隊列的最大長度wsrep_local_send_queue_min
:發(fā)送隊列的最小長度wsrep_local_send_queue_avg
:發(fā)送隊列的平均長度wsrep_local_recv_queue
:接收隊列的長度wsrep_local_recv_queue_max
:接收隊列的最大長度wsrep_local_recv_queue_min
:接收隊列的最小長度wsrep_local_recv_queue_avg
:接收隊列的平均長度wsrep_replicated
:同步數據到其他節(jié)點的次數wsrep_replicated_bytes
:同步到其他節(jié)點的數據總量,單位字節(jié)wsrep_received
:接收到其他節(jié)點同步請求的次數wsrep_received_bytes
:接收到其他節(jié)點的同步數據總量,單位字節(jié)wsrep_last_applied
:同步應用次數wsrep_last_committed
:事務提交次數wsrep_flow_control_paused_ns
:流控暫停狀態(tài)下花費的總時間(納秒)wsrep_flow_control_paused
:流控暫停時間的占比(0 ~ 1)wsrep_flow_control_sent
:發(fā)送的流控暫停事件的數量,即當前節(jié)點觸發(fā)流控的次數wsrep_flow_control_recv
:接收的流控暫停事件的數量wsrep_flow_control_interval
:流控的下限和上限。上限是隊列中允許的最大請求數。如果隊列達到上限,則拒絕新的請求,即觸發(fā)流控。當處理現有請求時,隊列會減少,一旦到達下限,將再次允許新的請求,即解除流控wsrep_flow_control_status
:流控的開關狀態(tài)(開啟:ON,關閉:OFF)wsrep_cert_deps_distance
:事務執(zhí)行的并發(fā)數wsrep_apply_oooe
:接收隊列中事務的占比wsrep_apply_oool
:接收隊列中事務亂序執(zhí)行的頻率wsrep_apply_window
:接收隊列中事務的平均數量wsrep_commit_oooe
:發(fā)送隊列中事務的占比wsrep_commit_oool
:無任何意義(不存在本地亂序提交)wsrep_commit_window
:發(fā)送隊列中事務的平均數量wsrep_local_state_comment
:節(jié)點的當前狀態(tài)wsrep_cluster_status
:集群的當前狀態(tài)wsrep_connected
:節(jié)點是否連接到集群wsrep_ready
集群是否正常工作wsrep_cluster_size
:集群中的節(jié)點個數wsrep_desync_count
:延時節(jié)點的數量wsrep_incoming_addresses
:集群中所有節(jié)點的IP地址PXC節(jié)點狀態(tài)圖:
OPEN
:節(jié)點啟動成功PRIMARY
:節(jié)點成功加入集群JOINER
:與其他節(jié)點同步數據JOINED
:與其他節(jié)點同步數據成功SYNCED
:與集群同步完成,可以對外提供服務DONER
:接收其他節(jié)點的全量數據同步,處于不可用PXC集群狀態(tài)圖:
PRIMARY
:正常狀態(tài)NON_PRIMARY
:集群發(fā)生腦裂DISCONNECTED
:集群處于無法連接狀態(tài)官方文檔:
1、PXC節(jié)點的安全下線姿勢
節(jié)點是怎么啟動的,就使用對應的命令去關閉即可
systemctl start mysql@bootstrap.service
systemctl stop mysql@bootstrap.service
systemctl start mysqld
systemctl stop mysqld
2、如果所有PXC節(jié)點都是安全下線的,那么在啟動集群時,就需要先啟動最后下線的節(jié)點
初次啟動集群時可以將任意一個節(jié)點作為首節(jié)點啟動。但如果是一個已經啟動過的集群,那么當該集群下線再上線時,就需要將最后下線的節(jié)點作為首節(jié)點來啟動。其實關于某個節(jié)點是否能作為首節(jié)點啟動,可以通過查看 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
時表示不能作為首節(jié)點啟動,為1
時表示可以作為首節(jié)點啟動。PXC集群中最后一個下線的節(jié)點就會將safe_to_bootstrap
的值改為1
,下次啟動集群時就需要將該節(jié)點作為首節(jié)點啟動。這是因為最后一個下線的節(jié)點數據是最新的。將其作為首節(jié)點啟動,然后讓其他節(jié)點與該節(jié)點進行數據同步,這樣才能保證集群中的數據是最新的。否則,可能會導致集群中的數據是某個時間點之前的舊數據。3、如果PXC節(jié)點都是意外退出的,而且不是在同一時間退出的情況
在本文開頭提到過,PXC集群中一半以上的節(jié)點因意外宕機而無法訪問時,PXC集群就會停止運行。但如果這些PXC節(jié)點是以安全下線的方式退出,則不會引發(fā)集群自動停止運行的問題,只會縮小集群的規(guī)模。只有意外下線一半以上節(jié)點時集群才會自動停止,意外下線的情況包括:
只要PXC集群中的節(jié)點不是同時意外退出的,那么當集群還剩一個節(jié)點時,該節(jié)點就會自動將grastate.dat
文件中的safe_to_bootstrap
值改為1
。所以在重啟集群時,也是先啟動最后一個退出的節(jié)點。
4、如果PXC節(jié)點都是同時意外退出的,則需要修改grastate.dat
文件
當集群中所有節(jié)點都是在同一時間因意外情況而退出,那么此時所有節(jié)點的safe_to_bootstrap
都為0
,因為沒有一個節(jié)點來得及去修改safe_to_bootstrap
的值。當所有節(jié)點的safe_to_bootstrap
均為0
時,PXC集群是無法啟動的。
在這種情況下我們就只能手動選擇一個節(jié)點,將safe_to_bootstrap
修改為1
,然后將該節(jié)點作為首節(jié)點進行啟動:
[root@PXC-Node1 ~]# vim /var/lib/mysql/grastate.dat
...
safe_to_bootstrap: 1
[root@PXC-Node1 ~]# systemctl start mysql@bootstrap.service
接著再依次啟動其他節(jié)點即可:
[root@PXC-Node2 ~]# systemctl start mysqld
5、如果集群中還有可運行的節(jié)點,那么其他下線的節(jié)點只需要按普通節(jié)點上線即可
[root@PXC-Node2 ~]# systemctl start mysqld
網站名稱:在CentOS8下搭建PXC集群
文章位置:http://jinyejixie.com/article30/pgeoso.html
成都網站建設公司_創(chuàng)新互聯,為您提供網站營銷、搜索引擎優(yōu)化、外貿建站、App設計、云服務器、品牌網站建設
聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯