LVS负载均衡

LVS负载均衡


LVS简介

1998年由我国章文崇博士创建,具备三种工作模式的负载均和服务

LVS工作模式

地址转换(NAT):负载调度器作为所有服务节点的网关出口,也是入口
直链路由(DR):与IP隧道类似,不过所有节点在同一局域网
IP隧道(TUN):负载调度器作为服务节点的入口,出口则是各自独立的公网IP

LVS调度算法

轮询(rr):将收到的访问轮流发送给后端的服务节点
加权轮询(wrr):根据服自动查询到的负载情况,自动调整权重,让能力强的服务端多处理请求
最少连接(lc):根据请求状况,将收到的请求分配给处理服务最少的节点
加权最少连接(wlc):权重高的节点承载更大比例的服务请求

管理LVS服务

yum -y install ipvsadm         #安装管理工具

modprobe ip_vs       #加载内核模块

添加虚拟节点

ipvsadm -A -t 172.20.10.2:80 -s rr


-A	添加一个虚拟服务器
-t	指定VIP
-s	指定负载均衡调度算法
rr	轮询
wrr	加权轮询
lc	最少连接
wlc	加权最少连接

添加服务节点

ipvsadm -a -t 172.20.10.2:80 -r 172.20.10.3:80 -m -w 1


-a	添加一个真实服务端
-t	指定VIP
-r	指定RIP
-m	表示使用NAT
-g	表示DR
-i	表示TUN
-w	权重
-p	连接保持

查询LVS

ipvsadm -ln

删除服务器节点

ipvsadm -d -r 172.20.10.5:80 -t 172.20.20.2:80
ipvsadm -D 172.20.10.2:80
ipvsadm -C > /etc/sysconfig/ipvsadm-config


-d	删除一个真实服务端
-t	指定VIP
-r	指定RIP
-D	删除整个VIP服务

保存LVS配置

ipvsadm -S -n > /etc/sysconfig/ipvsadm-config

NAT模式

1、准备工作

server1(网卡 NET:192.168.2.133)IP地址是静态的,网关是192.168.2.10

server2(网卡 NET:192.168.2.132)IP地址是静态的,网关是192.168.2.10

LVS-server调度机(网卡  NET:192.168.2.10、Bridged:192.168.0.105)

2、配置server1服务器

yum -y install epel-releasr 
yum -y install nginx

systemctl start nginx
systemctl enable nginx 

systemctl stop firewalld
setenforce 0

mv /usr/share/nginx/html/index.html /usr/share/nginx/html/111
echo "server 11111" > /usr/share/nginx/html/index.html

vi /etc/sysconfig/network-scripts/ifcfg-ens33 
BOOTPROTO=static
IPADDR=192.168.2.133
NETMASK=255.255.255.0
GATEWAY=192.168.2.10

3、配置server2服务器

yum -y install epel-releasr 
yum -y install nginx

systemctl start nginx
systemctl enable nginx 

systemctl stop firewalld
setenforce 0

mv /usr/share/nginx/html/index.html /usr/share/nginx/html/111
echo "server 22222" > /usr/share/nginx/html/index.html

vi /etc/sysconfig/network-scripts/ifcfg-ens33 
BOOTPROTO=static
IPADDR=192.168.2.132
NETMASK=255.255.255.0
GATEWAY=192.168.2.10

4、配置调度机

systemctl stop firewalld
setenforce 0

yum install -y ipvsadm
modprobe ip_vs

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

ipvsadm -A -t 192.168.0.105:80 -s rr
ipvsadm -at 192.168.0.105:80 -r 192.168.0.132 -m -w 1
ipvsadm -at 192.168.0.105:80 -r 192.168.0.133 -m -w 1
ipvsadm -ln

5、测试

http://192.168.0.105

curl 192.168.0.105

!!!总结

