實驗環境:node
Node | Host | IP |
---|---|---|
Node1 | pxc1 | 192.168.70.61 |
Node2 | pxc2 | 192.168.70.62 |
Node3 | pxc3 | 192.168.70.63 |
yum源:mysql
[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死活啓動不了。典型錯誤提示:sql
unknown variable 'wsrep_provider=/usr/lib64/libgalera_smm.so'
第一個節點配置文件/etc/my.cnfbootstrap
[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
第三個節點配置文件socket
[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
配置文件各項配置意義:ide
FLUSH TABLES WITH READ LOCK
),xtrabackup則不須要(它使用percona本身提供的backup lock)。強烈建議採用xtrabackup引導啓動Galera集羣。ui
/etc/init.d/mysql bootstrap-pxc # 或 systemctl start mysql@bootstrap.service
引導後,查看狀態:url
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;
加入節點很是簡單,只需正常啓動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
可在不一樣節點上寫入數據、不一樣節點上查詢數據,看看個節點上數據可否同步。