LVS-DR RR(轮询模式)搭建

本次实验需要两台DR(调度器),两台RS(真实服务器)

DR1:192.168.0.221

DR2:192.168.0.222

RS1:192.168.0.223

RS2:192.168.0.224

 

DR配置

先安装基础软件包

[root@DR1 ~]# yum install -y gcc gcc-c++ make openssl-devel kernel-devel kernel-headers libnl* libpopt* popt-static libnfnet* keepalived

 

软链接内核文件以供ipvsadm安装使用

[root@DR1 ~]# ln -s /usr/src/kernels/2.6.32-642.11.1.el6.x86_64 /usr/src/linux

 

解压ipvsadm

[root@DR1 ~]# tar xzvf ipvsadm-1.26.tar.gz

[root@DR1 ipvsadm-1.26]# make &&make install

安装好ipvsadm后即可,无需修改其他文件

 

由于keepalived软件包已包含在上述基础软件包中,所以可直接在/etc/keepalived中修改keepalived.conf中修改文件使用,亦或使用以下提供的精简内容替换使用:

 

! Configuration File for keepalived

 

global_defs {

  notification_email {

     [email protected] #配置管理员邮箱,用于报警,一行设置一个,可以设置多个,系统需要开启sendmail 服务

   }

  notification_email_from [email protected]         #设置邮件的发送地址

  smtp_server 127.0.0.1     #设置smtp server地址

  smtp_connect_timeout 30        #设置连接smtp服务超时时间

  router_id LVS_DEVEL1       #路由ID,和BACKUP 要不同,不然会报错

}

 

vrrp_instance VI_1 { 

   state MASTER   #指定Keepalived的角色,MASTER表示此主机是主用服务器,BACKUP表示是备用服务器。

   interface eth1  #指定检测网络的接口 

   virtual_router_id 55  #虚拟路由标识,即同一个vrrp_instance下,MASTER和BACKUP必须是一致的。

   priority 100   #定义优先级,数字越大,优先级越高,在一个vrrp_instance下,MASTER的优先级必须大于BACKUP的优先级。

   advert_int 1  #设定MASTER与BACKUP负载均衡器之间同步检查的时间间隔,单位是秒。

   authentication {  #设定验证类型和密码。

   auth_type PASS   #设置验证类型,主要有PASS和AH两种

   auth_pass 1111  #设置验证密码,在一个vrrp_instance下,MASTER与BACKUP必须使用相同的密码才能正常通信。

}

virtual_ipaddress{ 

   192.168.0.220  #设置虚拟IP地址,可以设置多个虚拟IP地址,每行一个。

       }

    }

   virtual_server 192.168.0.220 80 {            #设置虚拟服务器,需要指定虚拟ip地址和服务端口,ip与端口之间用空格隔开。

   delay_loop 6  #设置健康检查时间,单位是秒。

   lb_algo rr   #设置负载调度算法,这里设置为rr,即轮询算法

   lb_kind DR   #设置LVS实现负载均衡的机制,可以有NAT、TUN和DR三个模式可选。

   persistence_timeout 2             #会话保持时间,单位是秒,这个会话保持功能,用户的请求会被一直分发到某个服务节点,直到超过这个会话保持时间。需要注意的是,这个会话保持时间,是最大无响应超时时间,也就是说用户在操作动态页面时,如果在2秒内没有执行任何操作,那么接下来的操作会被分发到另外节点,但是如果一直在操作动态页面,则不受2秒的时间限制。由于在本次属于实验性质,需要看到轮询功能的情况,所以将此值调整得2秒这么小。

   protocol TCP    #指定转发协议类型,有tcp和udp两种。

   

real_server 192.168.0.223 80 {  #配置服务节点1,需要指定realserver的真实IP地址和端口,ip与端口之间用空格隔开。

   weight 3  #配置服务节点的权值,权值大小用数字表示,数字越大,权值越高,设置权值的大小可以为不同性能的服务器分配不同的负载,可以对性能高的服务器设置较高的权值,而对性能较低的服务器设置相对较低的权值,这样就合理的利用和分配了系统资源。

   TCP_CHECK {  #realserve的状态检测设置部分,单位是秒

   connect_timeout 10  #10秒无响应超时

   nb_get_retry 3        #重试次数

   delay_before_retry 3       #重试间隔

       } 

    }

    real_server 192.168.0.224 80 {       #配置服务节点2

   weight 1 

   TCP_CHECK { 

   connect_timeout 3 

nb_get_retry 3

delay_before_retry3 

        } 

     } 

}

