Centos7配置LVS DR模型及长连接

拓扑:

说明:这里只是简单测试,所以都在同一个网段。Director和后端web服务器都需要配置VIP地址

一、Director主机配置

1、关闭防火墙和selinux

[root@director ~]# systemctl stop firewalld
[root@director ~]# systemctl disable  firewalld
[root@director ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config 

2、检查系统内核是否支持ipvs(只要IPVS transport protocol load balancing support都是y,说明ipvs已经支持在这些协议工作)2.4.26,2.6.4及以后的kernel版本内核已经默认支持IPVS

[root@director ~]# uname  -r
3.10.0-957.el7.x86_64
[root@director ~]# grep -i "ipvs" -A 5 /boot/config-3.10.0-957.el7.x86_64 
CONFIG_NETFILTER_XT_MATCH_IPVS=m
CONFIG_NETFILTER_XT_MATCH_LENGTH=m
CONFIG_NETFILTER_XT_MATCH_LIMIT=m
CONFIG_NETFILTER_XT_MATCH_MAC=m
CONFIG_NETFILTER_XT_MATCH_MARK=m
CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m
--
# IPVS transport protocol load balancing support
#
CONFIG_IP_VS_PROTO_TCP=y
CONFIG_IP_VS_PROTO_UDP=y
CONFIG_IP_VS_PROTO_AH_ESP=y
CONFIG_IP_VS_PROTO_ESP=y
--
# IPVS scheduler
#
CONFIG_IP_VS_RR=m
CONFIG_IP_VS_WRR=m
CONFIG_IP_VS_LC=m
CONFIG_IP_VS_WLC=m
--
# IPVS SH scheduler
#
CONFIG_IP_VS_SH_TAB_BITS=8

#
# IPVS application helper
#
CONFIG_IP_VS_FTP=m
CONFIG_IP_VS_NFCT=y
CONFIG_IP_VS_PE_SIP=m

3、安装ipvsadm

[root@director ~]# yum install -y ipvsadm

4、Director地址配置

DIP地址:192.168.14.12(物理机IP,已经配置好)

VIP地址:192.168.14.210(临时生效,重启就没有了。永久生效就修改配置)

[root@director ~]# ifconfig ens32:0 192.168.14.210 netmask 255.255.255.255 broadcast 192.168.14.210 up
-bash: ifconfig: command not found

如果提示:ifconfig:command not found,安装net-tools即可

[root@director ~]# yum install -y net-tools
[root@director ~]# ifconfig ens32:0 192.168.14.210 netmask 255.255.255.255 broadcast 192.168.14.210 up
[root@director ~]# route add -host 192.168.14.210 dev ens32:0

5、调度策略配置:

添加一条新的虚拟服务

[root@director ~]# ipvsadm -A -t 192.168.14.210:80 -s rr

在一个虚拟服务中添加新的真实服务器(后端web服务器)

[root@director ~]# ipvsadm -a -t 192.168.14.210:80 -r 192.168.14.13 -g
[root@director ~]# ipvsadm -a -t 192.168.14.210:80 -r 192.168.14.27 -g

参数说明:

-A   --add-service添加一条新的虚拟服务
-E   --edit-service编辑虚拟服务
-D   --delete-service删除虚拟服务
-C   --clear清除所有的虚拟服务规则
-R   --restore恢复虚拟服务规则
-a   --add-server在一个虚拟服务中添加一个新的真实服务器
-e   --edit-server编辑某个真实服务器
-d   --delete-server删除某个真实服务器
-L | -l   --list显示内核中的虚拟服务规则
-n  --numeric以数字形式显示IP端口
-c  --connection显示ipvs中目前存在的连接,也可以用于分析调度情况
-Z   --zero将转发消息的统计清零
-p  --persistent配置持久化时间
--set tcp tcpfin udp配置三个超时时间(tcp/tcpfin/udp)
-t | -uTCP/UDP协议的虚拟服务
-g | -m | -iLVS模式为:DR | NAT | TUN
-w配置真实服务器的权重
-s配置负载均衡算法,如:rr, wrr, lc等
--timeout显示配置的tcp/tcpfin/udp超时时间
--stats显示历史转发消息统计(累加值)
--rate显示转发速率信息(瞬时值)

6、打开转发功能

[root@director ~]#echo 1 > /proc/sys/net/ipv4/ip_forward

或编辑配置文件修改,使它永久生效(dr模型中要改的几个参数也可以写在这个文件):

[root@director ~]#vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
[root@director ~]#sysctl -p 让它立即生效

二、WEB1配置(方法1:修改配置永久生效)

1、关闭防火墙和selinux

[root@web1 ~]# systemctl stop firewalld
[root@web1 ~]# systemctl disable  firewalld
[root@web1 ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config 

2、配置内核参数

[root@web1 ~]# cd /proc/sys/net/ipv4/conf/

这里每个接口都有相应的目录,一般修改all和lo,all表示所有接口都生效,为了万无一失,所以把all也定义了

如果只需要临时生效:

[root@web1 ~]#echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@web1 ~]#echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
[root@web1 ~]#echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
[root@web1 ~]#echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce

如果需要永久生效,vim /etc/sysctl.conf添加:

[root@web1 conf]# vim /etc/sysctl.conf
net.ipv4.conf.all.arp_ignore=1
net.ipv4.conf.lo.arp_ignore=1
net.ipv4.conf.all.arp_announce=2
net.ipv4.conf.lo.arp_announce=2
[root@web1 conf]#sysctl -p 让它立即生效

3、地址配置

[root@web1 ~]# vim /etc/sysconfig/network-scripts/ifcfg-lo:0
DEVICE=lo:0
IPADDR=192.168.14.210
NETMASK=255.255.255.255
BROADCAST=192.168.14.210
ONBOOT=yes
[root@web1 ~]# route add -host 192.168.14.210 dev lo:0
[root@web1 ~]# systemctl restart network

4、web服务配置

yum源

[root@web1 ~]# vim /etc/yum.repos.d/nginx.repo
[nginx]
name=aliyun epel
baseurl=http://mirrors.aliyun.com/epel/7Server/x86_64/
gpgcheck=0

yum安装

[root@web1 ~]# yum install -y nginx
[root@web1 ~]# vim /usr/share/nginx/html/index.html
web1-server
[root@web1 ~]# systemctl start nginx

5、客户端测试访问(只能访问web1,web2还没配置)

[root@client ~]# curl http://192.168.14.210
web1-server

三、WEB2配置(可选方法2:脚本配置,临时生效,要手动启动)

1、关闭防火墙和selinux

[root@web2 ~]# systemctl stop firewalld
[root@web2 ~]# systemctl disable  firewalld
[root@web2 ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config 

2、配置路由功能,关闭ARP查询功能并设置回环IP(此脚本用于节点服务器绑定 VIP ,并抑制响应 VIP 的 ARP 请求。这样做的目的是为了不让关于 VIP 的 ARP 广播时,节点服务器应答( 因为节点服务器都绑定了 VIP ,如果不做设置它们会应答,三台机器都有相同的VIP地址,就会出现IP冲突)

[root@web2 ~]# vim /etc/rc.d/init.d/realserver.sh
#!/bin/bash
    SNS_VIP=192.168.14.210
#   /etc/rc.d/init.d/functions
    case "$1" in
    start)
        ifconfig lo:0 $SNS_VIP netmask 255.255.255.255 broadcast $SNS_VIP
        /sbin/route add -host $SNS_VIP dev 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
        sysctl -p >/dev/null 2>&1
        echo "RealServer Start OK"
        ;;
    stop)
        ifconfig lo:0 down
        route del $SNS_VIP >/dev/null 2>&1
        echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore
        echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce
        echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore
        echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce
        echo "RealServer Stoped"
        ;;
    *)
        echo "Usage: $0 {start|stop}"
        exit 1
    esac
    exit 0

添加执行权限并运行脚本(需要安装net-tools包,要不ifconfig命令无法执行)

[root@web2 ~]# cd  /etc/rc.d/init.d/
[root@web2 init.d]# pwd
/etc/rc.d/init.d
[root@web2 init.d]# chmod u+x realserver.sh 
[root@web2 init.d]# yum install -y net-tools
[root@web2 init.d]# ./realserver.sh start 
RealServer Start OK

3、web服务器配置

yum源

[root@web2 ~]# vim /etc/yum.repos.d/nginx.repo
[nginx]
name=aliyun epel
baseurl=http://mirrors.aliyun.com/epel/7Server/x86_64/
gpgcheck=0

安装

[root@web2 ~]# yum install -y nginx
[root@web2 ~]# vim /usr/share/nginx/html/index.html
web2-server
[root@web2 ~]# systemctl start nginx

四、client访问测试

1、访问192.168.14.210,可以看到是轮询访问

[root@client ~]# curl http://192.168.14.210
web1-server
[root@client ~]# curl http://192.168.14.210
web2-server
[root@client ~]# curl http://192.168.14.210
web1-server

五、设置长连接访问,需要修改服务器

1、在原来的配置上修改(-E是修改,-p表示长连接,单位为秒)

[root@director ~]# ipvsadm -E -t 192.168.14.210:80 -s rr -p 10

2、客户端访问,10秒内访问都会指向同一台后端web服务器

[root@client ~]# curl http://192.168.14.210
web1-server
[root@client ~]# curl http://192.168.14.210
web1-server
[root@client ~]# curl http://192.168.14.210
web1-server

3、服务器端查看连接状态

[root@director ~]# 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.14.210:80 rr persistent 10
  -> 192.168.14.13:80             Route   1      0          0         
  -> 192.168.14.27:80             Route   1      0          5 

 

LVS的八种调度算法

1. 轮叫调度 rr
这种算法是最简单的,就是按依次循环的方式将请求调度到不同的服务器上,该算法最大的特点就是简单。轮询算法假设所有的服务器处理请求的能力都是一样的,调度器会将所有的请求平均分配给每个真实服务器,不管后端 RS 配置和处理能力,非常均衡地分发下去。

2. 加权轮叫 wrr
这种算法比 rr 的算法多了一个权重的概念,可以给 RS 设置权重,权重越高,那么分发的请求数越多,权重的取值范围 0 – 100。主要是对rr算法的一种优化和补充, LVS 会考虑每台服务器的性能,并给每台服务器添加要给权值,如果服务器A的权值为1,服务器B的权值为2,则调度到服务器B的请求会是服务器A的2倍。权值越高的服务器,处理的请求越多。

3. 最少链接 lc
这个算法会根据后端 RS 的连接数来决定把请求分发给谁,比如 RS1 连接数比 RS2 连接数少,那么请求就优先发给 RS1 

4. 加权最少链接 wlc
这个算法比 lc 多了一个权重的概念。

5. 基于局部性的最少连接调度算法 lblc
这个算法是请求数据包的目标 IP 地址的一种调度算法,该算法先根据请求的目标 IP 地址寻找最近的该目标 IP 地址所有使用的服务器,如果这台服务器依然可用,并且有能力处理该请求,调度器会尽量选择相同的服务器,否则会继续选择其它可行的服务器

6. 复杂的基于局部性最少的连接算法 lblcr
记录的不是要给目标 IP 与一台服务器之间的连接记录,它会维护一个目标 IP 到一组服务器之间的映射关系,防止单点服务器负载过高。

7. 目标地址散列调度算法 dh
该算法是根据目标 IP 地址通过散列函数将目标 IP 与服务器建立映射关系,出现服务器不可用或负载过高的情况下,发往该目标 IP 的请求会固定发给该服务器。

8. 源地址散列调度算法 sh
与目标地址散列调度算法类似,但它是根据源地址散列算法进行静态分配固定的服务器资源。

LVS的三种工作模式

   NAT模式(VS-NAT):LVS将客户端发来的数据包的IP头的目的地址转换成其中一台RS(real server)的IP地址,由RS处理数据并返回给LVS,LVS再把数据包的源IP改为自己的IP,目的地址IP改为客户端的IP地址发送给客户端。

   IP隧道模式(VS-TUN):将客户端发来的数据包封装一个新的目的IP头标记,通过IP隧道转发给RS,RS收到后,先把数据包的头解开,还原数据包,处理后直接返回给客户端,不需要再经过LVS。

   DR模式(VS-DR):客户端发送请求到VIP,LVS将请求报文的目标MAC地址改为RS的MAC地址,将请求转发给RS,而RS响应后的处理结果直接返回给客户端。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

友人a笔记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值