PXC快速入門


1.快速入門

實驗環境:

Node Host IP
Node1 pxc1 192.168.70.61
Node2 pxc2 192.168.70.62
Node3 pxc3 192.168.70.63

1.1 安裝Percona-XtraDb-Cluster

yum源:

[percona]
name=percona_repo
baseurl = https://mirrors.tuna.tsinghua.edu.cn/percona/release/$releasever/RPMS/$basearch
enabled = 1
gpgcheck = 0
yum -y install Percona-XtraDB-Cluster-57

注意,裝了Percona-XtraDB-Cluster就自帶好了Percona-mysql,不要再裝MySQL,不要再裝MySQL,不要再裝MySQL。不止一個人因為這個問題,PXC死活啟動不了。典型錯誤提示:

unknown variable 'wsrep_provider=/usr/lib64/libgalera_smm.so'

1.2 提供配置文件

第一個節點配置文件/etc/my.cnf

[mysqld]
server-id=100               # 各節點不同
datadir=/data
socket=/data/mysql.sock
log-error=/data/error.log
pid-file=/data/mysqld.pid
log-bin=/data/master-bin
log_slave_updates

wsrep_provider=/usr/lib64/galera3/libgalera_smm.so
wsrep_cluster_name=pxc-cluster
wsrep_cluster_address=gcomm://192.168.70.61,192.168.70.62,192.168.70.63
wsrep_node_name=pxc1               # 各節點不同
wsrep_node_address=192.168.70.61   # 各節點不同
wsrep_sst_method=xtrabackup-v2
wsrep_sst_auth=sstuser:passw0rd
pxc_strict_mode=ENFORCING
binlog_format=ROW
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2

第二個節點配置文件

[mysqld]
server-id=110               # 各節點不同
datadir=/data
socket=/data/mysql.sock
log-error=/data/error.log
pid-file=/data/mysqld.pid
log-bin=/data/master-bin
log_slave_updates

wsrep_provider=/usr/lib64/galera3/libgalera_smm.so
wsrep_cluster_name=pxc-cluster
wsrep_cluster_address=gcomm://192.168.70.61,192.168.70.62,192.168.70.63
wsrep_node_name=pxc2               # 各節點不同
wsrep_node_address=192.168.70.62   # 各節點不同
wsrep_sst_method=xtrabackup-v2
wsrep_sst_auth=sstuser:passw0rd
pxc_strict_mode=ENFORCING
binlog_format=ROW
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2

第三個節點配置文件

[mysqld]
server-id=120               # 各節點不同
datadir=/data
socket=/data/mysql.sock
log-error=/data/error.log
pid-file=/data/mysqld.pid
log-bin=/data/master-bin
log_slave_updates

wsrep_provider=/usr/lib64/galera3/libgalera_smm.so
wsrep_cluster_name=pxc-cluster
wsrep_cluster_address=gcomm://192.168.70.61,192.168.70.62,192.168.70.63
wsrep_node_name=pxc3               # 各節點不同
wsrep_node_address=192.168.70.63   # 各節點不同
wsrep_sst_method=xtrabackup-v2
wsrep_sst_auth=sstuser:passw0rd
pxc_strict_mode=ENFORCING
binlog_format=ROW
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2

配置文件各項配置意義:

  • wsrep_provider:指定Galera庫的路徑
  • wsrep_cluster_name:Galera集群的名稱
  • wsrep_cluster_address:Galera集群中各節點地址。地址使用組通信協議gcomm://(group communication)
  • wsrep_node_name:本節點在Galera集群中的名稱
  • wsrep_node_address:本節點在Galera集群中的通信地址
  • wsrep_sst_method:state_snapshot_transfer(SST)使用的傳輸方法,可用方法有mysqldump、rsync和xtrabackup,前兩者在傳輸時都需要對Donor加全局只讀鎖(FLUSH TABLES WITH READ LOCK),xtrabackup則不需要(它使用percona自己提供的backup lock)。強烈建議采用xtrabackup
  • wsrep_sst_auth:在SST傳輸時需要用到的認證憑據,格式為:"用戶:密碼"
  • pxc_strict_mode:是否限制PXC啟用正在試用階段的功能,ENFORCING是默認值,表示不啟用
  • binlog_format:二進制日志的格式。Galera只支持row格式的二進制日志
  • default_storage_engine:指定默認存儲引擎。Galera的復制功能只支持InnoDB
  • innodb_autoinc_lock_mode:只能設置為2,設置為0或1時會無法正確處理死鎖問題

1.3 引導Galera中的第一個節點

