天天看點

PXC快速入門1.快速入門

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 [email protected]
           

引導後,檢視狀态:

[email protected]> 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
           

檢視各節點狀态:

[email protected]> 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叢集是否正确工作

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