linux运维——Lvs+keepalived高可用负载均衡集群

本文详细介绍了如何使用Keepalived和LVS搭建高可用的负载均衡集群,包括环境配置、软件安装、配置文件编写、健康检查、VRRP故障转移等关键步骤,确保即使在主服务器故障的情况下,也能无缝切换至备用服务器,维持服务连续性。

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

原理:

keepalives是一个与lvs连用的高可用组件。以上所作的实验主机都为单点机,当代理服务机宕机以后,就相当于整个服务就会出现崩溃,所以对其使用此软件进行优化,当主代理机宕机后,立即启用辅代理机,这就需要将所有的资源,例如VIP,都全部交给此软件。在主机宕机后,将VIP立刻分配给辅代理机,二者在配置文件中所占比重也是主代理机高,这样就决定了只要主机上线,辅机就不会有资源,但当主机宕机,辅机就可以立即代替主机。
负载平衡是一种跨真实服务器集群分布IP流量的方法,提供一个或多个高可用虚拟服务。在设计负载平衡拓扑时,必须考虑负载均衡器本身的可用性以及它背后的真实服务器。

Keepalived为负载平衡和高可用性提供了框架。负载平衡框架依赖于著名且广泛使用的Linux虚拟服务器(IPV)内核模块,该模块提供第4层负载平衡。Keepalived实现了一组健康检查程序,根据服务器池的健康状况动态、自适应地维护和管理负载平衡的服务器池。虚拟冗余路由协议(VRRP)实现了高可用性。VRRP是路由器故障转移的基础。此外,Keepalived还实现了一组到VRRP有限状态机的钩子,提供了低级别和高速的协议交互。每个保持连接的框架可以单独使用,也可以一起使用,以提供弹性的基础设施。

在这种情况下,负载均衡器也可以称为控制器或LVS路由器。简而言之,keepalived提供两个主要功能:

  • LVS系统的健康检查
  • 实现VRRPv2堆栈以处理负载平衡器故障转移

环境配置:准备一台新的辅助调度器
主代理服务器:172.25.35.2 所有的主机vip都是172.25.35.100 安装keepalived,ipvsadm
辅助代理服务器:172.25.35.5 安装keepalived,ipvsadm
真实服务器1:172.25.35.3 安装httpd,arptables
真实服务器2:172.25.35.4 安装httpd,arptables
1、 辅助调度器下载keepalived的rpm包,这个包可以在官网中下载
2、在主调度器和辅助调度器中,keepalived服务器同时操作进行

tar zxf keepalived-2.0.6.tar.gz 解压keepalived包
yum install gcc openssl-devel -y 下载keepablived依赖性
cd keepalived-2.0.6
./configure --prefix=/usr/local/keepalived --with-init=systemd 编写文件 并且初始化
echo $PATH 查看编译文件路径
make && make install 安装

3、为了方便操作,添加一个新的软链接

 ln -s /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
 ln -s /usr/local/keepalived/etc/keepalived/ /etc/
 ln -s /usr/local/keepalived/sbin/keepalived/ /sbin/
主代理服务器中:

编写keepalived文件,然后发送给辅助代理服务器

[root@2 keepalived-2.0.6]# cd /etc/keepalived/
[root@2 keepalived]# vim keepalived.conf 