①.客户端将请求发往前端的负载均衡器,请求报文源地址是CIP(客户端IP),后面统称为CIP),目标地址为VIP(负载均衡器前端地址,后面统称为VIP)。

②.负载均衡器收到报文后,发现请求的是在规则里面存在的地址,那么它将客户端请求报文的目标地址改为了后端服务器的RIP地址并将报文根据算法发送出去。

③.报文送到Real Server后,由于报文的目标地址是自己,所以会响应该请求,并将响应报文返还给LVS。

④.然后lvs将此报文的源地址修改为本机并发送给客户端。

注意:

在NAT模式中,Real Server的网关必须指向LVS,否则报文无法送达客户端

特点:

1、NAT 技术将请求的报文和响应的报文都需要通过 LB 进行地址改写,因此网站访问量比较大的时候 LB 负载均衡调度器有比较大的瓶颈,一般要求最多之能 10-20 台节点

2、只需要在 LB 上配置一个公网 IP 地址就可以了。

3、每台内部的 realserver 服务器的网关地址必须是调度器 LB 的内网地址。

4、NAT 模式支持对 IP 地址和端口进行转换。即用户请求的端口和真实服务器的端口可以不一致。

优点:
集群中的物理服务器可以使用任何支持TCP/IP操作系统,只有负载均衡器需要一个合法的IP地址。

缺点:
扩展性有限。当服务器节点(普通PC服务器)增长过多时,负载均衡器将成为整个系统的瓶颈,因为所有的请求包和应答包的流向都经过负载均衡器。当服务器节点过多时,大量的数据包都交汇在负载均衡器那,速度就会变慢!

DR模式

1、准备工作

server1(NET:192.168.2.134)

server2 (NET:192.168.2.135)

LVS-server调度机 (192.168.2.136)

2、配置server1服务器

yum -y install httpd 

systemctl start httpd 
systemctl enable httpd

systemctl stop firewalld
setenforce 0

vi /var/www/html/index.html
server 11111

ifconfig lo:0 192.168.2.200 broadcast 192.168.2.200 netmask 255.255.255.255 up
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

3、配置server2服务器

yum -y install httpd 

systemctl start httpd 
systemctl enable httpd

systemctl stop firewalld
setenforce 0

vi /var/www/html/index.html
server 22222

ifconfig lo:0 192.168.2.200 broadcast 192.168.2.200 netmask 255.255.255.255 up
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

4、调度机配置

yum -y install ipvsadm
modprobe ip_vs

ipvsadm -C > /proc/sys/net/ipv4/ip_forward     #DR模式不需要网络转发,做要清空

ifconfig ens33:1 192.168.2.200 broadcast 192.168.2.200 netmask 255.255.255.255 up 
ipvsadm -At 192.168.2.200:80 -s rr
ipvsadm -at 192.168.2.200:80 -r 192.168.2.134:80 -g -w 1
ipvsadm -at 192.168.2.200:80 -r 192.168.2.135:80 -g -w 1
ipvsadm -ln

5、测试

http://192.168.2.200

curl 192.168.2.200

DR模式(脚本方式)

director(ens33:192.168.2.136, vip ens33:1: 192.168.2.200)
real server1(ens33 rip: 192.168.2.134, vip lo:0: 192.168.2.200)
real server2(ens33 rip: 192.168.2.135, vip lo:0: 192.168.2.200)

调度机

 vim /usr/local/sbin/lvs_dr.sh 
 
#! /bin/bash
ipvsadm -C > /proc/sys/net/ipv4/ip_forward     #DR模式不需要网络转发,做要清空
ipv=/sbin/ipvsadm
vip=192.168.2.200
rs1=192.168.2.134
rs2=192.168.2.135
ifconfig ens33:1 $vip broadcast $vip netmask 255.255.255.255 up
route add -host $vip dev ens33:1
$ipv -C
$ipv -A -t $vip:80 -s wrr
$ipv -a -t $vip:80 -r $rs1:80 -g -w 1
$ipv -a -t $vip:80 -r $rs2:80 -g -w 1