引導啟動Galera集群。

/etc/init.d/mysql bootstrap-pxc
# 或
systemctl start mysql@bootstrap.service

引導后,查看狀態:

mysql@pxc1> show status like 'wsrep%';
+----------------------------+--------------------------------------+
| Variable_name              | Value                                |
+----------------------------+--------------------------------------+
| wsrep_local_state_uuid     | c2883338-834d-11e2-0800-03c9c68e41ec |
| ...                        | ...                                  |
| wsrep_local_state          | 4                                    |
| wsrep_local_state_comment  | Synced                               |
| ...                        | ...                                  |
| wsrep_cluster_size         | 1                                    |
| wsrep_cluster_status       | Primary                              |
| wsrep_connected            | ON                                   |
| ...                        | ...                                  |
| wsrep_ready                | ON                                   |
+----------------------------+--------------------------------------+

上述狀態表示,該Galera集群中只有一個節點,狀態為Synced(4),表示數據已同步完成(因為是第一個引導節點,無數據需要同步)。角色為Primary,且已經完全連接並准備好,connected和ready狀態決定了該節點是否是Galera中的正式成員,正式成員才能向外提供MySQL服務。

正確引導了第一個節點后,需要在第一個節點(Galera的初始化引導節點)上創建SST的認證用戶,注意這個用戶名和密碼需要和配置文件中的對應。

create user 'sstuser'@localhost identified by 'passw0rd';
grant reload,lock tables,process,replication client on *.* to 'sstuser'@localhost;
flush privileges;

1.4 向Galera中加入第二、第三個節點

加入節點非常簡單,只需正常啟動MySQL服務即可,在啟動時會讀取配置文件,並根據配置自動加入到對應的Galera集群中。

#### 在第二個節點上執行
/etc/init.d/mysql start

#### 在第三個節點上執行
/etc/init.d/mysql start

查看各節點狀態:

mysql@pxc3> show status like 'wsrep%';
+----------------------------+--------------------------------------+
| Variable_name              | Value                                |
+----------------------------+--------------------------------------+
| wsrep_local_state_uuid     | c2883338-834d-11e2-0800-03c9c68e41ec |
| ...                        | ...                                  |
| wsrep_local_state          | 4                                    |
| wsrep_local_state_comment  | Synced                               |
| ...                        | ...                                  |
| wsrep_cluster_size         | 3                                    |
| wsrep_cluster_status       | Primary                              |
| wsrep_connected            | ON                                   |
| ...                        | ...                                  |
| wsrep_ready                | ON                                   |
+----------------------------+--------------------------------------+

可見這兩個節點已經完成了數據同步,且已經是Galera集群中的正式成員,可以向外提供MySQL服務。

注意,一個節點加入到Galera集群有兩種情況:新節點加入集群、暫時離組的成員再次加入集群。

1.新節點加入Galera集群

新節點加入集群時,需要從當前集群中選擇一個Donor節點來同步數據,也就是所謂的state_snapshot_tranfer(SST)過程。SST同步數據的方式由選項wsrep_sst_method決定,一般選擇的是xtrabackup。

必須注意,新節點加入Galera時,會刪除新節點上所有已有數據,再通過xtrabackup(假設使用的是該方式)從Donor處完整備份所有數據進行恢復。所以,如果數據量很大,新節點加入過程會很慢。而且,在一個新節點成為Synced狀態之前,不要同時加入其它新節點,否則很容易將集群壓垮。

如果是這種情況,可以考慮使用wsrep_sst_method=rsync來做增量同步,既然是增量同步,最好保證新節點上已經有一部分數據基礎,否則和全量同步沒什么區別,且這樣會對Donor節點加上全局read only鎖。

2.舊節點加入Galera集群

如果舊節點加入Galera集群,說明這個節點在之前已經在Galera集群中呆過,有一部分數據基礎,缺少的只是它離開集群時的數據。這時加入集群時,會采用IST(incremental snapshot transfer)傳輸機制,即使用增量傳輸。

但注意,這部分增量傳輸的數據源是Donor上緩存在GCache文件中的,這個文件有大小限制,如果缺失的數據范圍超過已緩存的內容,則自動轉為SST傳輸。如果舊節點上的數據和Donor上的數據不匹配(例如這個節點離組后人為修改了一點數據),則自動轉為SST傳輸。

關於GCache以及Galera是如何判斷數據狀態的,本文不展開描述,可參見Understanding GCache in Galera

1.5 驗證Galera集群是否正確工作

可在不同節點上寫入數據、不同節點上查詢數據,看看個節點上數據能否同步。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM