LVS+Keepalived 实现高可用负载均衡集群

时间:2022-12-22 14:51:53

简介:

      随着网站业务量的增长,网站的服务器压力越来越大?需要负载均衡方案!商业的硬件如 F5 ,Array又太贵,你们又是创业型互联公司如何有效节约
成本,节省不必要的浪费?同时还需要实现商业硬件一样的高性能高可用的功能?有什么好的负载均衡可伸张可扩展的方案吗?有!我们利用LVS+Keepalivd
基于完整开源软件的架构可以为你提供一个负载均衡及高可用的服务器。
 
一.LVS+Keepalived  介绍
1.  LVS
LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统。本 1998 年5 月由章文嵩博士成立,是中国国内最早出现的自
由软件项目之一。目前有三种IP负载均衡技术(VS/NAT、VS/TUN和VS/DR)
 
2.  Keepalvied
Keepalived 采用VRRP(Virtual Router Redundancy Protocal,虚拟路由冗余协议)热备份协议,以软件的形式实现Linux服务器的多机热备功能 主要用来
提供failover(故障转移),和健康状态检查(Health Checking)功能,判断调度器(LoadBalance)主机、Backup主机、RealServer主机的可用性,及时
隔离并替换为新的服务器,当故障主机恢复后将其重新加入集群。

Keepalvied 官网:http://www.keepalived.org

热备组:通过共用的虚拟ip地址向外提供服务,同时只能有一个主机向外提供服务,其他处于冗余状态,当主出现故障时,根据优先级决定替换顺序,VIP漂移

二.  IP 信息列表:
名称     IP
LVS-DR-Master    192.168.200.101
LVS-DR-BACKUP    192.168.200.102
LVS-DR-VIP    192.168.200.254
WEB1-Realserver   192.168.200.103
WEB2-Realserver   192.168.200.104


三.  LVS-DR-Master/LVS-DR-BACKUP 安装 LVS和 Keepalvied软件包

yum -y install ipvsadm kernel-devel openssl-devel popt-devel


注:一定要与当前的运行的内核一致,因为 /usr/src/kernels目录下可有多个内核。否则在编译 keepalived 时会出错,从而不能继续进行安装外,还会使keepalived 启动后功能失效

tar xf keepalived-1.2.13.tar.gz
cd keepalived-1.2.13
./configure --prefix=/ --with-kernel-dir=/usr/src/kernels/2.6.32-504.el6.x86_64/
make
make install

chkconfig --add keepalived
chkconfig keepalived on
chkconfig --list keepalived
service keepalived start|stop     #做成系统启动服务方便管理.


四.  配置 LVS实现负载均衡
1. LVS-DR-Master 配置
设置网卡IP地址
vim /etc/sysconfig/network-scripts/ifcfg-eth0

# Advanced Micro Devices [AMD] 79c970 [PCnet32 LANCE]
DEVICE=eth0
BOOTPROTO=none
ONBOOT=yes
HWADDR=00:0c:29:9e:34:af
NETMASK=255.255.255.0
IPADDR=192.168.200.101
TYPE=Ethernet

service network restart


配置Keepalived
cd /etc/keepalived
cp keepalived.conf keepalived.conf.bak
vim keepalived.conf
----------------------------------------------------------------------------------------------
! Configuration File for keepalived

global_defs {
   notification_email { 
   crushlinux@163.com  #设置报警邮件地址,可以设置多个,每行一个。注意,如果要开启邮件报警,需要开启本机的sendmail服务
   }
   notification_email_from root@example.com   #设置邮件的发送地址
   smtp_server 127.0.0.1      #设置smtp服务器地址
   smtp_connect_timeout 30      #设置连接 smtp 服务器超时时间
   router_id LVS_MASTER       #运行 Keepalived服务器的一个标识。发邮件时显示在邮件标题中的信息
}

