LVS之VS/TUN应用场景

简介

LVS的VS/TUN模式主要使用在异地容灾场景。也就是说有多台真实服务器节点处的地理位置不同。这时候要使用LVS做负载均衡就必须使用VS/TUN模式了。因为在VS/DR下要求DIP和真实服务器的RIP在同一网段,所以在跨地理位置的情况下实施非常困难;而VS/NAT模式下要求DIP和真实服务器的RIP在私网环境下,也无法跨越地理位置。

实验环境

LVS VS/TUN实验网络结构

如上图所示是我在做LVS的VS/TUN模式实验时的网络环境。虽然实验中使用的都是私网IP,但因为他们都处于不同的网段,所以可以类比为公网环境。

环境配置

实验环境配置分为三部分,第一部分是通用配置(Director和RealServer都需要的配置),第二部分是对负载调度器主机也就是Director主机的配置,第三部分是对各个真实服务器节点的配置。稍候分小节介绍。现在对实验环境的主机和系统进行说明。

三台路由器使用的是DynamipsGUI(小凡)模拟的思科3640。为了让实验环境足够简单(也为了减少我主机的系统开销)交换机的部分就省略了,所有主机都直接与路由的以太网口相连。

P0/0是使用VMWare虚拟的一台win10系统,ip地址为192.168.3.101。用于请求LVS中的http服务器,来验证LVS配置完成且工作正常。

P0/1、P0/2、P0/3、P0/4都是使用VMWare虚拟出来的CentOS6.9系统。其中P0/4作为Director,其他三台作为 RealServer。IP地址与图片【LVS VS/TUN实验网络结构】中描述的完全一至。

有关如何将VMWare虚拟出来的机器与DynamipsGUI模拟出来的跟帖相连的问题,我会在另一篇文章中详细说明。等写完后会把链接更新到这里。

通用配置

因为VS/TUN模式下,使用的是IP隧道把数据包从Director分发到各个 RealServer节点的。所以需要四个Linux主机(Director和RealServer)都支持一种名为ipip的IP隧道协议。这就需要在Linux内核中有支持ipip协议(一种IP隧道协议)的模块。想要简单了解在Linux内核中与ipip协议相关的模块可以移步Linux 中IP隧道模块浅析

检查系统是否安装了支持ipip协议的内核模块

如果输入lsmod |grep ipip指令后得到如上图所示的结果(包含图片中的那两行信息,如果有更多信息也无所谓),则表示你的Linux系统内核已经安装了支持ipip协议的相关模块了。

对Director主机的配置

首先是要安装ipvsadm软件包:

yum install -y ipvsadm

然后是对ipvsadm进行配置:

-A -t 192.168.14.101:80 -s rr
-a -t 192.168.14.101:80 -r 192.168.11.101:80 -i -w 1
-a -t 192.168.14.101:80 -r 192.168.12.101:80 -i -w 1
-a -t 192.168.14.101:80 -r 192.168.13.101:80 -i -w 1

从图片【LVS VS/TUN实验网络结构】中可以看到在Director中VIP是配置在Eth0:0上面的。

ifconfig eth0:0 192.168.14.101 netmask 255.255.255.255 up

你也可以把Director中的VIP配置在虚拟网卡tunl0上面。

 ifconfig tunl0 192.168.14.101 netmask 255.255.255.255 up

至此Director的配置工作结束。

需要特别说明的是:在VS/TUN模块下Director是不需要开启ip_forword(路由转发)功能的。

对RealServer节点的配置

所有RealServer节点,除了RIP不同之外,其他配置都是一样的。

首先需要把VIP配置在RealServer节点的tunl0网卡上:

ifconfig tunl0 192.168.14.101 netmask 255.255.255.255 up

然后关闭tunl0网卡的反向路由校验(默认情况下是开着的,基值为1)。因为对tunl0网卡上反向路由的校验策略使用的是all上和tunl0网卡上两rp_filter参数中的较大值。所以需要同时对all中rp_filter参数进行设置。

   echo "0" > /proc/sys/net/ipv4/conf/tunl0/rp_filter
   echo "0" > /proc/sys/net/ipv4/conf/all/rp_filter

因为在VS/TUN模式下,所有RealServer都是可以与client进行直接通信的,所以也可以不关闭反向路由校验,而是把校验规则设置的宽松一些(把rp_filter的值设置为2)。

echo "2" > /proc/sys/net/ipv4/conf/tunl0/rp_filter

有关rp_filter参数更详细的介绍请参阅Linux内核参数 rp_filter

以上就是所有针对LVS在VS/TUN模式下RealServer的配置了,但是如果你的防火墙是开着的,仅有以下配置还不能让你的RealServer正常工作。因为防火墙很可能会拦截你Director通过ipip协议发过来的IP隧道数据包。你可以通过以下配置让防火墙允许ipip协议的数据包通过:

iptables -I INPUT 1 -p 4 -j ACCEPT

至此RealServer的配置也完成了。

需要特别说明的是:

  1. 因为RealServer与Director不在同一网段中,且不会有对VIP的请求被直接路由到RealServer所在的网段中,所以不需要对RealServer进行arp抑制。
  2. 我在网上看到很多配置VS/TUN时,在RealServer和Director都对VIP添加了路由表,我不清楚他们为什么这么做,但我在没有添加路由表的情况下LVS依然可以正常工作。如果您对此有什么见解可以给我留言,咱们做深入的讨论。以期共同进步。

编制自动化脚本

为了启动和关闭方便,我们可以编制两个可以使用service指令进行服务管理的脚本,还可以把他们注册到系统服务中,并设置开机启动。