保存并退出

 

使用ipvsadm –L –n命令查看keepalived是否运行,正常状态如下:

[root@DR1 keepalived]#ipvsadm -L -n

IP VirtualServer version 1.2.1 (size=4096)

ProtLocalAddress:Port Scheduler Flags

  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn

TCP  192.168.0.220:80 rr persistent 2

  -> 192.168.0.223:80             Route   1      0         0        

  -> 192.168.0.224:80             Route   1     0          0

 

OK,keepalived正常运作

 

查看eth1网卡是否有VIP

[root@DR1keepalived]# ip a

1: lo: mtu 65536 qdisc noqueue state UNKNOWN

    link/loopback 00:00:00:00:00:00 brd00:00:00:00:00:00

    inet 127.0.0.1/8 scope host lo

    inet6 ::1/128 scope host

       valid_lft forever preferred_lft forever

2: eth1: mtu 1500 qdisc pfifo_fast state UP qlen1000

    link/ether 00:0c:29:b0:09:39 brdff:ff:ff:ff:ff:ff

    inet 192.168.0.221/24 brd 192.168.0.255scope global eth1

    inet 192.168.0.220/32 scope global eth1

    inet6 fe80::20c:29ff:feb0:939/64 scope link

       valid_lft forever preferred_lft forever

 

OK,IP地址已经识别出来了

 

接下来查看ipvsadm默认超时时间

[root@DR1 keepalived]# ipvsadm -L --timeout

Timeout (tcp tcpfin udp): 900 120 300

900 120 300这三个数值分别是TCP TCPFINUDP的时间.也就是说一条tcp的连接经过lvs后,lvs会把这台记录保存15分钟,就是因为这个时间过长,所以大部分人都会发现做好LVS DR之后轮询现象并没有发生,而且我也看到大部分的教程是没有说明这一点的,巨坑!!!!!!因为是实验性质,所以将此数值调整为非常小,使用以下命令调整:

[root@DR1 ~]# ipvsadm --set 1 2 1

 

调整之后查看调整效果

[root@DR1 ~]# ipvsadm -L --timeout

Timeout (tcp tcpfin udp): 1 2 1

 

OK,没问题。

注:以上列出的仅为DR1的配置,DR2的配置仅需要修改keepalived.conf中的以下选项:

router_id LVS_DEVEL1 可改为 router_idLVS_DEVEL2

state MASTER 改为 state BACKUP

interface eth1 根据网卡具体接口而修改

priority 100 改为 priority 90

 

下面就可以开始做RS

 

RS

首先关闭防火墙

[root@localhost ~]# service iptables stop

iptables: Setting chains to policy ACCEPT:filter [  OK  ]

iptables: Flushing firewall rules: [  OK  ]

iptables: Unloading modules: [  OK  ]

[root@localhost ~]# setenforce 0

 

安装基础软件包

[root@localhost ~]# yum install -y gcc-c++ ncurses-devel gdbm-devel libxml2-devel openssl-devel

 

安装apache

[root@localhost ~]# tar xzvfhttpd-2.2.14.tar.gz

[root@localhost ~]# cd httpd-2.2.14

[root@localhost httpd-2.2.14]# ./configure--prefix=/usr/local/apache2 --enable-module=so --enable-so --enable-cache --enable-disk-disk-cache --enable-mem-cache --enable-threads --enable-ssl && make && make install

 

由于是实验性质,所以apache就修改httpd.conf的ServerName和index.html内容而不做其他的设置了

[root@localhost ~]# cd /usr/local/apache2/conf/

[root@localhost conf]# vim httpd.conf

把ServerName www.example.com:80改为 ServerName 0.0.0.0:80

保存退出

[root@localhost conf]# cd ..

[root@localhost apache2]# cd htdocs/

[root@localhost htdocs]# vim index.html

