如何在Debian 8上安裝Percona XtraDB Cluster for MySQL
翻譯&轉載來源:https://www.howtoforge.com/tutorial/how-to-install-percona-xtradb-cluster-for-mysql/
在本文中,我將向您展示如何在多主複製中配置具有三個節點的MySQL資料庫叢集。多主複製允許在每個節點中寫入記錄,因此如果一個節點失敗,我們可以在另一個節點上工作,好像什麼也沒發生。
Percona的官方文件可以在官方網站https://www.percona.com/上找到。
首先,為什麼我們選擇三個節點而不僅僅是兩個節點?在任何叢集中,節點數應該是奇數,因此在斷開節點的情況下,我們假設最高伺服器組具有新資料,並且應該複製到下行節點以避免資料丟失。這僅與解決資料複製中的衝突有關,我們不會將只寫入斷開的節點的資料丟失。
這用於避免稱為裂腦的情況,其中我們無法自動選擇哪個節點具有正確的資料。例如,考慮兩個節點彼此斷開連線的2節點叢集,並將相同的記錄寫入兩個節點:當他們重新聯機時誰贏了?我們不知道,所以裂腦發生了,我們必須手動決定哪個記錄是正確的。
確定叢集中哪些部分具有正確資料所需的節點數稱為QUORUM,在我們的示例中,仲裁將為2.因此我們需要2臺伺服器始終相互連線。如果所有三個節點都會關閉,我們就會分裂大腦,我們必須決定伺服器應該手動進入自舉模式,這是確定將從分裂腦中恢復的主要伺服器的過程。
在Debian 8上配置Percona XtraDB叢集
本教程描述瞭如何在Debian 8伺服器上安裝和配置三個Percona XtraDB Cluster節點,我們將使用Percona儲存庫中的軟體包。
- 伺服器1
- 主機名:mysql1.local.vm
- IP地址:192.168.152.100
- 節點2
- 主機名: mysql2.local.vm
- IP地址:192.168.152.110
- 節點3
- 主機名: mysql3.local.vm
- IP地址:192.168.152.120
在每臺主機上,按如下所示修改檔案/ etc / hosts以確保DNS正常工作。
127.0.0.1 localhost 192.168.152.100 mysql1.local.vm mysql1 192.168.152.110 mysql2.local.vm mysql2 192.168.152.120 mysql3.local.vm mysql3 # The following lines are desirable for IPv6 capable hosts ::1 localhost ip6-localhost ip6-loopback ff02::1 ip6-allnodes ff02::2 ip6-allrouters
先決條件
本教程中描述的過程需要以下最小的伺服器設定:
- 所有三個節點都有Debian 8,我將按照本指南進行操作 https://www.howtoforge.com/tutorial/debian-8-jessie-minimal-server/
步驟1.安裝Percona Xtradb群集
在所有節點上,以root身份執行以下命令:
wget https://repo.percona.com/apt/percona-release_0.1-4.$(lsb_release -sc)_all.deb
dpkg -i percona-release_0.1-4.$(lsb_release -sc)_all.deb
apt-get update
apt-get -y install percona-xtradb-cluster-57
顯然,輸入您要選擇的mysql密碼。
安裝軟體包後,mysqld將自動啟動。使用/etc/init.d/mysql stop在所有三個節點上停止mysqld。
步驟2.配置第一個節點
應將單個節點配置為能夠引導群集。有關引導群集的更多資訊,請參閱引導群集。
-
確保新增這些行到配置檔案/etc/mysql/my.cnf在的[mysqld]部分的端部的第一個節點(mysql1.local.vm):
[mysqld]
...
# Path to Galera library
wsrep_provider=/usr/lib/libgalera_smm.so
# Cluster connection URL contains the IPs of node#1, node#2 and node#3
wsrep_cluster_address=gcomm://192.168.152.100,192.168.152.110,192.168.152.120
# In order for Galera to work correctly binlog format should be ROW
binlog_format=ROW
# MyISAM storage engine has only experimental support
default_storage_engine=InnoDB
# This InnoDB autoincrement locking mode is a requirement for Galera
innodb_autoinc_lock_mode=2
# Node #1 address
wsrep_node_address=192.168.152.100
# SST method
wsrep_sst_method=xtrabackup-v2
# Cluster name
wsrep_cluster_name=my_ubuntu_cluster
# Authentication for SST method
wsrep_sst_auth="sstuser:PASSW0RD"
-
在我的案例“PASSW0RD”中注意您設定的密碼。
-
使用以下命令啟動第一個節點:
[email protected]:~# /etc/init.d/mysql bootstrap-pxc
此命令將啟動第一個節點並引導群集,如果一切正常,您將看到類似的內容:
[email protected]:~# /etc/init.d/mysql bootstrap-pxc
[ ok ] Bootstrapping Percona XtraDB Cluster database server: mysqld ..
[email protected]:~#
在第一個節點啟動後,使用經典的mysql -p命令連線到mysql,然後可以檢查叢集狀態,執行查詢顯示狀態,如'wsrep%';如下例所示:
mysql> show status like 'wsrep%'; +----------------------------+--------------------------------------+ | Variable_name | Value | +----------------------------+--------------------------------------+ | wsrep_local_state_uuid | 0251a27c-8a19-11e6-905b-f3f13b0ddc5b | ... | wsrep_local_state | 4 | | wsrep_local_state_comment | Synced | ... | wsrep_cluster_size | 1 | | wsrep_cluster_status | Primary | | wsrep_connected | ON | ... | wsrep_ready | ON | +----------------------------+--------------------------------------+ 59 rows in set (0.00 sec)
此輸出顯示群集已成功引導。
要使用XtraBackup執行狀態快照傳輸,請設定具有適當許可權的新使用者:
mysql> CREATE USER 'sstuser'@'localhost' IDENTIFIED BY 'PASSW0RD'; mysql> GRANT PROCESS, RELOAD, LOCK TABLES, REPLICATION CLIENT ON *.* TO 'sstuser'@'localhost'; mysql> FLUSH PRIVILEGES;
MySQL root帳戶也可用於執行SST,但使用其他(非root)使用者更安全。
步驟3.配置第二個節點
-
追加以下幾行到配置檔案/etc/mysql/my.cnf第二節點(mysql2.local.vm)上,以便它包含以下資料:
[mysqld] ... # Path to Galera library wsrep_provider=/usr/lib/libgalera_smm.so # Cluster connection URL contains the IPs of node#1, node#2 and node#3 wsrep_cluster_address=gcomm://192.168.152.100,192.168.152.110,192.168.152.120 # In order for Galera to work correctly binlog format should be ROW binlog_format=ROW # MyISAM storage engine has only experimental support default_storage_engine=InnoDB # This InnoDB autoincrement locking mode is a requirement for Galera innodb_autoinc_lock_mode=2 # Node #2 address wsrep_node_address=192.168.152.110 # SST method wsrep_sst_method=xtrabackup-v2 # Cluster name wsrep_cluster_name=my_ubuntu_cluster # Authentication for SST method wsrep_sst_auth="sstuser:PASSW0RD"
使用以下命令啟動第二個節點(此時請注意,因為您可以看到不處於boostrap模式!!):
[email protected]:~# /etc/init.d/mysql start
伺服器啟動後,它應自動接收SST。現在可以在兩個節點上檢查群集狀態。以下是第二個節點(mysql2.local.vm)的狀態示例:
mysql> show status like 'wsrep%'; +----------------------------+--------------------------------------+ | Variable_name | Value | +----------------------------+--------------------------------------+ | wsrep_local_state_uuid | 0251a27c-8a19-11e6-905b-f3f13b0ddc5b | ... | wsrep_local_state | 4 | | wsrep_local_state_comment | Synced | ... | wsrep_cluster_size | 2 | | wsrep_cluster_status | Primary | | wsrep_connected | ON | ... | wsrep_ready | ON | +----------------------------+--------------------------------------+ 40 rows in set (0.01 sec) 此輸出顯示新節點已成功新增到群集。注意變數wsrep_cluster_size已經變為2,而不是我們做的第一個查詢之一。
步驟4.配置第三個節點
追加以下幾行到配置檔案/etc/mysql/my.cnf第二節點(mysql3.local.vm)上,所以它包含以下配置:
[mysqld] ... # Path to Galera library wsrep_provider=/usr/lib/libgalera_smm.so # Cluster connection URL contains the IPs of node#1, node#2 and node#3 wsrep_cluster_address=gcomm://192.168.152.100,192.168.152.110,192.168.152.120 # In order for Galera to work correctly binlog format should be ROW binlog_format=ROW # MyISAM storage engine has only experimental support default_storage_engine=InnoDB # This InnoDB autoincrement locking mode is a requirement for Galera innodb_autoinc_lock_mode=2 # Node #2 address wsrep_node_address=192.168.152.120 # SST method wsrep_sst_method=xtrabackup-v2 # Cluster name wsrep_cluster_name=my_ubuntu_cluster # Authentication for SST method wsrep_sst_auth="sstuser:PASSW0RD"
使用以下命令啟動第三個節點:
[email protected]:~# /etc/init.d/mysql start
伺服器啟動後,它應自動接收SST。可以在所有節點上檢查群集狀態。以下是第三個節點(mysql3.local.vm)的狀態示例:
mysql> show status like 'wsrep%'; +----------------------------+--------------------------------------+ | Variable_name | Value | +----------------------------+--------------------------------------+ | wsrep_local_state_uuid | 0251a27c-8a19-11e6-905b-f3f13b0ddc5b | ... | wsrep_local_state | 4 | | wsrep_local_state_comment | Synced | ... | wsrep_cluster_size | 3 | | wsrep_cluster_status | Primary | | wsrep_connected | ON | ... | wsrep_ready | ON | +----------------------------+--------------------------------------+ 40 rows in set (0.01 sec)
此輸出確認第三個節點已加入群集。再看看wsrep_cluster_size,它現在變成3而不是2。
如果遇到一些問題,請檢視/ var / log / syslog以檢視是否一切正常
Oct 4 12:16:13 mysql3 mysql[2767]: Starting MySQL (Percona XtraDB Cluster) database server: mysqld . . .State transfer in progress, setting sleep higher: mysqld . ..
Oct 4 12:16:13 mysql3 systemd[1]: Started LSB: Start and stop the mysql (Percona XtraDB Cluster) daemon.
Oct 4 12:17:01 mysql3 CRON[3731]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
在這個問題中,一切順利,你可以看到狀態轉移正在進行中,這意味著資料將被轉移到節點。
測試複製
要測試複製,我們在第二個節點上建立一個新資料庫,在第三個節點上為該資料庫建立一個表,並在第一個節點上向表中新增一些記錄。
在第二個節點上建立一個新資料庫:
[email protected]> CREATE DATABASE percona; Query OK, 1 row affected (0.01 sec)
在第三個節點上建立一個表:
[email protected]> USE percona; Database changed [email protected]> CREATE TABLE example (node_id INT PRIMARY KEY, node_name VARCHAR(30)); Query OK, 0 rows affected (0.05 sec)
在第一個節點上插入記錄:
[email protected]> INSERT INTO percona.example VALUES (1, 'percona1'); Query OK, 1 row affected (0.02 sec)
從第二個節點上的該表中檢索所有行:
[email protected]> SELECT * FROM percona.example; +---------+-----------+ | node_id | node_name | +---------+-----------+ | 1 | percona1 | +---------+-----------+ 1 row in set (0.00 sec)
要確保應用程式始終可以訪問群集,可以在三個節點前新增負載均衡器。