lvs负载均衡介绍和三种模式的搭建、Keepalived+lvs

一.负载均衡方法介绍

主要的开源软件有LVS、keepalived、haproxy、nginx等。其中LVS是传输层的,nginx属于7层,haproxy既可以认为4层,也可以认为是7层使用。而keepalived的负载均衡功能就是lvs。

四层和七层的主要区别就在于lvs可以分发除80外的其他通信端口,比如mysql。而nginx仅仅支持http,https,mail,但是应用更丰富,比如说可以根据某个目录做限制和用户认证等。在性能上,lvs支持的并发量会大一些,更稳定一些。

二.LVS介绍

lvs是由国人章文嵩开发的,是世界知名的负载均衡软件,基于TCP/IP做的路由转发,稳定性和效率很高。lvs最新版本基于linux2.6,有很多年没有更新了。

lvs的三种常见模式:NAT、DR,IP Tunnel

架构:核心角色分发器(load blance),它用来分发用户的请求,还有诸多处理用户请求的服务器(real server)。

LVS NAT模式
NAT模式借助iptables的nat表来实现,用户的请求到分发器之后,通过预设 的iptables规则,把请求的数据包转发到后端的rs上去。因为每个请求都需要通过处理,所以NAT模式存在着性能瓶颈,请求量不能太大,一般的规模就十几台。

rs需要设定网关为分发器的内网ip,用户请求的数据包和返回给用户包全部经过分发器。在nat模式中,只需要分发器有公网ip就行了,比较节省公网资源。

IP Tunnel模式
IP tunnel模式的特点是分发器和所有rs都需要配置一同个公网的vip,当客户请求数据包到达分发器之后,分发器把目标地址vip改成某个rs的ip(非vip),当rs收到数据包之后,它会还原目标地址为vip。rs发送包,因为配置了vip,可以不用经过分发器处理,直接发送个客户端。

DR模式
和IP Tunnel不同的是,DR模式修改的是rs的mac地址,而不是ip。DR模式也需要所有分发器和rs都配置一个公共的ip,也就是vip。DR模式在同一个网段内。rs接受数据包后,会还原原始数据包,也是直接发送给客户端。

三.LVS的调度算法

轮询 rr
加权轮询 wrr:某台服务器很好,可以权重大的请求的数量多一点。
最小连接 lc:请求最少的访问多一点
加权最小连接wlc:给请求少的加权重,访问的多一点
基于局部性的最小连接 lblc
带复制的基于局部性最小连接 lblcr
目标地址散列调度 dh
源地址散列调度 sh

四.NAT模式搭建

环境说明:

分发器:网卡一192.168.247.160、网卡二:外网ip192.168.41.1(因为没有公网,只用另一个网段代替)
rs1:192.168.247.170 ,设置网关192.168.247.160
rs2:192.168.247.180,设置网关192.168.247.160

准备工作:在分发器的机器上增加一块网卡,设置成仅主机模式,然后启动服务器,给该网卡设置ip。
在这里插入图片描述
开始:
这里我们用防火墙iptables,关闭firewalld,并清空规则,三台机器都需要执行:

systemctl stop firewalld
systemctl disable firewalld

iptables -F
service iptables save

setenforce 0

rs1、rs2设置网关:

vim /etc/sysconfig/network-scripts/ifcfg-ens33
GATEWAY=192.168.247.160 //设置成分发器的ip

#重启network,重启之后就连不上外网了
systemctl restart network

#查看网关
route -n

分发器上安装ipvsadm,ipvsadm是lvs的重要组成部分。

yum install -y ipvsadm

把设置分发器的命令写成一个脚本,方便修改:

vim /usr/local/sbin/ip_nat.sh

#! /bin/bash
# director 服务器上开启路由转发功能echo 1 >/proc/sys/net/ipv4/ip_forward
# 关闭icmp的重定向
echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects
echo 0 > /proc/sys/net/ipv4/conf/default/send_redirects
# 注意区分网卡名字,我的两个网卡分别为ens33和ens37
echo 0 > /proc/sys/net/ipv4/conf/ens33/send_redirects
echo 0 > /proc/sys/net/ipv4/conf/ens37/send_redirects
# director 设置nat防火墙
iptables -t nat -F
iptables -t nat -X
iptables -t nat -A POSTROUTING -s 192.168.247.0/24  -j MASQUERADE
# director设置ipvsadm
IPVSADM='/usr/sbin/ipvsadm'
$IPVSADM -C
#-p 表示同一台客户端在多少时间内连接同一个rs
$IPVSADM -A -t 192.168.41.1:80 -s lc -p 300
$IPVSADM -a -t 192.168.41.1:80 -r 192.168.247.170:80 -m -w 1
$IPVSADM -a -t 192.168.41.1:80 -r 192.168.247.180:80 -m -w 1

