为 MySQL 选择高可用性解决方案以防止停机和数据丢失,确实是 IT 系统管理员需要处理的重要课题之一。
今天,我们将介绍 Percona XtraDB Cluster,这是市场上的 MYSQL 高可用性解决方案之一。
我们将添加一个带有 KeepAlived 的 HAProxy 备份节点,以防止对 CentOS 7/RHEL 7 上的 Percona XtraDB 集群节点的任何停机访问。
第 1 步:HAProxy 安装和配置
1安装HAProxy(备份节点)
[jack@onitroad ~]# yum install haproxy -y
2HAProxy文件配置:
[jack@onitroad ~] # mv /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.org [jack@onitroad ~] # vi /etc/haproxy/haproxy.cfg
你的文件配置应该是这样的。
#global log 127.0.0.1 local0 log 127.0.0.1 local1 notice maxconn 4096 uid 99 gid 99 #daemon debug #quiet defaults log global mode http option tcplog option dontlognull retries 3 redispatch maxconn 2000 contimeout 5000 clitimeout 50000 srvtimeout 50000 listen mysql-cluster 0.0.0.0:3306 mode tcp balance roundrobin option httpchk server pxc01 192.168.1.10:3306 check port 9200 inter 12000 rise 3 fall 3 server pxc02 192.168.1.11:3306 check port 9200 inter 12000 rise 3 fall 3 server pxc03 192.168.1.12:3306 check port 9200 inter 12000 rise 3 fall 3 listen stats 0.0.0.0:9000 ## HAProxy stats web gui running on port 9000 - username lotfi and password: secret mode http stats enable stats uri /stats stats realm HAProxy\ Statistics stats auth lotfi:secret stats admin if TRUE
3防火墙调整
[jack@onitroad ~]# firewall-cmd --permanent --add-port=9000/tcp [jack@onitroad ~]# firewall-cmd --permanent --add-port=3030/tcp [jack@onitroad ~]# firewall-cmd --reload
4启动/启用HAProxy
[jack@onitroad ~]# systemctl enable haproxy [jack@onitroad ~]# systemctl start haproxy
第 3 步:检查和测试
– 使用端口 9000 上的 2 个 HAProxy 节点共享的浮动(虚拟)IP 地址打开浏览器:
所有节点都在线,现在让我们尝试使用浮动IP地址从客户端机器查询集群
[jack@onitroad ~]# mysql -u user -p -h 192.168.1.100 -P 3306 -e "SELECT * FROM clustertest.employees" Enter password: +--------+------------------+ | number | name | +--------+------------------+ | 1 | Lotfi Waderni | | 2 | Goir Andrea | | 3 | Filipo Goir | +--------+------------------+
最后,我们可以通过关闭 HAProxy 负载均衡器之一来测试 Percona XtraDB 集群的高可用性。
第 2 步:安装和配置 KeepAlived
1安装KeepAlived(负载均衡节点)
[jack@onitroad ~]# yum install keepalived -y
2获取设备名称
[jack@onitroad ~]# nmcli con show NAME UUID TYPE DEVICE eno16777736 fa2f5a44-e4ea-4cd1-98bf-bc69bacfb1ee 802-3-ethernet ens33
就像你在上面看到的,我的网络设备名称是 ens33
3 KeepAlived配置HAProxy主节点
在两个负载均衡器节点上,我们必须备份 keepAlived 配置文件
[jack@onitroad ~]# mv /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.org
在主负载均衡器 lb01.yallalab.com 打开 /etc/keepalived/keepalived.conf 并添加以下配置
[jack@onitroad ~]# vi /etc/keepalived/keepalived.conf vrrp_script chk_haproxy { script "killall -0 haproxy" # check the haproxy process interval 2 # every 2 seconds weight 2 # add 2 points if OK } vrrp_instance VI_1 { interface ens33 # interface to monitor state MASTER # MASTER on hAProxy1, BACKUP on hAProxy2 virtual_router_id 51 priority 101 # 101 on hAProxy1, 100 on hAProxy2 virtual_ipaddress { 192.168.1.100 # virtual ip address } track_script { chk_haproxy } }
3 KeepAlived配置HAProxy Bakup节点
– 在备份负载均衡器 lb02.yallalab.com 上打开 /etc/keepalived/keepalived.conf 并添加以下配置
[jack@onitroad ~]# mv /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.org [jack@onitroad ~]# vi /etc/keepalived/keepalived.conf vrrp_script chk_haproxy { script "killall -0 haproxy" # check the haproxy process interval 2 # every 2 seconds weight 2 # add 2 points if OK } vrrp_instance VI_1 { interface ens33 # interface to monitor state BACKUP # MASTER on hAProxy1, BACKUP on hAProxy2 virtual_router_id 51 priority 100 # 101 on hAProxy1, 100 on hAProxy2 virtual_ipaddress { 192.168.1.100 # virtual ip address } track_script { chk_haproxy } }
-注意主备HAProxy有不同的优先级
4启用/启动KeepAlived
在两个 Haproxy 负载平衡节点上,使用以下命令启用并启动 KeepAlived 服务:
[jack@onitroad ~]# systemctl enable keepalived [jack@onitroad ~]# systemctl start keepalived
5检查KeepAlived
要验证KeepAlived是否正在运行,我们可以使用以下命令检查是否为ens33设备分配了浮动IP
[jack@onitroad ~]# ip addr show ens33 2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 00:0c:29:d5:01:2a brd ff:ff:ff:ff:ff:ff inet 192.168.1.15/24 brd 192.168.1.255 scope global ens33 valid_lft forever preferred_lft forever inet 192.168.1.100/32 scope global ens33 valid_lft forever preferred_lft forever inet6 fe80::20c:29ff:fed5:12a/64 scope link valid_lft forever preferred_lft forever
要验证 KeepAlived 是否正在运行,我们可以使用以下命令检查日志文件或者 ping Float IP:
[jack@onitroad ~]# ping 192.168.1.100 -c3 PING 192.168.1.100 (192.168.1.100) 56(84) bytes of data. 64 bytes from 192.168.1.100: icmp_seq=1 ttl=64 time=0.173 ms 64 bytes from 192.168.1.100: icmp_seq=2 ttl=64 time=0.115 ms 64 bytes from 192.168.1.100: icmp_seq=3 ttl=64 time=0.096 ms --- 192.168.1.100 ping statistics -- 3 packets transmitted, 3 received, 0% packet loss, time 2004ms rtt min/avg/max/mdev = 0.096/0.128/0.173/0.032 ms [jack@onitroad ~]# tail -f /var/log/messages
环境
本实验将由三个 CentOS 7 服务器/节点和 2 个 HAProxy 节点负载均衡器组成。
- 节点 1
- 主机名:pxc01.onitroad.com
- IP 地址:192.168.1.10
- 节点 2
- 主机名:pxc02.onitroad.com
- IP 地址:192.168.1.11
- 节点 3
- 主机名:pxc03.onitroad.com
- IP地址:192.168.1.12
- HAProxy 1
- 主机名:lb01.onitroad.com
- IP 地址:192.168.1.15
- HAProxy 2
- 主机名:lb02.onitroad.com
- IP地址:192.168.1.16
- HAProxy 1 和 HAProxy 2 之间共享的浮动(虚拟)IP
- IP 地址:192.168.1.100