Galera是一款可以讓MySQL同步複製的工具,實現真正的雙主、多主,客戶端連接到不同的MySQL實例進行讀寫操作就跟操作同一個實例一樣,多個MySQL之間的數據是完全一致的。Galera主要是在保證數據一致性的前提下提高整體讀的吞吐量,因此比MySQL自帶主從方式更好。
Galera並沒有分表分庫功能,如果想要使用Galera,又想分表分庫,可與Cobar結合使用,Cobar下如果使用Galara可以獲得更高的可靠性,數據一致性,避免有些Cobar切換了主從,而另外一些沒切換帶來的數據不一致問題。
第一步:下載安裝
使用galera時,還需要一個Galera庫,官方下載地址是http://galeracluster.com/downloads/ 。
Galera需要的MySQL/MariaDB版本有一個額外wsrep的補丁,因此不能直接用普通的版本。MySQL的版本可以從Galera的官網下載到,目前提供5.5和5.6兩個版本。
MariaDB的版本可以從MariaDB的官網下載到https://downloads.mariadb.org/mariadb-galera/ ,MariaDB的10.0對應MySQL的5.6。
源碼編譯galera前需要安裝的依賴庫有boost,scons,check,openssl的開發版,您可根據自己的情況安裝。galera使用scons安裝,因此跟常規的命令不同,其實只要執行一個腳本即可。
$ scripts/build.sh
編譯後在當前目錄下生成libgalera_smm.so文件。
第二步:配置
Galera只需要在MySQL的配置文件my.cnf中增加幾行wsrep相關內容即可
[mysqld] # 配置前面編譯出來的libgalera_smm.so文件路徑 wsrep_provider = /home/lyw/c2/galera-3-25.3.12/libgalera_smm.so # 配置整個集羣各實例的ip:port wsrep_cluster_address = 'gcomm://192.168.1.8:24011,192.168.1.8:24021,192.168.1.8:24031' # 配置自己的ip:port,每個配置各不相同 wsrep_node_address = '192.168.1.8:24011'
其他配置根據自己的情況配置。我這裏配置了3個,my11.cnf,my21.cnf,my31.cnf。
第三步:初始化
初始化同MySQL一樣,對每個數據庫執行一下 mysql_install_db 腳本即可:
$ scripts/mysql_install_db --defaults-file=etc/my11.cnf $ scripts/mysql_install_db --defaults-file=etc/my21.cnf $ scripts/mysql_install_db --defaults-file=etc/my31.cnf
第四步:啓動
前面配置的三臺MySQL,我們先啓動第一臺,需要設置 --wsrep_cluster_address=gcomm:// 參數:
$ bin/mysqld_safe --defaults-file=etc/my11.cnf --wsrep_cluster_address=gcomm:// &
等待第一臺啓動成功後,我們啓動後面兩臺,這個時候不需要上面的參數,實際上是使用了配置文件中的值:
$ bin/mysqld_safe --defaults-file=etc/my21.cnf & $ bin/mysqld_safe --defaults-file=etc/my31.cnf &
這樣就整個集羣就啓動好了,以後如果有某進程掛了,需要重啓,就不需要加--wsrep_cluster_address參數。
第五步:測試
啓動好後我們要測試下是否真的成功。我這裏使用mysql客戶端,您可使用自己喜歡的客戶端工具,注意這裏連接的端口是MySQL的端口,而不是上面Galera的端口。
$ bin/mysql -uroot -h127.0.0.1 -P14011 MariaDB [(none)]> create database lyw;
$ bin/mysql -uroot -h127.0.0.1 -P14021 MariaDB [(none)]> show databases like 'lyw'; +----------------+ | Database (lyw) | +----------------+ | lyw | +----------------+ 1 row in set (0.00 sec)
$ bin/mysql -uroot -h127.0.0.1 -P14031 MariaDB [(none)]> show databases like 'lyw'; +----------------+ | Database (lyw) | +----------------+ | lyw | +----------------+ 1 row in set (0.00 sec)
可見在一個庫裏作了一個操作,在其他庫中也有了相同的修改,Galera啓動成功。
我們也可以查看wsrep相關的參數判斷是否啓動成功:
MariaDB [(none)]> show variables like 'wsrep_on'; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | wsrep_on | ON | +---------------+-------+ MariaDB [(none)]> show status like 'wsrep_connected'; +-----------------+-------+ | Variable_name | Value | +-----------------+-------+ | wsrep_connected | ON | +-----------------+-------+ MariaDB [(none)]> show status like 'wsrep_ready'; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | wsrep_ready | ON | +---------------+-------+
wsrep_on 值爲ON則說明啓動成功。
wsrep_connected值爲ON說明連接到了集羣。
wsrep_ready值爲ON說明已經準備好接受SQL請求了。該值最關鍵。
wsrep打頭的參數都是跟galera相關的,其他的在使用中慢慢研究了。