千家信息网

mycat如何实现高可用

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,这篇文章将为大家详细讲解有关mycat如何实现高可用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1 mycat 集群mycat 可以通过 zookeeper 集群
千家信息网最后更新 2026年11月02日mycat如何实现高可用

这篇文章将为大家详细讲解有关mycat如何实现高可用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

1 mycat 集群

mycat 可以通过 zookeeper 集群进行配置文件管理

1.1 搭建 zookeeper 集群

此处不做 zookeeper集群搭建讲解

1.2配置mycat支持zookeeper

修改 mycat conf 目录下myid.properties

loadZk=true
# zk集群地址,多个用","隔开
zkURL=192.162.3.31:2121,192.162.3.32:2121,192.162.3.33:2121
# zk集群内Mycat集群ID
clusterId=mycat-cluster-1
# Mycat集群内本实例ID,禁止重复
myid=mycat_fz_01
# Mycat集群内节点个数
clusterSize=3
#集群内所有节点的 id
clusterNodes=mycat_fz_01,mycat_fz_02,mycat_fz_03
#server booster ; booster install on db same server,will reset all minCon to 1
type=server
boosterDataHosts=dataHost1

1.3 自定义配置

将需要修改的配置文件替换到 conf 目录中的 zkconf 目录下,只需要在一台机器修改即可,需要注意 conf目录中的 server.xml 中用户名和密码与 zkconf 中的不一致

1.4 上传配置

执行修改了配置文件的 mycat 下的bin 目录下的initzkdata.sh,上传配置文件,(在修改了配置文件的机器上执行)

./initzkdata.sh

1.5 启动所有 mycat

启动后发现其他 mycat conf 下的配置文件已经自动变化为修改的内容,是zookeeper 中下载的

2 mycat 高可用

此处使用的是 lvs+keepalived 的方式

LVS+Keepalived 介绍

LVS
LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统。本项目在1992年5月由章文嵩博士成立,是中国国内最早出现的自由软件项目之一。目前有三种IP负载均衡技术(VS/NAT、VS/TUN和VS/DR),十种调度算法(rrr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq)。

Keepalvied
Keepalived在这里主要用作RealServer的健康状态检查以及Master主机和BackUP主机之间failover的实现

下面,搭建基于LVS+Keepalived的MyCAT高可用负载均衡集群,其中,LVS实现MyCAT的负载均衡,但是,简单的LVS不能监控后端节点是否健康,它只是基于具体的调度算法对后端服务节点进行访问。同时,单一的LVS又存在单点故障的风险。在这里,引进了Keepalived,可以实现以下几个功能:

1. 检测后端节点是否健康。
2. 实现LVS本身的高可用。

2.1 配置环境

角色 主机IP 主机名 操作系统版本 软件版本

VIP 192.162.3.200

LVS-DR-Master 192.162.3.41 keepalived01 CentOS6.9 Keepalived v1.2.13,LVS 1.2.1

LVS-DR-Backup 192.162.3.42 keepalived02 CentOS6.9 Keepalived v1.2.13,LVS 1.2.1

mycat-Realserver 192.162.3.34 mycat01 CentOS6.9 mycat v1.6.5

mycat-Realserver 192.162.3.35 mycat02 CentOS6.9 mycat v1.6.5

mycat-Realserver 192.162.3.36 mycat03 CentOS6.9 mycat v1.6.5

2.2安装keepalived和ipvsadm

注意:ipvsadm并不是lvs,它只是lvs的配置工具,因lvs在3.10(CentOS1.1的内核版本)的内核中是默认支持的。所以在这里就不需要重新安装。

为了方便起见,在这里我们使用yum的安装方式

分别在keepalived01和keepalived02两台主机上安装keepalived和ipvsadm

yum install -y keepalived ipvsadm

除了这种简易方式外,也可直接编译官方的源码包。

LVS:

Keepalived:

安装步骤可参考:

2.3 配置Keepalived

2.3.1 master

vi /etc/keepalived/keepalived.conf

! Configuration File for keepalived

