lvs!!!

 

 realserver执行脚本范例,存在路径/etc/init.d/realserver

 

 http://lavafree.iteye.com/blog/1125906

LVS连接的持久时间

博客分类: 
 

LVS的持续时间有2

1.把同一个cip发来请求到同一台RS的持久超时时间。

2.一个链接创建后空闲时的超时时间,这个超时时间分为3种。

1tcp的空闲超时时间。

2lvs收到客户端tcp fin的超时时间

3udp的超时时间

 

客户端连接到vip的时候,Director会记录在它的跟踪记录表里面。

 

如果原来已经有该cip,那么状态为statenone的记录(来源的端口为0)的有效期(上面的第一次持久时间)被更新,更新为persistent的时间,如果没有,就重新创建一条。在存在该cip存在有有效的连接,持续时间有效期会被轮询。该记录存在的时候,来自同一cip的地址都会被发送到同一rs

 

一个连接的连接超时时间在连接跟踪表里面是一个状态为非none的记录,每一个链接一条记录 ,用ip和端口来表明记录。当同一链接重新传送数据的时候,超时时间回更新为最大。同一个客户端,新建链接的时候,会新建一条记录,原链接时间不变。但状态为none的时间会变为最大。

 

第一种超时时间用 ipvsadm -p 时间来设置,如

#ipvsadm -A -t 192.168.20.154:80 -s rr -p 3600

设置超时时间为3600

 

查看用ipvsadm -L -n

#ipvsadm
IP Virtual Server version x.x.x (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port        Forward   Weight   ActiveConn    InActConn
FWM  99 rr persistent 3600

第二总超时时间用ipvsadm --set tcp tcpfin udp设置,比如

#ipvsadm --set 120 20 100

表示tcp空闲等待时间为120 

客户端关闭链接等待时间为20

udp空闲等待为100

 

可以通过ipvsadm -Lcn来查看

pro expire state source virtual destination

TCP 00:27 NONE 192.168.8.107:0 192.168.20.154:80 192.168.20.194:80

TCP 00:07 ESTABLISHED 192.168.8.107:53432 192.168.20.154:80 192.168.20.194:80

 

http://bbs.linuxtone.org/thread-15615-1-1.html

 

南极雨 发表于 2011-6-29 14:14 
回复 zkdxx 的帖子

lo 设备是给自己内部的进程通信用的,根本连接不到外部,怎么完成接受VIP的包的阿?

LVS中文官网上有全部的资料

real server的物理网卡一定可以收到调度器转发过来的数据帧,原因相信你可以理解
收到之后怎么办,处理还是丢弃?
real server发现报文的目标地址是VIP,然后发现在本地的网络设备lo上也绑着这个VIP,于是认为这活是他该干的没错,进入下一步.....


http://zh.linuxvirtualserver.org/node/28
VS/DR的工作流程如图3.7所示:它的连接调度和管理与VS/NAT和VS/TUN中的一样,它的报文转发方法又有不同,将报文直接路由给目标服务器。在VS/DR中,调度器根据各个服务器的负载情况,动态地选择一台服务器,不修改也不封装IP报文,而是将数据帧的MAC地址改为选出服务器的MAC地址,再将修改后的数据帧在与服务器组的局域网上发送。因为数据帧的MAC地址是选出的服务器,所以服务器肯定可以收到这个数据帧,从中可以获得该IP报文。当服务器发现报文的目标地址VIP是在本地的网络设备上,服务器处理这个报文,然后根据路由表将响应报文直接返回给客户。

 

这个文章也写得很好
http://os.51cto.com/art/201105/264303.htm



收到VIP转发数据帧的,不是lo,而是real server的物理网卡。
物理网卡收到数据帧之后,拆开看到目的地址是VIP
查找路由表,自己的lo上绑着VIP,说明这个包是自己需要处理的,就把这个活接了,产生响应报文
real server返回给客户端的数据帧,源mac是real server物理网卡的mac,里面的源IP地址是VIP
客户端收到数据帧之后,看到目的mac和目的IP都是自己,就会接收。并不会去检查源mac

 ==========================================================

 http://www.cnblogs.com/mchina/archive/2012/05/23/2514728.html

一、简介

LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统。本项目在1998年5月由章文嵩博士成立,是中国国内最早出现的自由软件项目之一。

目前有三种IP负载均衡技术(VS/NAT、VS/TUN和VS/DR);十种调度算法(rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq)。

Keepalived在这里主要用作RealServer的健康状态检查以及LoadBalance主机和BackUP主机之间failover的实现。

LVS+Keepalived能实现的功能:利用LVS控制器主备模式避免单点故障以及自动删除故障WEB服务器结点并当它恢复后再自动添加到群集中。

拓扑图:

二、系统环境

系统平台:RHEL 5.4

LVS版本:ipvsadm-1.24

keepalived版本:keepalived-1.1.15

三、安装

1、在两台LVS Server上安装lvs、keepalived软件(LVS_MASTER & LVS_BACKUP)
lvs install -------------

[root@LVS-MASTER ~]# wget http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.24.tar.gz

[root@LVS-MASTER ~]# ln -s /usr/src/kernels/2.6.18-194.el5-i686//usr/src/linux/

[root@LVS-MASTER ~]# tar zxvf ipvsadm-1.24.tar.gz

[root@LVS-MASTER ~]# cd ipvsadm-1.24

[root@LVS-MASTER ipvsadm-1.24]# make && make install

Keepalived install -------------

[root@LVS-MASTER ~]# wget http://www.keepalived.org/software/keepalived-1.1.15.tar.gz

[root@LVS-MASTER ~]# tar zxvf keepalived-1.1.15.tar.gz

[root@LVS-MASTER ~]# cd keepalived-1.1.15

[root@LVS-MASTER keepalived-1.1.15]# ./configure && make && make install

######### 将keepalived做成启动服务,方便管理##########

[root@LVS-MASTER ~]# cp /usr/local/etc/rc.d/init.d/keepalived /etc/init.d/

[root@LVS-MASTER ~]# cp /usr/local/etc/sysconfig/keepalived /etc/sysconfig/

[root@LVS-MASTER ~]# mkdir /etc/keepalived/

[root@LVS-MASTER ~]# cp /usr/local/etc/keepalived/keepalived.conf /etc/keepalived/

[root@LVS-MASTER ~]# cp /usr/local/sbin/keepalived /usr/sbin/

[root@LVS-MASTER ~]# service keepalived start | stop

2、keepalived的配置

###################  MASTER ###################

复制代码
 ! Configuration File for keepalived

global_defs {
   notification_email {
     root@linux.tang.chao               #设置报警邮件地址,可以设置多个,每行一个。
     mchina_tang@qq.com                 #需开启本机的sendmail服务
   }
   notification_email_from keepalived@localhost         #设置邮件的发送地址
   smtp_server 127.0.0.1                                #设置smtp server地址
   smtp_connect_timeout 30                              #设置连接smtp server的超时时间
   router_id LVS_DEVEL                                  #表示运行keepalived服务器的一个标识。发邮件时显示在邮件主题的信息
}

vrrp_instance VI_1 {
    state MASTER              #指定keepalived的角色,MASTER表示此主机是主服务器,BACKUP表示此主机是备用服务器
    interface eth0            #指定HA监测网络的接口
    virtual_router_id 51      #虚拟路由标识,这个标识是一个数字,同一个vrrp实例使用唯一的标识。即同一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 {       #设置虚拟IP地址,可以设置多个虚拟IP地址,每行一个
        10.0.0.148
    }
}

virtual_server 10.0.0.148 80 {      #设置虚拟服务器,需要指定虚拟IP地址和服务端口,IP与端口之间用空格隔开
    delay_loop 6                    #设置运行情况检查时间,单位是秒
    lb_algo rr                      #设置负载调度算法,这里设置为rr,即轮询算法
    lb_kind DR                      #设置LVS实现负载均衡的机制,有NAT、TUN、DR三个模式可选
    persistence_timeout 50          #会话保持时间,单位是秒。这个选项对动态网页是非常有用的,为集群系统中的session共享提供了一个很好的解决方案。
                                    #有了这个会话保持功能,用户的请求会被一直分发到某个服务节点,直到超过这个会话的保持时间。
                                    #需要注意的是,这个会话保持时间是最大无响应超时时间,也就是说,用户在操作动态页面时,如果50秒内没有执行任何操作,
                                    #那么接下来的操作会被分发到另外的节点,但是如果用户一直在操作动态页面,则不受50秒的时间限制
    protocol TCP                    #指定转发协议类型,有TCP和UDP两种

    real_server 10.0.0.137 80 {     #配置服务节点1,需要指定real server的真实IP地址和端口,IP与端口之间用空格隔开
        weight 3                    #配置服务节点的权值,权值大小用数字表示,数字越大,权值越高,设置权值大小可以为不同性能的服务器
                                    #分配不同的负载,可以为性能高的服务器设置较高的权值,而为性能较低的服务器设置相对较低的权值,这样才能合理地利用和分配系统资源
        TCP_CHECK {                 #realserver的状态检测设置部分,单位是秒
            connect_timeout 10      #表示3秒无响应超时
            nb_get_retry 3          #表示重试次数
            delay_before_retry 3    #表示重试间隔
            connect_port 80
        }
    }
    real_server 10.0.0.139 80 {
        weight 3
        TCP_CHECK {
            connect_timeout 10
            nb_get_retry 3
            delay_before_retry 3
            connect_port 80
        }
    }
}
复制代码

#################### BACKUP ###################

复制代码
! Configuration File for keepalived

global_defs {
   notification_email {
     root@linux.tang.chao
     mchina_tang@qq.com
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}

vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 51
    priority 99
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        10.0.0.148
    }
}

virtual_server 10.0.0.148 80 {
    delay_loop 6
    lb_algo rr
    lb_kind DR
    persistence_timeout 50
    protocol TCP

    real_server 10.0.0.137 80 {
        weight 3
        TCP_CHECK {
            connect_timeout 10
            nb_get_retry 3
            delay_before_retry 3
            connect_port 80
        }
    }
    real_server 10.0.0.139 80 {
        weight 3
        TCP_CHECK {
            connect_timeout 10
            nb_get_retry 3
            delay_before_retry 3
            connect_port 80
        }
    }
}
复制代码

3、在两台Web Server上执行realserver.sh脚本,为lo:0绑定VIP地址10.0.0.148、抑制ARP广播。

[root@web1 ~]# cat realserver.sh

复制代码
#!/bin/bash
#description: Config realserver

VIP=10.0.0.148
 
/etc/rc.d/init.d/functions
 
case "$1" in
start)
       /sbin/ifconfig lo:0 $VIP netmask 255.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/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@web1 ~]# sh realserver.sh start

4、分别在LVS-MASTER、LVS-BACKUP上执行service keepalived start启动keepalived就可实现负载均衡及高可用集群了;

[root@LVS-MASTER keepalived]# service keepalived start

[root@LVS-MASTER keepalived]# ipvsadm -L
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  10.0.0.148:http rr persistent 50
  -> 10.0.0.139:http              Route   3      0          0         
  -> 10.0.0.137:http              Route   3      0          0         
[root@LVS-MASTER keepalived]#

查看日志/var/log/messages

[root@LVS-MASTER keepalived]# tail -n 30/var/log/messages
Apr 19 03:59:58 LVS-MASTER avahi-daemon[2845]: Withdrawing address record for10.0.0.148 on eth0.
Apr 19 04:00:19 LVS-MASTER Keepalived: Starting Keepalived v1.2.1 (04/17,2012)
Apr 19 04:00:19 LVS-MASTER Keepalived: Starting Healthcheck child process,pid=5960
Apr 19 04:00:19 LVS-MASTER Keepalived_healthcheckers: Netlink reflector reportsIP 10.0.0.136 added
Apr 19 04:00:19 LVS-MASTER Keepalived_healthcheckers: Netlink reflector reportsIP 10.0.0.159 added
Apr 19 04:00:19 LVS-MASTER Keepalived_healthcheckers: Registering Kernelnetlink reflector
Apr 19 04:00:19 LVS-MASTER Keepalived_healthcheckers: Registering Kernelnetlink command channel
Apr 19 04:00:19 LVS-MASTER Keepalived_healthcheckers: Opening file '/etc/keepalived/keepalived.conf'.
Apr 19 04:00:19 LVS-MASTER Keepalived_healthcheckers: Configuration is using :12257 Bytes
Apr 19 04:00:19 LVS-MASTER Keepalived_healthcheckers: Using LinkWatch kernelnetlink reflector...
Apr 19 04:00:19 LVS-MASTER Keepalived_healthcheckers: Activating healtcheckerfor service [10.0.0.137:80]
Apr 19 04:00:19 LVS-MASTER Keepalived_healthcheckers: Activating healtcheckerfor service [10.0.0.139:80]
Apr 19 04:00:19 LVS-MASTER Keepalived_vrrp: Netlink reflector reports IP10.0.0.136 added
Apr 19 04:00:19 LVS-MASTER Keepalived_vrrp: Netlink reflector reports IP10.0.0.159 added
Apr 19 04:00:19 LVS-MASTER Keepalived_vrrp: Registering Kernel netlinkreflector
Apr 19 04:00:19 LVS-MASTER Keepalived_vrrp: Registering Kernel netlink commandchannel
Apr 19 04:00:19 LVS-MASTER Keepalived_vrrp: Registering gratutious ARP sharedchannel
Apr 19 04:00:19 LVS-MASTER Keepalived_vrrp: Opening file'/etc/keepalived/keepalived.conf'.
Apr 19 04:00:19 LVS-MASTER Keepalived_vrrp: Configuration is using : 36698Bytes
Apr 19 04:00:19 LVS-MASTER Keepalived_vrrp: Using LinkWatch kernel netlinkreflector...
Apr 19 04:00:19 LVS-MASTER Keepalived_vrrp: VRRP sockpool: [ifindex(2),proto(112), fd(11,12)]
Apr 19 04:00:19 LVS-MASTER Keepalived: Starting VRRP child process, pid=5961
Apr 19 04:00:20 LVS-MASTER Keepalived_vrrp: VRRP_Instance(VI_1) Transition toMASTER STATE
Apr 19 04:00:21 LVS-MASTER Keepalived_vrrp: VRRP_Instance(VI_1) Entering MASTERSTATE
Apr 19 04:00:21 LVS-MASTER Keepalived_vrrp: VRRP_Instance(VI_1) settingprotocol VIPs.
Apr 19 04:00:21 LVS-MASTER Keepalived_vrrp: VRRP_Instance(VI_1) Sendinggratuitous ARPs on eth0 for 10.0.0.148
Apr 19 04:00:21 LVS-MASTER Keepalived_healthcheckers: Netlink reflector reportsIP 10.0.0.136 added
Apr 19 04:00:21 LVS-MASTER avahi-daemon[2845]: Registering new address recordfor 10.0.0.148 on eth0.
Apr 19 04:00:21 LVS-MASTER Keepalived_vrrp: Netlink reflector reports IP10.0.0.136 added
Apr 19 04:00:26 LVS-MASTER Keepalived_vrrp: VRRP_Instance(VI_1) Sendinggratuitous ARPs on eth0 for 10.0.0.148
[root@LVS-MASTER keepalived]#

四、测试

接下来做高可用性测试&故障切换测试......

####高可用性测试####

模拟故障,将LVS-MASTER上的keepalived服务停掉,然后观察LVS-BACKUP上的日志,信息如下

[root@LVS-BACKUP keepalived]# tail -f /var/log/messages
Apr 19 03:33:04 LVS-BACKUP Keepalived_vrrp: VRRP_Instance(VI_1)Transition to MASTER STATE
Apr 19 03:33:05 LVS-BACKUP Keepalived_vrrp: VRRP_Instance(VI_1) Entering MASTERSTATE
Apr 19 03:33:05 LVS-BACKUP Keepalived_vrrp: VRRP_Instance(VI_1) settingprotocol VIPs.
Apr 19 03:33:05 LVS-BACKUP Keepalived_vrrp: VRRP_Instance(VI_1) Sendinggratuitous ARPs on eth0 for 10.0.0.148
Apr 19 03:33:05 LVS-BACKUP Keepalived_vrrp: Netlink reflector reports IP10.0.0.157 added
Apr 19 03:33:05 LVS-BACKUP Keepalived_healthcheckers: Netlink reflector reportsIP 10.0.0.157 added
Apr 19 03:33:05 LVS-BACKUP avahi-daemon[2825]: Registering new address recordfor 10.0.0.148 on eth0.
Apr 19 03:33:10 LVS-BACKUP Keepalived_vrrp: VRRP_Instance(VI_1) Sendinggratuitous ARPs on eth0 for 10.0.0.148

从日志中可知,主机出现故障后,备机立刻检测到,此时备机变为MASTER角色,并且接管了主机的虚拟IP资源,最后将虚拟IP绑定在etho设备上。

将LVS-MASTER 上的keepalived服务开启后,LVS-BACKUP的日志状态。

Apr 19 03:34:02 LVS-BACKUP Keepalived_vrrp: VRRP_Instance(VI_1) Received higher prio advert
Apr 19 03:34:02 LVS-BACKUP Keepalived_vrrp: VRRP_Instance(VI_1)Entering BACKUP STATE
Apr 19 03:34:02 LVS-BACKUP Keepalived_vrrp: VRRP_Instance(VI_1) removing protocol VIPs.
Apr 19 03:34:02 LVS-BACKUP Keepalived_vrrp: Netlink reflector reports IP 10.0.0.157 removed
Apr 19 03:34:02 LVS-BACKUP Keepalived_healthcheckers: Netlink reflector reports IP 10.0.0.157 removed
Apr 19 03:34:02 LVS-BACKUP avahi-daemon[2825]: Withdrawing address record for 10.0.0.148 on eth0.

从日志可知,备机在检测到主机重新恢复正常后,释放了虚拟IP资源重新成为BACKUP角色

####故障切换测试####

故障切换是测试当某个节点出现故障后,Keepalived监制模块是否能及时发现然后屏蔽故障节点,同时将服务器转移到正常节点来执行。

将web2节点服务停掉,假设这个节点出现故障,然后主、备机日志信息如下

Apr 19 03:35:04 LVS-MASTER Keepalived_healthcheckers:TCP connection to [10.0.0.139:80] failed!!!
Apr 19 03:35:04 LVS-MASTER Keepalived_healthcheckers:Removing service [10.0.0.139:80] from VS [10.0.0.148:80]
Apr 19 03:35:04 LVS-MASTER Keepalived_healthcheckers: Remote SMTP server [127.0.0.1:25] connected.

[root@LVS-MASTER keepalived]# ipvsadm -L
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  10.0.0.148:http rr persistent 50
  -> 10.0.0.137:http              Route   3      0          0         
[root@LVS-MASTER keepalived]#

从以上可以看出,Keepalived监控模块检测到10.0.0.139这台主机出现故障后,将些web2从集群系统中剔除掉了。 此时访问http://10.0.0.148只能看到web1了)

keepalived

重新启动web2节点的服务,日志信息如下:

Apr 19 03:38:22 LVS-MASTER Keepalived_healthcheckers:TCP connection to [10.0.0.139:80] success.
Apr 19 03:38:22 LVS-MASTER Keepalived_healthcheckers:Adding service [10.0.0.139:80] to VS [10.0.0.148:80]
Apr 19 03:38:22 LVS-MASTER Keepalived_healthcheckers: Remote SMTP server [127.0.0.1:25] connected.

[root@LVS-MASTERkeepalived]# ipvsadm -L
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  10.0.0.148:http rr persistent 50
  -> 10.0.0.139:http              Route   3      0          0         
  -> 10.0.0.137:http              Route   3      0          0         
[root@LVS-MASTER keepalived]#

Keepalived监控模块检测到10.0.0.139这台主机恢复正常后,又将此节点加入集群系统中,再次访问就可以访问到web2页面了)

lvs

 


CentOS 6.3下部署LVS(NAT)+keepalived实现高性能高可用负载均衡

http://www.cnblogs.com/mchina/archive/2012/08/27/2644391.html

 

 ----------------------------------------

http://www.jb51.net/article/30470.htm

一,简介
LVS(Linux Virtual Server) 是Unix-like系统中的一个虚拟服务器,是国内贡献给开源组织的一个最优秀的项目之一。LVS在Unix-like系统中
是作为一个前端(Director)存在的,又称为调度器,它本身不提供任何的服务,只是将通过互联网进来的请求接受后再转发给后台运行的真正的
服务器(RealServer)进行处理,然后响应给客户端。
LVS有两个重要的组件:一个是IPVS,一个是IPVSADM。ipvs是LVS的核心组件,它本身只是一个框架,类似于iptables,工作于内核空间中。
ipvsadm 是用来定义LVS的转发规则的,工作于用户空间中。
LVS有三种转发类型:
1.LVS-NAT模型,称为网络地址转换,实现起来比较简单。
2.LVS-DR模型,称为直接路由模型,应用比较广泛。
3.LVS-TUN模型,称为隧道模型。
二、LVS的三种模型的工作属性:
1.LVS-NAT模型的工作属性或特:
(1).所有的RealServer集群节点和前端调度器Director都要在同一个子网中
(2).通常情况下RealServer的IP地址(以下简成RIP)为私有地址,便于RealServer集群节点之间进行通信
(3).通常情况下前端的Director有两个IP地址,一个为VIP,是虚拟的IP地址,客户端向此IP地址发起请求。
一个是DIP,是真正的Director的IP地址,RIP的网关要指向Director的DIP。
(4).这种模型可以实现端口映射
(5).RealServer的操作系统可以是任意操作系统
(6).前端的Director既要处理客户端发起的请求,又要处理后台RealServer的响应信息,将RealServer响应的信息再转发给客户端
(7).前端Director很容易成为整个集群系统性能的瓶颈。
2.LVS-DR模型的工作属性或特征:此种模型通过MAC地址转发工作,如何转发后面将会介绍。
(1).所有的RealServer集群节点和前端调度器Director都要在同一个物理网络中
(2).RIP可以使用公网的IP
(3).RIP的网关不能指向DIP
(4).前端的Director只处理客户端的请求,然后将请求转发给RealServer,由后台的RealServer直接响应客户端,不再经过Director
(5).此种模型不支持端口映射
(6).RealServer可以使用大多数的操作系统
(7).此种模型的性能要优于LVS-NAT
3.LVS-TUN模型的基本工作属性或特征
(1).RealServer服务器与前端的Director可以在不同的网络中
(2).RIP一定不能是私有IP
(3).前端的Director只处理客户端的请求,然后将请求转发给RealServer,由后台的RealServer直接响应客户端,不再经过Director
(4).此种模型也不支持端口映射
(5).RealServer只能使用哪些支持IP隧道的操作系统
三。LVS Scheduling Method LVS的调度方法:
1.Fixed Scheduling Method 静态调服方法
(1).RR 轮询
(2).WRR 加权轮询
(3).DH 目标地址hash
(4).SH 源地址hash
2.Dynamic Scheduling Method 动态调服方法
(1).LC 最少连接
(2).WLC 加权最少连接
(3).SED 最少期望延迟
(4).NQ 从不排队调度方法
(5).LBLC 基于本地的最少连接
(6).LBLCR 带复制的基于本地的最少连接
 
