#Percona XtraDB Cluster 構建html
Percona XtraDB Cluster是MySQL高可用性和可擴展性的解決方案.底層使用Galera插件提供多主支持。應對常見的多寫能夠是用haproxy直接作代理,減少單節點寫壓力;多讀節點可使用常見的數據庫中間件作讀寫分離。node
##簡介 Percona XtraDB Cluster提供的特性有:mysql
缺點:linux
##安裝 系統爲centos6系,其餘安裝方式能夠參考官方文檔。算法
rpm -ivh http://www.percona.com/downloads/percona-release/redhat/0.1-3/percona-release-0.1-3.noarch.rpm yum install Percona-XtraDB-Cluster-56
可能會報socat、libev 搜索安裝便可sql
yum install epel-release yum install socat libev 或 rpm -ivh ftp://rpmfind.net/linux/atrpms/el6-x86_64/atrpms/stable/libev-4.04-2.el6.x86_64.rpm
安裝後注意防火牆的配置,須要開啓3306, 4444, 4567 ,4568,同時SELinux當前也是不支持的,因此須要關閉,避免節點通訊失敗。數據庫
yum安裝後的數據文件在/var/lib/mysql 配置文件爲/etc/my.cnfbootstrap
Percona XtraDB Cluster原生支持mysql的配置,你能夠複製當前mysql的配置到Percona XtraDB Cluster配置中,而後添加相應的集羣配置文件便可。centos
# percona-xtraDb-cluster setting wsrep_provider=/usr/lib64/galera3/libgalera_smm.so wsrep_cluster_address=gcomm://192.168.11.146,192.168.11.194,192.168.11.130,192.168.11.145 wsrep_node_address=192.168.11.145 wsrep_slave_threads=8 wsrep_sst_method=xtrabackup-v2 # Cluster name wsrep_cluster_name=percona-db binlog_format=ROW default_storage_engine=InnoDB innodb_autoinc_lock_mode=2 # Authentication for SST method wsrep_sst_auth="sstuser:7c5d69d8"
對應參數的含義:服務器
寫集複製提供庫:/usr/lib64/galera3/libgalera_smm.so 寫集複製集羣地址 當前節點地址(須要配置爲當前節點的ip地址) 寫集複製slave線程數 寫集複製的方法 集羣名 二進制日誌的格式 默認存儲引擎 innodb自動提交的鎖模式 寫集複製認證的user:password
在全部的集羣節點上執行上面的安裝步驟,並配置好配置文件。
##啓動第一個節點
啓動集羣以前你須要肯定以哪個節點的數據爲基準數據,其餘節點將均複製該節點的數據。這個集羣崩潰恢復的方式相同,第一次啓動一個數據副本數據節點。
這裏有個參數wsrep_cluster_address
須要注意,若是在第一啓動以前已經設置好,就不要再次編輯wsrep_cluster_address
.
# 集羣的第一個節點(擁有數據的父本) [root@percona1 ~]# /etc/init.d/mysql bootstrap-pxc
若是出錯能夠查看mysql的啓動日誌,按照日誌來排查,啓動完成後可登錄mysql console查看wsrep_cluster_status
是否爲Primary,wsrep_connected, wsrep_ready
是否爲ON
mysql> show status like "wsrep_cluster_status"; +----------------------+---------+ | Variable_name | Value | +----------------------+---------+ | wsrep_cluster_status | Primary | +----------------------+---------+ 1 row in set (0.00 sec) mysql> show status like "wsrep_connected"; +-----------------+-------+ | Variable_name | Value | +-----------------+-------+ | wsrep_connected | ON | +-----------------+-------+ 1 row in set (0.00 sec) mysql> show status like "wsrep_ready"; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | wsrep_ready | ON | +---------------+-------+ 1 row in set (0.00 sec)
第一個節點啓動後須要配置sst同步的用戶名密碼:
mysql> CREATE USER 'sstuser'@'localhost' IDENTIFIED BY 's3cret'; mysql> GRANT RELOAD,LOCK TABLES, REPLICATION CLIENT ON *.* TO 'sstuser'@'localhost'; mysql> FLUSH PRIVILEGES;
啓動其餘節點時,切記在同一時間只啓動其中一個節點。在其餘須要重啓數據庫的狀況下也必須遵循 若是使用第一個節點的配置文件,只須要修改wsrep_node_address
便可。
# 啓動其餘節點 [root@percona2 ~]# /etc/init.d/mysql start # 檢查狀態 mysql> 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 | +----------------------------+--------------------------------------+ 40 rows in set (0.01 sec)
其餘節點啓動同第二個節點啓動同樣。percona-xtraDb-cluster官方推薦的最小集羣節點爲3個,固然2個也是能夠跑的,只不過在故障恢復時2個節點的集羣若是使用了sst算法會致使在同步數據時集羣不可用。
##新加節點
這裏單獨提下新加節點的狀況。
集羣配置好後,wsrep_cluster_address
在配置文件中便設置肯定了,若是新加節點可能會有疑惑,是否須要在集羣的每一個節點的配置文件中加上新的節點ip,而後restart每一個節點。 關於這個疑問官方文檔有明確的說明。
摘自官方文檔:
雖然設置中沒有定義全部的集羣成員,可是在新加入集羣節點的配置中經過wsrep_cluster_name配置適合的集羣名. 所以wsrep_cluster_address變量不須要在全部的節點徹底一致,設置wsrep_cluster_name爲全部集羣節點是最佳實踐,由於在重啓節點時將嘗試wsrep_cluster_name中節點的運行狀態。
##測試
測試主要在多點寫入的測試,能夠在各個節點中作寫入測試,而後每一個節點查詢,而且觀察wsrep_cluster_status,wsrep_connected,wsrep_ready