server1和server2配置相同

vim /usr/local/sbin/lvs_dr_rs.sh

#! /bin/bash
vip=192.168.2.200
ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 up
route add -host $vip lo:0
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

调度机测试

ipvsadm -ln

curl 192.168.2.200         #不能在LVS调度机本身测试

!!!总结

①.客户端将请求发往前端的负载均衡器,请求报文源地址是CIP,目标地址为VIP。

②.负载均衡器收到报文后,发现请求的是在规则里面存在的地址,那么它将客户端请求报文的源MAC地址改为自己DIP的MAC地址,目标MAC改为了RIP的MAC地址,并将此包发送给RS。

③.RS发现请求报文中的目的MAC是自己,就会将次报文接收下来,处理完请求报文后,将响应报文通过lo接口送给eth0网卡直接发送给客户端。

注意:

需要设置lo接口的VIP不能响应本地网络内的arp请求。

总结:

1、通过在调度器 LB 上修改数据包的目的 MAC 地址实现转发。注意源地址仍然是 CIP,目的地址仍然是 VIP 地址。

2、请求的报文经过调度器,而 RS 响应处理后的报文无需经过调度器 LB,因此并发访问量大时使用效率很高(和 NAT 模式比)

3、因为 DR 模式是通过 MAC 地址改写机制实现转发,因此所有 RS 节点和调度器 LB 只能在一个局域网里面

4、RS 主机需要绑定 VIP 地址在 LO 接口(掩码32 位)上,并且需要配置 ARP 抑制。

5、RS 节点的默认网关不需要配置成 LB,而是直接配置为上级路由的网关,能让 RS 直接出网就可以。

6、由于 DR 模式的调度器仅做 MAC 地址的改写,所以调度器 LB 就不能改写目标端口,那么 RS 服务器就得使用和 VIP 相同的端口提供服务。

7、直接对外的业务比如WEB等,RS 的IP最好是使用公网IP。对外的服务,比如数据库等最好使用内网IP。

优点:
和TUN(隧道模式)一样,负载均衡器也只是分发请求,应答包通过单独的路由方法返回给客户端。与VS-TUN相比,VS-DR这种实现方式不需要隧道结构,因此可以使用大多数操作系统做为物理服务器。

DR模式的效率很高,但是配置稍微复杂一点,因此对于访问量不是特别大的公司可以用haproxy/nginx取代。日1000-2000W PV或者并发请求1万一下都可以考虑用haproxy/nginx。

缺点:
所有 RS 节点和调度器 LB 只能在一个局域网里面。

隧道(TUN)模式

总结

①.客户端将请求发往前端的负载均衡器,请求报文源地址是CIP,目标地址为VIP。

②.负载均衡器收到报文后,发现请求的是在规则里面存在的地址,那么它将在客户端请求报文的首部再封装一层IP报文,将源地址改为DIP,目标地址改为RIP,并将此包发送给RS。

③.RS收到请求报文后,会首先拆开第一层封装,然后发现里面还有一层IP首部的目标地址是自己lo接口上的VIP,所以会处理次请求报文,并将响应报文通过lo接口送给eth0网卡直接发送给客户端。

注意:

需要设置lo接口的VIP不能在共网上出现。

总结:

1.TUNNEL 模式必须在所有的 realserver 机器上面绑定 VIP 的 IP 地址

2.TUNNEL 模式的 vip ------>realserver 的包通信通过 TUNNEL 模式,不管是内网和外网都能通信,所以不需要 lvs vip 跟 realserver 在同一个网段内

3.TUNNEL 模式 realserver 会把 packet 直接发给 client 不会给 lvs 了

4.TUNNEL 模式走的隧道模式,所以运维起来比较难,所以一般不用。

