Percona XtraDB Cluster 構建

#Percona XtraDB Cluster 構建html

Percona XtraDB Cluster是MySQL高可用性和可擴展性的解決方案.底層使用Galera插件提供多主支持。應對常見的多寫能夠是用haproxy直接作代理,減少單節點寫壓力;多讀節點可使用常見的數據庫中間件作讀寫分離。node

##簡介 Percona XtraDB Cluster提供的特性有:mysql

  • 同步複製,事務要麼在全部節點提交或不提交。由wsrep API調用galera 庫進行集羣內廣播實現
  • 多主複製,能夠在任意節點進行寫操做
  • 在從服務器上並行應用事件,真正意義上的並行複製
  • 節點自動配置,使用SST、IST同步實現

缺點:linux

  • 因爲DDL需全局驗證經過,則集羣性能由集羣中最差性能節點決定。
  • 爲保證一致性,galera老是優先保證數據一致性,在多點併發寫時,鎖衝突問題嚴重
  • 新節點加入或延後較大的節點從新加入需全量拷貝數據(sst),做爲donor的節點在同步過程當中沒法提供讀寫
  • 數據冗餘度爲節點數

##安裝 系統爲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

相關文章
相關標籤/搜索