到这里就完成了。

测试:
修改rs1和rs2的主页,在用浏览器访问多次,看有啥变化,可以把分发器脚本上的-p参数时间调小试试。

五.DR模式lvs搭建

首先清空nat模式防火墙规则:

iptables -t nat -F

并且把rs上的网关改回原来正常的ip。然后开始操作:

在dir上编写一个shell脚本:

vim /usr/local/sbin/lvs_dr.sh

#! /bin/bash
echo 1 > /proc/sys/net/ipv4/ip_forward
ipv=/usr/sbin/ipvsadm
vip=192.168.247.80
rs1=192.168.247.170
rs2=192.168.247.180
#注意这里的网卡名字
ifdown ens33
ifup ens33
ifconfig ens33:2 $vip broadcast $vip netmask 255.255.255.255 up
route add -host $vip dev ens33:2
$ipv -C
$ipv -A -t $vip:80 -s rr
$ipv -a -t $vip:80 -r $rs1:80 -g -w 1
$ipv -a -t $vip:80 -r $rs2:80 -g -w 1

执行:

sh /usr/local/sbin/lvs_dr.sh

两台服务器上编写脚本(内容一样):

vim /usr/local/sbin/lvs_dr_rs.sh
     
#/bin/bash
vip=192.168.247.80
#把vip绑定在lo上,是为了实现rs直接把结果返回给客户端
ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 up
route add -host $vip lo:0
#以下操作为更改arp内核参数,目的是为了让rs顺利发送mac地址给客户端
#参考文档www.cnblogs.com/lgfeng/archive/2012/10/16/2726308.html
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

执行:

sh /usr/local/sbin/lvs_dr_rs.sh

分别在三台机器上执行各自的脚本,完成。

检查是否有vip生成:

ip addr

inet 192.168.247.80/32 brd 192.168.247.80 scope global ens33:2
ipvsadm -ln

TCP  192.168.247.80:80 rr
  -> 192.168.247.170:80           Route   1      0          2         
  -> 192.168.247.180:80           Route   1      2          0     

最后用浏览器查看。当ip量很大的时候,效果才明显。

六.keepalived+lvs

这种方案,主要是针对用lvs作为负载均衡的情况。如果是用nginx做负载均衡,只需要用keepalived做高可用即可。

keepalibed内置lvs,所以不需要安装ipvsadm包。keepalived提供生存检测,可以把后端宕机的nginx剔除掉。

先把之前设置了vip的网卡重启一下:

ifdown ens33 && ifup ens33

清除ipvsadm规则:

ipvsadm -C

安装keepalived:

yum install -y keepalived

编辑配置文件:

vim /etc/keepalived/keepalived.conf 
 vrrp_instance VI_1 {
    #备用服务器上为 BACKUP
    state MASTER
    #绑定vip的网卡为ens33,你的网卡和阿铭的可能不一样,这里需要你改一下
    interface ens33
    virtual_router_id 51
    #备用服务器上为90
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass aminglinux
    }
    virtual_ipaddress {
        192.168.247.80
    }
}
virtual_server 192.168.247.80 80 {
    #(每隔10秒查询realserver状态)
    delay_loop 10
    #(lvs 算法)
    lb_algo wlc
    #(DR模式)
    lb_kind DR
    #(同一IP的连接60秒内被分配到同一台realserver)
    persistence_timeout 60
    #(用TCP协议检查realserver状态)
    protocol TCP

    real_server 192.168.247.170 80 {
        #(权重)
        weight 100
        TCP_CHECK {
        #(10秒无响应超时)
        connect_timeout 10
        nb_get_retry 3
        delay_before_retry 3
        connect_port 80
        }
    }
    real_server 192.168.247.180 80 {
        weight 100
        TCP_CHECK {
        connect_timeout 10
        nb_get_retry 3
        delay_before_retry 3
        connect_port 80
        }
     }
}

启动keepalived:

systemctl start keepalived

分发器上依然要开启端口转发:

echo 1 > /proc/sys/net/ipv4/ip_forward

查看vip和ipvsadm:

ip add

ipvsadm -ln

两台rs还需要执行之前的rs脚本:

vim /usr/local/sbin/lvs_dr_rs.sh

#/bin/bash
vip=192.168.247.80
#把vip绑定在lo上,是为了实现rs直接把结果返回给客户端
ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 up
route add -host $vip lo:0
#以下操作为更改arp内核参数,目的是为了让rs顺利发送mac地址给客户端
#参考文档www.cnblogs.com/lgfeng/archive/2012/10/16/2726308.html
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

完成,最后用浏览器测试效果。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值