下面,要实践一下Mycat的高可用。
至于Mycat中的一些配置,这里不做说明,可以参考https://blog.csdn.net/weixin_32822759/article/details/106446107,这篇文章里面有说明。
一、环境准备
我准备了两台虚拟机,虚拟机的ip如下
第一台 | 第二台 |
192.168.1.105 | 192.168.1.110 |
数据是采用docker搭建,搭建方式,可以参考https://blog.csdn.net/weixin_32822759/article/details/106301966,这篇文章里面有说明。
在两台虚拟机都配置好Mycat。
二、Haproxy的安装
我这里,不使用安装包来安装,使用docker的方式。
首先,需要拉取Haproxy的镜像,命令如下
docker pull haproxy
在目录下/home/haproxy/conf(没有目录就新建一个),新建haproxy.cfg文件,文件内容如下
global
log 127.0.0.1 local2
maxconn 4000
daemon
defaults
log global
log 127.0.0.1 local3
mode http
option tcplog
option dontlognull
retries 10
option redispatch
maxconn 2000
timeout connect 10s
timeout client 1m
timeout server 1m
timeout http-keep-alive 10s
timeout check 10s
listen mycat
bind 0.0.0.0:3300
mode tcp
balance roundrobin # 表示负载的策略为轮询
server mycat-143 192.168.1.105:8066 check port 8066 maxconn 300 # 表示监控的服务是mycat,最大上限连接为300个
server mycat-142 192.168.1.110:8066 check port 8066 maxconn 300
listen stats
bind 0.0.0.0:1080
mode http
option httplog
maxconn 10
stats refresh 30s
stats uri /stats
stats realm XingCloud\ Haproxy
stats auth admin:admin #用这个账号登录,可以自己设置。haproxy页面上需要使用这个登录
stats auth Frank:Frank
stats hide-version
stats admin if TRUE
命令如下
docker run -ti -d -p 3300:3300 -p 1080:1080 --name haproxy -v /home/haproxy/conf/haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg haproxy:latest
查看一下haproxy是否成功启动
访问haproxy,地址为http://192.168.1.110:1080/stats
另一个节点192.168.1.105上的haproxy安装也是如此。
三、Keepalived安装
1、keepavlied的安装,可以参考https://blog.csdn.net/weixin_32822759/article/details/106304286,这篇文件里面有说明。
2、chk.sh的配置文件如下
# vi /etc/keepalived/chk.sh#!/bin/bash
#
if [ $(ps -C haproxy --no-header | wc -l) -eq 0 ]; then
killall keepalived
fi
3、keepalived.cfg配置文件内容如下
! Configuration File for keepalived
#简单的头部,这里主要可以做邮件通知报警等的设置,此处就暂不配置了;
global_defs {
#notificationd LVS_DEVEL
}
#预先定义一个脚本,方便后面调用,也可以定义多个,方便选择;
vrrp_script chk_mysql_life {
script "/etc/keepalived/chk.sh" #具体脚本路径
interval 2 #脚本循环运行间隔
}
#VRRP虚拟路由冗余协议配置
vrrp_instance VI_1 { #VI_1 是自定义的名称;
state MASTER #MASTER表示是一台主设备,BACKUP表示为备用设备【我们这里因为设置为开启不抢占,所以都设置为备用】
nopreempt #开启不抢占
interface ens33 #指定VIP需要绑定的物理网卡
virtual_router_id 50 #VRID虚拟路由标识,也叫做分组名称,该组内的设备需要相同
priority 99 #定义这台设备的优先级 1-254;开启了不抢占,所以此处优先级必须高于另一台
advert_int 1 #生存检测时的组播信息发送间隔,组内一致
authentication { #设置验证信息,组内一致
auth_type PASS #有PASS 和 AH 两种,常用 PASS
auth_pass asd #密码
}
virtual_ipaddress {
192.168.1.200 #指定VIP地址,组内一致,可以设置多个IP
}
track_script { #使用在这个域中使用预先定义的脚本,上面定义的
chk_mysql_life
}
#notify_backup "/etc/init.d/haproxy restart" #表示当切换到backup状态时,要执行的脚本
#notify_fault "/etc/init.d/haproxy stop" #故障时执行的脚本
}
4、启动keepalived
5、访问一下,看看效果,如图
连接数据库看看
另说明一下,nginx只能做http的负载,而haproxy可以做http、tcp的负载。所以这个架构里面使用keepalived虚拟出ip,负载haproxy,haproxy负载mycat。