LVS(DR) + keepalived实现高可用

LVS:Linux virtual server,为linux虚拟主机,同过不同的模式和转发算法,将tcp请求分发到不同后端服务器。后端服务器分别响应客户端请求以达到负载均衡的目的。4种工作模式和10种调度算法。

LVS是被编译进内核中,主要分为两部分ipvs和ipvsadm,ipvs是LVS软件核心,实现了传输层负载均衡。ipvsadm是用户空间的集群管理工具。

4种模式:NAT,TUN,DR,FULLNAT。至于这几种模式的区别,优缺点网上到处是资料就不详述了,自行查阅。

10种调度算法:常见的有轮询,加权轮询,ip hash等,自行查阅。

 

Keepalived:LVS只是负责负载均衡的转发,那如果后台的Real Server的服务挂掉以后,LVS是否能主动把这个摘除掉吗?答案是:肯定不行的,就是LVS不具备把后端挂掉的Real Server摘除掉,所以keepalived的应运而生。可以说keepalived 就是为LVS设计的,同时keepalived又可以作为一个独立的软件,根据后端服务器的健康状态切换vip。它根据tcp/ip参考模型的第三四和第五层交换机制检测每个服务节点的状态,每个服务节点异常或者工作障碍,keepalvied讲立刻检测到,并把障碍节点剔除,是毫秒级的,当后台节点恢复正常以后,keepalived有自动将服务节点重新添加在服务器集群中。主要由core、check和vrrp协议三个模块组成。

  • 只用lvs(DR)实现负载均衡,没有keepalived情况下。

  LVS DR原理:用户请求LVS到达director server,director server将请求的报文的目的MAC地址改为后端的real server的MAC地址,目的IP为VIP(不变),源IP为client IP地址(不变),然后director将报文发送到realserver,realserver检测到目的地址为自己本地的VIP,如果在同一网段,将请求直接返回给用户,如果用户跟realserver不在同一个网段,则需要通过网关返回给用户。

对外服务器(DS)DIP:10.6.49.130VIP:10.6.48.109
后端服务器(RS)RIP:10.6.48.162VIP:10.6.48.109
后端服务器(RS)RIP:10.6.48.162VIP:10.6.48.109

两台RS配置:

#arp抑制
echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
# 将对应网卡设置为只回应目标IP为自身接口地址的ARP请求
echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce
echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce
# 将ARP请求的源IP设置为eth0上的IP,也就是RIP
# 必须完成以上设置,才可继续
 
ifconfig lo:0 10.6.48.109 broadcast 172.30.100.1 netmask 255.255.255.255
# 添加IP地址为VIP的虚拟网卡lo:0
route add -host 10.6.48.109 dev lo:0
# 添加一条路由,目标IP为VIP的数据包使用lo接口发送,这样响应报文的源IP就会为VIP
#再启动一个socket服务,绑定端口用来做验证。

   DS配置:

lsmod |grep ip_vs
# 确保内核加载了lvs模块
yum install -y ipvsadm
# 安装用户管理工具
ifconfig eth0:0 10.6.48.109 netmask 255.255.255.255
# 在DS服务器上添加一个地址为VIP的虚拟网卡eth0:0

ipvs规则配置
ipvsadm -A -t 10.6.48.109:8080 -s wrr
# 添加虚拟服务,指定IP、端口、算法
ipvsadm -a -t 10.6.48.109:8080 -r 10.6.48.162:8079 -g -w 10
# 添加第一台后端服务器,指定DR模式,指定权重为10
ipvsadm -a -t 10.6.48.109:8080 -r 10.6.48.167:8079 -g -w 10
# 添加第二台后端服务器,指定DR模式,指定权重为10

   keepalived登场:

在前面方式下,达到了负载均衡的目的,但是如果DS挂了,也就没有了VIP对外服务,这时候keepalived就登场了,再加一台DS使用keepalived做热备,当一台DS挂了的时候另一台直接顶上。自动切换VIP,而keepalived的切换是毫秒级的,就实现了高可用。

对外服务器(DS)DIP:10.6.49.131VIP:10.6.48.109
对外服务器(DS)DIP:10.6.49.130VIP:10.6.48.109
后端服务器(RS)RIP:10.6.48.162VIP:10.6.48.109
后端服务器(RS)RIP:10.6.48.167VIP:10.6.48.109

 

 后端服务器RS配置:

后端服务器配置与上边的一样,不做任何修改。

DS配置:

#yum -y install keepalived ipvsadm
#vim /etc/keepalived/keepalived.conf

! Configuration File for keepalived

global_defs {                ##全局设置 
   notification_email {      ##设置报警邮件地址 
     root@localhost  
   }  
   notification_email_from root@localhost  ##设置邮件的发送地址
   smtp_server localhost  
   smtp_connect_timeout 30  
   router_id  LVS-1         ##表示该台服务的ID
} 
vrrp_instance VI_1 {
   #两台都设为 BACKUP 
   state BACKUP
   nopreempt
   #不抢占,默认为抢占
   #绑定vip的网卡为eth0,根据自己的服务器来设置
    interface eth0
    virtual_router_id 109
    priority 100
    #优先级另一台上为90,(只要低于主就可以)
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        10.6.48.109
    }
}
virtual_server 192.168.243.100 80 {
    #每隔10秒查询realserver状态
    delay_loop 10
    #lvs 算法采用 roundrobin
    lb_algo rr
    #DR模式
    lb_kind DR
    #同一IP的连接60秒内被分配到同一台realserver
    persistence_timeout 60
    #用TCP协议检查realserver状态
    protocol TCP
    
    #后端服务器
    real_server 192.168.243.135 8070 {
        weight 100
        TCP_CHECK {
        #10秒无响应超时
        connect_timeout 10
        nb_get_retry 3
        delay_before_retry 3
        connect_port 80
        }
    }
    
    #后端服务器
    real_server 192.168.243.136 8070 {
        weight 100
        TCP_CHECK {
        connect_timeout 10
        nb_get_retry 3
        delay_before_retry 3
        connect_port 80
        }
     }
}

#systemctl start keepalived
#systemctl enable keepalived

 以上就做到了高可用负载均衡架构,上述情况下DS始终还是只有一台对外服务,即使后端服务器再多难免会性能不足,留给读者一个思考问题,如何横向扩展DS,让多台DS对外服务?

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值