vrrp_instance VI_1 {    #vrrp实例定义部分    
    state MASTER     #指定 Keepalived 的角色,MASTER表示此主机是主用服务器,BACKUP表示是备用服务器。备份服务器上将 MASTER 改为 BACKUP。
    interface eth0     #指定 HA监测网络的接口
    virtual_router_id 51   虚拟路由标识,这个标识是一个数字,并且同一个 vrrp 实例使用唯一的标识,即同一个 vrrp_instance下,MASTER 和 BACKUP必须是一致的。(0-255)
    priority 100     #定义优先级,数字越大,优先级越高,在一个 vrrp_instance下,MASTER的优先级必须大于 BACKUP 的优先级。备份服务上将 100 改为 50
    advert_int 1     #设定MASTER 与 BACKUP负载均衡器之间同步检查的时间间隔,单位是秒
    authentication {    #设定验证类型和密码
        auth_type PASS    #设置验证类型,主要有 PASS和 AH 两种
        auth_pass 1111    #设置验证密码,在一个 vrrp_instance下,MASTER 与 BACKUP必须使用相同的密码才能正常通信。
    }
    virtual_ipaddress {    #设置虚拟 IP地址,可以设置多个虚拟IP地址,每行一个
        192.168.200.254 
    }
}

#虚拟服务器定义部分
virtual_server 192.168.200.254 80 {  #设置虚拟服务器,需要指定虚拟 ip 地址和服务端口,ip 与
端口之间用空格隔开。
    delay_loop 6      #设置健康检查时间,单位是秒
    lb_algo rr       #设置负载调度算法,这里设置为 rr,即轮询算法,rr|wrr|lc|wlc|lblc|sh|dh
    lb_kind DR       #设置 LVS实现负载均衡的机制,可以有 NAT、TUN 和 DR三个模式可选。  
    protocol TCP      #指定转发协议类型,有 tcp和 udp 两种

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

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

Master配置

! Configuration File for keepalived

global_defs {
   notification_email { 
   crushlinux@163.com
   }
   notification_email_from root@example.com
   smtp_server 127.0.0.1 
   smtp_connect_timeout 30 
   router_id LVS_MASTER 
}

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.200.254 
    }
}

virtual_server 192.168.200.254 80 {  
    delay_loop 6   
    lb_algo rr   
    lb_kind DR  
    protocol TCP 

    real_server 192.168.200.103 80 {
        weight 1
        TCP_CHECK { 
            connect_timeout 10
            nb_get_retry 3
            delay_before_retry 3
            connect_port 80
        }
    }
    real_server 192.168.200.104 80 {
        weight 1
        TCP_CHECK {
            connect_timeout 10
            nb_get_retry 3
            delay_before_retry 3
            connect_port 80
        }
    }
}


service keepalived restart
chkconfig keepalived on

 

2. LVS-DR-backup 配置
设置网卡IP地址
vim /etc/sysconfig/network-scripts/ifcfg-eth0
# Advanced Micro Devices [AMD] 79c970 [PCnet32 LANCE]
DEVICE=eth0
BOOTPROTO=none
ONBOOT=yes
HWADDR=00:0c:29:b0:58:2e
NETMASK=255.255.255.0
IPADDR=192.168.200.102
TYPE=Ethernet

service network restart


配置Keepalived
cd /etc/keepalived
cp keepalived.conf keepalived.conf.bak
vim keepalived.conf

! Configuration File for keepalived

global_defs {
   notification_email { 
   crushlinux@163.com
   }
   notification_email_from root@example.com
   smtp_server 127.0.0.1 
   smtp_connect_timeout 30 
   router_id LVS_MASTER 
}

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

virtual_server 192.168.200.254 80 {  
    delay_loop 6   
    lb_algo rr   
    lb_kind DR   
    protocol TCP 

    real_server 192.168.200.103 80 {
        weight 1
        TCP_CHECK { 
            connect_timeout 10
            nb_get_retry 3
            delay_before_retry 3
            connect_port 80
        }
    }
    real_server 192.168.200.104 80 {
        weight 1
        TCP_CHECK {
            connect_timeout 10
            nb_get_retry 3
            delay_before_retry 3
            connect_port 80
        }
    }
}

