使用Percona XtraDB Cluster建立MySQL資料庫叢集(1/2: 叢集安裝與設定)

Percona XtraDB Cluster是個高可靠又容易擴充的MySQL資料庫伺服器叢集, 安裝上簡單設定容易, 依照Percona官方網站照著步驟做就能輕易完成, 我們就來實際安裝一遍。

本系列文章將分成兩個部份:
一、Percona XtraDB Cluster安裝與設定
二、HAProxy安裝與設定

HAProxy是個廣泛用途的負載平衡伺服器, 會需要它來放在資料庫叢集前與應用程式容易對接, 並且可以用來偵測資料庫叢集裡的伺服器狀態。

那麼就開始安裝Percona XtraDB Cluster, 作業系統同樣採用Debian 7.6, 我們設定叢集有三台機器, 都是2GB RAM, 給予以下的hostname與IP位址:
pxc1 192.168.1.201
pxc2 192.168.1.202
pxc3 192.168.1.203

方法大致與以前"使用DRBD與Heartbeat建構高可靠性的MySQL資料庫伺服器"系列文章中的Percona Server安裝相似, 只差在安裝套件與設定檔。

我們先參考此文安裝好Percona的套件伺服器並且更新apt套件庫, 就可以安裝Percona XtraDB Cluster了。目前最新版是5.6, 套件名稱為"percona-xtradb-cluster-56"。

安裝Percona XtraDB Cluster 5.6
apt-get install percona-xtradb-cluster-56


使用Percona XtraDB Cluster建立MySQL資料庫叢集(1/2: 叢集安裝與設定)
可以看到一併安裝許多Percona XtraDB Cluster需要的套件。

使用Percona XtraDB Cluster建立MySQL資料庫叢集(1/2: 叢集安裝與設定)
安裝完成, 同樣要先停止伺服器。

停止伺服器
/etc/init.d/mysql stop


使用Percona XtraDB Cluster建立MySQL資料庫叢集(1/2: 叢集安裝與設定)
移除套件的my.cnf, 放上我們自己的設定檔。

編輯my.cnf
cd /etc/mysql
rm my.cnf
nano my.cnf


將以下內容貼進my.cnf, 請註意這是pxc1專用的
[mysqld]
binlog_format = ROW
character_set_server = utf8
collation_server = utf8_unicode_ci
datadir = /var/lib/mysql
default_storage_engine = InnoDB
expire_logs_days = 7
innodb_additional_mem_pool_size = 64M
innodb_autoinc_lock_mode = 2
innodb_buffer_pool_instances = 1
innodb_buffer_pool_size = 1638M
innodb_data_file_path = ibdata1:64M;ibdata2:64M:autoextend
innodb_file_format = Barracuda
innodb_file_per_table
innodb_flush_log_at_trx_commit = 2
innodb_flush_method = O_DIRECT
innodb_io_capacity = 200
innodb_log_file_size = 64M
innodb_print_all_deadlocks = 1
innodb_support_xa = FALSE
key_buffer_size = 32M
max_allowed_packet = 64M
max_connect_errors = 4294967295
max_connections = 4096
port = 3306
skip-name-resolve
thread_cache = 1024
transaction_isolation = REPEATABLE-READ
user = mysql
wsrep_cluster_address = gcomm://192.168.1.201,192.168.1.202,192.168.1.203
wsrep_cluster_name = my_cluster
wsrep_node_address = 192.168.1.201
wsrep_provider = /usr/lib/libgalera_smm.so
wsrep_sst_auth = "sstuser:s3cretPass"
wsrep_sst_method = xtrabackup-v2


使用Percona XtraDB Cluster建立MySQL資料庫叢集(1/2: 叢集安裝與設定)
移除名為ibdata1與lb_logfile的所有檔案。

移除系統自行啟動後產生的log檔
cd /var/lib/mysql
rm ibdata1
rm ib_logfile*


接著起動叢集裡的第一台機器(pxc1), 有專用的指令
/etc/init.d/mysql bootstrap-pxc

請注意bootstrap-pxc僅用在初始叢集, 以後只需要用到start, stop...等參數。

使用Percona XtraDB Cluster建立MySQL資料庫叢集(1/2: 叢集安裝與設定)
叢集的第一台伺服器完成啟動, 它的資料庫檔案也將是其他伺服器sync的來源。

先進MySQL console, 看看叢集狀態
mysql -u root -p


進入之後, 使用以下SQL指令來查看叢集相關參數設定
SHOW STATUS LIKE 'wsrep%';


使用Percona XtraDB Cluster建立MySQL資料庫叢集(1/2: 叢集安裝與設定)
使用Percona XtraDB Cluster建立MySQL資料庫叢集(1/2: 叢集安裝與設定)
所有"wsrep"開頭的參數都列出來了(中間有些省略)。

參數要注意的有:
wsrep_local_state_comment
wsrep_cluster_size
wsrep_cluster_status
wsrep_connected
wsrep_ready

有多少機器連到叢集就看wsrep_cluster_size, 目前只有pxc1。

