LVS-DR与Keepalived高可用群集

本文介绍如何使用LVS+Keepalived搭建高可用负载均衡集群,详细讲解了配置步骤,包括网络设置、DR模式配置及健康检查,并通过实验验证了方案的有效性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Keepalived起初是专门针对LVS设计的一款强大的辅助工具,主要用来提供故障切换(Failover)和健康检查(Health Checking)功能——判断LVS负载调度器、节点服务器的可用性,及时隔离并替换为新的服务器,当故障主机恢复后将其重新加入群集。

为什么要用LVS+Keepalived?

lvs是一个在四层上实现后端realserver的负载均衡的集群,lvs遗留下两个问题,一个是lvs的单点故障;第二个是lvs不能检测后端realserver的健康状态检查。
解决lvs的单点故障就用到了高可用集群:

  • ①可以是heartbeat+ldirectord这种重量级的;
  • ②可以是keepalived+lvs这种轻量级的解决方案。(本博客主要写keepalived+lvs轻量级的解决方案)

解决lvs不能检测后端realserver的健康状态也后很多种方法:

  • ①可以在lvs上写脚本ping后端realserver的ip地址,ping几次发现ip地址ping不通则在ipvs规则里面删除,当后端服务器可以ping了,则把后端realserver添加到ipvs规则里面。
  • ②可以在lvs上写脚本请求后端realserver的测试几次网页文件,查看状态码是否为200,不是则在ipvs规则里面清楚,当测试网页返回的状态吗是200之后,则把后端realserver添加到ipvs规则里面
  • ③以上两种方法都是依赖于脚本,keepalived的出现解决了不依赖于脚本,也可以对后端realserver的健康状态检查,keepalived的配置文件里面可以自行生成ipvs的规则,并且自行检测后端realserver的状态,当后端realserver不能提供服务了,keepalived会自行将其在ipvs规则里面删除,当后端realserver可以提供服务了,又自行的在ipvs规则里面添加。

拓扑图:

LVS-DR与Keepalived高可用群集

实验环境及IP规划:

名称操作系统IP地址
MasterCentOS7192.168.100.201(VIP:192.168.100.10)
BackupCentOS7192.168.100.202(VIP:192.168.100.10)
Apache1CentOS7192.168.100.221(VIP:192.168.100.10)
Apache2CentOS7192.168.100.222(VIP:192.168.100.10)
RealserverWin7192.168.100.50(网关:192.168.100.10)

实验部署:

1. Master(CentOS7-1):

首先配置DR调度服务器(LVS+DR)

#yum install keepalived ipvsadm –y      //安装keepalived和ipvsadm服务
#vi /etc/sysctl.conf
net.ipv4.ip_forward=1       //开启路由转发功能
net.ipv4.conf.all.send_redirects = 0        //关闭重定向功能
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
#sysctl –p      //使服务生效
#cd /etc/sysconfig/network-scripts/
#cp ifcfg-ens33 ifcfg-ens33:0       //创建虚拟网卡
#vim ifcfg-ens33:0
DEVICE=ens33:0          //网卡名称
ONBOOT=yes              //网卡可用
IPADDR=192.168.100.10   //IP地址
NETMASK=255.255.255.0   //子网掩码
#service network restart
#ifup ens33:0               //开启网卡
#vim /etc/init.d/dr.sh      //配置DR模式脚本文件
#!/bin/bash
GW=192.168.100.1            //网关地址
VIP=192.168.100.10          //虚拟网卡地址
RIP1=192.168.100.201            //节点服务器1IP地址
RIP2=192.168.100.202            //节点服务器2IP地址
case "$1" in
        start)
        /sbin/ipvsadm --save > /etc/sysconfig/ipvsadm   
        systemctl start ipvsadm                                 //启用LVS工具
        /sbin/ifconfig ens33:0 $VIP broadcast $VIP netmask 255.255.255.255 broadcast $VIP up                        //开启虚拟网卡
        /sbin/route add -host $VIP dev ens33:0      //配置路由段
        /sbin/ipvsadm -A -t $VIP:80 -s rr
        /sbin/ipvsadm -a -t $VIP:80 -r $RIP1:80 -g
        /sbin/ipvsadm -a -t $VIP:80 -r $RIP2:80 -g
        echo "ipvsadm starting --------------------[ok]"    //启动完提示信息
        ;;
        stop)
        /sbin/ipvsadm –C                //清空LVS
        systemctl stop ipvsadm
        ifconfig ens33:0 down           //关闭端口
        route del $VIP
        echo "ipvsamd stoped----------------------[ok]"
         ;;
        status)
        if [ ! -e /var/lock/subsys/ipvsadm ];then
        echo "ipvsadm stoped---------------"
        exit 1
                else
                echo "ipvsamd Runing ---------[ok]"
        fi
        ;;
        *)
        echo "Usage: $0 {start|stop|status}"
        exit 1
        esac
        exit 0
