Rootop 服务器运维与web架构

利用lvs搭建均衡负载

| 暂无评论

环境信息:
系统全部为rhel5_x64

Directory Server : 1.1.1.33
Real Server 1 : 1.1.1.11
Real Server 2 : 1.1.1.22
VIP : 1.1.1.44

Directory Server的配置:
安装ipvsadm,挂载系统镜像,安装程序。
[root@rhel Cluster]# pwd
/mnt/cdrom/Cluster
[root@rhel Cluster]# rpm -ivh ipvsadm-1.24-10.x86_64.rpm

首先在Director Server上绑定一个虚拟IP(VIP),此IP用于对外提供服务:
[root@rhel ~]# ifconfig eth0:0 1.1.1.44 broadcast 1.1.1.44 netmask 255.255.255.255 up
[root@rhel ~]# route add -host 1.1.1.44 dev eth0:0

打开ip转发:
[root@rhel ~]# echo 1 > /proc/sys/net/ipv4/ip_forward
在DR模式中,开启系统的包转发功能不是必须的,而在NAT模式下此操作是必须的。

开始配置ipvsadm:
[root@rhel ~]# ipvsadm -C
[root@rhel ~]# ipvsadm -A -t 1.1.1.44:80 -s rr -p 600
[root@rhel ~]# ipvsadm -a -t 1.1.1.44:80 -r 1.1.1.11:80 -g
[root@rhel ~]# ipvsadm -a -t 1.1.1.44:80 -r 1.1.1.22:80 -g
第一行是清除内核虚拟服务器列表中的所有记录。
第二行是添加一条新的虚拟IP记录。这个新的IP是1.1.1.44,同时指定持续服务时间为600秒。
第三、四行是在新加虚拟IP记录中添加两条新的Real Server记录,并且指定LVS 的工作模式为直接路由模式。

查看ipvsadm:
[root@rhel ~]# ipvsadm

来自51cto南非蚂蚁的脚本:

#!/bin/sh
VIP=1.1.1.44
RIP1=1.1.1.11
RIP2=1.1.1.22

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 lc -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 of Director Server"
        echo "0" >/proc/sys/net/ipv4/ip_forward
        /sbin/ipvsadm -C
        /sbin/ifconfig eth0:0 down
        ;;
    *)
        echo "Usage: $0 {start|stop}"
        exit 1
esac

Real server 的配置:
在lvs的dr和tun模式下,用户的访问请求到达真实服务器后,是直接返回给用户的,而不再经过前端的Director Server。
因此,就需要在每个Real server节点上增加虚拟的VIP地址,这样数据才能直接返回给用户。

在Real Server 1中配置vip:
[root@rhel ~]# ifconfig lo:0 1.1.1.44 broadcast 1.1.1.44 netmask 255.255.255.255 up
在Real Server 2中配置vip:
[root@rhel ~]# ifconfig lo:0 1.1.1.44 broadcast 1.1.1.44 netmask 255.255.255.255 up

由于上面的VIP地址,是Director Server和所有的Real server共享的,如果有ARP请求VIP地址时,Director Server与所有Real server都做应答的话,就出现问题了,导致会话分配给real server或directory server,致使失去directory server作用,因此,需要禁止Real server响应ARP请求。这里从51cto南非蚂蚁哪里弄了个脚本,方便多台real server部署。


#!/bin/bash
VIP=1.1.1.44
case "$1" in
start)
echo "Start lo:0 Device"
/sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up
echo "Stop Real Server With ARP Response"
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)
echo "Shutdown lo:0 Device"
/sbin/ifconfig lo:0 down
echo "Start Real Server With ARP Response"
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

在两台web机器中添加测试页面,测试即可。

调度的十种方法:
lvs调度方法总的分为两大类:
1.静态调度方法
2.动态调度方法
其中静态调度方法又分为:
(1).Round-Robin : 轮询,简称RR。轮询调度就是以轮询的方式依次将请求调度不同的服务器,即每次调度执行i = (i + 1) mod n,并选出第i台服务器。算法的优点是其简洁性,它无需记录当前所有连接的状态,所以它是一种无状态调度。轮询调度算法假设所有服务器处理性能均相同,不管服务器的当前连接数和响应速度。该算法相对简单,不适用于服务器组中处理性能不一的情况,而且当请求服务时间变化比较大时,轮询调度算法容易导致服务器间的负载不平衡。
(2).Weighted Round-Robin : 加权轮询,简称WRR。该算法可以解决服务器间性能不一的情况,它用相应的权值表示服务器的处理性能,服务器的缺省权值为1。假设服务器A的权值为1,B的权值为2,则表示服务器B的处理性能是A的两倍。加权轮询调度算法是按权值的高低和轮询方式分配请求到各服务器。权值高的服务器先收到的连接,权值高的服务器比权值低的服务器处理更多的连接,相同权值的服务器处理相同数目的连接数。
(3).Destination Hashing : 目标地址散列,简称DH。目标地址散列调度算法先根据请求的目标IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空,主要应用于缓存服务器。
(4).Source Hashing : 源地址散列,简称SH。源地址散列调度算法正好与目标地址散列调度算法相反,它根据请求的源IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。它采用的散列函数与目标地址散列调度算法的相同。
动态调度方法又分为:
(1).Least Connections : 最少链接,简称LC。该调度是把新的连接请求分配到当前连接数最小的服务器。最小连接调度是一种动态调度算法,它通过服务器当前所活跃的连接数来估计服务器的负载情况。调度器需要记录各个服务器已建立连接的数目,当一个请求被调度到某台服务器,其连接数加1;当连接中止或超时,其连接数减1。
计算当前realserver 的负载情况计算方法:active*256+inactive=overhead。
(2).Weighted Least Connections : 加权最少链接,简称WLC。加权最小连接调度是最小连接调度的超集,各个服务器用相应的权值表示其处理性能。服务器的缺省权值为1,系统管理员可以动态地设置服务器的权值。加权最小连接调度在调度新连接时尽可能使服务器的已建立连接数和其权值成比例。计算当前realserver 的负载情况计算方法:(active*256+inactive)/weight=overhead。

