Keepalived+LVS配置高可用负载均衡集群

Keepalived

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

载平衡是一种跨真实服务器集群分布IP流量的方法,提供一个或多个高可用虚拟服务。在设计负载平衡拓扑时,必须考虑负载均衡器本身的可用性以及它背后的真实服务器。

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

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

  • LVS系统的健康检查
  • 实现VRRPv2堆栈以处理负载平衡器故障转移
配置高可用负载均衡集群

使用LVS—DR模式实现负载均衡

1 实验主机网络设置

服务器ip地址vip
Keepalived服务器1172.25.13.110172.25.13.100
Keepalived服务器2172.25.13.120172.25.13.100
真实服务器1172.25.13.130172.25.13.100
真实服务器2172.25.13.140172.25.13.100

Keepalived服务器(两个设置一致)设置:

1 安装包下载编译安装
keepalived-2.0.6.tar.gz #源码包需要先进行编译然后进行安装。
tar -zxf keepalived-2.0.6.tar.gz # 解压压缩文件
cd keepalived-2.0.6 # 进入解压开的文件
yum install gcc openssl-devel -y # 安装对源码包进行编译的辅助软件
./configure --prefix=/usr/local/keepalived --with-init=systemd # 编译
make && make install # 安装

2 安装lvs管理工具ipvsadm
yum install ipvsadm -y # 安装管理工具
注意:只需要进行安装工具,不需要进行策略设置。

3 设置链接,方便访问keepalived配置文件

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

4 编辑keepalived配置文件
172.25.13.110

! Configuration File for keepalived

