LVS-负载均衡集群

LVS(Linux Virtual Server)是一款四层负载均衡软件,针对TCP/IP做的转发和路由。

LVS架构中有一个核心的角色叫做调度器(load blancer)用来分发用户的请求,还有诸多的真实服务器(real Server)也就是处理用户请求的服务器。

LVS根据实现方式不同主要分为三种模式:NAT模式、IP Tunnel(IP隧道)模式、DR模式。

以下图片均来源于网络

NAT模式LVS搭建

LVS-负载均衡集群

在NAT模式下,调度器需要有两个IP,一个公网IP一个内网IP,真实服务器只需要内网IP。

此架构需要三台机器,IP分配如下:

调度器dir:192.168.153.134(内网IP),192.168.32.129(公网IP,vmware仅主机模式模拟)

真实服务器rs1:192.168.153.135(内网IP)

真实服务器rs2:192.168.153.136(内网IP)

 

首先真实服务器rs1:135/rs2:136上需要把内网网管设置为dir的内网IP.

把三台服务器的iptables规则清空并保存

iptables -F; iptables -t nat -F; serviceiptables save

在dir上安装ipvsadm,这是实现LVS的核心工具

yum install -y ipvsadm

在dir上编写脚本

vim /usr/local/sbin/lvs_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 -s192.168.153.0/24  -j MASQUERADE

# director设置ipvsadm

IPVSADM='/usr/sbin/ipvsadm'

$IPVSADM -C

$IPVSADM -A -t 192.168.32.129:80 -s wlc -p300

$IPVSADM -a -t 192.168.32.129:80 -r192.168.153.135:80 -m -w 1

$IPVSADM -a -t 192.168.32.129:80 -r192.168.153.136:80 -m -w 1

 

脚本参数说明:

ipvsadm的-C选项可以清空规则,防止之前的规则有影响。

-A增加Virtual Server

-t 为TCP

-s 选项指定调度算法  wlc为带权重的最小连接算法

-p指定超时时间,表示在指定的秒内相同用户的请求会一直被调度到同一台rs上(测试时不要加这个参数)

-a 增加rs

-r 指定rs的IP

-m 表示LVS的模式为NAT

-g表示LVS的模式为DR

-I 表示LVS的模式为IP Tunnel

-w 指定权重

编辑完脚本后直接执行就完成了LVS的配置

bash /usr/local/sbin/lvs_nat.sh

 

把dir上的nginx服务器关闭

为了容易区分,分别给135和136设置一个主页:

echo "rs1" >/usr/share/nginx/html/index.html  153.135

echo "rs2" >/usr/share/nginx/html/index.html   153.136

因为是测试我是yum安装的nginx,所以默认主页路径是在usr/share下

 

在dir上分别访问rs1和rs2

# curl 192.168.153.135

rs1

# curl 192.168.153.136

rs2

然后在dir上直接访问dir的外网IP(192.168. 32.129):

# curl 192.168.32.129

rs2

# curl 192.168.32.129

rs1

# curl 192.168.32.129

rs2

# curl 192.168.32.129

rs1

# curl 192.168.32.129

rs2

# curl 192.168.32.129

rs1

# curl 192.168.32.129

rs2

]# curl 192.168.32.129

rs1

这样就做到了均衡访问


DR模式LVS搭建

LVS-负载均衡集群

DR模式下同样三台虚拟机,三台机器只需要公网IP

在这种模式下又多了一个VIP(VIP概念请参考之前关于高可用的文章)

此架构同样需要三台服务器,如下

调度器dir :192.168.153.134

真实服务器rs1:192.168.153.135

真实服务器rs2::192.168.153.136

VIP:192.168.153.110

 

在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.153.110

rs1=192.168.153.135

rs2=192.168.153.136

#注意这里的网卡名字

ifconfig ens33:2 $vip broadcast $vipnetmask 255.255.255.255 up

route add -host $vip dev ens33:2

$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

 

在两台rs上也需要编写脚本(rs上脚本内容一样)

vim /usr/local/sbin/lvs_dr_rs.sh

#/bin/bash

vip=192.168.153.110

#把vip绑定在lo上,是为了实现rs直接把结果返回给客户端

ifconfig lo:0 $vip broadcast $vip netmask255.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

 

编辑好脚本后分别在三台机器上执行各自脚本

 

为了容易区分,分别给135和136设置一个主页:

echo "rs1" >/usr/share/nginx/html/index.html  153.135

echo "rs2" >/usr/share/nginx/html/index.html   153.136

在浏览器输入vip地址刷新就会发现rs1rs2 会交替出现,成功做到了均衡访问。