Ubuntu 下 Galera cluster for MySQL 集群安裝


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.首先安裝必要依賴

apt-get install python-software-properties  
apt-get install software-properties-common  

2.添加GunPG key

 
apt-key adv --keyserver keyserver.ubuntu.com --recv BC19DDBA  

3.鍵入命令確認Ubuntu版本信息

lsb_release -a  

4.配置Ubuntu下galera源。

 
cd /etc/apt/sources.list.d
touch galera.list  

在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.繼續配置源

 cd /etc/apt/preferences.d
touch  galera.pref  

在galera.pref 文件中添加如下配置:打開命令:nano -w galera.pref

 Package: *  
Pin: origin releases.galeracluster.com  
Pin-Priority: 1001  

更新源:

 apt-get update  

至此配置全部完成。

7.一旦在所有三個服務器上更新了存儲庫,我們就可以在三台服務器上運行以下命令安裝MySQL5.7的修補程序與Galera

 apt-get install galera-3 galera-arbitrator-3 mysql-wsrep-5.7
 
8 開始在三個Ubuntu服務器上配置相應的節點
 
(1)在主節點133上設置如下:
編輯mysql配置文件/etc/my.cnf,沒有的話就自己創建該文件。
cd /etc
nano  -w  my.cnf
在該文件中添加內容:
[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
 
特別注意:
(1)確保mysql配置文件包括 conf.d/.
!includedir /etc/mysql/conf.d/

(2)
確保二進制日志格式設置為使用行級復制,而不是語句級復制。
binlog_format=ROW
(3)確保默認InnoDB存儲引擎
default_storage_engine=InnoDB

Galera集群不會使用MyISAM或類似nontransactional存儲引擎。

 
 
 
(2)在從節點132上設置如下:

[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

 
 
(3)在從節點134上設置如下:
 

[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

 
 
 
9 啟動集群
當您完成安裝和配置Galera集群時,您已經准備好要使用的數據庫了,但是它們還沒有連接到一起來形成集群。要做到這一點,您需要在一個節點上啟動mysqld,使用--wsrep-new-cluster新建集群選項。這將初始化集群的新主組件。在此之后開始的每個節點將連接到組件並開始復制。
 
(1)啟動第一個集群節點
         默認情況下,節點不會作為主組件的一部分開始。相反,他們假設主組件已經存在於集群中的某個地方。當節點開始時,它們嘗試與集群中的其他節點建立網絡連接。對於他們找到的每個節點,他們檢查是否它是主組件的一部分。當他們找到主組件時,他們請求一個狀態傳輸,以便將本地數據庫與集群同步。如果他們找不到主要的組件,則仍然處於非操作狀態。
         集群啟動時沒有主組件。為了初始化它,您需要顯式地告訴一個節點使用--wsrep-new-cluster新建集群參數來執行此操作。按照約定,初始化主組件的節點稱為第一個節點,因為它是第一個開始運行的節點。當您啟動一個新的集群時,任何節點都可以作為第一個節點,因為所有的數據庫都是空的。 
         記住,第一個節點只是“第一個”,它初始化主組件。這個節點可以落在后面,離開集群而不必影響主組件。要啟動第一個節點,在第一個節點上啟動數據庫服務器。要使用的命令取決於您的操作系統和Galera集群版本。
                 

對所有系統使用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:該值表明該節點連接到集群並能夠處理事務。
2 在node1的數據庫客戶機上,創建一個表和插入數據:
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丟失,節點不服務請求。
   (2)重新連接網絡連接。quorum仍然丟失,節點不提供請求
    (3)在一個數據庫客戶機上,重新設置quorum:
                          SET GLOBAL wsrep_provider_options='pc.bootstrap=1';
        quorum被重置,集群恢復
 
 
 
(3)故障仿真
您還可以通過模擬三個節點上的各種故障情況來測試Galera集群:
要模擬單個mysqld進程的崩潰,可以在下面的一個節點上運行以下命令:
killall -9 mysqld
為了模擬網絡斷開,使用iptables或netem來阻止所有的ip流量到一個節點
要模擬整個服務器崩潰,在虛擬的來賓中運行每個mysqld,並徹底終止整個虛擬實例

(4)重啟集群
 偶爾,您可能不得不重新啟動整個Galera集群。例如,在停電的情況下,每個節點都被關閉,並且根本沒有mysqld進程,這可能會發生。
 
要重新啟動整個Galera集群,請完成以下步驟:
 
使用數據狀態最新的節點狀態ID標識節點。
 
啟動該節點作為集群的第一個節點。
 
像往常一樣啟動節點的其余部分。
 
如何識別數據最新的節點:通過比較集群中不同節點上的全局事務ID值來確定數據最新的節點的狀態ID。你可以在grastate.dat文件中找到它。該文件位於數據庫的datadir中,如果grastate.dat文件如下所見,您已經找到了數據最新的節點的狀態ID:
# 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
這個值是節點狀態ID,您可以使用它來手動更新grastate.dat文件。通過為seqno字段輸入該文件,或者讓 mysqld_safe 自動恢復,並在下一次啟動時將值傳遞給數據庫服務器。
 
 
(5)引導的安全保護
從提供者版本3.19開始,Galera還提供了額外的保護,以防止在集群關閉之前的集群中最后一個節點上使用一個節點來引導集群.
如果Galera能夠決定性地確定最后一個節點是哪個節點,那么它將被標記為“安全引導”,就像這個例子中的grastate.dat:
# 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。
 
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM