原作者:Percona官网 翻译&转载来源:https://www.percona.com/doc/percona-xtradb-cluster/LATEST/howtos/centos_howto.html
本教程介绍如何使用Percona存储库中的软件包在CentOS 6.8服务器上安装和配置三个Percona XtraDB Cluster节点。
percona1
192.168.70.71
percona2
192.168.70.72
percona3
192.168.70.73
本教程中描述的过程需要以下内容:
在所有三个节点上安装Percona XtraDB集群,如在Red Hat Enterprise Linux和CentOS上安装Percona XtraDB集群中所述。
强调:您需要在要安装Percona XtraDB Cluster的节点上具有root访问权限(以具有root权限的用户身份登录或能够运行命令sudo
), 另外,如果您不想配置防火墙的权限,直接systemctl stop firewalld关闭即可,selinux也直接关闭即可,然后跳到从Percona存储库安装这里开始阅读。
确保以下端口未被防火墙阻止或被其他软件使用。Percona XtraDB Cluster需要它们进行通信。
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 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
应将单个节点配置为能够引导群集。有关引导群集的更多信息,请参阅引导第一个节点。
配置所有PXC节点后,通过自举的第一个节点初始化集群。初始节点应该是包含所有数据的节点,您希望将其复制到其他节点。
Bootstrapping意味着在没有任何已知集群地址的情况下启动节点。如果wsrep_cluster_address
变量为空,Percona XtraDB Cluster假定这是第一个节点并初始化集群。
不使用更改配置,而是使用以下命令启动第一个节点:
[root@pxc1 ~]# /etc/init.d/mysql bootstrap-pxc
注意:在RHEL或CentOS 7上,使用以下bootstrap命令
[root@pxc1 ~]# systemctl start [email protected]
使用上一个命令启动节点时,它以bootstrap模式运行wsrep_cluster_address=gcomm://
。这告诉节点初始化wsrep_cluster_conf_id
集合设置为1
。在您添加其他节点的集群,可以再重新启动该节点为正常,这将再次使用的标准配置。
要确保已初始化群集,请运行以下命令:
mysql@pxc1> 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创建用户并为其提供必要的权限。凭据必须与配置写入集复制节点时指定的凭据相匹配。
mysql@pxc1> CREATE USER 'sstuser'@'localhost' IDENTIFIED BY 'passw0rd';
mysql@pxc1> GRANT RELOAD, LOCK TABLES, PROCESS, REPLICATION CLIENT ON *.* TO
'sstuser'@'localhost';
mysql@pxc1> 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"
使用以下命令启动第一个节点:
[root@percona1 ~]# /etc/init.d/mysql bootstrap-pxc
如果您正在运行CentOS 7,则应使用引导服务:
[ root@percona1 ~] #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帐户留下空密码。密码可以更改如下:
mysql@percona1> UPDATE mysql.user SET password=PASSWORD("Passw0rd") where user='root';
mysql@percona1> FLUSH PRIVILEGES;
要使用XtraBackup执行状态快照传输,请设置具有适当权限的新用户:
mysql@percona1> CREATE USER 'sstuser'@'localhost' IDENTIFIED BY 's3cret';
mysql@percona1> GRANT PROCESS, RELOAD, LOCK TABLES, REPLICATION CLIENT ON *.* TO 'sstuser'@'localhost';
mysql@percona1> FLUSH PRIVILEGES;
MySQL root帐户也可以用于执行SST,但为此使用不同的(非root用户)更安全。
确保/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
[root@percona2 ~]# /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)
此输出显示新节点已成功添加到群集。
确保/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 使用下面命令
[root@percona3 ~]# /etc/init.d/mysql start
# RedHat/Fedora/CentOS7 使用下面命令:
[root@percona3 ~]# 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 秒)
在第三个节点上创建一个表:
mysql@percona3 > USE demopercona ;
数据库已 更改
mysql@percona3 > CREATE TABLE demotable (node_id INT PRIMARY KEY , node_name VARCHAR (30 ));
查询 OK , 0 行 影响 (0 。05 秒)
在第一个节点上插入记录:
mysql@percona1 > INSERT INTO demopercona.demotable VALUES (1 , 'percona1' );
查询 行, 1 行 的影响 (0 。02 秒)
从第二个节点上的该表中检索所有行:
mysql@percona2 > SELECT * FROM demopercona.demotable;
+ --------- + ----------- +
| node_id | node_name |
+ --------- + ----------- +
| 1 | percona1 |
+ --------- + ----------- +
1 行 中 集合 (0 。00 秒)
此简单过程应确保群集中的所有节点都已同步并按预期工作,到此为止Percona的集群配置完毕。下面部分是提高篇,如果您已经通过上述配置成功实现了集群,也就是您测试,如果在一个数据库中增删改查会同步到其他服务器,那么集群就部署成功,本图文教程您已经成功完成,接下来可以再接再厉,完成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是否按预期工作:
[root@centos-percona01 ~]# 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
我们现在需要测试设置。
让我们将浏览器指向端口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节点集群。