四、ipvsadm组件定义规则的格式:
1.定义集群服务格式:
(1).添加集群服务:
ipvsadm -A|E -t|u|f service-address [-s scheduler]
[-p [timeout]] [-M netmask]
-A: 表示添加一个新的集群服务
-E: 编辑一个集群服务
-t: 表示tcp协议
-u: 表示udp协议
-f: 表示firewall-Mark,防火墙标记
service-address: 集群服务的IP地址,即VIP
-s 指定调度算法
-p 持久连接时长,如#ipvsadm -Lcn ,查看持久连接状态
-M 定义掩码
 
ipvsadm -D -t|u|f service-address 删除一个集群服务
ipvsadm -C 清空所有的规则
ipvsadm -R 重新载入规则
ipvsadm -S [-n] 保存规则
 
2.向集群服务添加RealServer规则:
(1).添加RealServer规则
ipvsadm -a|e -t|u|f service-address -r server-address
[-g|i|m] [-w weight]
-a 添加一个新的realserver规则
-e 编辑realserver规则
-t tcp协议
-u udp协议
-f firewall-Mark,防火墙标记
service-address realserver的IP地址
-g 表示定义为LVS-DR模型
-i 表示定义为LVS-TUN模型
-m 表示定义为LVS-NAT模型
-w 定义权重,后面跟具体的权值
ipvsadm -d -t|u|f service-address -r server-address --删除一个realserver
ipvsadm -L|l [options] --查看定义的规则
如:#ipvsadm -L -n
ipvsadm -Z [-t|u|f service-address] --清空计数器
 
五、LVS-NAT模型实例 

1。先配置好网络环境,要三个虚拟机(本次实验在虚拟机上完成),一台用作Director,其他两台分别为RealServer1 和RealServer2
其中Director要两个网卡,Eth0网卡为桥接(Birdged),Eth1网卡为仅主机(Host-only),RealServer1 和RealServer2的网卡也都是仅主机
类型的。
2.为了演示效果,将Director的两块网卡配置成不在同一个网段的IP地址,RealServer1 和RealServer2的IP地址为同一网段,规划如下图:

要注意的是:要将本地物理机的Vmnet1的IP地址配置成和Director的Eth1网卡的IP地址在同一个网段中,同时将RealServer1和RealServer2的网关指向Director主机的Eth1网卡的地址,如下图所示:

3.配置好网络环境之后就开始配置ipvsadm,确保在物理机上能ping通Eth0的IP地址,如下图所示:

能Ping通,说明物理主机已经可以和Director虚拟主机通信了。
4.在Director虚拟主机上配置:
#echo 1 > /proc/sys/net/ipv4/ip_forward --开启IP转发功能
#rpm -qa ipvsadm --查看ipvsadm是否安装,如果没有安装则安装之,直接使用yum安装即可
#yum install ipvsadm -y
定义LVS-NAT模型规则
此处使用的是web服务器进行的演示,在192.168.24.44和192.168.24.45上都提供了nginx服务,其中
192.168.24.44提供的网页信息为“welcome realserver 1”,192.168.24.45提供的网页信息为“welcome realserver 2”
#ipvsadm -A -t 172.16.100.24:80 -s rr
#ipvsadm -a -t 172.16.100.24:80 -r 192.168.24.44 -m
#ipvsadm -a -t 172.16.100.24:80 -r 192.168.24.45 -m
#ipvsadm -L -n --查看定义的规则
这些规则都是临时规则,不会永久生效的,要想永久生效可以保存规则,命令如下:
#service ipvsadm save
5.在Internet Explorer浏览器中访问172.16.100.24,会显示如下图所示信息:

而在google浏览器中访问172.16.100.24,会显示如下图所示信息:

如果刷新页面或者使用不同的浏览器,会轮流显示页面,这就是最简单的服务器负载均衡啦!
 
六、LVS-DR模型的实现过程:
 
1.首先规划集群和网路环境,需要三台虚拟机,如下图所示:
此时Director可以只有一个网卡Eth0,连接类型为桥接(Birdged),RealServer1和RealServer2 的网卡连接类型也都为桥接(Birdged):

2.配置集群服务
(1).在Director服务器上配置:
#ifconfig eth0:1 172.16.100.100 broadcast 172.16.100.100 netmask 255.255.255.255 up
#route add -host 172.16.100.100 dev eth0:1
#echo 1 > /proc/sys/net/ipv4/ip_forward --开启IP转发功能
(2).在realserve1服务器上进行配置:
# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
 
#ifconfig lo:0 172.16.100.100 broadcast 172.16.100.100 netmask 255.255.255.255 up
#route add -host 172.16.100.100 dev lo:0
(3).在realserver2 服务器上进行配置
# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
 
#ifconfig lo:0 172.16.100.100 broadcast 172.16.100.100 netmask 255.255.255.255 up
#route add -host 172.16.100.100 dev lo:0
(4).再在Director上配置ipvsadm规则:
 
#ipvsadm -A -t 172.16.100.100:80 -s rr -g
#ipvsadm -a -t 172.16.100.100:80 -r 172.16.24.34
#ipvsadm -a -t 172.16.100.100:80 -r 172.16.24.44
 
(5).在浏览器中进行验证:
进行第一次访问,如下图所示:

进行第二次访问,如下图所示:

3.基于ssl的访问
 
[root@mail ~]# ipvsadm -A -t 172.16.100.100:443 -s rr
[root@mail ~]# ipvsadm -a -t 172.16.100.100:443 -r 172.16.24.2 -g
[root@mail ~]# ipvsadm -a -t 172.16.100.100:443 -r 172.16.24.3 -g
 
二、LVS Persistence ,lvs的持久连接性
持久连接类型:
(1).Persistent Client Connections(PCC),持久客户端连接:就是不管客户端发起什么样的服
务(如80端口的web服务,3306端口的mysql服务)请求,都将经过Director被定位到同一个特定的real server上,
只要此real server 提供了这种服务,并且会持续连接,如果客户端连接超时,real server允许一定范围内的
持久连接时长,默认持久连接时长为300m
 
#ipvsadm -A -t 172.16.100.100:0 -p 1200
#ipvsadm -a -t 172.16.100.100:0 -r 172.16.100.34 -g -w 10
#ipvsadm -a -t 172.16.100.100:0 -r 172.16.100.44 -g -w 5
 
验证效果如下图:

(2).Persistent Port Connections(PPC),持续端口连接:就是不管客户端发起什么样的端口请求(如80端口,是提供web服务的,23端口,是提供telnet服务的....),
都会经过Director将请求转发到同一个real server上,并持续连接。假如一个客户端请求的是web服务,相应的是realserver1 ,当此用户退出后再次发起请求web服务的时候
依然是realserver1 提供的web服务。
iptables:
[root@mail ~]# iptables -t mangle -A PREROUTING -i eth0 -p tcp -d 172.16.100.100 --dport 80 -j MARK --set-mark 20
[root@mail ~]# iptables -t mangle -A PREROUTING -i eth0 -p tcp -d 172.16.100.100 --dport 443 -j MARK --set-mark 20
[root@mail ~]# iptables -t mangle -L -n
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
MARK tcp -- 0.0.0.0/0 172.16.100.100 tcp dpt:80 MARK set 0x14
MARK tcp -- 0.0.0.0/0 172.16.100.100 tcp dpt:443 MARK set 0x14
 
把80端口和443 端口做成一个持久防火墙标记,同时定向到同一个realserver上,即在访问80服务的时候是realserver1,
然后改为访问443服务的时候依然定向到realserver1上
 
基于防火墙标记来定义集群服务,也称为端口的姻亲关系。
 