service keepalived restart
chkconfig keepalived on


五.  配置Realserver
提供应用的 RealServer1 和 RealServer2 不需要安装任何IPVS软件,只需要设置在开机后自动运行以下脚本

在 RealServer1 上的设置
[root@web1 ~]# vim realserver.sh
#!/bin/bash 
SNS_VIP=192.168.200.254
. /etc/rc.d/init.d/functions 
case "$1" in 
start)        
 ifconfig lo:0 $SNS_VIP netmask 255.255.255.255 broadcast $SNS_VIP        
 /sbin/route add -host $SNS_VIP dev lo:0        
 echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore        
 echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce        
 echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore        
 echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce        
 sysctl -p >/dev/null 2>&1        
 echo "RealServer Start OK"         
 ;; 
stop)        
 ifconfig lo:0 down        
 route del $SNS_VIP >/dev/null 2>&1        
 echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore        
 echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce        
 echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore        
 echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce        
 echo "RealServer Stoped"        
 ;; 
*)        
 echo "Usage: $0 {start|stop}"        
exit 1 
esac 
exit 0


[root@web1 ~]# chmod +x realserver.sh
[root@web1 ~]# ./realserver.sh start

yum -y install httpd
echo "realserver1" > /var/www/html/index.html    //在 RealServer1 添加测试页
servcie httpd restart    //重启 web服务器

 

在 RealServer2 上的设置
[root@web2 ~]# vim realserver.sh
#!/bin/bash 
SNS_VIP=192.168.200.254
. /etc/rc.d/init.d/functions 
case "$1" in 
start)        
 ifconfig lo:0 $SNS_VIP netmask 255.255.255.255 broadcast $SNS_VIP        
 /sbin/route add -host $SNS_VIP dev lo:0        
 echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore        
 echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce        
 echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore        
 echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce        
 sysctl -p >/dev/null 2>&1        
 echo "RealServer Start OK"         
 ;; 
stop)        
 ifconfig lo:0 down        
 route del $SNS_VIP >/dev/null 2>&1        
 echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore        
 echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce        
 echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore        
 echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce        
 echo "RealServer Stoped"        
 ;; 
 *)        
 echo "Usage: $0 {start|stop}"        
exit 1 
esac 
exit 0


[root@web2 ~]# chmod +x realserver.sh
[root@web2 ~]# ./realserver.sh start

yum -y install httpd
echo "realserver2" > /var/www/html/index.html    //在 RealServer1 添加测试页
servcie httpd restart    //重启 web服务器

 

五.  测试
启动 keepalived 服务
分别在主、备均衡服务器上启动 keepalived 服务,启动命令为:
service keepalived start  

tail -f /var/log/messages


确定 realserver1 和 realserver2 服务器的 httpd服务启动,页面能正常访问

打开浏览器,输入http://192.168.200.254将分别看到不同的页面。


查看测试
ipvsadm -L –n


测试 HA功能
断掉 LVS-Master 的 eth0 的网络连接或者关闭系统模拟故障发生。
在 LVS-Slave 中观察日志,大约应在 30 秒内 LVS-Slave 接管 LVS-Master 的资源启动 LVS
服务。主均衡服务器恢复正常后,必须能够从备份均衡服务器接管资源。

tail -f /var/log/messages    //当 LVS-Master 发生故障后
Nov  7 06:05:27 www Keepalived_vrrp: VRRP_Instance(VI_1) Entering MASTER STATE
Nov  7 06:05:27 www Keepalived_vrrp: VRRP_Instance(VI_1) setting protocol VIPs.
Nov  7 06:05:27 www Keepalived_vrrp: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth0 for 192.168.200.254
Nov  7 06:05:32 www Keepalived_vrrp: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth0 for 192.168.200.254
Nov  7 06:06:59 www avahi-daemon[3296]: Invalid legacy unicast query packet.
Nov  7 06:06:59 www last message repeated 2 times
Nov  7 06:07:00 www avahi-daemon[3296]: Received response from host 192.168.200.1 with invalid source port 59083 on interface 'eth0.0'
Nov  7 06:07:01 www Keepalived_vrrp: VRRP_Instance(VI_1) Received higher prio advert
Nov  7 06:07:01 www Keepalived_vrrp: VRRP_Instance(VI_1) Entering BACKUP STATE

 

