原理:多個msyql/mariadb之間可以實時同步,任意節點的操作可以立即同步到其他節點,底層採用galera插件同步,類似rsync,上層mysql相對於galera是透明的,可以實現多節點同時讀寫(無法實現讀寫分離)。 NOTE:普通的msyql/mariadb無法集成galera,要想使用g ...
原理:多個msyql/mariadb之間可以實時同步,任意節點的操作可以立即同步到其他節點,底層採用galera插件同步,類似rsync,上層mysql相對於galera是透明的,可以實現多節點同時讀寫(無法實現讀寫分離)。
NOTE:普通的msyql/mariadb無法集成galera,要想使用galera必須編譯msyql/mariadb讓其擁有調用galera 的能力,或者可以直接下載支持galera的mysql/mariadb。
環境:
1.採用三節點
節點一:192.168.85.136
節點二:192.168.85.137
節點三:192.168.85.138
2.系統平臺:
Red Hat Enterprise Linux Server release 6.7 (Santiago)
3.關閉防火牆(所有節點執行)
/etc/rc.d/init.d/iptables stop
setenforce 0
4.設置galera.repo
http://releases.galeracluster.com//mysql-wsrep-5.5/redhat/6/x86_64/ #mysql-server軟體包
http://releases.galeracluster.com//galera-3/redhat/6/x86_64/ #galera組件
將上面地址加入yum repo
5.查看libgalera_smm.so路徑(mysql 會調用此模塊像其他節點同步數據)
rpm -ql galera-3-25.3.25-2.el6.x86_64 | grep smm.so
/usr/lib64/galera-3/libgalera_smm.so
6.配置my.cnf
[mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock wsrep_node_name=node1 wsrep_provider=/usr/lib64/galera-3/libgalera_smm.so wsrep_sst_method=rsync port=3306 user=mysql default_storage_engine=InnoDB innodb_autoinc_lock_mode=2 innodb_locks_unsafe_for_binlog=1 innodb_flush_log_at_trx_commit=0 innodb_doublewrite=0 innodb_file_per_table=1 binlog_format=ROW log-bin=mysql-bin server-id=101 relay-log=mysql-relay-bin log-slave-updates=1 symbolic-links=0 [mysqld_safe] log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid
三個節點全部同步此配置文件,需註意:
wsrep_node_name=node1 #配置成節點node名稱
wsrep_provider=/usr/lib64/galera-3/libgalera_smm.so #就是剛纔我們查出的模塊路徑
7.啟動mysql:
node1:service mysql start --wsrep_cluster_address=gcomm://
node2:service mysql start --wsrep_cluster_address=gcomm://192.168.85.136
node3:service mysql start --wsrep_cluster_address=gcomm://192.168.85.137
8.驗證:
在node1上創建資料庫:
在其餘node查看:
node2:
node3:
接下來可以將集群信息寫入到my.cnf
在每個節點中my.cnf 文件mysqld段中加入:
wsrep_cluster_address="gcomm://192.168.85.136,192.168.85.137,192.168.85.138"
################################################################################
排錯:
啟動mysql出現without updating PID file (/var/lib/mysql/node1.pid):
解決:
註釋my.cnf中 wsrep_cluster_address="gcomm://192.168.85.136,192.168.85.137,192.168.85.138"
啟動第一個node:
/etc/rc.d/init.d/mysql start --wsrep_cluster_address=gcomm://
啟動第二個node:
/etc/rc.d/init.d/mysql start --wsrep_cluster_address=gcomm://192.168.85.136
啟動第三個node:
/etc/rc.d/init.d/mysql start --wsrep_cluster_address=gcomm://192.168.85.136
全部啟動完成後將 wsrep_cluster_address="gcomm://192.168.85.136,192.168.85.137,192.168.85.138" 加入到每個節點中
NOTE:導致上述問題的原因未知,也未去深入研究,只要三個節點不同時啟動就不會有問題,如果三個節點同時啟動就會出現上述問題(重啟三節點任意一個節點不會出現任何問題)。