ipvsadm:
 
[root@mail ~]# ipvsadm -A -f 20 -s wlc -p 1200
[root@mail ~]# ipvsadm -a -f 20 -r 172.16.24.2 -g -w 3
[root@mail ~]# ipvsadm -a -f 20 -r 172.16.24.3 -g -w 2
[root@mail ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
FWM 20 wlc persistent 1200
-> 172.16.24.3:0 Route 2 0 0
-> 172.16.24.2:0 Route 3 0 

 

 =======================

http://www.ixdba.net/archives/2012/06/170.htm

LVS集群有DR、TUN、NAT三种配置模式,可以对www服务、FTP服务、MAIL服务等做负载均衡,下面通过搭建www服务的负载均衡实例,讲述基于DR模式的LVS集群配置。 一、 Director Server的配置 在Director Server上配置LVS负载均衡集群,有两种方法:  通过ipvsadm命令行进行配置  通过Redhat提供的工具piranha来配置LVS

1、通过ipvsadm命令行方式配置LVS

安装IPVS后,就可以配置LVS集群了,首先在Director Server上绑定一个虚拟IP(也叫VIP),此IP用于对外提供服务,执行如下命令: [root@localhost ~]#ifconfig eth0:0 192.168.60.200 broadcast 192.168.60.200 \  >netmask 255.255.255.255 up 此处在eth0设备上绑定了一个虚拟设备eth0:0,同时设置了一个虚拟IP是192.168.60.200,也就是上面我们规划的IP地址,然后指定广播地址也为192.168.60.200,需要特别注意的是,这里的子网掩码为255.255.255.255。 然后给设备eth0:0指定一条路由,执行如下指令: [root@localhost ~]#route add -host 192.168.60.200 dev eth0:0  接着启用系统的包转发功能,从而使系统充当路由器,执行如下指令: [root@localhost ~]#echo "1" >/proc/sys/net/ipv4/ip_forward 指令中,参数值为1时启用ip转发,为0时禁止ip转发。其实在DR模式中,开启系统的包转发功能不是必须的,而在NAT模式下此操作是必须的。 然后开始配置ipvs,执行如下操作: [root@localhost ~]#ipvsadm -C [root@localhost ~]#ipvsadm -A -t 192.168.60.200:80 -s rr -p 600 [root@localhost ~]#ipvsadm -a -t 192.168.60.200:80 -r 192.168.60.132:80 -g [root@localhost ~]#ipvsadm -a -t 192.168.60.200:80 -r 192.168.60.144:80 -g 上面操作中,第一行是清除内核虚拟服务器列表中的所有记录,第二行是添加一条新的虚拟IP记录。这个新的IP是192.168.60.200,同时指定持续服务时间为600秒。第三、四行是在新加虚拟IP记录中添加两条新的Real Server记录,并且指定LVS 的工作模式为直接路由模式。 最后,启动LVS服务,执行如下操作: [root@localhost ~]#ipvsadm 这样,LVS在Director Server上的配置就完成了。 为了管理和配置的方便,可以将上面的操作写出一个脚本文件,脚本内容如下: #!/bin/bash VIP=192.168.60.200 RIP1=192.168.60.132 RIP2=192.168.60.144 GW=192.168.60.1 # set the Virtual IP Address /sbin/ifconfig eth0:0 $VIP broadcast $VIP netmask 255.255.255.255 up /sbin/route add -host $VIP dev eth0:0  echo "1" >/proc/sys/net/ipv4/ip_forward #Clear IPVS table /sbin/ipvsadm -C #set LVS /sbin/ipvsadm -A -t $VIP:80 -s rr -p 600 /sbin/ipvsadm -a -t $VIP:80 -r $RIP1:80 -g /sbin/ipvsadm -a -t $VIP:80 -r $RIP2:80 -g #Run LVS /sbin/ipvsadm #end 也可以写成可启动与停止的服务脚本,脚本内容如下: #!/bin/sh # description: Start LVS of Director server VIP=192.168.60.200 RIP1=192.168.60.132 RIP2=192.168.60.144 ./etc/rc.d/init.d/functions case "$1" in     start)         echo " start LVS of Director Server" # set the Virtual  IP Address and sysctl parameter  /sbin/ifconfig eth0:0 $VIP broadcast $VIP netmask 255.255.255.255 up        echo "1" >/proc/sys/net/ipv4/ip_forward  #Clear IPVS table        /sbin/ipvsadm -C #set LVS /sbin/ipvsadm -A -t $VIP:80 -s rr -p 600 /sbin/ipvsadm -a -t $VIP:80 -r $RIP1:80 -g /sbin/ipvsadm -a -t $VIP:80 -r $RIP2:80 -g #Run LVS       /sbin/ipvsadm        ;;     stop)         echo "close LVS Directorserver"         echo "0" >/proc/sys/net/ipv4/ip_forward         /sbin/ipvsadm -C         /sbin/ifconfig eth0:0 down         ;;     *)         echo "Usage: $0 {start|stop}"         exit 1 esac 将此脚本命名为lvsDR文件,然后把文件放到/etc/init.d下,执行: [root@localhost ~]#chomd 755 /etc/init.d/lvsDR 最后可以通过下面命令启动或停止LVS服务: service lvsDR {start|stop} 到此为止,命令行方式配置Director Server完毕。

2、通过Redhat提供的工具piranha来配置LVS

 Piranha是REDHAT提供的一个基于Web的LVS配置软件,可以省去手工配置LVS的繁琐工作,同时,也可单独提供cluster功能,例如,可以通过Piranha激活Director Server的后备主机,也就是配置Director Server的双机热备功能。  Piranha工具的安装非常简单,下载Piranha的rpm包,进行安装即可: [root@localhost ~]#rpm –ivh piranha-0.8.2-1.i386.rpm Piranha安装完毕后,会产生/etc/sysconfig/ha/lvs.cf文件,默认此文件是空的,可以通过Piranha提供的web界面配置此文件,也可以直接手动编辑此文件,编辑好的lvs.cf文件内容类似如下,注意,“#”号后面的内容为注释。 [root@localhost ~]# more /etc/sysconfig/ha/lvs.cf serial_no = 18              #序号。 primary = 192.168.60.56     #指定主Director Server的真实IP地址,是相对与有备用的Director Server而言的,也就是给Director Server做HA Cluster。 service = lvs               #指定双机的服务名。 backup_active = 0        #是否激活备用Director Server。“0”表示不激活,“1”表示激活。 backup = 0.0.0.0             #这里指定备用Director Server的真实IP地址,如果没有备用Director Server,可以用“0.0.0.0”代替。 heartbeat = 0             #是否开启心跳,1表示开启,0表示不开启。 heartbeat_port = 539      #指定心跳的UDP通信端口。 keepalive = 5               #心跳间隔时间,单位是秒。 deadtime = 10                #如果主Director Server在deadtime(秒)后没有响应,那么备份Director Server就会接管主Director Server的服务。 network = direct            #指定LVS的工作模式,direct表示DR模式,nat表示NAT模式,tunnel表示TUNL模式。 debug_level = NONE          #定义debug调试信息级别。 virtual www.gaojf.com{      #指定虚拟服务的名称。 active = 1        #是否激活此服务。 address = 192.168.60.200 eth0:0  #虚拟服务绑定的虚拟IP以及网络设备名。 port = 80                   #虚拟服务的端口。 send = "GET / HTTP/1.0\r\n\r\n"  #给real server发送的验证字符串。 expect = "HTTP"             #服务器正常运行时应该返回的文本应答信息,用来判断real server是否工作正常。 use_regex = 0               # expect选项中是否使用正则表达式,0表示不使用,1表示使用。 load_monitor = none         #LVS中的Director Server能够使用 rup 或 ruptime 来监视各个real server的负载状态。该选项有3个可选值,rup、ruptime和none,如果选择rup,每个real server就必须运行rstatd服务。如果选择了ruptime,每个real server就必须运行 rwhod 服务。 scheduler = rr              #指定LVS的调度算法。 protocol = tcp              #虚拟服务使用的协议类型。 timeout = 6                 #real server失效后从lvs路由列表中移除失效real server所必须经过的时间,以秒为单位。 reentry = 15                #某个real server被移除后,重新加入lvs路由列表中所必须经过的时间,以秒为单位。 quiesce_server = 0          #如果此选项为1.那么当某个新的节点加入集群时,最少连接数会被重设 为零,因此LVS会发送大量请求到此服务节点,造成新的节点服务阻塞, 建议设置为0。 server RS1 {                #指定real server服务名。 address = 192.168.60.132    #指定real server的IP地址。 active = 1                  #是否激活此real server服务。 weight = 1                   #指定此real server的权值,是个整数值,权值是相对于所有real server节点而言的,权值高的real server处理负载的性能相对较强。 } server RS2 { address = 192.168.60.144 active = 1 weight = 1 } } 编辑完成,然后启动pulse服务,即启动lvs服务 [root@localhost ~]#service pulse start 同理,此种方式下也要启用系统的包转发功能: [root@localhost ~]#echo "1" >/proc/sys/net/ipv4/ip_forward 到此为止,Piranha工具方式配置Director Server完毕。

二、Real server 的配置

在lvs的DR和TUn模式下,用户的访问请求到达真实服务器后,是直接返回给用户的,而不再经过前端的Director Server,因此,就需要在每个Real server节点上增加虚拟的VIP地址,这样数据才能直接返回给用户,增加VIP地址的操作可以通过创建脚本的方式来实现,创建文件/etc/init.d/lvsrs,脚本内容如下: #!/bin/bash VIP=192.168.60.200 /sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up /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 #end 此操作是在回环设备上绑定了一个虚拟IP地址,并设定其子网掩码为255.255.255.255,与Director Server上的虚拟IP保持互通,然后禁止了本机的ARP请求。

上面脚本也可以写成可启动与停止的服务脚本,内容如下: [root@localhost ~]#more /etc/init.d/lvsrs #!/bin/bash #description : Start Real Server  VIP=192.168.60.200 ./etc/rc.d/init.d/functions case "$1" in     start)         echo " Start LVS  of  Real Server"  /sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 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          ;;     stop)         /sbin/ifconfig lo:0 down         echo "close LVS Director server"         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 "Usage: $0 {start|stop}"         exit 1 esac 然后,修改lvsrs有可执行权限: [root@localhost ~]#chomd 755 /etc/init.d/lvsrs 最后,可以通过下面命令启动或关闭lvsrs service lvsrs {start|stop} 由于虚拟ip,也就是上面的VIP地址,是Director Server和所有的Real server共享的,如果有ARP请求VIP地址时,Director Server与所有Real server都做应答的话,就出现问题了,因此,需要禁止Real server响应ARP请求。而lvsrs脚本的作用就是使Real Server不响应arp请求。 对于2.4以下低版本,在Real Server上要安装ARP hidden内核补丁,幸运的是,在2.6内核中通过调整内核参数即可忽略ARP广播回应。

三、在Director上配置冗余策略 Ldirectord

Ldirectord的作用是监测Real Server,当Real Server失效时,把它从虚拟服务器列表中删除,恢复时重新添加到列表,在前面文章介绍heartbeat时默认已经安装了Ldirectord,因此。这里只需进行配置即可。Ldirectord的配置文件是/etc/ha.d/ldirectord.cf。 下面是需要配置的选项,注意,“#”号后面的内容为注释: # Global Directives checktimeout=20           #判定real server出错的时间间隔。 checkinterval=10          #指定ldirectord在两次检查之间的间隔时间。 fallback=127.0.0.1:80     #当所有的real server节点不能工作时,web服务重定向的地址。 autoreload=yes            #是否自动重载配置文件,选yes时,配置文件发生变化,自动载入配置信息。 logfile="/var/log/ldirectord.log"   #设定ldirectord日志输出文件路径。 quiescent=no              #当选择no时,如果一个节点在checktimeout设置的时间周期内没有响应,ldirectord将会从LVS的路由表中直接移除real server,此时,将中断现有的客户端连接,并使LVS丢掉所有的连接跟踪记录和持续连接模板,如果选择为yes,当某个real server失效时,ldirectord将失效节点的权值设置为0,新的连接将不能到达,但是并不从LVS路由表中清除此节点,同时,连接跟踪记录和程序连接模板仍然保留在Director上。 注意:以上几行为ldirectord.cf文件的“全局”设置,它们可以应用到下面多个虚拟主机,下面是每个虚拟主机的配置。 # Sample for an http virtual service virtual=192.168.60.200:80        #指定虚拟的IP地址和端口号,注意,在virtual行后面的行必 须缩进4个空格或以一个tab字符进行标记。 real=192.168.60.132:80 gate      #指定Real Server服务器地址和端口,同时设定LVS工作模式, 用gate表示DR模式,ipip表示TUNL模式,masq表示NAT模式。 real=192.168.60.144:80 gate fallback=127.0.0.1:80 gate        service=http                     #指定服务的类型,这里是对http服务做负载均衡。 request="index.html"             #ldirectord将根据指定的Real Server地址,结合该选项给出 的请求路径,发送访问请求,检查Real Server上的服务是否正 常运行,确保这里给出的页面地址是可访问的,不然ldirectord 会误认为此节点已经失效,发生错误监控现象。 receive="Test Page"              #指定请求和应答字串。 scheduler=rr                     #指定调度算法,这里是rr(轮叫)算法。 protocol=tcp                     #指定协议的类型,LVS支持TCP和UDP协议。 checktype=negotiate              #指定Ldirectord的检测类型,默认为negotiate。 checkport=80                     #指定监控的端口号。 virtualhost=www.gaojf.com        #虚拟服务器的名称,随便指定。 配置完毕,就可以执行如下命令启动或关闭ldirectord服务 /etc/init.d/ldirectord {start|stop} Ldirectord的核心作用是监控Real Server节点状态,同时,它还能调用ipvsadm自动创建LVS路由表,这点从ldirectord.cf中可以看出, 这里需要说明的是,ldirectord和Piranha都具有监控Real Server的功能,如果要通过ldirectord监控节点状态,只需启动ldirectord服务,整个集群系统就可以运行起来,而无需执行上面我们配置的LVS脚本,因为ldirectord会自动调用ipvsadm创建LVS路由表,而我们上面讲述的利用ipvsadm命令行方式配置LVS,是为了让读者能更深入的了解ipvsadm的实现细节和实现机制。 如果是通过Piranha工具配置LVS,就无需使用ldirectord,Piranha工具对应的系统进程是pluse,此进程也会自动调用ipvsadm创建LVS路由表,同时会利用自身的nanny守护进程监控real server的状态!

 

=====================

 

 

http://www.cnblogs.com/mchina/archive/2012/08/27/2644391.html

 

一、简介

VS/NAT原理图:

二、系统环境

实验拓扑:

系统平台:CentOS 6.3

Kernel:2.6.32-279.el6.i686

LVS版本:ipvsadm-1.26

keepalived版本:keepalived-1.2.4

三、安装

0、安装LVS前系统需要安装popt-static,kernel-devel,make,gcc,openssl-devel,lftp,libnl*,popt*

1、在两台Director Server上分别配置LVS+Keepalived

LVS install -------------

[root@CentOS-LVS_MASTER ~]# wget http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.26.tar.gz

[root@CentOS-LVS_MASTER ~]# ln -s /usr/src/kernels/2.6.32-279.el6.i686//usr/src/linux/

[root@CentOS-LVS_MASTER ~]# tar zxvf ipvsadm-1.26.tar.gz

[root@CentOS-LVS_MASTER ~]# cd ipvsadm-1.26

[root@CentOS-LVS_MASTER ipvsadm-1.26]# make && make install

Keepalived install -------------

[root@CentOS-LVS_MASTER ~]# wget http://www.keepalived.org/software/keepalived-1.2.4.tar.gz

[root@CentOS-LVS_MASTER ~]# tar zxvf keepalived-1.2.4.tar.gz

[root@CentOS-LVS_MASTER ~]# cd keepalived-1.2.4

[root@CentOS-LVS_MASTER keepalived-1.2.4]# ./configure && make && make install

######### 将keepalived做成启动服务,方便管理##########

[root@CentOS-LVS_MASTER ~]# cp /usr/local/etc/rc.d/init.d/keepalived /etc/init.d/

[root@CentOS-LVS_MASTER ~]# cp /usr/local/etc/sysconfig/keepalived /etc/sysconfig/

[root@CentOS-LVS_MASTER ~]# mkdir /etc/keepalived/

[root@CentOS-LVS_MASTER ~]# cp /usr/local/etc/keepalived/keepalived.conf /etc/keepalived/

[root@CentOS-LVS_MASTER ~]# cp /usr/local/sbin/keepalived /usr/sbin/

[root@CentOS-LVS_MASTER ~]# service keepalived start | stop

2、开启路由转发

[root@CentOS-LVS_MASTER ~]# vim /etc/sysctl.conf 
net.ipv4.ip_forward = 1
[root@CentOS-LVS_MASTER ~]# sysctl -p

3、配置Keepalived

[root@CentOS-LVS_MASTER ~]# less /etc/keepalived/keepalived.conf

复制代码
! Configuration File for keepalived

global_defs {
   router_id LVS_MASTER            #BACKUP上修改为LVS_BACKUP
}

vrrp_instance VI_1 {
    state MASTER                   #BACKUP上修改为BACKUP
    interface eth0
    virtual_router_id 51
    priority 100                   #BACKUP上修改为80
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        10.0.0.227
    }
}

