LVS集群基础(三):DR模型实现

在LVS-DR模型中因为director和realserver在同一个网段中,且都配置的有VIP地址,为了使realserver上不响应vip当然arp广播请求,我们要在realserver上配置arp_ignore和arp_announce两个参数。在内核2.4.26和2.6.4的版本以后,附带了这两个设备标志。

arp_announce:用于定义本地主机,在向外通告本机所配置ip地址的限定级别的。

0:表示把本地主机上所有网卡的所有ip地址都通告给所练网络
1:表示尽量避免要不在同网络的ip地址告诉不是同网络的主机。
2:表示避免把不在同网络的ip地址告诉不是本网络的主机。

arp_ignore:用于定义收到广播通知时的动作

0:表示收到arp请求中ip地址在本主机上时机响应该arp请求。
1:表示只有收到arp请求的网卡是该arp请求的ip地址才响应。
2.表示只用收到的arp请求的网卡是该arp请求的ip地址且发起该arp的ip地址和请求的地址在同一个网络,才响应。

如下图所示,外网用户直接访问Director上的VIP地址,Director将请求分派给real server 进行处理,当realserver处理后不再经过Director,而是直接送至客户端,绕开了Director,使Director不再成为瓶颈。可以有大量的节点,最多可以有100个节点

实验拓扑:

说明:路由器采用linux模拟,使用iptables的NAT实现

一、实验环境准备:

1.1 准备虚拟机:
准备四台linux虚拟机(我这里使用centos 6.4 x86_64),并为路由器linux添加两块网卡,一块接外网,一块接内网。其他服务器都只需要一块网卡。router的内网网卡和集群服务器的的网卡需划分到一个独立的vm交换机上,这点需要注意。

具体如下:

然后启动各虚拟机,按上述拓扑规划配置好IP地址。

1.2 配置路由器(linux)
使用iptables实现NAT配置较为简单,主要如下:

1.2.1 开启转发功能:

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

如果需永久修改,则需要修改sysctl.conf文件。并使用sysctl -p 使其立即生效。

1.2.2 配置iptables:
清除所有规则:

[root@router ~]# iptables –F

配置NAT功能:

[root@router ~]# iptables -t nat -A POSTROUTING -o eth0 -s 172.16.1.0/24 -j SNAT --to 192.168.8.254 
[root@router ~]# iptables -t nat -A PREROUTING -d 192.168.8.254 -p tcp --dport 80 -j DNAT --to-destination 172.16.1.253:80

##为了方便使用ssh客户端连接,我还将lvs集群中各服务器的22端口映射到了不同端口,具体如下:

[root@router ~]# iptables -t nat -A PREROUTING -d 192.168.8.254 -p tcp --dport 2022 -j DNAT --to-destination 172.16.1.252:22 
[root@router ~]# iptables -t nat -A PREROUTING -d 192.168.8.254 -p tcp --dport 2122 -j DNAT --to-destination 172.16.1.101:22 
[root@router ~]# iptables -t nat -A PREROUTING -d 192.168.8.254 -p tcp --dport 2222 -j DNAT --to-destination 172.16.1.102:22

配转发功能:

[root@router ~]# iptables -A FORWARD -p ip -j ACCEPT

保存规则:

[root@router ~]# service iptables save

此时,Director和RealServer都已可以正常访问外网。

1.3 配置本地windows,添加路由使其能访问lvs集群:

由于试验中物理主机(windows)和试验用路由器(linux)的默认网关指向的是真实的路由器,因此物理主机(windows)是无法访问lvs集群网络的,为了能让物理机(windows)访问到集群网络方便后面测试,因此需要添加路由,命令如下:

C:\windows\system32>route add 172.16.1.0/24 192.168.8.254
操作完成!

二、配置Director

2.1 启用转发

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

如果想永久生效,则需要修改/etc/sysctl.conf文件。

2.2 配置VIP和路由:

配置路由:

[root@lvs ~]# route add -host 172.16.1.253 dev eth0:0

配置VIP:

[root@lvs ~]# ifconfig eth0:1 172.16.1.253 netmask 255.255.255.255 up

2.3 清除原有iptables和ipvs规则:

[root@lvs ~]# iptables -F

[root@lvs ~]# iptables -Z

[root@lvs ~]# ipvsadm -C

2.4 配置集群服务:

[root@lvs ~]# ipvsadm -A -t 172.16.1.253:80 -s wlc

2.5 添加RS至集群服务:

[root@lvs ~]# ipvsadm -a -t 172.16.1.253:80 -r 172.16.1.101 -g

[root@lvs ~]# ipvsadm -a -t 172.16.1.253:80 -r 172.16.1.102 -g

2.6 将上述过程编写为一个服务脚本,直接在Director上实现开机启动:

#!/bin/bash 
# 
# LVS script for VS/DR 
# chkconfig: - 90 10 
# 
. /etc/rc.d/init.d/functions 
# 
VIP=172.16.1.253 
DIP=172.16.1.252 
RIP1=172.16.1.101 
RIP2=172.16.1.102 
PORT=80 
RSWEIGHT1=5 
RSWEIGHT2=5

# 
case "$1" in 
start)          

  /sbin/ifconfig eth0:1 $VIP broadcast $VIP netmask 255.255.255.255 up 
  /sbin/route add -host $VIP dev eth0:1

# Since this is the Director we must be able to forward packets 
  echo 1 > /proc/sys/net/ipv4/ip_forward

# Clear all iptables rules. 
  /sbin/iptables -F

# Reset iptables counters. 
  /sbin/iptables -Z

# Clear all ipvsadm rules/services. 
  /sbin/ipvsadm -C