1、 vip(virtual ip)。直接路由模式的vip必须跟服务器对外提供服务的ip地址在同一个网段,并且lvs 负载均衡器和其他所有提供相同功能的服务器都使用这个vip.
2、 vip被绑定在环回接口lo0:0上,其广播地址是其本身,子网掩码是255.255.255.255。这与标准的网络地址设置有很大的不同。采用这种可变长掩码方式把网段划分成只含一个主机地址的目的是避免ip地址冲突。
3、 echo "1",echo "2" 这段的作用是抑制arp广播。如果不做arp抑制,将会有众多的机器向其他宣称:"嗨!我在这里呢!",这样就乱套了。

 

在互联网应  用中,随着站点对硬件性能,响应速度,服务稳定性,数据可靠性等需求越来越高,单台服务器将难以承担所有的访问。除了使用昂贵的大型机,专用负载负载分流设备以外,还可以使用构建集群服务器的解决方案.

集群技术的概述
根据企业应用环境的不同,集群提供的功能也各不相同,采用的技术细节也可能各有千秋。

集群的类型:
集群环境,至少要包括两台节点服务器,而对外表现为一个整体,只提供一个访问入口(域名或IP地址),相对于一台大型计算机,根据集群针对的目标差异,分为三种类型:

负载均衡集群(Load Balance Cluster)
以提高应用系统的响应能力,尽可能处理更多的访问请求,减少延迟为目标,获得高并发,高负载(LB)的整体性能,例如:DNS轮询,应用层交换,反向代理等,负载分配依赖于主节点的分流算法,将来自客户端的访问请求分担给多个服务器节点,从而缓解整个系统的负载压力,这类集群中比较著名的有 Turbolinux Cluster Server、Linux Virtual Server(LVS)、Haproxy、Nginx

www  IN A 192.168.200.101
www  IN A 192.168.200.102
www  IN A 192.168.200.103

高可用集群(High Availability Cluster)
以提高应用系统的可靠性,尽可能减少中断时间为目标,确保服务的连续性,达到高可用(HA)的容错效果,例如:故障切换,双机热备,多机热备等,工作模式包括双工,主从两种模式,双工即节点同时在线,主从则只有主节点在线,当出现故障时从节点自动切换为主节点,这类集群中比较著名的有 Turbolinux TurboHA、Heartbeat、Keepalived、Kimberlite 等

SLA 服务水平协定:
描述                              通俗叫法     可用性级别     年度停机时间
基本可用性                          2个9           99%          87.6小时
较高可用性                          3个9           99.9%        8.76小时
具有故障自动恢复能力的可用性        4个9           99.99%       53分钟
极高可用性                          5个9           99.999%      5分钟


高性能运算集群(High Performance Computer Cluster)
以提高应用系统的CPU运算速度,扩展硬件资源和分析能力为目标,获得相当于大型,超级计算机的高性能运算(HPC)能力,例如:云计算,网格计算,HPC主要依赖于分布式运算,并行计算,通过专用硬件和软件将多个服务器的CPU,内存等资源整合在一起,实现大型,超级计算机才具有的计算能力,这类软件有 Turbolinux EnFusion、SCore、Hadoop等

 

负载均衡集群的分层介绍
LVS 通过前端一个负载调度器(Load Balancer,也叫负载均衡器)无缝地将网络请求调度到真实服务器上,从而使得服务器集群的结构对客户是透明的,客户访问集群系统提供的网络服务就像访问一台高性能、高可用的服务器一样。客户程序不受服务器集群的影响不需作任何修改。系统的伸缩性通过在服务器机群中透明地加入或删除一个节点来达到,通过检测节点或服务进程故障和正确地重置使系统达到高可用性。


