LVS简介

lvs有三种工作模式NAT(地址转换),IP Tunneling(IP隧道)、Direct Routing(直接路由)。 工作效率最低的是NAT模式,但NAT模式可以用于各种系统,各种环境的负载均衡,只需要一个公网ip即可实现 IP Tunneling模式调度器将连接分发到不同的后端real server,然后由real server处理请求直接相应给用户,大大提高了调度器的调度效率,后端real server没有物理位置和逻辑关系的限制,后端real server可以在Lan/Wlan,但是后端real server必须支持IP隧道协议. DR(Direct Routing)是效率最高的,与IP Tunneling类似,都是处理一般连接,将请求给后端real server,然后由real server处理请求直接相应给用户,Direct Routing与IP Tunneling相比,没有IP封装的开销,但由于采用物理层,所以DR模式的调度器和后端realserver必须在一个物理网段里,中间不能过路由器(也就是一个交换机相连).

lvs支持8种不同的调度算法轮叫(rr)、加权轮叫(wrr)、最小连接(lc)、加权最小连接(wlc)、基于局部性最小连接(lblc)、带复制的基于局部性最少链接(lblcr)、目标地址散列(dh)和源地址散列(sh).

Keepalived是运行在lvs 之上,它的主要功能是实现真实机的故障隔离及负载均衡器间的失败 切换,提高系统的可用性

系统平台:Centos6.4

Keepalived版本:keepalived-1.2.4.

LVS版本:ipvsadm-1.2

LVS_Master:192.168.10.51

LVS_Slave:192.168.10.40

Apache1:192.168.10.41

Apache2:192.168.10.49

一、安装apache

1.1我们采用yum安装

#yum –y installhttpd

#/etc/init.d/httpdstart

1.2分别在两台web上建立测试页

# echo  "zhangfang111111">/var/www/html/index.html

# echo  "zhangfang222222">/var/www/html/index.html

1.3 测试是否正常

Web1

wKiom1VMg5aBC4TXAAC07XmEP0M227.jpg

Web2

wKioL1VMhR3z2NqvAADHi64WIiQ288.jpg

访问都ok

1.3执行lvs.sh脚本绑定VIP

#catlvs.sh

#!/bin/bash

#description:Config lvs.sh

VIP=192.168.10.180

 

/etc/rc.d/init.d/functions

 

case"$1" in

start)

       /sbin/ifconfig lo:0 $VIP netmask255.255.255.255 broadcast $VIP

       /sbin/route add -host $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)

       /sbin/ifconfig lo:0 down

       /sbin/route del $VIP >/dev/null2>&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

#lvs.sh start



二、安装lvs+keepalievd(两台调度器都安装)

2.1安装之前系统需要安装popt-statickernel-devel make gcc openssl-devel lftp libnl* popt*

2.2 开启路由转发功能

#vim /etc/sysctl.conf

net.ipv4.ip_forward= 1

#sysctl -p

2.3.安装ipvsadm

#wget http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.26.tar.gz

2.4做软连接,防止make时出错,找不到kernel文件

#ln -s/usr/src/kernels/2.6.32-504.16.2.el6.x86_64/ /usr/src/linux/

#tar ipvsadm-1.26.tar.gz

#cd ipvsadm

#make &&make install

Ipvsadm安装完成

2.5安装keepalived

#wgethttp://www.keepalived.org/software/keepalived-1.2.4.tar.gz

# tar zxvfkeepalived-1.2.4.tar.gz

#cdkeepalived-1.2.4

# ./configure&& make && make install

三、keepalived做成启动服务,方便管理

# cp/usr/local/etc/rc.d/init.d/keepalived /etc/init.d/

# cp/usr/local/etc/sysconfig/keepalived /etc/sysconfig/

# mkdir/etc/keepalived/

cp /usr/local/etc/keepalived/keepalived.conf/etc/keepalived/

# cp/usr/local/sbin/keepalived /usr/sbin/

# servicekeepalived start | stop

3.1修改keepalived配置文件如下

! ConfigurationFile for keepalived

 

global_defs {

   notification_email {

   18801457794@139.com

   }

   notification_email_from root@localhost

   smtp_server 127.0.0.1

   smpt_connect_timeout 30

   router_id zhangfang

}

 

vrrp_instanceVI_1 {

    state MASTER 

    interface eth0 #指定HA监测网络的接口

    virtual_router_id 20 #虚拟路由标示,这是标示是一个数字,同一个vrrp实例使用唯一的标示,即同一vrrp_instance下,MASTER和BACKUP必须是一致的

    priority 100 #定义优先级,数字越大,优先级越高

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

    authentication { #设置验证类型和密码

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

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

    }

    virtual_ipaddress {

        192.168.10.180

    }

}

 

virtual_server192.168.10.180 80 {

    delay_loop 6 #设置运行状况的检查时间

    lb_algo rr

    lb_kind DR

    #persistence_timeout 50 #会话保持时间

    protocol TCP #转发协议类型

    real_server 192.168.10.41 80 {

        weight 3

    TCP_CHECK {    #realserver的状态检测设置部分

            connect_timeout 10 #标示10s无响应超时

            nb_get_retry 3 #重试次数

            delay_before_retry 3 #重试间隔

       connect_port 80

        }

    }

    real_server 192.168.10.49 80 {

        weight 3

        TCP_CHECK {

            connect_timeout 10

            nb_get_retry 3

           delay_before_retry 3

            connect_port 80

        }

}

}

