Percona XtraDB Cluster 多主集羣研究實現MYSQL負載分流

QXtraDB是MYSQL開源的一個分支,在數據操作層面上,和MYSQL基本一樣。其集羣與常用的MYSQL集羣特性如下:


個人認爲XtraDB最大的優點,解決了傳統集羣的兩個問題,

         一是,數據同步的及時性,解決了MYSQL做分步式方案時的時間差問題。

         二是實現了多主,各節點可同時讀寫,這樣一來的話,在需要對大併發,大數據量的頻繁操作處理的情況下,達到數據庫層面負載分流的目的,且實現方便。同時有效的最大化利用了硬件資源。


侷限性

1.目前的複製僅僅支持InnoDB存儲引擎。任何寫入其他引擎的表,包括mysql.*表將不會複製。但是DDL語句會被複制的,因此創建用戶將會被複制,但是insert into mysql.user…將不會被複制的。


2.DELETE操作不支持沒有主鍵的表。沒有主鍵的表在不同的節點順序將不同,如果執行SELECT…LIMIT… 將出現不同的結果集。


3.在多主環境下LOCK/UNLOCK TABLES不支持。以及鎖函數GET_LOCK(), RELEASE_LOCK()…


4.查詢日誌不能保存在表中。如果開啓查詢日誌,只能保存到文件中。


5.允許最大的事務大小由wsrep_max_ws_rows和wsrep_max_ws_size定義。任何大型操作將被拒絕。如大型的LOAD DATA操作。


6.由於集羣是樂觀的併發控制,事務commit可能在該階段中止。如果有兩個事務向在集羣中不同的節點向同一行寫入並提交,失敗的節點將中止。對於集羣級別的中止,集羣返回死鎖錯誤代碼(Error: 1213 SQLSTATE: 40001 (ER_LOCK_DEADLOCK)).


7.XA事務不支持,由於在提交上可能回滾。


8.整個集羣的寫入吞吐量是由最弱的節點限制,如果有一個節點變得緩慢,那麼整個集羣將是緩慢的。爲了穩定的高性能要求,所有的節點應使用統一的硬件。


9.集羣節點建議最少3個。


10.如果DDL語句有問題將破壞集羣。



***********************      以下是配置步驟   *******************************

以下測試在 redhat6.4 64bit下實現【RPM方式安裝】,採用三臺機器,信息如下:

     db1  192.168.163.189
     db2  192.168.163.190

      db3  192.168.163.191

1、各節點配置和安裝 2個 YUM 源

[EPEL]
name=EPEL
baseurl=http://mirror.neu.edu.cn/fedora/epel//6Server/x86_64/
enabled=1
gpgcheck=0

rpm -Uhv http://www.percona.com/downloads/percona-release/percona-release-0.0-1.x86_64.rpm

2、各節點刪除系統自帶的相關軟件包

  rpm -e --nodeps  mysql-libs-5.1.66-2.el6_3.x86_64

3、各節點安裝相關軟件

yum install Percona-XtraDB-Cluster-server -y

正常情況下應該會安裝以下相關軟件包 

     Percona-XtraDB-Cluster-server-55

     Percona-Server-shared-51  

     Percona-XtraDB-Cluster-client-55

     Percona-XtraDB-Cluster-galera-2 

     Percona-XtraDB-Cluster-shared-55

    percona-xtrabackup

    perl-DBD-MySQL


4、各節點my.cnf最基本的配置

[mysqld]

basedir=/usr #可修改

datadir=/var/lib/mysql #可修改
wsrep_provider=/usr/lib64/libgalera_smm.so #需確認路徑是否正常
wsrep_cluster_address=gcomm://  #首次運行不指定,等整個集羣啓動後,再修改,否則集羣無法啓動
wsrep_slave_threads=8
wsrep_sst_method=rsync
binlog_format=ROW
default_storage_engine=InnoDB
innodb_locks_unsafe_for_binlog=1
innodb_autoinc_lock_mode=2
wsrep_sst_auth=wsuser:redhat   #同步時使用的用戶名及密碼,格式爲用戶名:密碼


5、集羣中第一個節點192.168.163.189首次啓動,啓動時留意數據庫錯誤日誌信息

/etc/init.d/mysql  bootstrap-pxc



6、第二個節點192.168.163.190首次啓動

/etc/init.d/mysql start wsrep_cluster_address=gcomm://192.168.163.189,192.168.163.190


7 、第三個節點192.168.163.190首次啓動 

/etc/init.d/mysql start wsrep_cluster_address=gcomm://192.168.163.189,192.168.163.190,192.168.163.191


【注】以下各節點在啓動前後,可用命令查看集羣信息情況

mySQL>show status like 'wsrep%';


8、各節點授權

授權:

MYSQL>CREATE USER 'wsuser'@'localhost' IDENTIFIED BY 'redhat';
 GRANT RELOAD, LOCK TABLES, REPLICATION CLIENT ON *.* TO 'wsuser'@'localhost';
 FLUSH PRIVILEGES;


當所有節點啓動後,修改各節點的MY.CNF修改參數wsrep_cluster_address=gcomm://192.168.163.189,192.168.163.190,192.168.163.191


9、測試集羣可用性

    1、在其中任意一個節點創建一個INNodb庫,到其它節點檢查是否已有庫生成。







發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章