1. 程式人生 > >如何在CentOS 7上使用HAproxy Loadbalancer設定Percona XtraDB叢集(負載均衡)

如何在CentOS 7上使用HAproxy Loadbalancer設定Percona XtraDB叢集(負載均衡)

翻譯&轉載來源:https://linoxide.com/cluster/setup-percona-cluster-haproxy-centos-7/

 

如何在CentOS 7上使用HAproxy Loadbalancer設定Percona叢集

我們之前展示瞭如何使用HAproxy設定MariaDB Galera叢集,今天我們將使用Percona的MySQL發行版進行類似的設定。Percona是一家擁有MySQL和MongoDB深厚專業知識的公司,他們自己分發這些資料庫以及兩個資料庫的儲存引擎。今天我們只專注於MySQL,而不是專注於該公司的MongoDB產品。

 

設定主機,防火牆和儲存庫

首先通過設定hosts檔案啟動。我們為Percona叢集提供了三個節點,為HAproxy提供了一個節點。所有4臺伺服器上的主機檔案都包含以下四行:

10.17.0.8 centos-percona01 
10.17.0.9 centos-percona02 
10.17.0.10 centos-percona03 
10.17.0.11 centos-haproxy

接下來讓我們在除HAproxy之外的所有主機上設定firewalld。那將需要不同的設定,我們將做後者。首先讓我們在所有三個percona節點上啟動firewalld。

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

完成後,接下來我們需要安裝epel版本

yum install epel-release

接下來,我們從EPEL儲存庫安裝socat

yum install socat

然後我們刪除mariadb-libs,因為它與percona衝突

yum remove mariadb-libs

 

安裝和設定Percona

我們需要新增包含percona的儲存庫

yum install https://www.percona.com/redir/downloads/percona-release/redhat/0.1-4/percona-release-0.1-4.noarch.rpm

現在我們可以安裝percona叢集和所有其他依賴項

yum install Percona-XtraDB-Cluster-server-56 Percona-XtraDB-Cluster-client-56 Percona-XtraDB-Cluster-shared-56 percona-toolkit percona-xtrabackup Percona-XtraDB-Cluster-galera-3 rsync nc

並啟動mysql

systemctl  start mysql

我們在所有mysql伺服器上做的第一件事就是執行mysql_secure_installation指令碼。所以我們來做吧。

mysql_secure_installation

您需要輸入新的root密碼並回答所有問題。

完成後,登入到您的root帳戶

mysql -u root -p

輸入密碼

併為您的群集建立sstuser

mysql> create user [email protected]'%' identified by 'strongpassword';
Query OK, 0 rows affected (0.01 sec)

mysql> grant all on *.* to [email protected]'%';
Query OK, 0 rows affected (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)

在此之後我們必須停止Mysql編輯配置檔案。

systemctl stop mysql

nano /etc/my.cnf

在配置中找到這些行並使它們看起來像這樣,只需更改您自己的密碼並將節點名稱和節點地址更改為每個伺服器的主機名

wsrep_cluster_address = gcomm://centos-percona01,centos-percona02,centos-percona03
wsrep_provider = /usr/lib64/galera3/libgalera_smm.so

wsrep_slave_threads = 8
wsrep_cluster_name = Cluster Percona XtraDB
wsrep_node_name = centos-percona01
wsrep_node_address = centos-percona01
wsrep_sst_method = xtrabackup-v2
wsrep_sst_auth = sstuser:strongpassword

請注意,第一臺伺服器上的第一行(centos-percona01)可以為空,如下所示:

wsrep_cluster_address = gcomm://

配置完成後,我們需要引導第一個節點,然後通常啟動第二個和第三個節點。

在第一臺伺服器上執行

systemctl start [email protected]

在第二和第三臺Percona XtraDB Cluster伺服器執行

systemctl start mysql

第二和第三臺Percona XtraDB Cluster伺服器的/etc/my.cnf

wsrep_cluster_address = gcomm://centos-percona01,centos-percona02,centos-percona03
wsrep_provider = /usr/lib64/galera3/libgalera_smm.so

wsrep_slave_threads = 8
wsrep_cluster_name = Cluster Percona XtraDB
wsrep_node_name = centos-percona02
wsrep_node_address = centos-percona02
wsrep_sst_method = xtrabackup-v2
wsrep_sst_auth = sstuser:strongpassword
wsrep_cluster_address = gcomm://centos-percona01,centos-percona02,centos-percona03
wsrep_provider = /usr/lib64/galera3/libgalera_smm.so

wsrep_slave_threads = 8
wsrep_cluster_name = Cluster Percona XtraDB
wsrep_node_name = centos-percona03
wsrep_node_address = centos-percona03
wsrep_sst_method = xtrabackup-v2
wsrep_sst_auth = sstuser:strongpassword

接下來我們需要測試叢集是否正常工作。

mysql -u root -p

輸入密碼

然後執行以下命令:

SHOW STATUS LIKE 'wsrep_local_state_comment';

show global status like 'wsrep_cluster_size';

他們應該得到這樣的輸出:

通過此群集設定結束。

 

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: 40

Percona 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節點叢集。它與上週與MariaDB和Galera的文章類似,但使用Percona儲存引擎而沒有WordPress。這個Percona設定可用於託管各種各樣的資料集,您可以再次使用它與WordPress一起使用,就像我們之前的文章一樣。我們總結這篇文章,感謝您閱讀並度過了愉快的一天。