第一层:负载调度器 至少一个调度器,通常是两台主备(Load Balancer或Director)负责接受,响应,分发自客户端的请求,是整个集群系统访问唯一入口,对外使用VIP地址
第二层:服务器池 server pool (real server) 是提供相应服务的服务器具有自己的RIP地址,负责处理客户端请求,并将结果发送给调度器或直接返回给客户端
第三层:共享存储 为服务器池中的所有节点提供稳定,一致的文件存取服务,确保整个集群的统一性,可以是NAS设备,或者NFS(Network File System,网络文件系统)


实现集群的软件或者是硬件:
硬件:
F5 BIG-IP
Ctrix Netscaler
A10
Array

绿盟

软件

 

Linux Virtual Server 针对Linux内核的负载均衡项目,我国章文嵩博士在1998年5月创建,为基于IP地址和内容请求分发的负载均衡提出了高效的解决方案。

官方站点: http://www.linuxvirtualserver.org

负载均衡的工作模式

负载调度可以基于IP、端口、内容,IP效率最高

IP模式:
NAT (Network Address Translation)网络地址转换,调度器作为所有服务器节点的网关,做为客户机的入口,也是服务器回应客户机的出口,服务器节点使用私有IP地址,安全性较高
DR  (Direct Routing)直接路由 半开放式的网络结构,节点与调度器在同一个物理网络,节点直接返回客户端请求
TUN (IP Tunnel)IP隧道 全开放式的网络结构,调度器只是入口,节点可分散在全国各地具有公网IP,与调度器通过专用的IP隧道相互通信
FULLNAT

LVS 现在已成为Linux内核的一部分,以ip_vs模块的形式加载

确保软件包正常安装
 
[root@RHEL6-Server1 ~]# rpm -q ipvsadm
package ipvsadm is not installed
[root@RHEL6-Server1 ~]# mount /dev/cdrom /media/cdrom
[root@RHEL6-Server1 ~]# cd /media/cdrom/LoadBalancer/
[root@RHEL6-Server1 LoadBalancer]# rpm -ivh ipvsadm-1.26-4.el6.x86_64.rpm
warning: ipvsadm-1.26-4.el6.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID fd431d51: NOKEY
Preparing...                ########################################### [100%]
   1:ipvsadm                ########################################### [100%]

[root@RHEL6-Server1 LoadBalancer]# lsmod | grep ip_vs
[root@RHEL6-Server1 LoadBalancer]# modprobe ip_vs
[root@RHEL6-Server1 LoadBalancer]# lsmod | grep ip_vs
ip_vs                 125694  0
ipv6                  334932  263 ip_vs
libcrc32c               1246  1 ip_vs

[root@RHEL6-Server1 LoadBalancer]# cat /proc/net/ip_
ip_mr_cache      ip_vs_app        ip_vs_stats
ip_mr_vif        ip_vs_conn      
ip_vs            ip_vs_conn_sync 

[root@RHEL6-Server1 LoadBalancer]# cat /proc/net/ip_vs
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port Forward Weight ActiveConn InActConn

[root@RHEL6-Server1 LoadBalancer]# ipvsadm -v
ipvsadm v1.26 2008/5/15 (compiled with popt and IPVS v1.2.1)


LVS 的负载均衡调度算法

1.轮叫调度(Round Robin)(rr)
调度器通过“轮叫”调度算法将外部请求按顺序轮流分配到集群中的真实服务器上,它均等地对待每一台服务器,而不管服务器上实际的连接数和系统负载。

2.加权轮叫(Weighted Round Robin)(wrr)
调度器通过“加权轮叫”调度算法根据真实服务器的不同处理能力来调度访问请求。这样可以保证处理能力强的服务器能处理更多的访问流量。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。

3.最少链接(Least Connections)(LC)
调度器通过“最少连接”调度算法动态地将网络请求调度到已建立的链接数最少的服务器上。如果集群系统的真实服务器具有相近的系统性能,采用“最小连接”调度算法可以较好地均衡负载。

