实验背景
前面的实验中只有一台Mycat服务器来给MySQL做读写分离,但是一台 Mycat 服务器容易出现单点故障;所以生产环境一般都部署两台 Mycat 服务器实现高可用,为 MySQL 读写分离持续提供服务
HAproxy简介
haproxy是一个开源的,高性能的,负载均衡软件,借助haproxy可以快速,可靠的构建一个负载均衡群集。
优点如下:
可靠性和稳定性非常好,可以和硬件级的负载均衡设备F5相媲美。
最高可同时维护40000-50000个并发连接,单位时间内处理的最大请求数为20000个。
支持8种负载均衡算法,支持会话保持。
支持虚拟主机功能。
支持连接拒绝,全透明代理并且有一个功能强大的服务器状态监控界面。
拥有功能强大的ACL支持。
1、Mycat高可用方案
使用 HAproxy+keepalived 配合两台 Mycat 搭建 Mycat 集群,实现 Mycat 高可用性。
其中 HAproxy 用来实现 Mycat 多节点的集群高可用和负载均衡;而 HAproxy 自身的高可用性可以通过 keepalived 来实现。
2、架构图
注:以上架构图有点问题,mycat服务器到DB服务器各少了一条链路,知道有这么回事即可
3、实验环境
MySQL集群环境已经存在,不需要部署
一台Mycat服务器已经存在,再增加一台备机即可
master-1:192.168.18.103 (已存在)
slave-1 : 192.168.18.107 (已存在)
master-2 : 192.168.18.104 (已存在)
slave-2 : 192.168.18.108 (已存在)
mycat-1 : 192.168.18.110 (已存在)
mycat-2 : 192.168.18.111
HAproxy主 + keepalived主 :192.168.18.112(10.0.11.55)
HAproxy备 + keepalived备 :192.168.18.113(10.0.11.56)
VIP:192.168.18.115(10.0.11.58)
4、Mycat-2 安装
Mycat-2 服务器的安装 请参考本人的另一篇博文《使用Mycat实现MySQL双主双从架构的读写分离》,该博文链接为 https://www.jianshu.com/p/aaaa192a9696
Mycat-1 和 Mycat-2 的安装步骤和配置文件都一模一样,直接复制粘贴命令即可
5、配置Mycat状态检查服务(在Mycat节点主机上配置)
Mycat服务主机(192.168.18.110、192.168.18.111)上需要增加Mycat服务的状态检测脚本,并开放相应的检测端口,以提供给HAProxy对Mycat的服务状态进行检测判断。可以使用xinetd来实现,通过xinetd,HAProxy可以用httpchk来检测Mycat的存活状态。(xinetd即extended internet daemon,xinetd是新一代的网络守护进程服务程序,又叫超级Internet服务器。经常用来管理多种轻量级Internet服务。xinetd提供类似于inetd+tcp_wrapper的功能,但是更加强大和安全。xinetd 是linux系统的基础服务之一)
以下操作两台mycat服务器都执行相同的命令
1)安装xinetd
如果 xinetd 还没有安装,可以使用如下命令安装:
[root@CentOS-5 ~]#
[root@CentOS-5 ~]# rpm -qa xinetd
[root@CentOS-5 ~]#
[root@CentOS-5 ~]# yum install xinetd
[root@CentOS-5 ~]# rpm -qa xinetd
xinetd-2.3.15-14.el7.x86_64
[root@CentOS-5 ~]#
2)添加 includedir /etc/xinetd.d
检查/etc/xinetd.conf 的文件末尾是否有 includedir /etc/xinetd.d ,如果没有就加上
[root@CentOS-5 ~]#
[root@CentOS-5 ~]# tail -1 /etc/xinetd.conf #可以看出我的环境不需要手动添加
includedir /etc/xinetd.d
[root@CentOS-5 ~]#
[root@CentOS-5 ~]# vi /etc/xinetd.d/mycat_status #增加Mycat存活状态检测服务配置
service mycat_status
{
flags = REUSE
socket_type = stream
port = 48700
wait = no
user = root
server =/usr/local/bin/mycat_status
log_on_failure += USERID
disable = no
}
[root@CentOS-5 ~]#
[root@CentOS-5 ~]# vi /usr/local/bin/mycat_status #添加 /usr/local/bin/mycat_status 服务脚本
#!/bin/bash
#/usr/local/bin/mycat_status.sh
# This script checks if a mycat server is healthy running on localhost. It will
# return:
#
# "HTTP/1.x 200 OK\r" (if mycat is running smoothly)
#
# "HTTP/1.x 503 Internal Server Error\r" (else)
mycat=` /usr/local/mycat/bin/mycat status |grep 'not running'| wc -l`
if [ "$mycat" = "0" ];
then
/bin/echo -e "HTTP/1.1 200 OK\r\n"
else
/bin/echo -e "HTTP/1.1 503 Service Unavailable\r\n"
fi
[root@CentOS-5 ~]#
[root@CentOS-5 ~]# chmod 777 /usr/local/bin/mycat_status #赋予脚本可执行权限
[root@CentOS-5 ~]# chmod 777 /etc/xinetd.d/mycat_status #赋予脚本可执行权限
[root@CentOS-5 ~]# vi /etc/services #在 /etc/services 中加入 mycat_status 服务
# 在文件最末尾加入下面这行内容即可
mycat_status 48700/tcp # mycat_status
[root@CentOS-5 ~]# tail -1 /etc/services
[root@CentOS-5 ~]#
[root@CentOS-5 ~]# systemctl restart xinetd #启动xinted
[root@CentOS-5 ~]# systemctl enable xinetd #设置xinetd开机启动
[root@CentOS-5 ~]#
[root@CentOS-5 ~]# netstat -antup|grep 48700
注意:/etc/xinetd.d/mycat_status里的service mycat_status(服务名)和port = 48700(端口)要与 /etc/services里的相同
5、HAproxy 安装
注:对于安装配置haproxy的操作,haproxy主服务器端和haproxy备服务器端操作命令完全一致;
因此本实验仅写一个haproxy服务器的安装配置流程,省点力气……
HAproxy 主服务器端操作:
将提前准备好的 haproxy 安装包上传到linux
[root@zabbix ~]#
[root@zabbix ~]# rz #上传haproxy安装包到linux
[root@zabbix ~]# ls ha*
haproxy-2.0.13.tar.gz
[root@zabbix ~]#
1)查看内核版本,编译要用到
[root@zabbix ~]#
[root@zabbix ~]# uname -r #查看系统内核版本
3.10.0-862.el7.x86_64
[root@zabbix ~]#
这里内核是 3.10 的可以选择 TARGET=linux310 来安装 haproxy
2)解压安装haproxy安装包
[root@zabbix ~]#
[root@zabbix ~]# tar -zxf haproxy-2.0.13.tar.gz
[root@zabbix ~]# ls
3)安装 haproxy
[root@zabbix ~]# cd haproxy-2.0.13
[root@zabbix haproxy-2.0.13]# make TARGET=linux310 ARCH=x86_64 PREFIX=/usr/local/haproxy
[root@zabbix haproxy-2.0.13]# make install PREFIX=/usr/local/haproxy
[root@zabbix haproxy-2.0.13]#
[root@zabbix haproxy-2.0.13]# cd /usr/local/haproxy/
[root@zabbix haproxy]# ls
doc sbin share
[root@zabbix haproxy]# sbin/haproxy -v #查看haproxy的版本
HA-Proxy version 2.0.13 2020/02/13 - https://haproxy.org/
[root@zabbix haproxy]#
6、配置 haproxy
HAproxy 主服务器端配置:
[root@zabbix ~]#
[root@zabbix ~]# mkdir -p /usr/data/haproxy #创建用于存放 haproxy 进程ID文件的目录
[root@zabbix ~]#
[root@zabbix ~]# vim /usr/local/haproxy/haproxy.conf #创建并编辑 haproxy 的配置文件
# 写入以下内容即可
global
log 127.0.0.1 local0
#log 127.0.0.1 local1 notice
#log loghost local0 info
maxconn 4096
chroot /usr/local/haproxy
pidfile /usr/data/haproxy/haproxy.pid
uid 99
gid 99
daemon
#debug
#quiet
defaults
log global
mode tcp
option abortonclose
option redispatch
retries 3
maxconn 2000
timeout connect 5000
timeout client 50000
timeout server 50000
listen proxy_status
bind :48066
mode tcp
balance roundrobin
server mycat_1 192.168.18.110:8066 check inter 10s
server mycat_2 192.168.18.111:8066 check inter 10s
frontend admin_stats
bind :7777
mode http
stats enable
option httplog
maxconn 10
stats refresh 30s
stats uri /admin
stats auth admin:ctsi.2020
stats hide-version
stats admin if TRUE
[root@zabbix ~]#
[root@zabbix ~]#
7、启动验证
HAproxy 主服务器端验证
[root@zabbix ~]#
[root@zabbix ~]# /usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/haproxy.conf #启动haproxy
[root@zabbix ~]#
[root@zabbix ~]# ps -ef|grep haproxy #查看haproxy程序是否启动成功
1)测试访问
在浏览器中输入haproxy地址
http://10.0.11.55:7777/admin
账号:admin
密码:ctsi.2020
2)验证负载均衡,通过haproxy访问mycat
[root@zabbix ~]#
[root@zabbix ~]# mysql -umycat -p'ctsi.2020' -h 10.0.11.55 -P 48066
8、keepalived 安装配置
由于keepalived服务器两边安装过程虽然一样,但是配置过程却不一样;
所以接下来将会分别介绍两台keepalived服务器的安装配置
keepalived 主服务器端操作:
1)安装 keepalived
[root@zabbix ~]#
[root@zabbix ~]# yum install keepalived #yum安装keepalived
[root@zabbix ~]# rpm -q keepalived
keepalived-1.3.5-16.el7.x86_64
[root@zabbix ~]#
2)配置keepalived
[root@zabbix ~]#
[root@zabbix ~]# > /etc/keepalived/keepalived.conf #清空原有的配置
[root@zabbix ~]#
[root@zabbix ~]# vim /etc/keepalived/keepalived.conf #写入自定义配置