keepalived+LVS高可用负载均衡搭建

介绍

LVS架构中,不管是NAT模式还是DR模式,当后端的RS宕掉时,调度器依然会把请求转发到宕掉的RS上,这样的结果并不是我们想要的。其实,keepalived就可以解决该问题,它不仅仅有高可用的功能,还有负载均衡的功能。在调度器上只要安装了keepalived,就不用再安装ipvsadm了,也不用去编写LVS相关的脚本了,也就是说keepalived已经嵌人了LVS功能。完整的keepalived+LVS架构需要有两台调度器实现高可用,提供调度服务的只需要一台,另外一台作为备用。

为了节省资源,我们只设置一台主keepalived,备用的暂时就省略掉了。下面为各机器的角色和IP。

主keepalived(调度器):192.168.91.129

真实服务器rs1:192.168.91.130

真是服务器rs2:192.168.91.131

VIP:192.168.91.100

案例实施

首先关闭三个节点防火墙

[root@dir ~]# setenforce 0
[root@dir ~]# systemctl stop firewalld

为调度器节点安装keepalived,其余两个节点安装nginx

yum install -y keepalived

yum install -y nginx

编辑keepalived的配置文件

[root@dir ~]# vi /etc/keepalived/keepalived.conf

nstance VI_1 {
    state MASTER
    interface ens36
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.91.100  
    }
}

virtual_server 192.168.91.100 80 {              #VIP
    delay_loop 10               #每隔10秒查询realserver状态
    lb_algo wlc                                 #lvs算法
    lb_kind DR                                  #DR模式
    persistence_timeout 60                  #(同一IP的连接60秒内被分配到同一台realserver)
    protocol TCP                #用TCP协议检查realserver状态

    real_server 192.168.91.130 80 {             #真实服务器ip
        weight 100              #权重
        TCP_CHECK {
            connect_timeout 10          # 10秒无响应超时(连接超时时间)
            nb_get_retry 3                      #失败重试次数
            delay_before_retry 3        #失败重试的间隔时间
            connect_port 80             #连接的后端端口
        }
}
     real_server 192.168.91.131 80 {
        weight 100
        TCP_CHECK {
            connect_timeout 10
            nb_get_retry 3
            delay_before_retry 3
            connect_port 80
        }
    }
}

因为我们在keepalived的配置文件中定义的LVS模式为DR模式,所以还需要在两台rs上写个脚本

[root@rs1 ~]# vi /usr/local/sbin/lvs_rs.sh
#以下操作为更改arp内核参数,目的是为了让rs顺利发送mac地址给客户端
#/bin/bash
vip=192.168.91.100
#把vip绑定在lo上,是为了实现rs直接把结果返回给客户端
ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 up
route add -host $vip lo:0
#以下操作为更改arp内核参数,目的是为了让rs顺利发送mac地址给客户端
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

执行脚本,启动nginx服务,启动keepalived服务。

[root@rs1 ~]# sh /usr/local/sbin/lvs_rs.sh

[root@rs2 ~]# sh /usr/local/sbin/lvs_rs.sh 

[root@rs1 ~]# systemctl start nginx

[root@rs2 ~]# systemctl start nginx

[root@dir ~]# systemctl start keepalived

检查有无keepalived进程

[root@dir ~]# ps aux |grep keepalived
root       9477  0.0  0.1 122876  1416 ?        Ss   15:54   0:00 /usr/sbin/keepalived -D
root       9478  0.0  0.3 133840  3380 ?        S    15:54   0:00 /usr/sbin/keepalived -D
root       9479  0.0  0.2 133708  2596 ?        S    15:54   0:00 /usr/sbin/keepalived -D
root       9501  0.0  0.0 112724   992 pts/0    R+   15:55   0:00 grep --color=auto keepalived

测试

检验是否成功的方法也很简单,需要在浏览器直接访问vip192.168.91.100,然后故意把其中一台 rs的Nginx服务关掉;然后再刷新浏览器看结果,刷新的时候需要使用组合键(Ctrl+F5)强制刷新浏览器,这样就不会有缓存数据了。同时,也可以在调度器(130)上执行命令ipvsadm -ln查看连接数。

[root@dir ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.91.100:80 wlc persistent 60
  -> 192.168.91.130:80            Route   100    0          0         
  -> 192.168.91.131:80            Route   90     0          0   

关掉rs1节点的nginx:

[root@dir ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.91.100:80 wlc persistent 60
  -> 192.168.91.131:80            Route   90     0          0  

对应的rs只有一台rs2,然后再把rs1的Nginx服务启动,再来查看:

[root@dir ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.91.100:80 wlc persistent 60
  -> 192.168.91.130:80            Route   100    0          0         
  -> 192.168.91.131:80            Route   90     0          0      

后端的rs又变成两台了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值