vrrp_instance LAN_GATEWAY {
    state MASTER                   #BACKUP上修改为LVS_BACKUP
    interface eth1
    virtual_router_id 52
    priority 100                   #BACKUP上修改为80
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.10.10
    }
}

virtual_server 10.0.0.227 80 {
    delay_loop 6
    lb_algo rr
    lb_kind NAT
#   persistence_timeout 5
    protocol TCP

    real_server 192.168.10.4 80 {
        weight 3
        TCP_CHECK {
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
            connect_port 80
        }
    }
    
    real_server 192.168.10.5 80 {
        weight 3
        TCP_CHECK {
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
            connect_port 80
        }
    }
}
复制代码

BACKUP服务器同上配置,先安装lvs再安装keepalived,然后配置/etc/keepalived/keepalived.conf,只需将批注部分改一下即可。

4、分别在2台Real Server上面设置网关

把网关都设置成:192.168.10.10

5、在2台RealServer中分别配置HTTP

[root@WEB1 ~]# yum -y install httpd
[root@WEB1 ~]# cd /var/www/html/
[root@WEB1 html]# cat index.html 
<h1>WEB1/192.168.10.4</h1>
[root@WEB1 html]# /etc/init.d/httpd start
另一台机器配置一样,过程略。

6、分别在CentOS-LVS_MASTERCentOS-LVS_BACKUP上执行service keepalived start启动keepalived就可实现负载均衡及高可用集群了;

