LVS 以及 lvs_keepalived

LVS   linux virtual server

lvs 工作在传输层,针对监听的端口把客户端请求转发给后端的服务器

实现负载均衡的是ipvs 模块,现已集成在linux 内核中,linux 中实际模块名字为 ip_vs

ipvs 的管理

通过 lvsadm 对ipvs 管理
keepalived 也可以通过配置文件配置进行管理ipvs
redhat 管理工具也可以

实现负载均衡的四种模式

DR   (不能转换端口,用户请求是啥端口后端就是啥端口)

请求过程:负载更改用户的VIP的mac 地址为后端服务器的,后端服务器在lo 网卡绑定vip ,当arp 请求过来局域网内的后端抑制其lo 上的vip 的arp 解析响应。最后请求直接从后端以VIP:CIP 形式返回给客户
特点: 1、负载与后端服务必须在同一个局域网内
    2、后端服务器必须有外围IP这样才能直接给客户端回包
    3、单台负载可以对接后端服务器数量:100
    4、DR模式效率很高,配置相对麻烦点。因此访问量特别高的情况可以考虑haproxy/nginx替代,一般在并发1万以内都可以使用ha/ngx 或者lvs的nat 模式。

LVS 以及 lvs_keepalived

NAT

客户端请求包过来后(cip:vip),lvs 把目标IP变换成RIP ,这样cip:rip 数据包到了后端,后端返回数据给lvs,lvs再把源地址IP变换成vip ,这样数据包vip:cip 返回给了客户端
条件:由于要进行NAT转发,所以负载服务器必须开启内核转发功能 net.ipv4.ip_forward = 1,还有iptables 里面的forward 功能开启
单台负载可以对接后端服务器数量:10~20

LVS 以及 lvs_keepalived

TUN  加密隧道模式,不常用

FULLNAT  专门为淘宝架构定制开发的

调度算法

LVS 以及 lvs_keepalived
轮询调度(Round-Robin Scheduling)
加权轮询调度(Weighted Round-Robin Scheduling)
最小连接调度(Least-Connection Scheduling)
加权最小连接调度(Weighted Least-Connection Scheduling)
基于局部性的最少链接(Locality-Based Least Connections  Scheduling)
复 制 的 基 于 局 部 性 最 少 链 接 ( Locality-Based Least  Connections ithReplication Scheduling)
目标地址散列调度(Destination Hashing Scheduling)
源地址散列调度(Source Hashing Scheduling)
最短预期延时调度(Shortest Expected Delay Scheduling)
不 排 队 调 度 ( Never Queue Scheduling )对应: wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq
View Code

搭建配置

1、ipvsadm 命令方式配置

  负载均衡端配置
LVS 以及 lvs_keepalived
yum -y install ipvsadm        安装管理模块
lsmod | grep ip_vs            查看ipvs模块是否加载
ipvsadm                    执行命令加载模块
ln -s /usr/src/kernels/$(uname -r)  /usr/src/linux        (cenos6.x 上需要执行,7.x 不执行)
                 
ifconfig eth0:0  vip/24    up     手动配置一个vip ,先不用keepalived 生成VIP
ipvsadm-save    保存当前lvs 规则,方便后期用ipvsadm-restore 恢复。(不可直接先用ipvsadm -C)
ipvsadm -C        清除所有规则
ipvsadm --set  30  5  60        #设置tcp tcpfin udp 连接超时的时间
ipvsadm -A -t 1.1.1.1:80 -s wrr -p 20        #-s 轮询算法 -p 会话保持,不设置默认300s。#此保持时间是指同一客户端访问后端01后过了20s后再访问负载才会轮询到02
ipvsadm -Ln
ipvsadm -a -t 1.1.1.1:80 -r 1.1.1.2:80 -g -w 1  #-t  tcp-service -r real-ip    -g 即DR模式     -w weight 权重
ipvsadm-save -n     #保存
View Code
  后端配置(配置vip、抑制arp)
LVS 以及 lvs_keepalived
ip addr add vip/32    dev lo lable lo:0     #在lo上配置vip注意子网掩码32位,设置成32位就是为了让此IP不能与其他IP通讯,只是为了有一个VIP地址不是为了通讯的
ifconfig lo:0  192.168.231.200/32 up        #也可以用此命令替代上面命令
ip addr del ip/32 dev lo                 #可以删除添加错误的地址
cat >>/etc/sysctl.conf<<EOF            #抑制arp
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
EOF
sysctl -p
View Code

2、通过keepalived 管理配置搭建lvs,同时实现负载均衡和高可用

  负载均衡端配置

  yum -y install keepalived 

   vi keepalived.conf

  

LVS 以及 lvs_keepalived
global_defs {                       
    #   notification_email {             
    #   }
    #   smtp_connect_timeout 30
    router_id LVS_DEVEL-1                 #全网段唯一
    }
    vrrp_instance VI_1 {            
            state MASTER                 #配置LVS是主机主        
            interface eth0              #配置LVS的vip绑定的网卡     
            virtual_router_id 51        #实例组内各个实例标识
            priority 100                  
            advert_int 1           
            authentication {        
                        auth_type PASS
                        auth_pass 1111
                        }
            virtual_ipaddress {         
                            192.168.20.50        #VIP 地址
                        }
                }
#管理配置lvs 的配置
    virtual_server 192.168.20.50 80 {    #监听的IP及端口
            delay_loop 6           
            b_algo wrr            
            lb_kind DR                     #使用LVS DR模式                 
            nat_mask 255.255.255.0   
            persistence_timeout 0    
            protocol TCP                          
            real_server 192.168.20.1 80 {         #后端真实服务的IP 1
                    weight 1                    #配置加权轮询的权重             
                    TCP_CHECK {                     
                                connect_timeout 10   
                                nb_get_retry 3
                                delay_before_retry 3
                                connect_port 80
                                }
                        }
            real_server 192.168.20.2 80 {        #后端真实服务的IP 1
                    weight 2
                    TCP_CHECK {
                                connect_timeout 10
                                nb_get_retry 3
                                delay_before_retry 3
                                connect_port 80
                                }
                        }
                }
View Code

  ipvsadm-save -n > /tmp/ipvs-bak #备份之前的配置,如果有需要可以ipvsadm-restore </tmp/ipvs-bak
  ipvsadm -C #清除已有规则
  service keepalived start
  ipvsadm -ln #会发现已经生成新的规则

  后端配置(配置vip、抑制arp)同上

应用场景

高并发的web 服务器负载均衡
mysql 集群读取的负载均衡

上一篇:c – 为多处理器找到DAG的静态调度 – 库?


下一篇:Android任务时间表