如何在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

PS: 建议使用下面命令:

  • yum install http://www.percona.com/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

PS:建议不要安装PXC-56版本,应安装PXC-57版本:

  • yum install Percona-XtraDB-Cluster-57

并启动mysql

systemctl  start mysql

我们在所有mysql服务器上做的第一件事就是运行mysql_secure_installation脚本。所以我们来做吧。

mysql_secure_installation

您需要输入新的root密码并回答所有问题。

完成后,登录到您的root帐户

mysql -u root -p

输入密码

并为您的群集创建sstuser

mysql> create user sstuser@'%' identified by 'strongpassword';
Query OK, 0 rows affected (0.01 sec)

mysql> grant all on *.* to sstuser@'%';
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 mysql@bootstrap

在第二和第三台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';

他们应该得到这样的输出:

通过此群集设置结束。

PS: 上述配置有可能出现启动失败的情况,按照下面进行错误排查

# systemctl start mysql@bootstrap启动失败
# Failed to start Percona XtraDB Cluster with config /etc/sysconfig/mysql.bootstrap.

# 这个错误排查,需要在 /etc/my.cnf文件的第一行加上 [mysqld] ,其他的节点的/etc/my.cnf文件都需配置,示例如下:
[mysqld]                                                                                                                                   
!includedir /etc/my.cnf.d/                                                                                                                 
!includedir /etc/percona-xtradb-cluster.conf.d/                                                                                                                                                                                                                                     
wsrep_cluster_address = gcomm://PerconaXtraDBCluster001,PerconaXtraDBCluster002,PerconaXtraDBCluster003                                    
wsrep_provider = /usr/lib64/galera3/libgalera_smm.so                                                                                                                                                                                                                               
wsrep_slave_threads = 8                                                                                                                    
wsrep_cluster_name = Percona XtraDB Cluster                                                                                                
wsrep_node_name = PerconaXtraDBCluster001                                                                                                  
wsrep_node_address = PerconaXtraDBCluster001                                                                                               
wsrep_sst_method = xtrabackup-v2                                                                                                           
wsrep_sst_auth = sstuser:strongpassword                                                                                                    
~                                            
# PXC 5.7启动的时候收到一个无效用户的提示,查询到这是一个5.7 PXC的Bug,也就是说当mysql的错误日志文件不存在的时候,会产生这个无效用户的错误
下面我们创建这个错误日志文件,注意,日志文件名应与my.cnf中配置一致
[root@pro-db-8 pxcdata]# touch /var/log/mysqld.log
[root@pro-db-8 pxcdata]# chown mysql:mysql /var/log/mysqld.log 
 

 

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;

# 注意,这里设置权限时,可能失败,报密码强度问题,使用下面命令出来:

mysql> set global validate_password_policy=0;

mysql> set global validate_password_length=4;

接下来,我们可以测试clustercheck是否按预期工作:

[root@centos-percona01 ~]# 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一起使用,就像我们之前的文章一样。我们总结这篇文章,感谢您阅读并度过了愉快的一天。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值