KeepAlive+VIP

一、VRRP协议(虚拟路由器冗余协议)
进入正题之前我们需要先了解一下什么是VRRP协议。VRRP即虚拟路由冗余协议(Virtual Router Redundancy Protocol,简称VRRP),是由IETF提出的解决局域网中配置静态网关出现单点失效现象的路由协议,VRRP主要的作用是:当一个计算器群组里主路由出现故障的时候,通过自动切换机制,将请求发送到备用机器上。
一个VRRP路由群组由多个运行VRRP协议的路由器组成,该群组对外表现为一个具有固定IP的虚拟逻辑路由器,该组虚拟逻辑路由器由N个VRRP物理路由器组成。同时这些物理路由器又区分为两类:主控路由器和备份路由器。一个VRRP路由群组里面,有且仅有一个主控路由器,可以有N个备份路由器。当主控路由器发生故障的时候,备份路由器可以在一定的时延之后自动的“取代”主控路由器的地位,此过程非常快速,对于用户端来说是无感知的、透明的。
二、KeepAlive
KeepAlive是一个基于VRRP协议的软件,最开始设计的目的就是为了实现高可用LVS的,后来又加入了可以实现高可用的vrrp功能。
三、环境搭建
1.一主多从
ip:192.168.181.133 master

global_defs {
    router_id LVS_1
    vrrp_mcast_group4 224.24.24.18
}

vrrp_instance VI_1 {
    state MASTER
    interface ens33
    virtual_router_id 1
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.181.100
    }
}

192.168.181.134 backup

global_defs {
    router_id LVS_2
    vrrp_mcast_group4 224.24.24.18
}

vrrp_instance VI_1 {
    state BACKUP
    interface ens33
    virtual_router_id 1
    priority 98
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.181.100
    }
}

192.168.181.135 backup

global_defs {
    router_id LVS_3
    vrrp_mcast_group4 224.24.24.18
}

vrrp_instance VI_1 {
    state BACKUP
    interface ens33
    virtual_router_id 1
    priority 50
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.181.100
    }
}

可以通过tcpdump -nn -i ens33 host 224.24.24.18查看vrrp广播。master会不断的向局域网内的其他backup发送广播,一旦backup没有收到广播就会认定主机挂掉了,这些会backup会重新进行“选举”推选出一台机器作为master继续运行,一句是priority权重。
在这里插入图片描述
将三台服务器都开启服务。访问虚拟ip:192.168.181.100,发现页面定位到了定位到192.168.181.133
在这里插入图片描述
关闭192.168.181.133服务 。systemctl stop keepalived.service (模拟服务器关闭)
此时再次访问虚拟ip。发现ip漂移到了192.168.181.134
在这里插入图片描述
关闭192.168.181.134服务,ip继续漂移到192.168.181.135
在这里插入图片描述
2.双主结构
若实现双主结构(互为主从),只需要再构造一个虚拟路由器,将192.168.181.134(已经是backup)设置为master,192.168.181.133(已经是master)设置为backup即可。互为主从可以使两台服务器同时对外提供服务,将资源利用最大化。

3.LVS集群配置

环境:
调度服务器:192.168.181.138
nginx web服务器:192.168.181.140 192.168.181.141
虚拟路由ip:192.168.181.100

web服务器配置

##开启路由转发。
echo "1">/proc/sys/net/ipv4/ip_forward
##绑定VIP到网卡
ifconfig ens33:0 192.168.181.100 broadcast 192.168.181.100 netmask 255.255.255.255 up
##添加发送数据包到vip的路由
route add -host 192.168.181.100 dev ens33:0
##抑制ARP请求
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

在这里插入图片描述
配置调度服务器(若使用高可用多主结构,可以参考上面的做法)

global_defs {
    router_id LVS_1
    vrrp_mcast_group4 224.24.24.18
}

vrrp_instance VI_1 {
    state MASTER
    interface ens33
    virtual_router_id 1
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.181.100
    }
}

