mysql galera cluster官網:http://galeracluster.com/documentation-webpages/
相關安裝教程:(不一定管用)
http://blog.csdn.net/zhiaini06/article/details/52317606
https://www.howtoing.com/how-to-configure-a-galera-cluster-with-mysql-5-6-on-ubuntu-16-04/
配置環境:
(1)3個Ubuntu服務器,版本ubuntu16.04
服務器IP:
192.168.93.133(主節點)
192.168.93.132(從節點1)
192.168.93.134(從節點2)
(2)三台服務器上均安裝mysql5.7
(3)
1.首先安裝必要依賴
2.添加GunPG key
3.鍵入命令確認Ubuntu版本信息
lsb_release -a
4.配置Ubuntu下galera源。
在galera.list文件中添加url,命令為:nano -w galera.list
# Codership Repository (Galera Cluster for MySQL) deb http://releases.galeracluster.com/mysql-wsrep-VERSION/DIST RELEASE main deb http://releases.galeracluster.com/galera-3/DIST RELEASE main
注意:<>內字段需要自行替換與系統相應的版本。詳解如下:
VERSION:mysql-wsrep 版本號。如: 5.7
DIST:通常為ubuntu
RELEASE:Ubuntu 發行版本。如: Ubuntu12.04 選擇 precise ;Ubuntu 14.04 選擇 trusty ; Ubuntu16.04 選擇:xenial
如果不清楚,可通過命令lsb_release -a來查看上述信息。
5.繼續配置源
在galera.pref 文件中添加如下配置:打開命令:nano -w galera.pref
更新源:
至此配置全部完成。
7.一旦在所有三個服務器上更新了存儲庫,我們就可以在三台服務器上運行以下命令安裝MySQL5.7的修補程序與Galera
[mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock user=mysql binlog_format=ROW bind-address=0.0.0.0
#bind-address=127.0.0.1 default_storage_engine=innodb innodb_autoinc_lock_mode=2 innodb_flush_log_at_trx_commit=0 innodb_buffer_pool_size=122M wsrep_provider=/usr/lib/libgalera_smm.so wsrep_provider_options="gcache.size=300M; gcache.page_size=300M" wsrep_cluster_name="mycluster" wsrep_cluster_address="gcomm://192.168.93.133,192.168.93.132,192.168.93.134" wsrep_sst_method=rsync [mysql_safe] log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid
[mysql]
wsrep_cluster_name="mycluster" wsrep_cluster_address="gcomm://192.168.93.133,192.168.93.132,192.168.93.134"
wsrep_node_name="mynode133"#是否加引號?
wsrep_node_address="192.168.93.133"#主節點IP
conf.d/
.
!includedir /etc/mysql/conf.d/
(2)確保二進制日志格式設置為使用行級復制,而不是語句級復制。
binlog_format=ROW
default_storage_engine=InnoDB
Galera集群不會使用MyISAM或類似nontransactional存儲引擎。
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
binlog_format=ROW
bind-address=0.0.0.0
#bind-address=127.0.0.1
default_storage_engine=innodb
innodb_autoinc_lock_mode=2
innodb_flush_log_at_trx_commit=0
innodb_buffer_pool_size=122M
wsrep_provider=/usr/lib/libgalera_smm.so
wsrep_provider_options="gcache.size=300M; gcache.page_size=300M"
wsrep_cluster_name="mycluster"
wsrep_cluster_address="gcomm://192.168.93.133,192.168.93.132,192.168.93.134"
wsrep_sst_method=rsync
[mysql_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
[mysql]
wsrep_cluster_name="mycluster"
wsrep_cluster_address="gcomm://192.168.93.133,192.168.93.132,192.168.93.134"
wsrep_node_name="mynode132"#是否加引號?
wsrep_node_address="192.168.93.132"#從節點1的IP
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
binlog_format=ROW
bind-address=0.0.0.0
#bind-address=127.0.0.1
default_storage_engine=innodb
innodb_autoinc_lock_mode=2
innodb_flush_log_at_trx_commit=0
innodb_buffer_pool_size=122M
wsrep_provider=/usr/lib/libgalera_smm.so
wsrep_provider_options="gcache.size=300M; gcache.page_size=300M"
wsrep_cluster_name="mycluster"
wsrep_cluster_address="gcomm://192.168.93.133,192.168.93.132,192.168.93.134"
wsrep_sst_method=rsync
[mysql_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
[mysql]
wsrep_cluster_name="mycluster"
wsrep_cluster_address="gcomm://192.168.93.133,192.168.93.132,192.168.93.134"
wsrep_node_name="mynode134"#是否加引號?
wsrep_node_address="192.168.93.134"#從節點2的IP
對所有系統使用SysV init
腳本,運行以下命令:
service mysql start --wsrep-new-cluster//常用該命令
系統使用 systemd
和Galera集群5.5或5.6,使用這個命令:
systemctl start mysql --wsrep-new-cluster
系統使用 systemd
和Galera集群5.7,使用專用的 mysqld_bootstrap
腳本:
/usr/bin/mysqld_bootstrap
一旦節點啟動數據庫服務器,通過檢查wsrep_cluster_size來檢查該啟動是否成功。在數據庫客戶端,運行以下查詢:
SHOW STATUS LIKE 'wsrep_cluster_size'; +--------------------+-------+ | Variable_name | Value | +--------------------+-------+ | wsrep_cluster_size | 1 | +--------------------+-------+
這個狀態變量告訴您連接到集群的節點的數量。因為您剛剛啟動了第一個節點,所以值是1。
此時,不要重新啟動mysqld。
(2)在集群中添加額外的節點
當您啟動第一個節點時,您將初始化一個新的集群。完成此操作后,添加所有其他節點的過程是相同的。
要向現有的集群添加一個節點,可以像往常一樣啟動mysqld。如果您的系統使用init,運行以下命令:
service mysql start
對於使用systemd的系統,可以運行以下命令:
systemctl start mysql
當數據庫服務器初始化為一個新節點時,它連接到由wsrep_cluster_address參數定義的集群成員。使用該參數,它將自動檢索集群映射並連接到所有可用的節點。
您可以使用wsrep_cluster_size狀態變量來測試節點連接是否成功。在數據庫客戶端,運行以下查詢
SHOW STATUS LIKE 'wsrep_cluster_size'; +--------------------+-------+ | Variable_name | Value | +--------------------+-------+ | wsrep_cluster_size | 2 | +--------------------+-------+
這表明第二個節點現在連接到集群。重復這個過程,將剩下的節點添加到集群中。
當集群中的所有節點都同意成員狀態時,就會啟動狀態交換。在狀態交換中,新節點檢查集群狀態。如果節點狀態與集群狀態不同,(通常情況下是這樣),新節點將請求從集群中傳輸狀態快照,並將其安裝到本地數據庫中。
完成此操作之后,新節點就可以使用了。
10 測試集群
當您的集群啟動並運行時,您可能想要測試某些特性,以確保它們正常工作,或者為可能出現的實際問題做好准備。
(1)復制測試
要測試Galera集群是否按照預期工作,請完成以下步驟:
1 在數據庫客戶機上,驗證所有節點之間是否相互連接
SHOW STATUS LIKE 'wsrep_%'; +---------------------------+------------+ | Variable_name | Value | +---------------------------+------------+ ... | wsrep_local_state_comment | Synced (6) | | wsrep_cluster_size | 3 | | wsrep_ready | ON | +---------------------------+------------+
wsrep_local_state_comment:值同步表明該節點連接到集群和操作。
wsrep_cluster_size:該值表示集群中的節點。
wsrep_ready:該值表明該節點連接到集群並能夠處理事務。
CREATE DATABASE galeratest; USE galeratest; CREATE TABLE test_table ( id INT PRIMARY KEY AUTO_INCREMENT, msg TEXT ) ENGINE=InnoDB; INSERT INTO test_table (msg) VALUES ("Hello my dear cluster."); INSERT INTO test_table (msg) VALUES ("Hello, again, cluster dear.");
3 在node2的數據庫客戶機上,檢查數據是否被正確復制:
USE galeratest; SELECT * FROM test_table; +----+-----------------------------+ | id | msg | +----+-----------------------------+ | 1 | Hello my dear cluster. | | 2 | Hello, again, cluster dear. | +----+-----------------------------+
SELECT查詢中給出的結果表明,您在node1中輸入的數據已經復制到node2中。
(2) split - brain測試
為了在兩個節點集群上測試Galera集群,請完成以下步驟:
(1)斷開兩個集群節點之間的網絡連接。quorum丟失,節點不服務請求。
killall -9 mysqld
為了模擬網絡斷開,使用iptables或netem來阻止所有的ip流量到一個節點
要模擬整個服務器崩潰,在虛擬的來賓中運行每個mysqld,並徹底終止整個虛擬實例
# GALERA saved state version: 2.1 uuid: 5ee99582-bb8d-11e2-b8e3-23de375c1d30 seqno: 8204503945773 cert_index:
要找到最后一個提交事務的序列號,使用--wsrep-recover選項運行mysqld。這將把InnoDB表空間恢復到一致狀態,將對應的全局事務ID值打印到錯誤日志中,然后退出。例如:
130514 18:39:13 [Note] WSREP: Recovered position: 5ee99582-bb8d-11e2-b8e3- 23de375c1d30:8204503945771
mysqld_safe
自動恢復,並在下一次啟動時將值傳遞給數據庫服務器。
# GALERA saved state version: 2.1 uuid: 5981f182-a4cc-11e6-98cc-77fabedd360d seqno: 1234 safe_to_bootstrap: 1
這樣的節點可以用來引導集群。嘗試使用任何其他節點的引導將導致以下錯誤消息:
2016-11-07 01:49:19 5572 [ERROR] WSREP: It may not be safe to bootstrap the cluster from this node. It was not the last one to leave the cluster and may not contain all the updates. To force cluster bootstrap with this node, edit the grastate.dat file manually and set safe_to_bootstrap to 1 .
(6)GCACHE復蘇
從提供者版本3.19開始,Galera提供了gcache。恢復參數。如果設置為yes,Galera將嘗試在節點啟動時恢復gcache。
如果gcache恢復成功,則該節點將處於向其他連接節點提供支持的位置,這將加快整個集群的總體重啟時間。
Gcache恢復要求整個Gcache文件被讀取兩次。對於位於慢磁盤上的大型gcache文件,此操作可能需要一些時間。
Gcache恢復是“最好的努力”操作。如果恢復不成功,則節點將繼續正常運行,但是其他節點在嘗試連接時將返回到SST。