3.2将配置文件同步到LVS_Slave上

#scp  /etc/keepalived/keepalived.conf root@192.168.10.40:/etc/keepalived/

修改内容如下:

state BACKUP #状态

priority 100 #修改优先级 

3.3分别启动两台lvs,我们来查看日志

LVS_Master

wKiom1VMg9TDawQMAATTeA3I5gU694.jpg

注意,从划红线区域看到这台主机绑定了VIR

通过ip  addr 查看下VIP是否绑定

wKioL1VMhaLyZav9AAFxj5-tDL0367.jpg

LVS_Slave:日志信息

wKiom1VMhGOjWo_CAATUlI7_mXk239.jpg

3.4我们在LVS_Master上看下群集状态

wKiom1VMhILSkeVfAAFxj5-tDL0883.jpg

四、进行测试

在浏览器里面输入http://192.168.10.180

wKioL1VMhg-R-AwOAADLfJxqa4k414.jpg

wKioL1VMhh2jWe9WAADLwj1MdhQ598.jpg

说明按照轮询的算法,分别转后至节点,从而达到负载均衡的效果

五、模拟故障

5.1停掉节点1

#/etc/init.d/httpdstop

5.2查看lvs状态

#ipvsadm -ln

IP VirtualServer version 1.2.1 (size=4096)

ProtLocalAddress:Port Scheduler Flags

  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn

TCP  192.168.10.180:80 rr

  ->192.168.10.41:80             Route   3     0          2 

注意出现故障的那台机器,已经被踢出了,从而实现了健康检查

测试一下

wKiom1VMhMajio4mAADHOL-EuOc192.jpg

查看邮件

wKioL1VMhk6iUuStAACn3TyyJDg119.jpg

5.3 关掉MASTER上的keepalived

#/etc/init.d/keepalivedstop

5.4 查看SLAE的状态

wKiom1VMhPCQQkG4AAMPowTzwbg827.jpg

已经正常接管过来,

测试一下

wKiom1VMhTexY0g3AADLwj1MdhQ385.jpg

访问正常

注意,大家可以看到,经过上面的演示我们实现了LVS的高可用及前端负载均衡的高可用,同时实现对后端realserer监控,也实现后端resalserver宕机时会给管理员发送邮件,但是我们还有几个问题没有解决,问题如下

1.  所以realserver都宕机,怎么处理,是不是用户就没法打开,还是提供一下为何页面

2.  怎么完成为何模式keepalived切换?

3.  如何在keepalived故障时,发送邮件给指定的管理员

六、我们在负载均衡器上提供维护页面,这样比较靠谱,也比较常用

6.1 分别在MASTER和SLAVE安装httpd

#yum –y installhttpd

6.2配置维护页面

#echo"Website is currently under maintenance, please come back later"  >/var/www/html/index.html

6.3启动httpd

#/etc/init.d/httpdstart

6.4修改配置文件

!Configuration File for keepalived

 

global_defs{

   notification_email {

   18801457794@139.com

   }

   notification_email_from root@localhost

   smtp_server 127.0.0.1

   smpt_connect_timeout 30

   router_id zhangfang

}

 

vrrp_instanceVI_1 {

    state MASTER 

    interface eth0 #指定HA监测网络的接口

    virtual_router_id 20 #虚拟路由标示,这是标示是一个数字,同一个vrrp实例使用唯一的标示,即同一vrrp_instance下,MASTER和BACKUP必须是一致的

    priority 100 #定义优先级,数字越大,优先级越高

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

    authentication { #设置验证类型和密码

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

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

    }

    virtual_ipaddress {

        192.168.10.180

    }

}

 

virtual_server192.168.10.180 80 {

    delay_loop 6 #设置运行状况的检查时间

    lb_algo rr

    lb_kind DR

    #persistence_timeout 50 #会话保持时间

    protocol TCP #转发协议类型

    real_server 192.168.10.41 80 {

        weight 3

TCP_CHECK {   #realserver的状态检测设置部分

            connect_timeout 10 #标示10s无响应超时

            nb_get_retry 3 #重试次数

            delay_before_retry 3 #重试间隔

   connect_port 80

        }

    }

real_server 192.168.10.49 80 {

        weight 3

        TCP_CHECK {

            connect_timeout 10

            nb_get_retry 3

            delay_before_retry 3

            connect_port 80

        }

    }

   sorry_server 127.0.0.1 80

}

增加sorry_server选项

6.5关闭所有的realserver,并重启下MASTER和SLAVE的keepalived

#/etc/init.d/httpdstop

#/etc/init.d/keepalivedrestart

6.6查看lvs

# ipvsadm-ln

IPVirtual Server version 1.2.1 (size=4096)

ProtLocalAddress:Port Scheduler Flags

  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn

TCP  192.168.10.180:80 rr

  ->127.0.0.1:80                 Local   1     0          0     

可以看到所有节点已经被踢出,只有本机提供服务

测试

wKioL1VMhtmx-_2tAADWaIjP-Zw296.jpg