接著繼續在pxc1上建立MySQL資料庫帳號"sstuser", 用於sync使用。Percona XtraDB Cluster有幾種sync方法, Percona稱之為SST(State Snapshot Transfer), 有mysqldump, rsync與xtrabackup, 本例採用xtrabackup, 所以my.cnf的wsrep_sst_method的設定值為"xtrabackup-v2"。

還需要wsrep_sst_auth參數所設定的MySQL sync帳號與密碼, 此設定值只有使用xtrabackup-v2才需要。

建立sstuser帳號與權限, 當然要用root也是可以的。
增加用戶"sstuser"與其密碼
CREATE USER 'sstuser'@'localhost' IDENTIFIED BY 's3cretPass';


賦予"sstuser"用戶權限
GRANT RELOAD, LOCK TABLES, REPLICATION CLIENT ON *.* TO 'sstuser'@'localhost';


更新權限設定
FLUSH PRIVILEGES;


使用Percona XtraDB Cluster建立MySQL資料庫叢集(1/2: 叢集安裝與設定)
這樣pxc1就完成設定。

叢集pxc2安裝方法與pxc1相同, my.cnf有一個地方有差異, 設定值wsrep_node_address
wsrep_node_address = 192.168.1.202


使用Percona XtraDB Cluster建立MySQL資料庫叢集(1/2: 叢集安裝與設定)
請注意pxc2的wsrep_node_address的IP位址

使用Percona XtraDB Cluster建立MySQL資料庫叢集(1/2: 叢集安裝與設定)
啟動方法就跟一般MySQL伺服器起動一樣。

pxc2的啟動
/etc/init.d/mysql start


會需要點時間, 如果你已經有自己的資料庫, 那就更需要時間做sync, 可以查看log最後的訊息, 或是pxc2.err這個log檔。

檢視log
cd /var/lib/mysql
tail innobackup.prepare.log

看到"completed OK!"就是正常sync了。

暫時回到pxc1 MySQL console , 再跑一次SHOW STATUS LIKE 'wsrep%';
使用Percona XtraDB Cluster建立MySQL資料庫叢集(1/2: 叢集安裝與設定)
wsrep_cluster_size的值已經變為2, pxc1與pxc2已加入叢集。

再來就是最後一台伺服器pxc3的安裝, 一樣修改wsrep_node_address的IP位址
使用Percona XtraDB Cluster建立MySQL資料庫叢集(1/2: 叢集安裝與設定)
pxc3是192.168.1.203。

如果你有更多台叢集, 那麼就是修改"wsrep_cluster_address = gcomm://192.168.1.201,192.168.1.202,192.168.1.203"這個設定值, 最前面的是第一個結點, 叢集建立時從它那裡sync資料, 您可以用逗號分開你的伺服器IP位址接下去。

pxc3一樣平常的啟動方式
/etc/init.d/mysql start


使用Percona XtraDB Cluster建立MySQL資料庫叢集(1/2: 叢集安裝與設定)
叢集其他機器(例如pxc2, pxc3...這些)的/var/lib/mysql下的檔案, 是可以整個刪掉, sync時會從pxc1來拉資料。

使用Percona XtraDB Cluster建立MySQL資料庫叢集(1/2: 叢集安裝與設定)
sync完成。

再回到pxc1, 查看叢集伺服器數量
SHOW STATUS LIKE 'wsrep%'\G


使用Percona XtraDB Cluster建立MySQL資料庫叢集(1/2: 叢集安裝與設定)
wsrep_cluster_size的值已經變為3, 全部都已經加入叢集了。

使用Percona XtraDB Cluster建立MySQL資料庫叢集(1/2: 叢集安裝與設定)
用netstat指令可以看到pxc2與pxc3來pxc1(port 4567)建立連線。

接著補完各台機器my.cnf的設定
pxc1上
nano /etc/mysql/my.cnf

編輯wsrep_cluster_address這個設定值為
wsrep_cluster_address = gcomm://

並且在最後面補上
log_slave_updates
server_id = 1

儲存pxc1的my.cnf設定

pxc2也一樣, 只是有wsrep_cluster_address要指定pxc1
nano /etc/mysql/my.cnf

編輯wsrep_cluster_address這個設定值為
wsrep_cluster_address = gcomm://192.168.1.201

192.168.1.201就是pxc1的IP位址
並且在最後面補上
log_slave_updates
server_id = 2

請注意server_id別跟pxc1衝到, 儲存pxc2的my.cnf設定

pxc3則與pxc2同樣作法
nano /etc/mysql/my.cnf

編輯wsrep_cluster_address這個設定值為
wsrep_cluster_address = gcomm://192.168.1.201

並且在最後面補上
log_slave_updates
server_id = 3

儲存pxc3的my.cnf設定, 這樣各節點有重新啟動伺服器, 開關機的動作都能正常回到叢集, 如果要加新機器到叢集, 則設定值都與pxc2, pxc3一樣, 只要修改server_id設定值。

您可以隨意在任何一台機器上建個database、table, 插入資料, 在各台機器上都可以看到相同資料。下回將介紹HAProxy的安裝與設定, 方便讓你的應用程式連接。

今日熱門文章 網友點擊推薦!

文章分享
評分
複製連結