需求場景:原有的pxc環境數據量已經比較大,新買的服務器要加入此集群中,如何讓其用IST的方式傳輸,而不是SST.
PXC傳輸數據有兩種方式:
IST:Incremental State Transfer 增量同步
SST:State Snapshot Transfer 全量同步
IST 發生的條件:This is done using caching mechanism on nodes (即只發生在之前集群里的節點數據還有在緩存中)
判斷方法:
| mysql> show global status like 'wsrep_local_cached_downto';+---------------------------+-------+| Variable_name | Value |+---------------------------+-------+| wsrep_local_cached_downto | 1 |+---------------------------+-------+1 row in set (0.00 sec) | 
此值小于新開節點的seqno:
| [root@zejin241 I6000]# cat grastate.dat # GALERA saved stateversion: 2.1uuid: 6c86dc17-246f-11e6-9955-ae4d7e89eed2seqno: 4cert_index: | 
所以我們的思路即通過備份一個集群中節點的數據,恢復到新節點上,并偽造一個grastate.dat,來記錄備份數據的seqno,這樣當新節點啟動時就會自動用IST的方法來進行,而不是SST(注意gcache.size應該有足夠的容量來保證在備份及恢復這段時間內新產生的數據都被緩存到)
| galera.cache: This file is used as a main writeset store. It's implemented as a permanent ring-buffer filethat is preallocated on disk when the node is initialized. File size can be controlled with the variablegcache.size. If this value is bigger, more writesets are cached and chances are better that the rejoining node will get IST instead of SST. Filename can be changed with the gcache.name variable. | 
如下為這次的操作步驟:
node240:192.168.1.240 --已經存在的集群節點
node241:192.168.1.241 --將要加入的集群節點
step1:啟動新的集群中的第一個節點
/usr/local/pxc_56/bin/mysqld_safe --defaults-file=/home/mysql/pxc6000.cnf --ledir=/usr/local/pxc_56/bin/ --wsrep-new-cluster &
配置文件如下:
| [root@zejin240 I6000]# cat /home/mysql/pxc6000.cnf[client]port = 6000socket = /home/mysql/I6000/mysql.sockdefault-character-set=utf8[mysqld]basedir = /usr/local/pxc_56datadir = /home/mysql/I6000pid-file = /home/mysql/I6000/mysql.pidcharacter-set-server=utf8init_connect = 'SET NAMES utf8'log-bin=/home/mysql/I6000/log_binserver-id = 9816000innodb_buffer_pool_size = 100Minnodb_data_file_path = ibdata1:10M:autoextendinnodb_data_home_dir = /home/mysql/I6000innodb_file_per_table=1skip-name-resolveport = 6000socket = /home/mysql/I6000/mysql.sockuser=mysqllog_error=/home/mysql/I6000/mysql_error.log#pxcuser=mysqllog_error=error.logbinlog_format=ROW#6000 for mysqld port, 6020 for sst port, 6031 for ist port, 6030 for cluster communication portwsrep_cluster_address='gcomm://192.168.1.240:6030,192.168.1.241:6030,192.168.1.242:6030'wsrep_provider=/usr/local/pxc_56/lib/libgalera_smm.sowsrep_sst_receive_address=192.168.1.240:6020wsrep_node_incoming_address=192.168.1.240:6000wsrep_node_address=192.168.1.240:6000wsrep_provider_options = "gmcast.listen_addr=tcp://192.168.1.240:6030;ist.recv_addr=192.168.1.240:6031;"wsrep_slave_threads=2wsrep_cluster_name=pxc_zejinwsrep_sst_method=xtrabackup-v2wsrep_node_name=node6000_240innodb_autoinc_lock_mode=2wsrep_sst_auth="sstuser:123"log-slave-updates[mysql]no-auto-rehashdefault-character-set=utf8 |