close

設定MariaDB Cluster

首先要確定二台資料庫的機器都已經安裝好MariaDB後,我們就要開始設定Cluster了。下方我們先針對資料庫1的機器來執行設定

啟動MariaDB

請先以root的相同權限的帳號登入資料庫1,登入後我們就要啟動MariaDB,透過下方的指令 service mysql start來啟動MariaDB(這邊指令雖然是mysql,但實際上啟動的是MariaDB)

設定MariaDB的root密碼

請輸入指令/usr/bin/mysql_secure_installation

這時會詢問目前的root密碼,因為還沒有設定所以直接按Enter通過。

接著下來是詢問是否設定密碼,輸入y後,接著輸入密碼,我們在這邊先輸入一個dbpass的密碼。

接下來詢問的是是否刪除MariaDB用的預設使用者,一樣輸入y後,進入下一個設定。

接著是詢問是否允許root從遠端登入,因為我們等一下會做相關設定,所以先輸入y後,繼續接著設定。

詢問是否刪除一個預設的test資料庫,test資料庫是用來做簡單的連線測試用而已,請自行判斷需不需要保留,我們這邊不保留,輸入y後刪除test。

最後是詢問設定是否要立即生效,當然是y啦。

這樣就設定完成了,其實除了輸入密碼外,全部都按y就對了。注意一點,上述的設定只在資料庫1上設定而已,資料庫2先不動。

新增sst_user的使用者與權限設定

這個部份要進入到MariaDB裡做設定,所以我們要先進入到MariaDB的命令列,進入的指令是:

mysql -uroot -p  (-u後接使用者名稱,-p代表需要密碼),輸入剛剛設定的密碼dbpass後,進入到資料庫的命令列。

輸入下列指令

  1. DELETE FROM mysql.user WHERE user='';
    =>說明:刪除使用者名稱為空的刪除

  2. GRANT ALL ON *.* TO 'root'@'%' IDENTIFIED BY 'dbpass';

=>說明:建立root的最大權限,其中*.*代表所有資料庫及資料表,'root'@'%' 代表使用者root可從任意一個IP登入;如果要限制IP,將'%'改為IP即可,例如:'root'@'192.168.43.2' ,最後設定root的密碼為dbpass。

  1. GRANT USAGE ON *.* to sst_user@'%' IDENTIFIED BY 'dbpass';

=>說明:同上,不過使用者名稱換為sst_user。

  1. GRANT ALL PRIVILEGES on *.* to sst_user@'%';

=>說明:設定所有的權限給sst_user。

  1. FLUSH PRIVILEGES;

=>說明:即時生效。

  1. quit

=>說明:離開MariaDB的命令列。

結果如下圖。

關閉MariaDB服務

因為要設定Cluster時,會動到MariaDB的設定檔,而設定檔要生效,MariaDB必須重啟,所以我們就直接先停掉MariaDB後,再來調整調定檔,關閉MariaDB的指令如下: service mysql stop

設定Cluster

剛剛上方的講述的指令,都是在資料庫1的機器下運作,接下來的Cluster設定,則是分別在資料庫1與資料庫2上執行。

首先我們來編輯資料庫1上的/etc/my.cnf.d/server.cnf檔案,指令如下:

vi /etc/my.cnf.d/server.cnf

在vi模式下,按下G(大寫)來跳到檔案的最下方,加入下方文字:

binlog_format=ROW
default-storage-engine=innodb
innodb_autoinc_lock_mode=2
innodb_locks_unsafe_for_binlog=1
query_cache_size=0
query_cache_type=0
bind-address=0.0.0.0
datadir=/var/lib/mysql
innodb_log_file_size=100M
innodb_file_per_table
innodb_flush_log_at_trx_commit=2
wsrep_provider=/usr/lib64/galera/libgalera_smm.so
wsrep_cluster_address="gcomm://192.168.43.101,192.168.43.102"
wsrep_cluster_name='galera_cluster'
wsrep_node_address='192.168.43.101'
wsrep_node_name='DB1'
wsrep_sst_method=rsync
wsrep_sst_auth=sst_user:dbpass

 