global_defs {
notification_email {
acassen@firewall.loc #设置报警邮件地址,可以设置多个,每行一个。
failover@firewall.loc #需开启本机的sendmail服务
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc #设置邮件的发送地址
smtp_server 121.0.0.1 #设置smtp server地址
smtp_connect_timeout 30 #设置连接smtp server的超时时间
router_id LVS_DEVEL #表示运行keepalived服务器的一个标识。发邮件时显示在邮件主题的信息
}

vrrp_instance VI_1 {
state MASTER #指定keepalived的角色,MASTER表示此主机是主服务器,BACKUP表示此主机是备用服务器
interface eth5 #指定HA监测网络的接口,通过 ifconfig 或者 ip add 查看到的网络接口名字
virtual_router_id 51 #虚拟路由标识,这个标识是一个数字,同一个vrrp实例使用唯一的标识。即同一vrrp_instance下,MASTER和BACKUP必须是一致的
priority 100 #定义优先级,数字越大,优先级越高,在同一个vrrp_instance下,MASTER的优先级必须大于BACKUP的优先级
advert_int 1 #设定MASTER与BACKUP负载均衡器之间同步检查的时间间隔,单位是秒
authentication { #设置验证类型和密码
auth_type PASS #设置验证类型,主要有PASS和AH两种
auth_pass 1111 #设置验证密码,在同一个vrrp_instance下,MASTER与BACKUP必须使用相同的密码才能正常通信
}
virtual_ipaddress { #设置虚拟IP地址,可以设置多个虚拟IP地址,每行一个
192.162.3.200
}
}

virtual_server 192.162.3.200 2066 { #设置虚拟服务器,需要指定虚拟IP地址和服务端口,IP与端口之间用空格隔开
delay_loop 6 #设置运行情况检查时间,单位是秒
lb_algo rr #设置负载调度算法,这里设置为rr,即轮询算法
lb_kind DR #设置LVS实现负载均衡的机制,有NAT、TUN、DR三个模式可选
nat_mask 255.255.255.0
persistence_timeout 50 #会话保持时间,单位是秒。这个选项对动态网页是非常有用的,为集群系统中的session共享提供了一个很好的解决方案。如果设置为0会执行轮询方式实现负载均衡,设置数字则代表在指定实现内使用 iphash 方式
#有了这个会话保持功能,用户的请求会被一直分发到某个服务节点,直到超过这个会话的保持时间。
#需要注意的是,这个会话保持时间是最大无响应超时时间,也就是说,用户在操作动态页面时,如果50秒内没有执行任何操作
#那么接下来的操作会被分发到另外的节点,但是如果用户一直在操作动态页面,则不受50秒的时间限制
protocol TCP #指定转发协议类型,有TCP和UDP两种

real_server 192.162.3.34 2066 { #配置服务节点1,需要指定real server的真实IP地址和端口,IP与端口之间用空格隔开
weight 1 #配置服务节点的权值,权值大小用数字表示,数字越大,权值越高,设置权值大小可以为不同性能的服务器
#分配不同的负载,可以为性能高的服务器设置较高的权值,而为性能较低的服务器设置相对较低的权值,这样才能合理地利用和分配系统资源
TCP_CHECK { #realserver的状态检测设置部分,单位是秒
connect_timeout 3 #表示3秒无响应超时
nb_get_retry 3 #表示重试次数
delay_before_retry 3 #表示重试间隔
connect_port 2066
}
}
real_server 192.162.3.35 2066 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 2066
}
}

real_server 192.162.3.36 2066 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 2066
}
}
}

2.3.2 backup

修改备份机上面同样的文件,除了优先级和状态修改外,其他与主机一致

! Configuration File for keepalived

global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 121.0.0.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}

vrrp_instance VI_1 {
state BACKUP #将state从MASTER改为BACKUP
interface eth5
virtual_router_id 51
priority 99 #修改优先级
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.162.3.200
}
}

virtual_server 192.162.3.200 2066 {
delay_loop 6
lb_algo rr
lb_kind DR
nat_mask 255.255.255.0
persistence_timeout 50
protocol TCP

real_server 192.162.3.34 2066 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 2066
}
}
real_server 192.162.3.35 2066 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 2066
}
}
real_server 192.162.3.36 2066 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 2066
}
}
}