Director上的启动脚本 lvs_tun-d

#!/bin/sh
# Startup script handle the initialisation of LVS
# chkconfig: - 28 72
# description: Initialise the Linux Virtual Server for TUN
#
LOCK=/var/lock/lvs-tun.lock
VIP=192.168.14.101
RIP1=192.168.11.101
RIP2=192.168.12.101
RIP3=192.168.13.101
. /etc/rc.d/init.d/functions

start()    {
     PID=`ipvsadm -Ln | grep ${VIP} | wc -l`
     if    [ $PID -gt 0 ];

     then
           echo "The LVS-TUN Server is already running !"
     else
           /sbin/ifconfig tunl0 $VIP broadcast $VIP netmask 255.255.255.255 up
           #Clear IPVS Table
           /sbin/ipvsadm -C
           #Set Lvs
           /sbin/ipvsadm -At $VIP:80 -s rr
           /sbin/ipvsadm -at $VIP:80 -r $RIP1:80 -i  -w 1
           /sbin/ipvsadm -at $VIP:80 -r $RIP2:80 -i  -w 1
           /sbin/ipvsadm -at $VIP:80 -r $RIP3:80 -i  -w 1
           /bin/touch $LOCK
           #Run Lvs
           echo "starting LVS-TUN-DIR Server is ok !"       
     fi
}

stop()    {
           #stop  Lvs server
           /sbin/ipvsadm -C
           /sbin/ifconfig tunl0 down >/dev/null
           rm -rf $LOCK
           echo "stopping LVS-TUN-DIR server is ok !"
}

status()  {
     if [ -e $LOCK ];
     then
         echo "The LVS-TUN Server is already running !"
     else
         echo "The LVS-TUN Server is not running !"
     fi
}

case "$1" in
  start)
        start
        ;;
  stop)
        stop
        ;;
  restart)
        stop
        sleep 1
        start
        ;;
  status)
        status
        ;;
  *)
        echo "Usage: $1 {start|stop|restart|status}"
        exit 1
esac
exit 0

把上面的脚本放到/etc/init.d/目录下。并授予其可执行权限:

chmod o+x /etc/init.d/lvs_tun-d

然后使用如下指令设置为开机启动。

chkconfig --level 35 lvs_tun-d on

RealServer上的启动脚本 lvs_tun-r

#!/bin/sh
#
# Startup script handle the initialisation of LVS
# chkconfig: - 28 72
# description: Initialise the Linux Virtual Server for TUN-RealServer
#
LOCK=/var/lock/ipvsadm.lock
VIP=192.168.14.101
. /etc/rc.d/init.d/functions
start() {
     PID=`ifconfig | grep tunl0 | wc -l`
     if [ $PID -ne 0 ];
     then
         echo "The LVS-TUN-RIP Server is already running !"
     else
         # 配置tunl0网卡
         /sbin/ifconfig tunl0 $VIP netmask 255.255.255.255 broadcast $VIP up
         # 配置tunl0网卡的反向路由策略
         echo "2" > /proc/sys/net/ipv4/conf/tunl0/rp_filter
         # 配置防火墙允许ipip协议的数据包通过
         iptables -I INPUT 1 -p 4 -j ACCEPT
         /bin/touch $LOCK
         echo "starting LVS-TUN-RIP server is ok !"
     fi
}

stop() {
         # 关闭tunl0网卡
         /sbin/ifconfig tunl0 down
         # 删除防火墙中允许ipip协议的数据包通过策略
         iptables -D INPUT -p 4 -j ACCEPT
         rm -rf $LOCK
         echo "stopping LVS-TUN-RIP server is ok !"
}

status() {
     if [ -e $LOCK ];
     then
        echo "The LVS-TUN-RIP Server is already running !"
     else
        echo "The LVS-TUN-RIP Server is not running !"
     fi
}

case "$1" in
  start)
        start
        ;;
  stop)
        stop
        ;;
  restart)
        stop
        start
        ;;
  status)
        status
        ;;
  *)
        echo "Usage: $1 {start|stop|restart|status}"
        exit 1
esac
exit 0

把上面的脚本放到/etc/init.d/目录下。并授予其可执行权限:

chmod o+x /etc/init.d/lvs_tun-r

然后使用如下指令设置为开机启动。

chkconfig --level 35 lvs_tun-r on
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,847评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,208评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,587评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,942评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,332评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,587评论 1 218
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,853评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,568评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,273评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,542评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,033评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,373评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,031评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,073评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,830评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,628评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,537评论 2 269

推荐阅读更多精彩内容

  • Linux系统之lvs集群 集群的基本思想 由于现代化业务上线的需求, 单服务器已经不能满足业务的需要, 业务服务...
    魏镇坪阅读 3,620评论 0 14
  • 集群的概念LVS介绍ipvsadm的使用实现LVS-NAT实现LVS-DRLVS高可用 一、集群的概念 (一)系统...
    哈喽别样阅读 708评论 0 2
  • why LVS 说到LVS,不得不说起F5。F5的LTM(本地流量管理器)在部署上、负载均衡原理上类似,但是也有十...
    朱晓飞阅读 4,735评论 1 12
  • 1.集群的类型 1.1、LB: 负载均衡集群(Load Balancing) 组成部分负载均衡器调度器分发器后端主...
    Bruce_King阅读 773评论 0 1
  • 1.Cluster(集群)概念 (1)系统扩展方式: Scale UP:向上扩展,增强Scale Out:向外扩展...
    尛尛大尹阅读 1,068评论 0 4