virtual_server 192.168.181.100 80 {
    delay_loop 1
    lb_algo rr #lb使用的调度算法
    lb_kind DR #lb所使用的模型
    #nat_mask 255.255.0.0
    persistence_timeout 0
    protocol TCP
    sorry_server 127.0.0.1 80 #当所有real_server宕机后的错误提示服务器

    real_server 192.168.181.140 80 { #node1节点
       weight 1
        HTTP_GET { #验证real_server方式
            url {
              path /
              status_code 200
            }
            connect_timeout 3 #超时时间
            nb_get_retry 3 #重试次数
            delay_before_retry 3 #重试前的等待时间
        }
    }
    real_server 192.168.181.141 80 { #node2节点
        weight 1
        HTTP_GET {
            url {
              path /
              status_code 200
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}

使用ipvsadm -Ln查看当前配置的虚拟服务和各个RS的权重
在这里插入图片描述
接下来服务器就按照你预先规定的方式来负载均衡了!
在这里插入图片描述
在这里插入图片描述
关掉其中一台web服务器,负载均衡会自动剔除掉故障的web服务器。

注意:很多时候当你配置好集群以后,你会发现你的集群并没有按照原先的负载均衡轮询的方式来进行分发请求。所以要特别注意下面的两个地方:
persistence_timeout 0 这个是持久化超时时间,单位是秒。默认是6分钟。测试的时候改为0。
另外使用ipvsadm -L --timeout命令查看一下tcp/tcpfin/udp三个参数的过期时间(巨坑)。分别是900 120 300。这边测试的时候把时间改短一点 ipvsadm --set 1 2 1。

4.redis高可用

对于keepalive来说,他会检测keepalive自身的故障和机器网络故障,当其中有一个出现问题的时候进行自动的切换。但是有时候会我们不需要他监控“自己”,而需要他监控同一台机器上的其他服务器,比如redis或者mysql,那么这个时候我们就需要去配置vrrp_script参数,使用vrrp_script来对我们需要关注的业务进程进行关注。从而将keepalive的关注点从“自身”转移到“其他服务”。

5.mysql集群管理

virtual_server 192.168.181.100 3306 {

    delay_loop 1
    lb_algo rr #lb使用的调度算法
    lb_kind DR #lb所使用的模型
    #nat_mask 255.255.0.0
    persistence_timeout 0
    protocol TCP

    real_server 192.168.181.143 3306 {
        weight 1
        #notify_down /etc/keepalived/check_mysql.sh #3306端口不可用则执行脚本
        TCP_CHECK {
            connect_timeout 10
            nb_get_retry 3
            delay_before_retry 3
            connect_port 3306
        }
    }

    real_server 192.168.181.144 3306 {
        weight 1
        TCP_CHECK {
            connect_timeout 10
            nb_get_retry 3
            delay_before_retry 3
            connect_port 3306
        }
    }
}

四、总结
利用keepalive的vrrp特性来进行高可用配置(master机器参与其中)。利用LVS进行服务器集群的搭建(master仅当代理、分发器)。

参考:
https://www.cnblogs.com/lipengxiang2009/p/7353373.html

### LVS 和 Keepalived 的配置与原理 #### 一、LVS 工作原理 Linux Virtual Server (LVS) 是一种高效的负载均衡解决方案,其核心依赖于 IPVS 模块。IPVS 运行在内核空间中,能够快速转发数据包到真实服务器上。它支持多种调度算法以优化流量分配[^3]。 其中提到的一种重要算法为目标地址散列调度(Destination Hashing Scheduling),该算法通过计算请求的目标 IP 地址哈希值决定分发至哪台服务器,从而实现会话保持功能[^4]。 #### 二、Keepalived 功能概述 Keepalived 主要用于提供高可用性和健康监测能力。它是基于 VRRP 协议开发的开源项目,在多节点环境中可自动检测主备状态并完成故障切换操作[^5]。 当两台运行相同 VIP 的机器同时认为自己为主设备时会发生所谓的“脑裂”现象。这种情况下可能导致服务中断或者资源浪费等问题。因此需要合理设置优先级参数以及启用 BFD 或其他机制来预防此类情况发生[^2]。 #### 三、联合部署架构说明 为了构建稳定可靠的集群环境,通常将两者结合起来使用: 1. **前端入口层** 利用 Keepalived 实现虚拟 IP(Virtual IP Address,VIP)管理,并监控后端 LVS 设备的状态变化;一旦发现异常,则立即触发切换流程。 2. **中间代理层** 在每台 Director 上安装配置好 IPVSadm 工具后即可开始定义规则集,指定具体的 RS(Real Servers)列表及其权重信息等属性值[^1]。 以下是简单的 shell 脚本示例展示如何初始化 ipvsadm 设置: ```bash #!/bin/bash ipvsadm -C # 清除已有条目 ipvsadm -A -t 192.168.0.1:80 -s rr # 添加TCP服务采用轮询方式 for i in {1..3};do ipvsadm -a -t 192.168.0.1:80 -r 192.168.1.$i:80 -g;done # 将三个实际主机加入池子 ``` 对于 keepalived.conf 文件中的关键片段如下所示: ```plaintext vrrp_instance VI_1 { state MASTER interface eth0 virtual_router_id 51 priority 100 authentication { auth_type PASS auth_pass mypassword } virtual_ipaddress { 192.168.0.1/24 dev eth0 label eth0:0 } } ``` 以上脚本和配置文件共同作用下形成了完整的 LVS+Keepalived 解决方案框架。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值