一樣在資料庫2上編輯/etc/my.cnf.d/server.cnf,在最下方加入如下內容:

binlog_format=ROW
default-storage-engine=innodb
innodb_autoinc_lock_mode=2
innodb_locks_unsafe_for_binlog=1
query_cache_size=0
query_cache_type=0
bind-address=0.0.0.0
datadir=/var/lib/mysql
innodb_log_file_size=100M
innodb_file_per_table
innodb_flush_log_at_trx_commit=2
wsrep_provider=/usr/lib64/galera/libgalera_smm.so
wsrep_cluster_address="gcomm://192.168.43.101,192.168.43.102"
wsrep_cluster_name='galera_cluster'
wsrep_node_address='192.168.43.102'
wsrep_node_name='DB2'
wsrep_sst_method=rsync
wsrep_sst_auth=sst_user:dbpass

我們加入的文字有四段是粗體字,我們來解釋一下這個部份:

  1. wsrep_cluster_address="gcomm://192.168.43.101,192.168.43.102"
    說明:這段在描述有那幾台機器的IP是要架設Cluster的。

  2. wsrep_node_address='192.168.43.102'

說明:當前機器的IP。

  1. wsrep_node_name='DB2'

說明:機器的別名,可用來判斷當前是連到那一台。

  1. wsrep_sst_auth=sst_user:dbpass

說明:我們在上一節新增的使用者sst_user及密碼。
 

啟動MariaDB Cluster

MariaDB Cluster特性與啟動順序

MariaDB Cluster是屬於AA(Active-Active)特性的Cluster,所以在一開始啟動時,必須先人工判斷是否已經有Cluster內的機器處於Active狀態,如果有的話,啟動指令是:

service mysql start

;如果沒有的話,啟動指令會變成:

service mysql bootstrap

這樣子說明可能有點抽象,我們來假設一下各種情況,我們先假設我們有三台資料庫在做Cluster,分別是db1、db2與db3。

  • 狀況1:db1、db2、db3皆未啟動。

此時因為沒有任何一台是屬於Active的狀況,所以請不要三台同時啟動,而是先選擇一台啟動,啟動指令為service mysql bootstrap。確定第一台啟動成功後,後續二台的啟動指令為service mysql start

  • 狀況2:db1一開始下的指令為service mysql bootstrap,接下來db2與db3下指令service mysql start後,正常啟動MariaDB;不過此時db1因故需重開機。

在這種狀況下,因為Cluster裡已經有Active的機器,所以即使db1一開始的啟動命令為service mysql bootstrap,不過重新啟動的命令是:service mysql start

總之,只有Cluster裡第一台啟動的命令比較特殊,之後的啟動命令就比較正常。

啟動MariaDB Cluster

請務必先在資料庫1的機器上下service mysql bootstrap的指令,因為我們的使用者root、sst_user是在資料庫1上。

確認資料庫1的MariaDB啟動成功後,再到資料庫2執行service mysql start。

此時會看到一段奇怪的文字「SST in progress, setting sleep higher.」,代表二邊的資料在同步,同步完後就可以使用了。

 

測試Cluster功能

即然我們Cluster設定並啟動了,接下來我們就是來確認Cluster結果。

利用root登入資料庫2

還有印象我們並沒有設定資料庫2的root密碼嗎?如果Cluster成功啟動的話,我們就可以直接用資料庫1的設定密碼dbpass登入資料庫2了。

上圖是從利用帳號root,與密碼dbpass,成功登入資料庫2的擷圖。

在資料庫2建立資料表,並在資料庫1查看

上圖是在資料庫2上執行建立資料庫的指令後,下圖是切換到資料庫1的機器上查看,我們可以看到資料已經被同步了。

至此我們已經完成MariaDB的安裝了。不過,因為是Cluster的架構,所以如果直接指定IP來連線的話,當機器掛掉時,無法做failover的處理,那就浪費了Cluster的架構了,為了儘量發揮Cluster的架構,我們還需要一台Load Balance來幫我們做分流與failover。

arrow
arrow

    JAVA Programmer 發表在 痞客邦 留言(0) 人氣()