4.加权最少链接(Weighted Least Connections)(WLC)
在集群系统中的服务器性能差异较大的情况下,调度器采用“加权最少链接”调度算法优化负载均衡性能,具有较高权值的服务器将承受较大比例的活动连接负载。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。

5.基于局部性的最少链接(Locality-Based Least Connections)(LBLC)
“基于局部性的最少链接”调度算法是针对目标IP地址的负载均衡,目前主要用于Cache集群系统。该算法根据请求的目标IP地址找出该目标IP地址最近使用的服务器,若该服务器是可用的且没有超载,将请求发送到该服务器;若服务器不存在,或者该服务器超载且有服务器处于一半的工作负载,则用“最少链接” 的原则选出一个可用的服务器,将请求发送到该服务器。

6.带复制的基于局部性最少链接(Locality-Based Least Connections with Replication)(LBLCR)
“带复制的基于局部性最少链接”调度算法也是针对目标IP地址的负载均衡,目前主要用于Cache集群系统。它与LBLC算法的不同之处是它要维护从一个目标 IP地址到一组服务器的映射,而LBLC算法维护从一个目标IP地址到一台服务器的映射。该算法根据请求的目标IP地址找出该目标IP地址对应的服务器组,按“最小连接”原则从服务器组中选出一台服务器,若服务器没有超载,将请求发送到该服务器;若服务器超载,则按“最小连接”原则从这个集群中选出一台服务器,将该服务器加入到服务器组中,将请求发送到该服务器。同时,当该服务器组有一段时间没有被修改,将最忙的服务器从服务器组中删除,以降低复制的程度。

7.目标地址散列(Destination Hashing)(DH)
“目标地址散列”调度算法根据请求的目标IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。

8.源地址散列(Source Hashing)(SH)
“源地址散列”调度算法根据请求的源IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。

9. 最短的期望的延迟(Shortest Expected Delay Scheduling SED)(SED)
基于wlc算法。这个必须举例来说了
ABC三台机器分别权重123 ,连接数也分别是123。那么如果使用WLC算法的话一个新请求进入时它可能会分给ABC中的任意一个。使用sed算法后会进行这样一个运算
A(1+1)/1
B(1+2)/2
C(1+3)/3
根据运算结果,把连接交给C 。

10.最少队列调度(Never Queue Scheduling NQ)(NQ)
无需队列。如果有台 realserver的连接数=0就直接分配过去,不需要在进行sed运算


LVS集群的管理工作包括:
创建虚拟服务器
添加服务器节点
查看集群节点
删除集群节点
保存负载分配策略

创建虚拟服务器 VIP 172.16.16.172   TCP 80端口的分流负载 使用rr算法

ipvsadm -A -t 172.16.16.172:80 -s rr

-A 添加虚拟服务器
-t 指定VIP地址及TCP端口
-s 指定调度算法


添加服务器节点

ipvsadm -a -t 172.16.16.172:80 -r 192.168.7.21:80 -m -w 1
ipvsadm -a -t 172.16.16.172:80 -r 192.168.7.22:80 -m -w 1
ipvsadm -a -t 172.16.16.172:80 -r 192.168.7.23:80 -m -w 1

查看集群节点
删除集群节点
保存负载分配策略


1)创建虚拟服务器 
若群集的VIP地址为172.16.16.172,针对TCP 80端口提供负载分流服务,使用的调度算法为轮询,则对应的ipvsadm命令操作如下所示。对于负载均衡调度器来说,VIP必须是本机实际已启用的IP地址。
[root@localhost ~]# ipvsadm  -A  -t  172.16.16.172:80 -s rr  
-A 表示添加虚拟服务器
-t 用来指定VIP地址及TCP端口
-s 用来指定负载调度算法——轮询(rr)、加权轮询(wrr)、最少连接(lc)、加权最少连接(wlc)。   