#chmod +x dr.sh         //给予执行权限
#service dr.sh start            //开启DR模式

部署keepalived:(在LVS-DR部署完成后配置)

#vim /etc/keepalived/keepalived.conf
global_defs {
  ...
  smtp_server 127.0.0.1           //指向本地
  router_id LVS_01              //指定名称,备份服务器不同名称
  ...             
}

vrrp_instance VI_1 {
  state MASTER              //备份服务器是BACKUP
  interface ens33               //对应端口号
  virtual_router_id 10          //组号
  ...
  auth_pass abc123         #验证密码
  priority 100              #优先级backup小于master
  ...
  virtual_ipaddress {
        192.168.100.10
    }
  ...
virtual_server 192.168.100.10 80 {          //虚拟服务器地址(VIP)、端口
...
  real_server 192.168.100.221 80 {
        weight 1
        TCP_CHECK {                     //健康检查方式
            connect_port 80             //
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }   
    }   
    real_server 192.168.100.222 80 {
        weight 1
        TCP_CHECK {
            connect_port 80              #添加端口
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }   
    }    
}

2. Backup(CentOS7-2)

Backup整体配置与Master相同,但在keepalived配置时需要注意:
router_id与Master的不同
state为BACKUP
priority优先级Backup小于Master

3. 配置节点服务器1(CentOS7-3)

#systemctl start httpd.service      //开启httpd服务
#systemctl stop firewalld.service       //关闭防火墙
#setenforce 0   
#echo “this is accp web” > /var/www/html/index.html     //添加首页内容
#cd /etc/sysconfig/network-scripts
#cp ifcfg-lo ifcfg-lo:0
#vim ifcfg-lo:0
DEVICE=lo:0
IPADDR=192.168.100.10
NETMASK=255.255.255.0
ONBOOT=yes
#vim /etc/init.d/web.sh     //编写网络配置脚本web.sh
#!/bin/bash
VIP=192.168.100.10
        case "$1" in
        start)
                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)
                ifconfig lo:0 down
                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 Stopd"
                ;;
        *)
                echo "Usage: $0 {start|stop}"
                exit 1
        esac
        exit 0
#chmod +x web.sh
#service web.sh start
#ifup lo:0       //启动后Xshell远程连接会断开
#ifconfig               //到虚拟机中检查虚拟网卡是否启动
#firefox http://127.0.0.1/ &        //在虚拟机中自测
#service web.sh stop
#service web.sh start           //重启网络配置脚本

4. 配置节点服务器2(CentOS7-4)

整体配置过程同节点服务器1

二.相关测试

1.测试LVS-DR负载均衡是否配置成功

LVS-DR与Keepalived高可用群集
LVS-DR与Keepalived高可用群集

2.配置完keepalived以后,down掉MASTER的ens33:0,再去用Win7测试,查看是否能够ping通,若通则证明keepalived双机热备成功。

LVS-DR与Keepalived高可用群集

转载于:https://blog.51cto.com/13625810/2132290