[root@CentOS-LVS_MASTER keepalived]# service keepalived start

四、测试

####高可用性测试####

模拟故障,将CentOS-LVS_MASTER上的keepalived服务停掉,然后观察CentOS-LVS_BACKUP上的日志,信息如下

lvs

从日志中可知,主机出现故障后,备机立刻检测到,此时备机变为MASTER角色,并且接管了主机的虚拟IP资源,最后将虚拟IP绑定在etho设备上。

CentOS-LVS_MASTER 上的keepalived服务开启后,CentOS-LVS_BACKUP的日志状态。

从日志可知,备机在检测到主机重新恢复正常后,释放了虚拟IP资源重新成为BACKUP角色

####故障切换测试####

故障切换是测试当某个节点出现故障后,Keepalived监制模块是否能及时发现然后屏蔽故障节点,同时将服务器转移到正常节点来执行。

将WEB2节点服务停掉,假设这个节点出现故障,然后主、备机日志信息如下

从以上可以看出,Keepalived监控模块检测到192.168.10.5这台主机出现故障后,将WEB2从集群系统中剔除掉了。 此时访问http://10.0.0.227只能看到WEB1了)

重新启动WEB2节点的服务,日志信息如下:

Keepalived监控模块检测到192.168.10.5这台主机恢复正常后,又将此节点加入集群系统中,再次访问就可以访问到WEB2页面了)

 

 

RHEL 5.4下部署LVS(DR)+keepalived实现高性能高可用负载均衡

http://www.cnblogs.com/mchina/archive/2012/05/23/2514728.html

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

===============================

 http://linux.chinaunix.net/techdoc/net/2009/07/21/1125256.shtml

操作系统平台:CentOS5.2
软件:LVS+keepalived

LVS+Keepalived 介绍
LVS
LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统。本项目在1998年5月由章文嵩博士成立,是中国国内最早出现的自由软件项目之一。目前有三种IP负载均衡技术(VS/NAT、VS/TUN和VS/DR);
十种调度算法(rrr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq)。
Keepalvied
Keepalived在这里主要用作RealServer的健康状态检查以及LoadBalance主机和BackUP主机之间failover的实现

Click here to open new window
CTRL+Mouse wheel to zoom in/out

