cxin 发表于 2015-9-5 07:57:06

lvs!!!

  
  realserver执行脚本范例,存在路径/etc/init.d/realserver
  
  http://lavafree.iteye.com/blog/1125906



LVS连接的持久时间

博客分类:

[*]系统服务




  LVS的持续时间有2个
  1.把同一个cip发来请求到同一台RS的持久超时时间。
  2.一个链接创建后空闲时的超时时间,这个超时时间分为3种。
  1)tcp的空闲超时时间。
  2)lvs收到客户端tcp fin的超时时间
  3)udp的超时时间
  
  客户端连接到vip的时候,Director会记录在它的跟踪记录表里面。
  
  如果原来已经有该cip,那么状态为state为none的记录(来源的端口为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
FWM99 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.iyunv.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 -------------
  # wget http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.24.tar.gz
  # ln -s /usr/src/kernels/2.6.18-194.el5-i686//usr/src/linux/
  # tar zxvf ipvsadm-1.24.tar.gz
  # cd ipvsadm-1.24
  # make && make install
  Keepalived install -------------

  # wget http://www.keepalived.org/software/keepalived-1.1.15.tar.gz
  # tar zxvf keepalived-1.1.15.tar.gz
  # cd keepalived-1.1.15
  # ./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/
  # 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广播。
  # 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

  # sh realserver.sh start
  4、分别在LVS-MASTER、LVS-BACKUP上执行service keepalived start启动keepalived就可实现负载均衡及高可用集群了;
  # service keepalived start
  # ipvsadm -L
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port         Forward Weight ActiveConn InActConn
TCP10.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         
#
  查看日志/var/log/messages
  # tail -n 30/var/log/messages
Apr 19 03:59:58 LVS-MASTER avahi-daemon: 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
Apr 19 04:00:19 LVS-MASTER Keepalived_healthcheckers: Activating healtcheckerfor service
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:
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: 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
#
  四、测试
  接下来做高可用性测试&故障切换测试......
  ####高可用性测试####
  模拟故障,将LVS-MASTER上的keepalived服务停掉,然后观察LVS-BACKUP上的日志,信息如下
  # 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: 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: 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 failed!!!
Apr 19 03:35:04 LVS-MASTER Keepalived_healthcheckers:Removing service from VS
Apr 19 03:35:04 LVS-MASTER Keepalived_healthcheckers: Remote SMTP server connected.
  # ipvsadm -L
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port         Forward Weight ActiveConn InActConn
TCP10.0.0.148:http rr persistent 50
-> 10.0.0.137:http            Route   3      0          0         
#
  从以上可以看出,Keepalived监控模块检测到10.0.0.139这台主机出现故障后,将些web2从集群系统中剔除掉了。 此时访问http://10.0.0.148只能看到web1了)

  重新启动web2节点的服务,日志信息如下:
  Apr 19 03:38:22 LVS-MASTER Keepalived_healthcheckers:TCP connection to success.
Apr 19 03:38:22 LVS-MASTER Keepalived_healthcheckers:Adding service to VS
Apr 19 03:38:22 LVS-MASTER Keepalived_healthcheckers: Remote SMTP server connected.
  # ipvsadm -L
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port         Forward Weight ActiveConn InActConn
TCP10.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         
#
  Keepalived监控模块检测到10.0.0.139这台主机恢复正常后,又将此节点加入集群系统中,再次访问就可以访问到web2页面了)

  
  
CentOS 6.3下部署LVS(NAT)+keepalived实现高性能高可用负载均衡
  http://www.cnblogs.com/mchina/archive/2012/08/27/2644391.html
  
  ----------------------------------------
  http://www.iyunv.com/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 ] [-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 --查看定义的规则

如:#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的访问



# ipvsadm -A -t 172.16.100.100:443 -s rr

# ipvsadm -a -t 172.16.100.100:443 -r 172.16.24.2 -g

# 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:

# iptables -t mangle -A PREROUTING -i eth0 -p tcp -d 172.16.100.100 --dport 80 -j MARK --set-mark 20

# iptables -t mangle -A PREROUTING -i eth0 -p tcp -d 172.16.100.100 --dport 443 -j MARK --set-mark 20

# 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:



# ipvsadm -A -f 20 -s wlc -p 1200

# ipvsadm -a -f 20 -r 172.16.24.2 -g -w 3

# ipvsadm -a -f 20 -r 172.16.24.3 -g -w 2

# 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用于对外提供服务,执行如下命令: #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指定一条路由,执行如下指令: #route add -host 192.168.60.200 dev eth0:0接着启用系统的包转发功能,从而使系统充当路由器,执行如下指令: #echo "1" >/proc/sys/net/ipv4/ip_forward 指令中,参数值为1时启用ip转发,为0时禁止ip转发。其实在DR模式中,开启系统的包转发功能不是必须的,而在NAT模式下此操作是必须的。 然后开始配置ipvs,执行如下操作: #ipvsadm -C #ipvsadm -A -t 192.168.60.200:80 -s rr -p 600 #ipvsadm -a -t 192.168.60.200:80 -r 192.168.60.132:80 -g #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服务,执行如下操作: #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:0echo "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 VirtualIP 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下,执行: #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包,进行安装即可: #rpm –ivh piranha-0.8.2-1.i386.rpm Piranha安装完毕后,会产生/etc/sysconfig/ha/lvs.cf文件,默认此文件是空的,可以通过Piranha提供的web界面配置此文件,也可以直接手动编辑此文件,编辑好的lvs.cf文件内容类似如下,注意,“#”号后面的内容为注释。 # 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服务 #service pulse start 同理,此种方式下也要启用系统的包转发功能: #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请求。
  上面脚本也可以写成可启动与停止的服务脚本,内容如下: #more /etc/init.d/lvsrs #!/bin/bash #description : Start Real ServerVIP=192.168.60.200 ./etc/rc.d/init.d/functions case "$1" in   start)         echo " Start LVSofReal 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有可执行权限: #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 -------------
  # wget http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.26.tar.gz
  # ln -s /usr/src/kernels/2.6.32-279.el6.i686//usr/src/linux/
  # tar zxvf ipvsadm-1.26.tar.gz
  # cd ipvsadm-1.26
  # make && make install
  Keepalived install -------------

  # wget http://www.keepalived.org/software/keepalived-1.2.4.tar.gz
  # tar zxvf keepalived-1.2.4.tar.gz
  # cd keepalived-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/
  # service keepalived start | stop
  2、开启路由转发
  # vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
# sysctl -p
  3、配置Keepalived
  # 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
  # yum -y install httpd
# cd /var/www/html/
# cat index.html
<h1>WEB1/192.168.10.4</h1>
# /etc/init.d/httpd start
另一台机器配置一样,过程略。

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


  四、测试
  ####高可用性测试####
  模拟故障,将CentOS-LVS_MASTER上的keepalived服务停掉,然后观察CentOS-LVS_BACKUP上的日志,信息如下

  从日志中可知,主机出现故障后,备机立刻检测到,此时备机变为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的实现

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 #wgethttp://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.24.tar.gz #wgethttp://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 :NetSeekhttp://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 noarpWEB_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_fromAlexandre.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_fromAlexandre.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 –lnIP Virtual Server version 1.2.1 (size=4096) Prot LocalAddressort Scheduler Flags   -> RemoteAddressort         Forward Weight ActiveConn InActConn TCP61.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

  
  
  
  ..
  
页: [1]
查看完整版本: lvs!!!