2)添加服务器节点  为虚拟服务器172.16.16.172添加三个服务器节点,IP地址依次为192.168.7.21、  192.168.7.22 、192.168.7.23 、192.168.7.24,对应的ipvsadm命令操作如下所示。若希望 使用保持连接,还应添加“-p 60”选项,其中60为保持时间(秒)。
[root@localhost ~]# ipvsadm -a -t 172.16.16.172:80 -r 192.168.7.21:80 -m -w 1
[root@localhost ~]# ipvsadm -a -t 172.16.16.172:80 -r 192.168.7.22:80 -m -w 1
[root@localhost ~]# ipvsadm -a -t 172.16.16.172:80 -r 192.168.7.23:80 -m -w 1
[root@localhost ~]# ipvsadm -a -t 172.16.16.172:80 -r 192.168.7.24:80 -m -w 1 
 
-a 表示添加服务器
-t 用来指定VIP地址及TCP端口
-r 用来指定RIP地址及TCP端口
-m 表示使用NAT群集模式(-g  DR模式、-I  TUN模式)
-w 用来设置权后重(权重为0时表示暂停节点)。 

3)查看群集节点状态  结合选项-L可以列表查看LVS虚拟服务器,可以指定只查看某一个VIP地址(默认为 查看所有)结合选项-n将以数字形式显示地址、端口等信息。
[root@localhost ~]# ipvsadm -L -n                   //查看节点状态 …… 
TCP  172.16.16.172:80 rr   
-> 192.168.7.21:80              Masq    1      2          7  
-> 192.168.7.22:80              Masq    1      3          9  
-> 192.168.7.23:80              Masq    1      2          8  
-> 192.168.7.24:80              Masq    1      4          6 
[root@localhost ~]# ipvsadm -Lnc                    //查看负载连接情况
IPVS connection entries  pro expire state       source             virtual            destination 
TCP 01:51  FIN_WAIT    172.16.16.110:49712 172.16.16.172:80   192.168.7.21:80
TCP 01:52  FIN_WAIT    172.16.16.110:49720 172.16.16.172:80   192.168.7.22:80  

上述输出结果中,Forward列下的Masq对应的Masquerade(地址伪装),表示采用的群集模式为NAT;如果是Route,则表示采用的群集模式为DR. 

4)删除服务器节点  需要从服务器池中删除某一个节点时,使用选项-d。执行删除操作必须指定目标对象,包括节点地址、虚拟IP地址。例如,以下操作将会删除LVS群集172.16.16.172中的节点192.168.7.24。 

[root@localhost ~]# ipvsadm -d -r 192.168.7.24:80 -t 172.16.16.172:80    需要删除整个虚拟服务器时,使用选项-D并指定虚拟IP地址即可,无需指定节点。例如若执行“ipvsadm –D –t 172.16.16.172.80”,则删除此虚拟服务器。 

5)保存负载分配策略  使用导出/导入工具ipvsadm-save/ipvsadm-restore可以保存、恢复LVS策略,操作方法 类似于iptables规则的导出、导入。通过系统服务ipvsadm也可以保存策略,例如可执行
“service ipvsadm save”;当然也可以快速清除、重建负载分配策略。 

[root@localhost ~]# ipvsadm-save  > /etc/sysconfig/ipvsadm       //保存策略
[root@localhost ~]# cat /etc/sysconfig/ipvsadm                   //确定保存结果
-A -t 172.16.16.172:http -s rr 
-a -t 172.16.16.172:http -r 192.168.7.21:http -m -w 1
-a -t 172.16.16.172:http -r 192.168.7.22:http -m -w 1
-a -t 172.16.16.172:http -r 192.168.7.23:http -m -w 1  

[root@localhost ~]# service ipvsadm stop             //停止服务(清除策略)
[root@localhost ~]# service ipvsadm start            //起动服务(重建规则)


http://www.cnblogs.com/lgfeng/archive/2012/10/16/2726308.html
http://docs.oracle.com/cd/E19253-01/819-7063/chapter4-1/

 

arp_ignore=1,系统只回答目的IP为是本地IP的包。也就是对广播包不做响应。
arp_announce=2,系统忽略IP包的源地址(source address),而根据目标主机(target host),选择本地地址。