<think>嗯,用户需要详细解释LVS-DR模式下Keepalived配置文件的各项参数含义。从用户的问题和引用材料来看,ta正在搭建高可用集群,对底层网络原理和参数细节有明确需求。 用户可能已经掌握了LVS-DR的基本架构,但需要深入配置层面的指导。引用材料中提到的ARP抑制、VIP配置、健康检查等关键点都需要在配置文件中体现。特别要注意的是,用户引用了三篇技术文档,其中[^3]明确提到了DR模式的ARP参数调整,这将是重点解释内容。 准备从五个维度展开配置解析:全局定义、VRRP实例、虚拟服务器、健康检查、ARP相关参数。需要特别强调几个易错点:1) virtual_router_id在双机热备中的一致性要求 2) lvs_sched调度算法选择 3) persistence_timeout对会话保持的影响。 注意到用户提供的引用[^1][^2]中都有DR模式工作原理图示,虽然无法直接展示,但可以在描述virtual_ipaddress时类比"浮动IP"的概念。对于TCP_CHECK配置,要提醒用户实际端口需后端服务一致,比如Web集群通常检查80端口。 用户可能遇到的典型问题包括:VIP不通(ARP问题)、负载不均衡(调度算法配置错误)、脑裂(认证参数不一致)。这些都需要在参数说明中预先警示。最后考虑补充一个完整的配置示例,帮助用户建立整体认知。</think>以下是基于LVS-DR模式的Keepalived配置文件核心参数详解,结合技术原理说明: --- ### **一、全局定义段 (`global_defs`)** ```nginx global_defs { notification_email { admin@example.com # 故障通知邮箱 } notification_email_from keepalived@localhost smtp_server 127.0.0.1 smtp_connect_timeout 30 router_id LVS_DEVEL # 集群唯一标识,需双机不同! } ``` - **`router_id`**:集群节点标识符,**主备节点必须不同**(如 `LVS_MASTER`/`LVS_BACKUP`)。 - **`notification_email`**:故障告警接收邮箱(需邮件服务器支持)。 --- ### **二、VRRP实例段 (`vrrp_instance`)** ```nginx vrrp_instance VI_1 { state MASTER # 主节点:MASTER;备节点:BACKUP interface eth0 # 绑定VRRP的物理网卡 virtual_router_id 51 # 主备相同!范围0-255 priority 100 # 主>备(如主100,备90) advert_int 1 # VRRP组播间隔(秒) authentication { auth_type PASS # 认证方式 auth_pass 1111 # 密码(主备一致) } virtual_ipaddress { 192.168.1.100/24 # VIP,需RS同网段 } } ``` - **关键原理**:通过VRRP协议实现VIP在主备节点间漂移[^2]。 - **`virtual_router_id`**:**主备必须相同**,用于标识同一个VRRP组。 - **`priority`**:优先级决定主备角色,主节点故障时备节点接管VIP。 - **`virtual_ipaddress`**:配置LVS的虚拟IP(VIP),客户端访问的入口地址。 --- ### **三、虚拟服务器段 (`virtual_server`)** ```nginx virtual_server 192.168.1.100 80 { # VIP:Port delay_loop 6 # 健康检查间隔(秒) lb_algo wrr # 调度算法:wrr|lc|wlc等 lb_kind DR # LVS模式:DR|NAT|TUN persistence_timeout 50 # 会话保持时间(秒) protocol TCP # 后端协议类型 # 真实服务器配置(RS) real_server 192.168.1.11 80 { weight 1 # 权重 TCP_CHECK { # 健康检查方式 connect_timeout 3 nb_get_retry 3 delay_before_retry 3 connect_port 80 } } real_server 192.168.1.12 80 { weight 1 TCP_CHECK {...} } } ``` - **`lb_kind DR`**:指定LVS工作模式为**直接路由**(Direct Routing)[^1]。 - **`lb_algo`**:调度算法(如 `wrr`加权轮询、`wlc`加权最小连接)。 - **`persistence_timeout`**:会话保持时间,解决连接漂移问题。 - **`real_server`**:后端真实服务器(RS)IP和端口。 - **健康检查**:`TCP_CHECK`检测后端服务可用性,失败则剔除RS。 --- ### **四、LVS-DR模式特殊配置** 1. **ARP抑制**(所有RS节点需配置): ```bash 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 ``` - 防止RS直接响应VIP的ARP请求,确保流量经Director转发[^3]。 2. **RS配置VIP到lo网卡**: ```bash ifconfig lo:0 192.168.1.100 netmask 255.255.255.255 ``` - 用于接收目标为VIP的数据包。 --- ### **五、完整配置示例** ```nginx ! Configuration File for keepalived global_defs { router_id LVS_MASTER } vrrp_instance VI_1 { state MASTER interface eth0 virtual_router_id 51 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.1.100/24 } } virtual_server 192.168.1.100 80 { delay_loop 6 lb_algo wrr lb_kind DR persistence_timeout 30 protocol TCP real_server 192.168.1.11 80 { weight 1 TCP_CHECK { connect_timeout 3 nb_get_retry 3 delay_before_retry 3 connect_port 80 } } } ``` --- ### **常见问题排查** 1. **VIP不通**: - 检查主备节点 `virtual_router_id` 是否一致。 - 确认防火墙放行VRRP组播(IP协议号112)[^2]。 2. **调度不均**: - 调整 `lb_algo` 算法(如改用 `wlc`)。 3. **脑裂问题**: - 确保主备 `priority` 配置正确,网络心跳正常。 > 参考资料: > [^1]: LVS-DR模式需关闭RS的ARP响应,确保Director处理请求转发。 > [^2]: VRRP协议通过组播通信实现主备切换,默认组播地址 `224.0.0.18`。 > [^3]: ARP抑制参数防止RS暴露VIP,避免ARP表混乱。 --- **相关问题** 1. LVS-DR模式下如何解决后端服务器的ARP冲突问题? 2. Keepalived健康检查支持哪些协议?如何配置HTTP检查? 3. 如何通过`ipvsadm`命令实时监控LVS的连接状态和调度情况?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值