(3).Shortest Expected Delay Scheduling : 最短的期望的延迟,简称SED。分配一个接踵而来的请求以最短的期望的延迟方式到服务器。
计算当前realserver 的负载情况计算方法:(active+1)*256/weight=overhead。
(4). Never Queue Scheduling :最小队列调度,简称NQ。分配一个接踵而来的请求到一台空闲的服务器,此服务器不一定是最快的那台,如果所有服务器都是繁忙的,它采取最短的期望延迟分配请求。
(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 地址对应的服务器组,按”最小连接”原则从服务器组中选出一台服务器,若服务器没有超载,将请求发送到该服务器,若服务器超载;则按”最小连接”原则从这个集群中选出一台服务器,将该服务器加入到服务器组中,将请求发送到该服务器。同时,当该服务器组有一段时间没有被修改,将最忙的服务器从服务器组中删除,以降低复制的程度。

ipvsadm命令参数:

-A (--add-service) 在内核的虚拟服务器列表中添加一条新的虚拟IP记录。
也就是增加一台新的虚拟服务器。虚拟IP也就是虚拟服务器的IP地址。
-E (--edit-service) 编辑内核虚拟服务器列表中的一条虚拟服务器记录
-D (--delete-service) 删除内核虚拟服务器列表中的一条虚拟服务器记录
-C (--clear) 清除内核虚拟服务器列表中的所有记录
-R (--restore) 恢复虚拟服务器规则
-S (--save) 保存虚拟服务器规则,输出为-R 选项可读的格式
-a (--add-server) 在内核虚拟服务器列表的一条记录里添加一条新的rs记录。
也就是在一个虚拟服务器中增加一台新的Real Server
-e (--edit-server) 编辑一条虚拟服务器记录中的某条Real Server记录
-d (--delete-server) 删除一条虚拟服务器记录中的某条Real Server记录
-L|-l –list 显示内核中虚拟服务器列表
-Z (--zero) 虚拟服务器列表计数器清零(清空当前的连接数量等)
--set tcp tcpfin udp 设置连接超时值
-t 说明虚拟服务器提供的是tcp服务,此选项后面跟如下格式:
[virtual-service-address:port] or [real-server-ip:port]
-u 说明虚拟服务器提供的是udp服务,此选项后面跟如下格式:
[virtual-service-address:port] or [real-server-ip:port]
-f  fwmark 说明是经过iptables标记过的服务类型
-s   此选项后面跟LVS使用的调度算法
有这样几个选项: rr|wrr|lc|wlc|lblc|lblcr|dh|sh
默认的调度算法是: wlc
-p  [timeout] 在某个Real Server上持续的服务时间。也就是说来自同一个
用户的多次请求。将被同一个Real Server处理。
此参数一般用于有动态请求的操作中,timeout 的默认值为300 秒。
例如:-p 600,表示持续服务时间为600秒。
-r 指定Real Server的IP地址,此选项后面跟如下格式:
 [real-server-ip:port]
-g (--gatewaying) 指定LVS 的工作模式为直接路由模式(默认)
-i (-ipip) 指定LVS 的工作模式为隧道模式
-m (--masquerading) 指定LVS 的工作模式为NAT模式
-w (--weight) weight 指定Real Server的权值
-c (--connection) 显示LVS目前的连接信息 如:ipvsadm -L -c
-L --timeout 显示“tcp tcpfin udp”的timeout值,如:ipvsadm -L --timeout
-L --daemon 显示同步守护进程状态,例如:ipvsadm -L –daemon
-L  --stats 显示统计信息,例如:ipvsadm -L –stats
-L  --rate 显示速率信息,例如:ipvsadm -L  --rate
-L  --sort 对虚拟服务器和真实服务器排序输出,例如:ipvsadm -L --sort

注释:
linux命令选项中,有长格式和短格式,短格式的选项用的比较多
实际应用中可以用括弧中的长格式替代短格式,
例如,可以用“ipvsadm --clear”代替“ipvsadm -C”。

关于理论及其它的一些参数资料参考:http://ixdba.blog.51cto.com/2895551/554029

原创文章,转载请注明。本文链接地址: https://www.rootop.org/pages/2078.html

作者:Venus

专注于 服务器运维与web架构 E-mail:venus#rootop.org

发表评论