PXC使用到的端口號
3306 數據庫對外服務的端口號(視具體情況而定)
4444 請求SST SST: 指數據一個鏡象傳輸 xtrabackup , rsync ,mysqldump
4567 : 組成員之間進行溝通的一個端口號
4568 : 傳輸IST用的。相對於SST來說的一個增量。
9200:HA健康檢查
安裝PXC過程中
iptables 禁掉
selinux 也禁掉
PXC工作原理:
節點接收sql 請求后,對於ddl 操作,在commit之前,由wsrep API 調用galera 庫進行集群內廣播,所有其他節點驗證成功后事務在集群所有節點進行提交,反之roll back。pxc 保證整個集群所有數據的強一致性,滿足CAP理論中滿足:Consistency 和 Availability。
特性如下:
1.同步復制,事務要么在所有節點提交或不提交。
2.多主復制,可以在任意節點進行寫操作。
3.在從服務器上並行應用事件,真正意義上的並行復制。
4.節點自動配置。
5.數據一致性,不再是異步復制。
Percona XtraDB Cluster完全兼容MySQL和Percona Server,表現在:
1.數據的兼容性
2.應用程序的兼容性:無需更改應用程序
1.集群是有節點組成的,推薦配置至少3個節點,但是也可以運行在2個節點上。
2.每個節點都是普通的mysql/percona服務器,可以將現有的數據庫服務器組成集群,反之,也可以將集群拆分成單獨的服務器。
3.每個節點都包含完整的數據副本。
優點如下:
1.當執行一個查詢時,在本地節點上執行。因為所有數據都在本地,無需遠程訪問。
2.無需集中管理。可以在任何時間點失去任何節點,但是集群將照常工作,不受影響。
3.良好的讀負載擴展,任意節點都可以查詢。
缺點如下:
1.加入新節點,開銷大。需要復制完整的數據。
2.不能有效的解決寫縮放問題,所有的寫操作都將發生在所有節點上。
3.有多少個節點就有多少重復的數據。
最小集群點數
建議的最小集群點數為3,雖然兩個節點也能運行,但是無法保證數據的穩定,當兩個節點時,任何一個節點處故障,將導致集群無法訪問。
最大是小於等於8個。
故障恢復加入集群的過程分析
如果數據不大,用SST傳輸就行了。
如果數據很大,用rsync來傳輸。
腦裂
XtaDB Cluster需要使用3個或以上的節點來應對腦裂問題,否則當只有一個節點可用的情況下,將不能提供服務。
假設在系統初始化的時候,一個有三個node節點a,b,c。
假設a先啟動(使用bootstrap-pxc方式啟動),b然后啟動,c再啟動。這時候a就是整個系統的PC。並且這時候系統任何兩個節點都是互相通信,保證數據的一致性。
假設1. b或者c掛了,這個就很容易理解,因為數據都是一致性的,並不影響其他節點。
假設2. PC掛了,就是a掛了,這個時候系統也能正常運行,雖然PC掛了,有會推薦算法在b,c中選出一個新的PC。
假設3.B和C都掛了,系統為了防止“腦裂”的發生(超過1/2 的節點不能通行則會觸發這種情況),會對節點1 降級。這時候A節點將表現為不能進行任何操作(show 這樣的操作也是可以的是)。會報“unkown command”的錯誤。所以官方對系統的配置建議為3個節點以上。
模擬腦裂
kill掉兩個節點即可出現。
PCX的局限性
1.僅僅工作再InnoDB引擎上,因此對MySQL庫下的系統表的修改不能被復制,但是DDL操作時可以被復制的,所以可以通過creata user、grant等方式操作系統表。
2.不支持在沒有主鍵的表上DELETE操作,select ... limit也會在不同節點上返回不同的值(僅僅是在沒有主鍵的情況下才會limit返回不同的結果集?)。
3.不支持的操作:LOCL/UNLOCL TABLES、lock functings(GET_LOCK()、RELEASE_LOCK()...)。
4.query log日志不能存放在表里面,必須存放在文件。
5.最大的事務大小由wsrep_max_ws_rows、wsrep_max_ws_size定義,LOAD DATA INFILE每10K行提交一次,這種事務將被分割成熟個小的事務(XtraDB cluster自動分割?還是操作時手動分割?)。
6.由於集群是基於樂觀的並發控制(optimistic concurrency control),事務沖突的情況可能會在commit階段發生,當多個節點修改同時同一行數據,只有其中一個節點能夠成功,失敗的節點將終止,並且返回死鎖錯誤代碼 Error:1213 SQLSTATE:40001。
7.不支持XA事務,因為XA事務有可能在commit的時候出現異常發生rollback(參考 http://www.infoq.com/cn/articles/xa-transactions-handle)。
8.整個集群的吞吐量/性能取決於最慢的那個節點,因為需要所有節點上做Certification,同時還取決於節點間的網絡性能,因此需要所有節點都有相同的硬件配置,並且網絡、磁盤等性能要盡可能的高,例如使用SSD。
9.最小建議的集群節點數為3,為解決腦裂,最多8個節點。
10.如果DDL語句有問題,很可能會破壞整個集群,需要非常特殊的對待DDL語句。