Linux下LVS+Keepalived实现高可用负载均衡/(DR)实战

LVS+keepalived能很好的实现(系统高可用、系统可扩展性、负载均衡能力),LVS提 供负载均衡,keepalived提供健康检查,故障转移,提高系统的可用性。

Keepalived工作原理

Keepalived 是一个基于VRRP协议,虚拟路由冗余协议 (Virtual Router Redundancy Protocol,简称VRRP)来实现的LVS服务高可用方案,可以利用其来避免单点故障。

虚拟路由冗余协议,可以认为是实现路由器高可用的协议,即将N台提供相同功能的路由器组成一个路由器组,这个组里面有一个master和多个backup,master上面有一个对外提供服务的vip(该路由器所在局域网内其他机器的默认路由为该vip),master会发组播,当backup收不到vrrp包时就认为master宕掉了,这时就需要根据VRRP的优先级来选举一个backup当master。这样的话就可以保证路由器的高可用了。

LVS简介与工作原理

LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统。本项目在1998年5月由章文嵩博士成立,是中国国内最早出现的自由软件项目之一。
目前有三种IP负载均衡技术:

DR  (Direct Routing)
NAT (Network Address Translation)
TUN

十种调度算法 ( rrr | wrr | lc | wlc | lblc | lblcr | dh | sh | sed | nq )。

LVS主要用于服务器集群的负载均衡。它工作在网络层,可以实现高性能,高可用的服务器集群技术。它廉价,可把许多低性能的服务器组合在一起形成一个超级服务器。它易用,配置非常简单,且有多种负载均衡的方法。它稳定可靠,即使在集群的服务器中某台服务器无法正常工作,也不影响整体效果。另外可扩展性也非常好。

(1)LVS是四层负载均衡,也就是说建立在OSI模型的第四层——传输层之上,传输层上有我们熟悉的TCP/UDP,LVS支持TCP/UDP的负载均衡。因为LVS是四层负载均衡,因此它相对于其它高层负载均衡的解决办法,比如DNS域名轮流解析、应用层负载的调度、客户端的调度等,它的效率是非常高的。

(2)LVS的转发主要通过修改IP地址(NAT模式,分为源地址修改SNAT和目标地址修改DNAT)、修改目标MAC(DR模式)来实现。

NAT模式:网络地址转换
  NAT(Network Address Translation)是一种外网和内网地址映射的技术。NAT模式下,网络数据报的进出都要经过LVS的处理。LVS需要作为RS(真实服务器)的网关。当包到达LVS时,LVS做目标地址转换(DNAT),将目标IP改为RS的IP。RS接收到包以后,仿佛是客户端直接发给它的一样。RS处理完,返回响应时,源IP是RS IP,目标IP是客户端的IP。这时RS的包通过网关(LVS)中转,LVS会做源地址转换(SNAT),将包的源地址改为VIP,这样,这个包对客户端看起来就仿佛是LVS直接返回给它的。客户端无法感知到后端RS的存在。
  
DR模式:直接路由
  DR模式下需要LVS和RS集群绑定同一个VIP(RS通过将VIP绑定在loopback实现),但与NAT的不同点在于:请求由LVS接受,由真实提供服务的服务器(RealServer, RS)直接返回给用户,返回的时候不经过LVS。详细来看,一个请求过来时,LVS只需要将网络帧的MAC地址修改为某一台RS的MAC,该包就会被转发到相应的RS处理,注意此时的源IP和目标IP都没变,LVS只是做了一下移花接木。RS收到LVS转发来的包时,链路层发现MAC是自己的,到上面的网络层,发现IP也是自己的,于是这个包被合法地接受,RS感知不到前面有LVS的存在。而当RS返回响应时,只要直接向源IP(即用户的IP)返回即可,不再经过LVS。

(3)DR负载均衡模式数据分发过程中不修改IP地址,只修改mac地址,由于实际处理请求的真实物理IP地址和数据请求目的IP地址一致,所以不需要通过负载均衡服务器进行地址转换,可将响应数据包直接返回给用户浏览器,避免负载均衡服务器网卡带宽成为瓶颈。因此,DR模式具有较好的性能,也是目前大型网站使用最广泛的一种负载均衡手段。

实战:LVS+Keepalived-DR模式

准备环境:
Centos6 四台服务器(其中两台做LVS)
service iptables stop
setenforce 0

LVS主和备的操作,都要安装ipvsadmi和keepalived
#yum -y ipvsadm keepalived

LVS主上的操作

更改keepalive的配置文件

[root@ localhost ~]# vim /etc/keepalived/keepalived.conf
vrrp_instance VI_1 {
    state MASTER        \\初始状态
    interface eth0        \\VIP的网卡    
    virtual_router_id 51
    priority 100        \\优先级
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.189.181     \\VIP地址
    }
}

virtual_server 192.168.189.181 80 {    \\虚拟服务器
    delay_loop 6
    lb_algo rr        \\算法
    lb_kind DR        \\模式
    nat_mask 255.255.255.0    \\子网掩码
    protocol TCP        \\虚拟服务器协议

    real_server 192.168.189.163 80 {    \\真实服务器web1的ip地址和端口
        weight 1            \\权重
        TCP_CHECK {            \\健康检查模块    
            connect_timeout 3
            connect_port 80
            nb_get_retry 3
            delay_before_retry 3
        }
    }
    real_server 192.168.189.164 80 {    \\真实服务器web2的ip地址和端口
        weight 1            \\权重
        TCP_CHECK {            \\健康检查模块
            connect_timeout 3
            connect_port 80
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}

配置完毕后关闭防火墙并启动keepalived
service keepalived start
查看VIP是否生成

ip a
eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:fc:d6:23 brd ff:ff:ff:ff:ff:ff
    inet 192.168.189.161/24 brd 192.168.189.255 scope global eth0
    inet 192.168.189.181/32 scope global eth0

LVS备份主机的操作

备份主机keepalived的配置文件和主的基本相同,需要修改初始状态和优先级即可
vrrp_instance VI_1 {
    state BACKUP        \\初始状态BACKUP
    interface eth0        \\VIP的网卡    
    virtual_router_id 51
    priority 90        \\优先级
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.189.181     \\VIP地址
    }
}
其他配置和LVS主机一样
配置完毕后关闭防火墙并启动keepalived
service iptables stop
setenforce 0
service keepalived start

web服务配置
配置内容和之前一样
1.安装httpd并创建测试页面
2.增加lo:0,并并绑定VIP
3.修改arp级别
4.增加静态路由
5.关闭防火墙

全部配置完毕后,在LVS主上执行如下命令,查看LVS规则是否增加成功

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.189.181:80 rr
  -> 192.168.189.163:80           Route   1      0          0         
  -> 192.168.189.164:80           Route   1      0          0
  
  若有规则输出说明成功

访问VIP测试效果

并且停止主的keepalived测试VIP是否飘逸之LVS的备份主机,若能成功飘逸,并且可以正常访问,说明我们实现了LVS+keepalvied集群的配置,
成功实现了LVS的高可用

你可能感兴趣的:(Linux下LVS+Keepalived实现高可用负载均衡/(DR)实战)