It works!

修改为

It works! RealServer1

保存退出

这样apache就设置完毕了

 

接下来设置IP转发

在/etc/init.d创建sh文件,把以下内容复制进去,记得要修改VIP地址

#!/bin/bash

. /etc/init.d/functions

SNS_VIP=192.168.0.220

 

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

保存并退出

 

赋予文件运行权限

[root@localhost init.d]# chmod a+x lvsrs

 

运行文件

[root@localhost init.d]# service lvsrs start

RealServer Start OK

 

OK,运行没问题,查看以下IP地址有没有挂在lo环回口上

[root@localhost init.d]# ip a

1: lo: mtu65536 qdisc noqueue state UNKNOWN

   link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

   inet 127.0.0.1/8 scope host lo

   inet 192.168.0.220/32 brd 192.168.0.220 scope global lo:0

   inet6 ::1/128 scope host

       valid_lft forever preferred_lft forever

2: eth1: mtu 1500 qdisc pfifo_fast state UP qlen1000

   link/ether 00:0c:29:86:2a:17 brd ff:ff:ff:ff:ff:ff

   inet 192.168.0.224/24 brd 192.168.0.255 scope global eth1

   inet6 fe80::20c:29ff:fe86:2a17/64 scope link

      valid_lft forever preferred_lft forever

 

OK,已经挂上了,接下来就可以开始测试

 

首先回到DR1的界面上,执行以下命令用于监测连接保持状态(2s刷新一次状态)

[root@DR1 ~]# watch ipvsadm -L -n -c

 

打开浏览器,输入VIP地址,每隔2秒按F5刷新一次,效果如下图所示:

LVS-DR RR(轮询模式)搭建_第1张图片

第一次刷新

 

查看ipvsadm状态

 

IPVS connection entries

pro expire state       source             virtual            destination

TCP 00:00 NONE        192.168.0.219:0  192.168.0.220:80   192.168.0.223:80

TCP 00:00 ESTABLISHED 192.168.0.219:15566 192.168.0.220:80   192.168.0.223:80

 

LVS-DR RR(轮询模式)搭建_第2张图片

第二次刷新

 

查看ipvsadm状态

 

IPVS connection entries

pro expire state       source             virtual            destination

TCP 00:00 NONE        192.168.0.219:0  192.168.0.220:80   192.168.0.224:80

TCP 00:00 ESTABLISHED 192.168.0.219:15566 192.168.0.220:80   192.168.0.224:80

 

OK,这样MASTER端就没有问题,接下来断开MASTER的eth1网络测试BACKUP DR轮询情况

 

首先要打开cmd先ping VIP地址 -t,如下图所示

LVS-DR RR(轮询模式)搭建_第3张图片

然后执行以下命令关闭eth1网卡,查看ping情况

 

[root@DR1 ~]# ifdown eth1

LVS-DR RR(轮询模式)搭建_第4张图片

可以看到,ping只丢了一个包,就切换到BACKUP DR上了

 

接下来测试BACKUP DR的轮询情况,也是使用浏览器每隔2秒刷新一次

LVS-DR RR(轮询模式)搭建_第5张图片

第一次刷新

 

查看ipvsadm状态

 

IPVS connection entries

pro expire state       source             virtual            destination

TCP 00:00 NONE        192.168.0.219:0  192.168.0.220:80   192.168.0.223:80

TCP 00:00 ESTABLISHED 192.168.0.219:15566 192.168.0.220:80   192.168.0.223:80


LVS-DR RR(轮询模式)搭建_第6张图片

第二次刷新

 

查看ipvsadm状态

 

IPVS connection entries

pro expire state       source             virtual            destination

TCP 00:00 NONE        192.168.0.219:0  192.168.0.220:80   192.168.0.224:80

TCP 00:00 ESTABLISHED 192.168.0.219:15566 192.168.0.220:80   192.168.0.224:80

 

OK,这样BACKUP DR就没有问题,整个实验大功告成!

注:以上列出的仅为RS1的配置,RS2的配置仅需要修改index.html中的以下内容:

RealServer1 改为RealServer2

你可能感兴趣的:(LVS-DR RR(轮询模式)搭建)