IP配置信息:

    • LVS-DR-Master          192.168.2.166 
    • LVS-DR-BACKUP          192.168.2.167 
    • LVS-DR-VIP             192.168.2.170        
    • WEB1-Realserver        192.168.2.171 
    • WEB2-Realserver        192.168.2.172 
    • GateWay                192.168.2.253 安装LVS和Keepalvied软件包     1. 下载相关软件包  #mkdir /usr/local/src/lvs #cd /usr/local/src/lvs #wget  http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.24.tar.gz #wget  http://www.keepalived.org/software/keepalived-1.1.15.tar.gz
      2. 安装LVS和Keepalived 
    • #lsmod |grep ip_vs
    • #uname -r
    • 2.6.18-53.el5PAE
    • #ln -s /usr/src/kernels/2.6.18-53.el5PAE-i686/  /usr/src/linux
    • #tar zxvf ipvsadm-1.24.tar.gz
    • #cd ipvsadm-1.24
    • #make && make install
    • #find / -name ipvsadm  # 查看ipvsadm的位置
    • #tar zxvf keepalived-1.1.15.tar.gz
    • #cd keepalived-1.1.15
    • #./configure  && make && make install
    • #find / -name keepalived  # 查看keepalived位置                
    •     
    • #cp /usr/local/etc/rc.d/init.d/keepalived /etc/rc.d/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/
    • #service keepalived start|stop     #做成系统启动服务方便管理. 四. 配置LVS实现负载均衡   1. LVS-DR,配置LVS脚本实现负载均衡 
      vi /usr/local/sbin/lvs-dr.sh
      #!/bin/bash # description: start LVS of DirectorServer #Written by :NetSeek  http://www.linuxtone.org GW=192.168.2.253
      # website director vip. WEB_VIP=192.168.2.170 WEB_RIP1=192.168.2.171 WEB_RIP2=192.168.2.172 . /etc/rc.d/init.d/functions
      logger $0 called with $1
      case "$1" in
      start)         # Clear all iptables rules.         /sbin/iptables -F         # Reset iptables counters.         /sbin/iptables -Z         # Clear all ipvsadm rules/services.         /sbin/ipvsadm -C
      #set lvs vip for dr         /sbin/ipvsadm --set 30 5 60         /sbin/ifconfig eth0:0 $WEB_VIP broadcast $WEB_VIP netmask 255.255.255.255 up         /sbin/route add -host $WEB_VIP dev eth0:0         /sbin/ipvsadm -A -t $WEB_VIP:80 -s wrr -p 3         /sbin/ipvsadm -a -t $WEB_VIP:80 -r $WEB_RIP1:80 -g -w 1         /sbin/ipvsadm -a -t $WEB_VIP:80 -r $WEB_RIP2:80 -g -w 1         touch /var/lock/subsys/ipvsadm >/dev/null 2>&1                  # set Arp         /sbin/arping -I eth0 -c 5 -s $WEB_VIP $GW >/dev/null 2>&1         ;; stop)         /sbin/ipvsadm -C         /sbin/ipvsadm -Z         ifconfig eth0:0 down         route del $WEB_VIP  >/dev/null 2>&1         rm -rf /var/lock/subsys/ipvsadm >/dev/null 2>&1         /sbin/arping -I eth0 -c 5 -s $WEB_VIP $GW         echo "ipvsadm stoped"        ;;
      status)
              if [ ! -e /var/lock/subsys/ipvsadm ];then                 echo "ipvsadm is stoped"                 exit 1         else                 ipvsadm -ln                 echo "..........ipvsadm is OK."         fi       ;;
      *)         echo "Usage: $0 {start|stop|status}"         exit 1 esac
      exit 0 2. 配置Realserver脚本. 
      #!/bin/bash # Written by NetSeek  # description: Config realserver lo and apply noarp  WEB_VIP=192.168.2.170
      . /etc/rc.d/init.d/functions
      case "$1" in start)        ifconfig lo:0 $WEB_VIP netmask 255.255.255.255 broadcast $WEB_VIP        /sbin/route add -host $WEB_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 $WEB_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"        ;; status)         # Status of LVS-DR real server.         islothere=`/sbin/ifconfig lo:0 | grep $WEB_VIP`         isrothere=`netstat -rn | grep "lo:0" | grep $web_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 Running."         fi ;; *)         # Invalid entry.         echo "$0: Usage: $0 {start|status|stop}"         exit 1 ;; esac exit 0
      附上realserver机上的/etc/sysctl.conf:
      # Kernel sysctl configuration file for Red Hat Linux # # For binary values, 0 is disabled, 1 is enabled.  See sysctl(8) and # sysctl.conf(5) for more details. # Controls IP packet forwarding net.ipv4.ip_forward = 1 # Controls source route verification net.ipv4.conf.default.rp_filter = 1 # Do not accept source routing net.ipv4.conf.default.accept_source_route = 0 # Controls the System Request debugging functionality of the kernel kernel.sysrq = 0 # Controls whether core dumps will append the PID to the core filename. # Useful for debugging multi-threaded applications. kernel.core_uses_pid = 1 net.ipv4.conf.lo.arp_ignore = 1 net.ipv4.conf.lo.arp_announce = 2 net.ipv4.conf.all.arp_ignore = 1 net.ipv4.conf.all.arp_announce = 2 或者采用secondary ip address方式配置 # vi /etc/sysctl.conf 
      添加以下内容如上所示:
      net.ipv4.conf.lo.arp_ignore = 1 net.ipv4.conf.lo.arp_announce = 2 net.ipv4.conf.all.arp_ignore = 1 net.ipv4.conf.all.arp_announce = 2 #sysctl –p #ip addr add 61.164.122.8/32 dev lo #ip add list 查看是否绑定 3. 启动lvs-dr脚本和realserver启本,在DR上可以查看LVS当前状态: #watch ipvsadm –ln
      五.利用Keepalvied实现负载均衡和和高可用性 1.配置在主负载均衡服务器上配置keepalived.conf #vi /etc/keepalived/keepalived.conf (主调度器) ! Configuration File for keepalived global_defs {    notification_email {       acassen@firewall.loc       failover@firewall.loc       sysadmin@firewall.loc    }    notification_email_from  Alexandre.Cassen@firewall.loc    smtp_server 127.0.0.1    smtp_connect_timeout 30    router_id LVS_DEVEL } vrrp_instance VI_1 {     state MASTER     interface eth0     virtual_router_id 51     priority 100     advert_int 1     authentication {         auth_type PASS         auth_pass 1111     }     virtual_ipaddress {         192.168.2.170     } } virtual_server 192.168.2.170 80 {     delay_loop 6     lb_algo wrr     lb_kind DR     persistence_timeout 60     protocol TCP         real_server 192.168.2.171 80 {         weight 3                      TCP_CHECK {         connect_timeout 10            nb_get_retry 3         delay_before_retry 3         connect_port 80 }      }     real_server 192.168.2.172 80 {         weight 3         TCP_CHECK {         connect_timeout 10         nb_get_retry 3         delay_before_retry 3         connect_port 80         }      } }
      在备用调度器上: #vi /etc/keepalived/keepalived.conf (备用调度器) ! Configuration File for keepalived global_defs {    notification_email {       acassen@firewall.loc       failover@firewall.loc       sysadmin@firewall.loc    }    notification_email_from  Alexandre.Cassen@firewall.loc    smtp_server 127.0.0.1    smtp_connect_timeout 30    router_id LVS_DEVEL } vrrp_instance VI_1 {     state BACKUP     interface eth0     virtual_router_id 51     priority 99     advert_int 1     authentication {         auth_type PASS         auth_pass 1111     }     virtual_ipaddress {         192.168.2.170     } } virtual_server 192.168.2.170 80 {     delay_loop 6     lb_algo wrr     lb_kind DR     persistence_timeout 60     protocol TCP         real_server 192.168.2.171 80 {         weight 3                      TCP_CHECK {         connect_timeout 10            nb_get_retry 3         delay_before_retry 3         connect_port 80 }      }     real_server 192.168.2.172 80 {         weight 3         TCP_CHECK {         connect_timeout 10         nb_get_retry 3         delay_before_retry 3         connect_port 80         }      } }
      2. BACKUP服务器同上配置,先安装lvs再按装keepalived,仍后配置/etc/keepalived/keepalived.conf,只需将红色标示的部分改一下即可. 3. vi /etc/rc.local    #/usr/local/sbin/lvs-dr.sh  将lvs-dr.sh这个脚本注释掉。    #/usr/local/sbin/lvs-dr.sh stop 停止lvs-dr脚本    #/etc/init.d/keepalived start  启动keepalived 服务,keepalived就能利用keepalived.conf 配    置文件,实现负载均衡和高可用. 4. 查看lvs服务是否正常    #watch ipvsadm –ln  IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddressort Scheduler Flags   -> RemoteAddressort           Forward Weight ActiveConn InActConn TCP  61.164.122.8:80 wrr persistent 60   -> 61.164.122.10:80            Route   3      0          0   -> 61.164.122.9:80             Route   3      0          0 复制代码 #tail –f /var/log/message  监听日志,查看状态,测试LVS负载均衡及高可用性是否有效。 5.停Master服务器的keepalived服务,查看BAKCUP服务器是否能正常接管服务。 四.相关参考 1.LVS 基础知识汇总 LVS的算法介绍             http://www.linuxtone.org/viewthread.php?tid=69 学习LVS的三种转发模式      http://www.linuxtone.org/viewthread.php?tid=77 LVS中的IP负载均衡技术      http://www.linuxtone.org/viewthread.php?tid=68 更多的请到 http://www.linuxtone.org 负载均衡版查看 Keepalived 相关参考资料。     http://www.keepalived.org/documentation.html
      本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u3/101514/showart_2002473.html

 

 

 

..

 

posted @ 2013-06-19 16:21  陳聽溪  阅读(1887)  评论(0)    收藏  举报