翻译&转载来源:/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 removemariadb-libs
安装和设置Percona
我们需要添加包含percona的存储库
yum install /redir/downloads/percona-release/redhat/0.1-4/percona-release-0.1-4.noarch.rpm
PS: 建议使用下面命令:
yum install /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 usersstuser@'%' identified by 'strongpassword';
Query OK, 0 rows affected (0.01 sec)
mysql> grant all on *.* tosstuser@'%';
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/f
在配置中找到这些行并使它们看起来像这样,只需更改您自己的密码并将节点名称和节点地址更改为每个服务器的主机名
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 startmysql@bootstrap
在第二和第三台Percona XtraDB Cluster服务器运行
systemctl start mysql
第二和第三台Percona XtraDB Cluster服务器的/etc/f
wsrep_cluster_address = gcomm://centos-percona01,centos-percona02,centos-percona03wsrep_provider = /usr/lib64/galera3/libgalera_smm.sowsrep_slave_threads = 8wsrep_cluster_name = Cluster Percona XtraDBwsrep_node_name = centos-percona02wsrep_node_address = centos-percona02wsrep_sst_method = xtrabackup-v2wsrep_sst_auth = sstuser:strongpassword
wsrep_cluster_address = gcomm://centos-percona01,centos-percona02,centos-percona03wsrep_provider = /usr/lib64/galera3/libgalera_smm.sowsrep_slave_threads = 8wsrep_cluster_name = Cluster Percona XtraDBwsrep_node_name = centos-percona03wsrep_node_address = centos-percona03wsrep_sst_method = xtrabackup-v2wsrep_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/f文件的第一行加上 [mysqld] ,其他的节点的/etc/f文件都需配置,示例如下:[mysqld] !includedir /etc/f.d/ !includedir /etc/percona-xtradb-cluster.conf.d/ wsrep_cluster_address = gcomm://PerconaXtraDBCluster001,PerconaXtraDBCluster002,PerconaXtraDBCluster003wsrep_provider = /usr/lib64/galera3/libgalera_smm.so wsrep_slave_threads = 8wsrep_cluster_name = Percona XtraDB Clusterwsrep_node_name = PerconaXtraDBCluster001 wsrep_node_address = PerconaXtraDBCluster001wsrep_sst_method = xtrabackup-v2 wsrep_sst_auth = sstuser:strongpassword~
# PXC 5.7启动的时候收到一个无效用户的提示,查询到这是一个5.7 PXC的Bug,也就是说当mysql的错误日志文件不存在的时候,会产生这个无效用户的错误下面我们创建这个错误日志文件,注意,日志文件名应与f中配置一致[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 /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~]# clustercheckHTTP/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 /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一起使用,就像我们之前的文章一样。我们总结这篇文章,感谢您阅读并度过了愉快的一天。