global_defs {
   notification_email {
    root@localhost   节点宕机给谁发了邮件
}
   notification_email_from keepalived@localhost       发送人的名称
   smtp_server 127.0.0.1  发送的服务器
   smtp_connect_timeout 30 指定smtp链接超时的时间
   router_id LVS_DEVEL
   vrrp_skip_check_adv_addr   运行keepalived及其的一个标示
   #vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}
vrrp_instance VI_1 {      
    state MASTER    主机点的标示
    interface eth0
    virtual_router_id 60
    priority 100    权重
    advert_int 1
    authentication {
        auth_type PASS     认证的方式
        auth_pass 1111		认证的密码
    }
    virtual_ipaddress {
        172.25.35.100
    }
}
virtual_server 172.25.35.100 80 {         虚拟ip及端口
    delay_loop 6   最大链接数
    lb_algo rr 	调度算法模式
    lb_kind DR   lvs中的DR模式  
    #persistence_timeout 50
    protocol TCP

    real_server 172.25.35.3 80 {
        TCP_CHECK {
            connect_timeout 3
            weight 1
            connect_port 80
           }
}
    real_server 172.25.35.4 80 {
        TCP_CHECK {
            connect_timeout 3
            weight 1
            connect_port 80
    }
}
}
yum install ipvsadm -y          下载ipvsadm 查看策略
ipvsadm -l     查看主代理服务器的策略
systemctl restart keepalived      重启keepalived服务
scp keepalived.conf root@172.25.35.5:/etc/keepalived/       将编辑好的keepalived文件发送给代理服务器
辅助代理服务器:
[root@2 keepalived]# vim keepalived.conf
global_defs {
   notification_email {
    root@localhost
}
   notification_email_from keepalived@localhost
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
   vrrp_skip_check_adv_addr
   #vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 60
    priority 50
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.25.35.100
    }
}
virtual_server 172.25.35.100 80 {
    delay_loop 6
    lb_algo rr
    lb_kind DR
    #persistence_timeout 50
    protocol TCP

    real_server 172.25.35.3 80 {
        TCP_CHECK {
            connect_timeout 3
            weight 1
            connect_port 80
    }
}
    real_server 172.25.35.4 80 {
        TCP_CHECK {
            connect_timeout 3
            weight 1
            connect_port 80
    }
}

ipvsadm -l 查看辅助代理的策略

真实服务器:

1 安装httpd 启动设置访问页面
注意:该处为了验证负载均衡的效果,后端真实服务器设置不同的访问内容,明显标示内容来自不同的后端服务器。

2、临时添加网卡到真实主机中
ip addr add 172.25.35.100/24 dev eth0

3、设置arptable策略,解决将用户所有针对VIP的请求发送到DS 而不是RS
yum install arptables -y # 安装管理工具

arptables -A INPUT -d 172.25.35.100 -j DROP # 设置不回应对自己VIP的请求
arptables -A OUTPUT -s 172.25.35.100 -j mangle --mangle-ip-s 172.25.35.3

分别查看两台调度器的策略

   [root@2 keepalived]# ipvsadm -l         两台调度器的策略分别设置完整
    IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  2:http rr
  -> lucky3:http                  Route   1      0          4         
  -> lucky4:http                  Route   1      0          5  
    [root@5 keepalived]# ipvsadm -l
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  172.25.35.100:http rr
  -> lucky3:http                  Route   1      0          0         
  -> lucky4:http                  Route   1      0          0 
客户端检测

负载均衡测试

[root@foundation35 kiosk]# curl 172.25.35.100
4号真实
[root@foundation35 kiosk]# curl 172.25.35.100
3号真实
[root@foundation35 kiosk]# curl 172.25.35.100
4号真实
[root@foundation35 kiosk]# curl 172.25.35.100
3号真实
[root@foundation35 kiosk]# curl 172.25.35.100
4号真实

3 关闭真实服务器172.25.35.4的http的服务。模拟该服务器故障,测试该真实服务器被踢除出列表,当服务正常的时候会自动添加到列表中

[root@4 ~]# systemctl stop httpd # 关闭一个真实服务器

客户访问:

[root@foundation35 kiosk]# curl 172.25.35.100
3号真实
[root@foundation35 kiosk]# curl 172.25.35.100
3号真实
[root@foundation35 kiosk]# curl 172.25.35.100
3号真实

故障服务器恢复之后,自动检测将其加入列表

[root@foundation35 kiosk]# curl 172.25.35.100
4号真实
[root@foundation35 kiosk]# curl 172.25.35.100
3号真实
[root@foundation35 kiosk]# curl 172.25.35.100
4号真实
[root@foundation35 kiosk]# curl 172.25.35.100
3号真实
[root@foundation35 kiosk]# curl 172.25.35.100
4号真实

4 目前负载均衡服务器工作在主服务器,主服务器上会添加vip,关闭主服务器的keepalived,模拟负载均衡主服务器异常,这时候会切换到由服务器提供负载均衡服务,并且vip会主动漂移到副服务器。
172.25.35.2:主服务器

关闭keepalived 模拟主服务器异常,
[root@2 samples]# systemctl stop keepalived

[root@2 samples]# ip addr show eth0
 关闭keepalived 模拟主服务器异常,
[root@2 samples]# systemctl stop keepalived
[root@2 samples]# ip addr show eth0

载均衡主服务器异常,将会由副服务器提供服务,vip会自动漂移到副服务器:

[root@5 samples]# ip addr show eth0
#客户端测试服务正常:
[root@foundation35 kiosk]# curl 172.25.35.100
4号真实
[root@foundation35 kiosk]# curl 172.25.35.100
3号真实
[root@foundation35 kiosk]# curl 172.25.35.100
4号真实
[root@foundation35 kiosk]# curl 172.25.35.100
3号真实
[root@foundation35 kiosk]# curl 172.25.35.100
4号真实

分析: 当master负载均衡器挂掉之后,backup负载均衡器负责起负载均衡的功能,避免了单点故障,实现了负载均衡的高可用!!!

附加:arp_ignore和arp_announce参数

arp_ignore和arp_announce参数都和ARP协议相关,主要控制系统返回arp响应和发送arp请求时的动作。这两个参数在lvs—DR模式中非常重要,他们的配置直接影响DR真实服务器的转发是否正常。

上面使用的时设置真实服务器arptables策略,控制后端真实服务器不对目的地值为vip的请求作出响应,下面通过设置arp_ignore和arp_announce参数实现该功能。

[root@3 ~]# sysctl -a |grep arp_ignore
net.ipv4.conf.all.arp_ignore = 0
net.ipv4.conf.default.arp_ignore = 0
net.ipv4.conf.eth0.arp_ignore = 0
net.ipv4.conf.lo.arp_ignore = 0
[root@3 ~]# sysctl -w net.ipv4.conf.all.arp_ignore=1
net.ipv4.conf.all.arp_ignore = 1
[root@3 ~]# sysctl -w net.ipv4.conf.lo.arp_ignore=1
net.ipv4.conf.lo.arp_ignore = 1
[root@3 ~]# sysctl -a |grep arp_announce
net.ipv4.conf.all.arp_announce = 0
net.ipv4.conf.default.arp_announce = 0
net.ipv4.conf.eth0.arp_announce = 0
net.ipv4.conf.lo.arp_announce = 0
[root@3 ~]# sysctl -w net.ipv4.conf.all.arp_announce=2
net.ipv4.conf.all.arp_announce = 2
[root@3 ~]# sysctl -w net.ipv4.conf.lo.arp_announce=2
net.ipv4.conf.lo.arp_announce = 2
[root@3 ~]# sysctl -p

使用客户端进行测试:

[root@foundation35 kiosk]# curl 172.25.35.100
4号真实
[root@foundation35 kiosk]# curl 172.25.35.100
3号真实
[root@foundation35 kiosk]# curl 172.25.35.100
4号真实
[root@foundation35 kiosk]# curl 172.25.35.100
3号真实
[root@foundation35 kiosk]# curl 172.25.35.100
4号真实

效果和使用arptables策略一致。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值