# Add an IP virtual service for VIP 192.168.0.219 port 80 
# In this recipe, we will use the round-robin scheduling method. 
# In production, however, you should use a weighted, dynamic scheduling method. 
  /sbin/ipvsadm -A -t $VIP:80 -s wlc

# Now direct packets for this VIP to 
# the real server IP (RIP) inside the cluster 
  /sbin/ipvsadm -a -t $VIP:80 -r $RIP1 -g -w $RSWEIGHT1 
  /sbin/ipvsadm -a -t $VIP:80 -r $RIP2 -g -w $RSWEIGHT2

  /bin/touch /var/lock/subsys/ipvsadm &> /dev/null 
;;

stop) 
# Stop forwarding packets 
  echo 0 > /proc/sys/net/ipv4/ip_forward

# Reset ipvsadm 
  /sbin/ipvsadm -C

# Bring down the VIP interface 
  /sbin/ifconfig eth0:0 down 
  /sbin/route del $VIP 
  
  /bin/rm -f /var/lock/subsys/ipvsadm 
  
  echo "ipvs is stopped..." 
;;

status) 
  if [ ! -e /var/lock/subsys/ipvsadm ]; then 
    echo "ipvsadm is stopped ..." 
  else 
    echo "ipvs is running ..." 
    ipvsadm -L -n 
  fi 
;; 
*) 
  echo "Usage: $0 {start|stop|status}" 
;; 
esac

将上述内容保存在/etc/init.d/lvs-director文件中,然后添加到服务:

[root@lvs ~]# chmod +x /etc/init.d/lvs-director

[root@lvs ~]# chkconfig --add lvs-director

[root@lvs ~]# chkconfig lvs-director on

[root@lvs ~]# /etc/init.d/lvs-director start 
[root@lvs ~]# /etc/init.d/lvs-director status 
ipvs is running ... 
IP Virtual Server version 1.2.1 (size=4096) 
Prot LocalAddress:Port Scheduler Flags 
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn 
TCP  172.16.1.253:80 wlc 
  -> 172.16.1.101:80              Route   5      0          0         
  -> 172.16.1.102:80              Route   5      0          0

三、配置RS:

3.1 配置ARP广播:

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

3.2 配置VIP和路由:

[root@rs1 ~]# ifconfig lo:0 172.16.1.253 netmask 255.255.255.255 up

[root@rs1 ~]# route add -host 172.16.1.253 dev lo:0

3.3 编写为脚本:

#!/bin/bash 
# 
# Script to start LVS DR real server. 
# chkconfig: - 90 10 
# description: LVS DR real server 
# 
.  /etc/rc.d/init.d/functions

VIP=172.16.1.253

host=`/bin/hostname`

case "$1" in 
start) 
       # Start LVS-DR real server on this machine. 
        /sbin/ifconfig lo down 
        /sbin/ifconfig lo 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

        /sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up 
        /sbin/route add -host $VIP dev lo:0

;; 
stop)

        # Stop LVS-DR real server loopback device(s). 
        /sbin/ifconfig lo:0 down 
        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

;; 
status)

        # Status of LVS-DR real server. 
        islothere=`/sbin/ifconfig lo:0 | grep $VIP` 
        isrothere=`netstat -rn | grep "lo:0" | grep $VIP` 
        if [ ! "$islothere" -o ! "isrothere" ];then 
            # Either the route or the lo:0 device 
            # not found. 
            echo "LVS-DR real server Stopped." 
        else 
            echo "LVS-DR real server Running." 
        fi 
;; 
*) 
            # Invalid entry. 
            echo "$0: Usage: $0 {start|status|stop}" 
            exit 1 
;; 
esac

保存至/etc/init.d/lvs-rs,并赋予执行权限,然后添加为开机启动:

[root@rs1~]# chmod +x /etc/init.d/lvs-rs

[root@rs1 ~]# chkconfig --add lvs-rs

[root@rs1 ~]# chkconfig lvs-rs on

[root@rs1 ~]# /etc/init.d/lvs-rs start

3.4 在RS2上采用相同的配置即可
至此就全部完成了lvs的DR模型配置。

4. 测试LVS集群

4.1 配置web服务器:
4.1.1 为rs1节点添加web主页:

[root@rs1 ~]# service httpd start 
正在启动 httpd:httpd: apr_sockaddr_info_get() failed for rs1 
httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for ServerName 
                                                           [确定] 
[root@rs1 ~]# echo "This is RS1..." >/var/www/html/index.html

4.1.2 为rs2节点添加web主页:

[root@rs2 ~]# echo "This is RS2..." >/var/www/html/index.html

4.2 访问测试:
访问时观察ipvs状态:

Every 1.0s: ipvsadm -L -n                                                                        Tue Oct  8 19:58:42 2013

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

推荐阅读更多精彩内容

  • Linux系统之lvs集群 集群的基本思想 由于现代化业务上线的需求, 单服务器已经不能满足业务的需要, 业务服务...
    魏镇坪阅读 3,684评论 0 14
  • 【摘要】 面对大量用户访问、高并发请求,海量数据,可以使用高性能的服务器、大型数据库,存储设备,高性能Web服务器...
    静修佛缘阅读 4,545评论 0 24
  • 1.集群的类型 1.1、LB: 负载均衡集群(Load Balancing) 组成部分负载均衡器调度器分发器后端主...
    Bruce_King阅读 817评论 0 1
  • why LVS 说到LVS,不得不说起F5。F5的LTM(本地流量管理器)在部署上、负载均衡原理上类似,但是也有十...
    朱晓飞阅读 4,809评论 1 12
  • (一)LVS概念 LVS( Linux Virtual Server)是一种负载均衡(LB,Laod Balanc...
    uangianlap阅读 3,602评论 0 9