在上面这两个配置文件中,有一个地方尤其需要注意,即interface,网上的相关部署文档都是eth0,在CentOS1之前,网络接口的确都是eth0,但在CentOS1中,该接口为eno16111136。所以需要根据生产实际情况进行相应的修改

2.4 安装配置 mycat

安装请参考上面

2.4.1 绑定虚拟 vip

在MyCAT服务器上为lo:0绑定VIP地址、抑制ARP广播

分别在mycat01和mycat02,mycat03三台主机上执行以下脚本,此处起名realserver.sh ,自行创建复制以下内容

如果出现找不到文件或者目录的错误,先执行 yum -y install net-tools

#!/bin/bash
#description: Config realserver
#此处 ip 与前面配置的虚拟 ip 一致
VIP=192.162.3.200

/etc/rc.d/init.d/functions

case "$1" in
start)
/sbin/ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP
/sbin/route add -host $VIP dev lo:0
echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
sysctl -p >/dev/null 2>&1
echo "RealServer Start OK"
;;
stop)
/sbin/ifconfig lo:0 down
/sbin/route del $VIP >/dev/null 2>&1
echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce
echo "RealServer Stoped"
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
esac

exit 0

分别在机器上执行./realserver.sh start

2.4.2 查看

运行 ifconfig 查看

2.5 启动 keeplive

分别在keepalived01和keepalived02上启动Keepalived服务

service keepalived start

2.5.1 查看

通过ipvsadm -L 查看映射,出现类似一下结果,理论上成功

[root@192 ~]# ipvsadm -L
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.162.3.200:2066 rr persistent 50
-> 192.162.3.34:2066 Route 1 0 0
-> 192.162.3.35:2066 Route 1 0 0
-> 192.162.3.36:2066 Route 1 0 0

2.5.2 测试

通过一台装有 mysql的机器连接我们的虚拟 ip 发现可以登录数据库

[root@192 network-scripts]# mysql -uroot -pdigdeep -P2066 -h292.162.3.200
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 301
Server version: 5.6.29-mycat-1.6.5-release-20120122220033 MyCat Server (OpenCloundDB)

Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

2.5.3 查看转发

再次在 keepalived 的机器执行ipvsadm -L,发现被转到35上面一次

[root@192 ~]# ipvsadm -L
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.162.3.200:2066 rr persistent 50
-> 192.162.3.34:2066 Route 1 0 0
-> 192.162.3.35:2066 Route 1 0 1
-> 192.162.3.36:2066 Route 1 0 0
[root@192 ~]#

2.5.4 负载均衡方式

与配置相关,此处发现多次都指向一个机器,因为我们在 keepalived 的配置文件中persistence_timeout属性指定为50 则代表50秒内同一个机器来的请求会被 hash 一致性分配,如果想实现严格意义上面的轮询,修改为0即可

[root@192 ~]# ipvsadm -L
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.162.3.200:2066 rr persistent 50
-> 192.162.3.34:2066 Route 1 0 0
-> 192.162.3.35:2066 Route 1 1 3
-> 192.162.3.36:2066 Route 1 0 0
[root@192 ~]#

关于"mycat如何实现高可用"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

配置 服务 集群 文件 服务器 主机 地址 节点 时间 均衡 机器 优先级 方式 目录 一致 数字 之间 单位 密码 接口 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 南京欣网互联网络科技 互联网科技行业发展 美国互联网科技巨头监管 科技信息互联网 嘟嘟瓜互联网科技 杭州互联网科技公司 四个字互联网科技公司取名 互联网实体化科技化 深圳市运趣互联网科技有限公司 互联网科技有哪些公司 福建科技产业互联网发展 米聚互联网科技南京有限公司排面 996高科技互联网公司 长沙茂晟互联网科技有限公司 高科技互联网套路 半导体行业属于互联网高科技类吗 玉溪新华互联网科技怎么选 长沙易易互联网科技有限公司 广东猫王互联网科技有限公司电话 银川新华互联网科技学校招聘 互联网 科技公司 中国 科技 互联网 互联网科技论文 海南科技产业互联网平台 小米互联网科技园设置 承德科技产业互联网发展 徐州市互联网科技有限公司 互联网安防科技感 互联网领先科技成果宣传视频 六子台科技互联网展会
0