haproxy+keepalived高可用负载均衡集群

什么是高可用

haproxy作为负载均衡器,所有请求都到了 haproxy,可见 haproxy 处于非常重点的位置,如果haproxy 服务器宕机后端的服务将无法提供,影响严重。

为了屏蔽负载均衡服务器的宕机,需要建立一个备份机。主服务器和备份机上都运行高可用(High Availability)监控程序,通过传送诸如“I am alive”这样的信息来监控对方的运行状况。当备份机不能在一定的时间内收到这样的信息时,它就接管主服务器的服务 IP 并继续提供负载均衡服务;当备份管理器又从主管理器收到“I am alive”这样的信息时,它就释放服务 IP 地址,这样的主服务器就开始再次提供负载均衡服务。

keepalived简介

keepalived 是集群管理中保证集群高可用的一个服务软件,用来防止单点故障。

Keepalived 的作用是检测 web 服务器的状态,如果有一台 web 服务器死机,或工作出现故障,Keepalived 将检测到,并将有故障的 web 服务器从系统中剔除,当 web 服务器工作正常后 Keepalived 自动将 web 服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的 web 服务器。

keepalived 是以 VRRP 协议为实现基础的,VRRP 全称 Virtual Router Redundancy Protocol,即虚拟路由冗余协议。

虚拟路由冗余协议,可以认为是实现路由器高可用的协议,即将 N 台提供相同功能的

路由器组成一个路由器组,这个组里面有一个 master 和多个 backup,master 上面有一个对外提供服务的 vip(VIP = Virtual IPAddress,虚拟 IP 地址,该路由器所在局域网内其他机器的默认路由为该 vip),master 会发组播,当 backup 收不到 VRRP 包时就认为 master 宕掉了,这时就需要根据 VRRP 的优先级来选举一个 backup 当 master。这样的话就可以保证路由器的高可用了。

keepalived 主要有三个模块,分别是 core、check 和 VRRP。core 模块为 keepalived 的核心,负责主进程的启动、维护以及全局配置文件的加载和解析。check 负责健康检查,包括常见的各种检查方式。VRRP 模块是来实现 VRRP 协议的。


下面进行haproxy+keepalived高可用负载均衡集群
haproxy用于负载均衡mycat集群,mycat用于做mysql集群的代理。
ps: 为测试方便mycat集群服务和mysql集群均装在了宿主机1中,实际生产中应每个服务对应一个服务器。关于mycat和haproxy的配置不是本文重点,详情可看之前的博文。

宿主机1:

  • ip: 192.168.130.128
  • 服务:haproxy容器,keepalived,mycat集群,mysql集群

宿主机2:

  • 192.168.130.129
  • 服务:haproxy容器,keepalived

vip : 192.168.130.140

宿主机配置keepalived

1、安装keepalived

yum install -y keepalived

2、配置keepalived.conf

vi /etc/keepalived/keepalived.conf

宿主机配置信息:(宿主机2的配置中只需要把所有的192.168.130.128改为192.168.130.129即可)

vrrp_instance VI_1 {
    state MASTER
    #这里是宿主机的网卡,可以通过ip a查看当前自己电脑上用的网卡名是哪个
    interface ens33
    virtual_router_id 100
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 123456
    }
    virtual_ipaddress {
        #这里是指定的一个宿主机上的虚拟ip,一定要和宿主机网卡在同一个网段
       	192.168.130.140
    }
}

#接受监听数据来源的端口,网页入口使用
virtual_server 192.168.130.140 4001 {
    delay_loop 3
    lb_algo rr 
    lb_kind NAT
    persistence_timeout 50
    protocol TCP
    #把接受到的数据转发给docker服务的网段及端口,由于是发给docker服务,所以和docker服务数据要一致
    real_server 192.168.130.128 4001 {
        weight 1
    }
}
 
    #接受数据库数据端口,宿主机haproxy端口是4002,所以这里也要和宿主机数据接受端口一致
virtual_server 192.168.130.140 4002 {
    delay_loop 3
    lb_algo rr 
    lb_kind NAT
    persistence_timeout 50
    protocol TCP
    #同理转发数据库给服务的端口和ip要求和docker服务中的数据一致
    real_server 192.168.130.128 4002{
        weight 1
    }
}

3、启动
宿主机2先启动keepalived服务,宿主机1后启动keepalived服务。
现在宿主机2上已经绑定了虚拟IP

/bin/systemctl start keepalived.service

haproxy+keepalived高可用负载均衡集群_第1张图片

访问http://192.168.130.140:4001/dbs
haproxy+keepalived高可用负载均衡集群_第2张图片
在宿主机2上手动停掉keepalived服务,模拟宕机。

/bin/systemctl stop keepalived.service

此时在宿主机1上查看ip addr
发现宿主机1已经接管了VIP:
haproxy+keepalived高可用负载均衡集群_第3张图片
访问http://192.168.130.140:4001/dbs
服务仍然可用
haproxy+keepalived高可用负载均衡集群_第4张图片
实现了haproxy高可用集群方案!

你可能感兴趣的:(高可用,负载均衡,haproxy,keepalived)