在CentOS上配置Percona XtraDB叢集(Percona XtraDB Cluster)
原作者:Percona官網 翻譯&轉載來源:https://www.percona.com/doc/percona-xtradb-cluster/LATEST/howtos/centos_howto.html
在CentOS上配置Percona XtraDB叢集(Percona XtraDB Cluster)
本教程介紹如何使用Percona儲存庫中的軟體包在CentOS 6.8伺服器上安裝和配置三個Percona XtraDB Cluster節點。
- 節點1
- 主機名:
percona1
- IP地址:
192.168.70.71
- 主機名:
- 節點2
- 主機名:
percona2
- IP地址:
192.168.70.72
- 主機名:
- 節點3
- 主機名:
percona3
- IP地址:
192.168.70.73
- 主機名:
先決條件
本教程中描述的過程需要以下內容:
- 所有三個節點都安裝了CentOS 6.8 (使用CentOS7/Fedora/RedHat都應該沒有問題)。
- 所有節點上的防火牆都配置為允許連線到埠3306,4444,4567和4568。
- 所有節點上的SELinux都被禁用。
步驟1.安裝PXC
在所有三個節點上安裝Percona XtraDB叢集,如在Red Hat Enterprise Linux和CentOS上安裝Percona XtraDB叢集中所述。
強調:您需要在要安裝Percona XtraDB Cluster的節點上具有root訪問許可權(以具有root許可權的使用者身份登入或能夠執行命令sudo
), 另外,如果您不想配置防火牆的許可權,直接systemctl stop firewalld關閉即可,selinux也直接關閉即可,然後跳到從Percona儲存庫安裝這裡開始閱讀。
確保以下埠未被防火牆阻止或被其他軟體使用。Percona XtraDB Cluster需要它們進行通訊。
- 3306
- 4444
- 4567
- 4568
systemctl start firewalld
然後我們允許mysql服務。Pecona是mysql發行版,所以它使用與mysql相同的埠。
firewall-cmd --zone=public --add-service=mysql --permanent
接下來我們新增其他所需埠:
firewall-cmd --zone=public --add-port=3306/tcp --permanent
firewall-cmd --zone=public --add-port=4567/tcp --permanent
firewall-cmd --zone=public --add-port=4568/tcp --permanent
firewall-cmd --zone=public --add-port=4444/tcp --permanent
firewall-cmd --zone=public --add-port=4567/udp --permanent
firewall-cmd --zone=public --add-port=9200/tcp --permanent
並重新載入防火牆
firewall-cmd --reload
在SELinux的安全模組可以限制訪問,為的Percona XtraDB Cluster資料。最好解決方案是從改變模式enforcing
以permissive
通過執行下面的命令:
setenforce 0
這隻會在執行時更改模式。要在重新引導後以允許模式執行SELinux,請在/etc/selinux/config
配置檔案中進行設定:
SELINUX=permissive
從Percona儲存庫安裝¶
按照Percona Software Repositories Documentation中的說明配置Percona儲存 庫。
# 安裝源,percona版本的儲存庫
$ yum install https://www.percona.com/redir/downloads/percona-release/redhat/0.1-4/percona-release-0.1-4.noarch.rpm
安裝Percona XtraDB Cluster軟體包:
$ sudo yum install Percona-XtraDB-Cluster-57
或者,您可以安裝Percona-XtraDB-Cluster-full-57元軟體包
$ sudo yum install Percona-XtraDB-Cluster-full-57.x86_64
Percona-XtraDB-Cluster-full-57.x86_64 其中包含以下附加軟體包:
Percona-XtraDB-Cluster-devel-57
Percona-XtraDB-Cluster-test-57
Percona-XtraDB-Cluster-debuginfo-57
Percona-XtraDB-Cluster-galera-3-debuginfo
Percona-XtraDB-Cluster-shared-57
啟動Percona XtraDB群集伺服器:
$ sudo service mysql start
複製超級使用者帳戶的自動生成的臨時密碼:
$ sudo grep 'temporary password' /var/log/mysqld.log
使用此密碼登入為root
:
$ mysql -u root -p
更改超級使用者帳戶的密碼並登出。例如:
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'rootPass';
Query OK, 0 rows affected (0.00 sec)
mysql> exit
Bye
停止mysql
服務:
$ sudo service mysql stop
步驟2.配置第一個節點
應將單個節點配置為能夠引導群集。有關引導群集的更多資訊,請參閱引導第一個節點。
配置所有PXC節點後,通過自舉的第一個節點初始化叢集。初始節點應該是包含所有資料的節點,您希望將其複製到其他節點。
Bootstrapping意味著在沒有任何已知叢集地址的情況下啟動節點。如果wsrep_cluster_address
變數為空,Percona XtraDB Cluster假定這是第一個節點並初始化叢集。
不使用更改配置,而是使用以下命令啟動第一個節點:
[[email protected] ~]# /etc/init.d/mysql bootstrap-pxc
注意:在RHEL或CentOS 7上,使用以下bootstrap命令
[[email protected] ~]# systemctl start [email protected]
使用上一個命令啟動節點時,它以bootstrap模式執行wsrep_cluster_address=gcomm://
。這告訴節點初始化wsrep_cluster_conf_id
集合設定為1
。在您新增其他節點的叢集,可以再重新啟動該節點為正常,這將再次使用的標準配置。
要確保已初始化群集,請執行以下命令:
[email protected]> show status like 'wsrep%';
+----------------------------+--------------------------------------+
| Variable_name | Value |
+----------------------------+--------------------------------------+
| wsrep_local_state_uuid | c2883338-834d-11e2-0800-03c9c68e41ec |
| ... | ... |
| wsrep_local_state | 4 |
| wsrep_local_state_comment | Synced |
| ... | ... |
| wsrep_cluster_size | 1 |
| wsrep_cluster_status | Primary |
| wsrep_connected | ON |
| ... | ... |
| wsrep_ready | ON |
+----------------------------+--------------------------------------+
40 rows in set (0.01 sec)
前面的輸出顯示群集大小為1個節點,它是主要元件,節點處於Synced
狀態,它已完全連線並準備進行寫入集複製。
在將其他節點新增到新群集之前,請為SST建立使用者併為其提供必要的許可權。憑據必須與配置寫入集複製節點時指定的憑據相匹配。
[email protected]> CREATE USER 'sstuser'@'localhost' IDENTIFIED BY 'passw0rd';
[email protected]> GRANT RELOAD, LOCK TABLES, PROCESS, REPLICATION CLIENT ON *.* TO
'sstuser'@'localhost';
[email protected]> FLUSH PRIVILEGES;
有關更多資訊,請參閱Percona XtraBackup的許可權。
確保/etc/my.cnf
第一個節點(percona1
)上的配置檔案包含以下內容:
[mysqld]
datadir=/var/lib/mysql
user=mysql
# Path to Galera library
wsrep_provider=/usr/lib64/libgalera_smm.so
# Cluster connection URL contains the IPs of node#1, node#2 and node#3
wsrep_cluster_address=gcomm://192.168.70.71,192.168.70.72,192.168.70.73
# 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.70.71
# SST method
wsrep_sst_method=xtrabackup-v2
# Cluster name
wsrep_cluster_name=my_centos_cluster
# Authentication for SST method
wsrep_sst_auth="sstuser:s3cret"
使用以下命令啟動第一個節點:
[[email protected] ~]# /etc/init.d/mysql bootstrap-pxc
如果您正在執行CentOS 7,則應使用引導服務:
[ [email protected] ~] #systemctl start [email protected]
上一個命令將啟動叢集,並將初始wsrep_cluster_address
變數設定為gcomm://
。如果稍後重新啟動節點或MySQL,則無需更改配置檔案。
啟動第一個節點後,可以使用以下命令檢查叢集狀態:
show status like 'wsrep%';
mysql > show status like 'wsrep%';
+ ---------------------------- + -------------------- ------------------ +
| Variable_name | 價值 |
+ ---------------------------- + -------------------- ------------------ +
| wsrep_local_state_uuid | c2883338 - 834 d - 11 e2 - 0800 - 03 c9c68e41ec |
......
| wsrep_local_state | 4 |
| wsrep_local_state_comment | Synced |
...
| wsrep_cluster_size | 1 |
| wsrep_cluster_status | Primary |
| wsrep_connected | ON |
......
| wsrep_ready | ON |
+ ---------------------------- + -------------------- ------------------ +
40 行 中 集合 (0 。01 秒)
此輸出顯示群集已成功引導。
建議不要為root帳戶留下空密碼。密碼可以更改如下:
[email protected]> UPDATE mysql.user SET password=PASSWORD("Passw0rd") where user='root';
[email protected]> FLUSH PRIVILEGES;
要使用XtraBackup執行狀態快照傳輸,請設定具有適當許可權的新使用者:
[email protected]> CREATE USER 'sstuser'@'localhost' IDENTIFIED BY 's3cret';
[email protected]> GRANT PROCESS, RELOAD, LOCK TABLES, REPLICATION CLIENT ON *.* TO 'sstuser'@'localhost';
[email protected]> FLUSH PRIVILEGES;
MySQL root帳戶也可以用於執行SST,但為此使用不同的(非root使用者)更安全。
步驟3.配置第二個節點
確保/etc/my.cnf
第二個節點(percona2
)上的配置檔案包含以下內容:
[mysqld]
datadir=/var/lib/mysql
user=mysql
# Path to Galera library
wsrep_provider=/usr/lib64/libgalera_smm.so
# Cluster connection URL contains IPs of node#1, node#2 and node#3
wsrep_cluster_address=gcomm://192.168.70.71,192.168.70.72,192.168.70.73
# 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.70.72
# Cluster name
wsrep_cluster_name=my_centos_cluster
# SST method
wsrep_sst_method=xtrabackup-v2
#Authentication for SST method
wsrep_sst_auth="sstuser:s3cret"
使用以下命令啟動第二個節點:
# 如果是RedHat6/CentOS6
[[email protected] ~]# /etc/init.d/mysql start
# 如果是CentOS7/RedHat7/Fedora29
$ sudo systemctl start mysql.service
服務器啟動後,它應自動接收SST。這意味著第二個節點將不再具有空的root密碼。為了連線到群集並檢查狀態,應使用第一個節點的root密碼。可以在兩個節點上檢查群集狀態。以下是第二個節點(percona2
)的狀態示例:
mysql> show status like 'wsrep%';
+----------------------------+--------------------------------------+
| Variable_name | Value |
+----------------------------+--------------------------------------+
| wsrep_local_state_uuid | c2883338-834d-11e2-0800-03c9c68e41ec |
...
| 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)
此輸出顯示新節點已成功新增到群集。
步驟4.配置第三個節點
確保/etc/my.cnf
第三個節點(percona3
)上的MySQL配置檔案包含以下內容:
[mysqld]
datadir=/var/lib/mysql
user=mysql
# Path to Galera library
wsrep_provider=/usr/lib64/libgalera_smm.so
# Cluster connection URL contains IPs of node#1, node#2 and node#3
wsrep_cluster_address=gcomm://192.168.70.71,192.168.70.72,192.168.70.73
# 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 #3 address
wsrep_node_address=192.168.70.73
# Cluster name
wsrep_cluster_name=my_centos_cluster
# SST method
wsrep_sst_method=xtrabackup-v2
#Authentication for SST method
wsrep_sst_auth="sstuser:s3cret"
使用以下命令啟動第三個節點:
# centos6 使用下面命令
[[email protected] ~]# /etc/init.d/mysql start
# RedHat/Fedora/CentOS7 使用下面命令:
[[email protected] ~]# systemctl start mysql.service
服務器啟動後,它應自動接收SST。可以在所有三個節點上檢查群集狀態。以下是第三個節點(percona3
)的狀態示例:
mysql > show status like 'wsrep%' ;
+ ---------------------------- + -------------------- ------------------ +
| Variable_name | 價值 |
+ ---------------------------- + -------------------- ------------------ +
| wsrep_local_state_uuid | c2883338 - 834 d - 11 e2 - 0800 - 03 c9c68e41ec |
......
| wsrep_local_state | 4 |
| wsrep_local_state_comment | 同步 |
...
| wsrep_cluster_size | 3 |
| wsrep_cluster_status | 小學 |
| wsrep_connected | ON |
......
| wsrep_ready | ON |
+ ---------------------------- + -------------------- ------------------ +
40 行 中 集合 (0 。01 秒)
此輸出確認第三個節點已加入群集。
測試複製
要測試複製,我們在第二個節點上建立一個新資料庫,在第三個節點上為該資料庫建立一個表,並在第一個節點上向表中新增一些記錄。
-
在第二個節點上建立一個新資料庫:
mysql @ percona2 > CREATE DATABASE demopercona ; 查詢 行, 1 行 的影響 (0 。01 秒)
-
在第三個節點上建立一個表:
[email protected] > USE demopercona ; 資料庫已 更改 [email protected] > CREATE TABLE demotable (node_id INT PRIMARY KEY , node_name VARCHAR (30 )); 查詢 OK , 0 行 影響 (0 。05 秒)
-
在第一個節點上插入記錄:
[email protected] > INSERT INTO demopercona.demotable VALUES (1 , 'percona1' ); 查詢 行, 1 行 的影響 (0 。02 秒)
-
從第二個節點上的該表中檢索所有行:
[email protected] > SELECT * FROM demopercona.demotable; + --------- + ----------- + | node_id | node_name | + --------- + ----------- + | 1 | percona1 | + --------- + ----------- + 1 行 中 集合 (0 。00 秒)
此簡單過程應確保群集中的所有節點都已同步並按預期工作,到此為止Percona的叢集配置完畢。下面部分是提高篇,如果您已經通過上述配置成功實現了叢集,也就是您測試,如果在一個數據庫中增刪改查會同步到其他伺服器,那麼叢集就部署成功,本圖文教程您已經成功完成,接下來可以再接再厲,完成Haproxy的負載均衡。下面是利用Haproxy配置則三臺叢集伺服器的負載均衡。
HAproxy設定
首先,我們需要在所有群集節點上安裝clustercheck,以便群集可以通過HAproxy進行維護。讓我們用wget獲取指令碼
wget https://raw.githubusercontent.com/olafz/percona-clustercheck/master/clustercheck
指令碼需要可執行並移動到您的$ PATH目錄之一。
chmod +x clustercheck
mv clustercheck /usr/bin/
現在我們還需要包含在xinetd包中的mysqlchk:
yum install xinetd
接下來,我們在資料庫上移動create clustercheck user。我們只能在第一個節點上輸入
mysql -u root -p
mysql> GRANT PROCESS ON *.* TO 'clustercheckuser'@'localhost' IDENTIFIED BY 'clustercheckpassword!';
exit;
接下來,我們可以測試clustercheck是否按預期工作:
[[email protected] ~]# clustercheck
HTTP/1.1 200 OK
Content-Type: text/plain
Connection: close
Content-Length: 40Percona XtraDB Cluster Node is synced.
接下來我們轉到xinetd的配置,需要將xinetd新增到服務列表中。
nano /etc/services
我們使用CTRL-W查詢埠9200的部分,然後我們推薦使用該埠的服務,而不是新增新行。它需要看起來像這樣:
mysqlchk 9200/tcp # mysqlchk
#wap-wsp 9200/tcp # WAP connectionless session service
#wap-wsp 9200/udp # WAP connectionless session service
我們完成後,我們儲存。請注意,除HAproxy之外的所有群集節點都需要完成此操作。
現在是時候登入我們的HAporoxy伺服器了。首先,我們需要備份haproxy配置。
mv /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.bk
然後我們將從乾淨的配置檔案上設定新的配置
nano /etc/haproxy/haproxy.cfg
我們可以從這裡複製HAproxy配置,除了這三行需要更改,請修改為對應的IP和埠:
server centos-percona01 10.132.84.186:3306 check port 9200 inter 12000 rise 3 fall 3
server centos-percona02 10.132.84.141:3306 check port 9200 inter 12000 rise 3 fall 3
server centos-percona03 10.132.84.67:3306 check port 9200 inter 12000 rise 3 fall 3
需要使用您的主機名和地址更改突出顯示的部分。接下來我們需要在haproxy伺服器上啟動firewalld並允許我們需要使用的埠
systemctl start firewalld
firewall-cmd --permanent --add-port=9000/tcp
firewall-cmd --permanent --add-port=3030/tcp
之後我們需要重新載入防火牆
firewall-cmd --reload
最後,開始haproxy
systemctl start haproxy
我們現在需要測試設定。
測試HAproxy
讓我們將瀏覽器指向埠9000上HAproxy伺服器的公共IP地址:
所有節點都線上。接下來讓我們在haproxy伺服器上安裝percona客戶端,這樣我們就可以嘗試從那裡查詢叢集。
yum install https://www.percona.com/redir/downloads/percona-release/redhat/0.1-4/percona-release-0.1-4.noarch.rpm
yum install Percona-XtraDB-Cluster-client-56
讓我們試著看看我們是否可以從這個haproxy伺服器獲得一個查詢:
mysql -u root -p -h 10.132.83.13 -P 3306 -e "select Host, User, Password from mysql.user"
結論
我們已經設定了由HAproxy負載均衡的Percona XtraDB 3節點叢集。