global_defs {
   notification_email {
     root@localhost #节点宕机了将会接收到异常邮件的主机
   }
   notification_email_from keepalived@localohost #邮件发送人
   smtp_server 127.0.0.1  #发送的服务器
   smtp_connect_timeout 30 #指定连接超时时间
   router_id LVS_DEVEL
   vrrp_skip_check_adv_addr
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

vrrp_instance VI_1 {
    state MASTER  #主节点表示
    interface eth0
    virtual_router_id 13
    priority 100  #权重
    advert_int 1  #检查的间隔1s
    authentication {
        auth_type PASS  #认证方式
        auth_pass 1111  #认证的密码
    }
    virtual_ipaddress {
        172.25.13.100
    }
}

virtual_server 172.25.13.100 80 {
    delay_loop 6 #连接失败六次之后,发送邮件
    lb_algo rr  #lvs调度算法
    lb_kind DR  #lvs该工作方式
    protocol TCP  # 端口

    real_server 172.25.13.130 80 {
       		TCP_CHECK {
		weight 1
		connect_port 80
           	connect_timeout 3
        }
    }

    real_server 172.25.13.140 80 {
       		TCP_CHECK {
		weight 1
		connect_port 80
           	connect_timeout 3
        }
    }
}

172.25.13.120

! Configuration File for keepalived

global_defs {
   notification_email {
     root@localhost #节点宕机了将会接收到异常邮件的主机
   }
   notification_email_from keepalived@localohost #邮件发送人
   smtp_server 127.0.0.1  #发送的服务器
   smtp_connect_timeout 30 #指定连接超时时间
   router_id LVS_DEVEL
   vrrp_skip_check_adv_addr
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

vrrp_instance VI_1 {
    state BACKUP  #主节点表示
    interface eth0
    virtual_router_id 13
    priority 50  #权重
    advert_int 1  #检查的间隔1s
    authentication {
        auth_type PASS  #认证方式
        auth_pass 1111  #认证的密码
    }
    virtual_ipaddress {
        172.25.13.100
    }
}

virtual_server 172.25.13.100 80 {
    delay_loop 6 #连接失败六次之后,发送邮件
    lb_algo rr  #lvs调度算法
    lb_kind DR  #lvs该工作方式
    protocol TCP  # 端口

    real_server 172.25.13.130 80 {
       		TCP_CHECK {
		weight 1
		connect_port 80
           	connect_timeout 3
        }
    }

    real_server 172.25.13.140 80 {
       		TCP_CHECK {
		weight 1
		connect_port 80
           	connect_timeout 3
        }
    }
}

5 开启服务,并设置服务开机自动启动
systemctl start keepalived
systemctl enable keepalived

真实服务器设置

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

2 添加VIP到各自的物理网卡中
ip addr add 172.25.13.100/24 dev eth0 # 临时添加ip到eth0网卡

3 设置arptable策略,解决将用户所有针对VIP的请求发送到DS 而不是RS

yum install arptables -y # 安装管理工具

arptables -A INPUT -d 172.25.47.100 -j DROP # 设置不回应对自己VIP的请求

arptables -A OUTPUT -s 172.25.47.100 -j mangle --mangle-ip-s 172.25.47.120
#设置将发送出去的数据包的源ip修改成VIP

测试:
1 设置完成真实服务器之后,在两个调度器上查看ipvsadm 全部自动生成负载均衡策略:

[root@toto2 keepalived-2.0.6]# ipvsadm
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  172.25.13.100:http rr
  -> 172.25.13.130:http           Route   1      0          0         
  -> 172.25.13.140:http           Route   1      0          0      

2 使用客户端主机测试:

负载均衡正常

[kiosk@foundation13 Desktop]$ curl 172.25.13.100
toto3————real_server
[kiosk@foundation13 Desktop]$ curl 172.25.13.100
toto4————real_server
[kiosk@foundation13 Desktop]$ curl 172.25.13.100
toto3————real_server
[kiosk@foundation13 Desktop]$ curl 172.25.13.100
toto4————real_server

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

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

[root@toto2 keepalived-2.0.6]# ipvsadm
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  172.25.13.100:http rr
  -> 172.25.13.130:http           Route   1      0          0          # 已经关闭的服务器被移除出列表。

客户访问:

[kiosk@foundation13 Desktop]$ curl 172.25.13.100
toto3————real_server
[kiosk@foundation13 Desktop]$ curl 172.25.13.100
toto3————real_server
[kiosk@foundation13 Desktop]$ curl 172.25.13.100
toto3————real_server

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

[root@toto4 ~]# systemctl start httpd

[root@toto2 keepalived-2.0.6]# ipvsadm
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  172.25.13.100:http rr
  -> 172.25.13.130:http           Route   1      0          0         
  -> 172.25.13.140:http           Route   1      0          0           #恢复之后自动添加

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

172.25.13.110:主服务器

[root@toto1 samples]# ip addr show eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 52:54:00:ca:52:c8 brd ff:ff:ff:ff:ff:ff
    inet 172.25.13.110/24 brd 172.25.13.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet 172.25.13.100/32 scope global eth0     # 添加vip自动
       valid_lft forever preferred_lft forever
    inet6 fe80::5054:ff:feca:52c8/64 scope link 
       valid_lft forever preferred_lft forever

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

#再次查看ip,vip已经不在该主机上面
[root@toto1 samples]# ip addr show eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 52:54:00:ca:52:c8 brd ff:ff:ff:ff:ff:ff
    inet 172.25.13.110/24 brd 172.25.13.255 scope global eth0  
       valid_lft forever preferred_lft forever
    inet6 fe80::5054:ff:feca:52c8/64 scope link 
       valid_lft forever preferred_lft forever

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

[root@toto2 keepalived-2.0.6]# ip addr show eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 52:54:00:43:f6:eb brd ff:ff:ff:ff:ff:ff
    inet 172.25.13.120/24 brd 172.25.13.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet 172.25.13.100/32 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::5054:ff:fe43:f6eb/64 scope link 
       valid_lft forever preferred_lft forever

#客户端测试服务正常:
[kiosk@foundation13 Desktop]$ curl 172.25.13.100
toto4————real_server
[kiosk@foundation13 Desktop]$ curl 172.25.13.100
toto3————real_server
[kiosk@foundation13 Desktop]$ curl 172.25.13.100
toto4————real_server
[kiosk@foundation13 Desktop]$ curl 172.25.13.100
toto3————real_server

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

附加:arp_ignore和arp_announce参数

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

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

[root@toto3 ~]# 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@toto3 ~]# sysctl -w net.ipv4.conf.all.arp_ignore=1
net.ipv4.conf.all.arp_ignore = 1
[root@toto3 ~]# sysctl -w net.ipv4.conf.lo.arp_ignore=1
net.ipv4.conf.lo.arp_ignore = 1
[root@toto3 ~]# 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@toto3 ~]# sysctl -w net.ipv4.conf.all.arp_announce=2
net.ipv4.conf.all.arp_announce = 2
[root@toto3 ~]# sysctl -w net.ipv4.conf.lo.arp_announce=2
net.ipv4.conf.lo.arp_announce = 2
[root@toto3 ~]# sysctl -p

使用客户端进行测试:

[root@foundation13 ~]# curl 172.25.13.100
toto3————real_server
[root@foundation13 ~]# curl 172.25.13.100
toto4————real_server
[root@foundation13 ~]# curl 172.25.13.100
toto3————real_server
[root@foundation13 ~]# curl 172.25.13.100
toto4————real_server

效果和使用arptables策略一致。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值