优点:
负载均衡器只负责将请求包分发给后端节点服务器,而RS将应答包直接发给用户。所以,减少了负载均衡器的大量数据流动,负载均衡器不再是系统的瓶颈,就能处理很巨大的请求量,这种方式,一台负载均衡器能够为很多RS进行分发。而且跑在公网上就能进行不同地域的分发。

缺点:
隧道模式的RS节点需要合法IP,这种方式需要所有的服务器支持”IP Tunneling”(IP Encapsulation)协议,服务器可能只局限在部分Linux系统上。

参考资料地址

www.cnblogs.com/gaoxu387/p/7941381.html

LVS+keepalive

1、准备工作

Keepalived1 + lvs1:192.168.2.190
Keepalived2 + lvs2:192.168.2.191
server1:192.168.2.197
server2:192.168.2.198
IP: 192.168.2.100

2、Keepalived + Lvs的2个点都安装服务

yum install ipvsadm keepalived -y

server + nginx服务的2个节点安装

yum -y install epel-release
yum -y install nginx

3、配置2台server服务器脚本,分别在2台服务器上分别执行

#! /bin/bash
vip=192.168.2.100
ifconfig lo:1 $vip broadcast $vip netmask 255.255.255.255 up
route add -host $vip lo:1
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

配置keepalived主配置文件**

主keepalived服务

mv /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak
vim /etc/keepalived/keepalived.conf
vrrp_instance VI_1 {
    state MASTER
    interface ens33
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.2.100
    }
}

virtual_server 192.168.2.100 80 {
    delay_loop 6
    lb_algo rr
    lb_kind DR
    persistence_timeout 0
    protocol TCP

    real_server 192.168.2.191 80 {
        weight 1
        TCP_CHECK {
            connect_timeout 10
            nb_get_retry 3
            delay_before_retry 3
            connect_port 80
        }
    }

    real_server 192.168.2.190 80 {
        weight 1
        TCP_CHECK {
            connect_timeout 10
            nb_get_retry 3
            delay_before_retry 3
            connect_port 80
        }
    }
}

备keepalived服务

mv /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak
vim /etc/keepalived/keepalived.conf
vrrp_instance VI_1 {
    state BACKUP
    interface ens33
    virtual_router_id 51
    priority 90
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.2.100
    }
}

virtual_server 192.168.2.100 80 {
    delay_loop 6
    lb_algo rr
    lb_kind DR
    persistence_timeout 0
    protocol TCP

    real_server 192.168.2.191 80 {
        weight 1
        TCP_CHECK {
            connect_timeout 10
            nb_get_retry 3
            delay_before_retry 3
            connect_port 80
        }
    }

    real_server 192.168.2.190 80 {
        weight 1
        TCP_CHECK {
            connect_timeout 10
            nb_get_retry 3
            delay_before_retry 3
            connect_port 80
        }
    }
}

主从keepalived服务,开启路由转发功能

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

4、启动keepalived服务

systemctl start keepalived
systemctl enable keepalived

5、关闭防火墙

systemctl stop firewalld
setenforce 0

6、验证结果

实验1
手动关闭192.168.0.18节点的nginx,service nginx stop 在客户端上去测试访问 http://192.168.0.38 结果正常,不会出现访问18节点,一直访问的是28节点的内容。

实验2
手动重新开启 192.168.0.18 节点的nginx, service nginx start 在客户端上去测试访问 http://192.168.0.38 结果正常,按照 rr 调度算法访问18节点和28节点。

实验3
测试 keepalived 的HA特性,首先在master上执行命令 ip addr ,可以看到38的vip在master节点上的;这时如果在master上执行 service keepalived stop 命令,这时vip已经不再master上,在slave节点上执行 ip addr 命令可以看到 vip 已经正确漂到slave节点,这时客户端去访问 http://192.168.0.38 访问依然正常,验证了 keepalived的HA特性

你可能感兴趣的:(网络,LVS)