LB Cluster 负载均衡集群 —-lvs 配置详解

lvs :

ipvs scheduler:

根据其调度时是否考虑各RS当前的负载状态,可分为静态方法和动态方法两种:

1、静态方法:仅根据算法本身进行调度;

  • RR:roundrobin,轮询;

  • WRR:Weighted RR,加权轮询;

  • SH:Source Hashing,实现session sticy,源IP地址hash;将来自于同一个IP地址的请求始终发往第一次挑中的RS,从而实现会话绑定;

  • DH:Destination Hashing;目标地址哈希,将发往同一个目标地址的请求始终转发至第一次挑中的RS;

2、动态方法:主要根据每RS当前的负载状态及调度算法进行调度;

Overhead=

LC:least connections
    Overhead=activeconns*256+inactiveconns
WLC:Weighted LC
    Overhead=(activeconns*256+inactiveconns)/weight
SED:Shortest Expection Delay
    Overhead=(activeconns+1)*256/weight
NQ:Never Queue

LBLC:Locality-Based LC,动态的DH算法;
LBLCR:LBLC with Replication,带复制功能的LBLC;

ipvsadm/ipvs:

ipvs:
查看系统是不是已经编译了ipvs

~]# grep -i -C 10 "ipvs" /boot/config-3.10.0-327.el7.x86_64

支持的协议工作在传输层:TCP, UDP, AH, ESP, AH_ESP, SCTP;

定义ipvs集群:

  • 定义集群服务

       定义哪一类请求(协议)是属于负载均衡集群,要根据协议的目标IP和端口,
       来判定集群类型!
  • 添加服务上的RS

ipvsadm命令:

1.管理集群服务:增、改、删;

  • 增A、改E:

ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]]
  • 删:-D

ipvsadm -D -t|u|f service-address

service-address:定义的集群服务本身的地址。
    -t|u|f:
        -t: TCP协议的端口,VIP:TCP_PORT
        -u: TCP协议的端口,VIP:UDP_PORT
        -f:firewall MARK,定义在PREROUTING,是一个数字,用来打标记;以便于定义多个端口的服务为一个集群!

[-s scheduler]:指定集群的调度算法,默认为wlc;

2.管理集群上的RS:增、改、删;

  • 增a、改e:

ipvsadm -a|e -t|u|f service-address -r server-address [-g|i|m] [-w weight]
  • 删:

ipvsadm -d -t|u|f service-address -r server-address

server-address:
    Rserver rip[:port]

选项:
    lvs类型:
        -g: gateway, dr类型
        -i: ipip, tun类型
        -m: masquerade, nat类型

    -w weight:权重;

3.清空定义的所有内容:

ipvsadm -C

这就能清空所有的集群服务!

4.查看:

ipvsadm -L|l [options]
     --numeric, -n:显示端口不要去解析
     --exact:显示精确值,不要做单位换算

     --connection, -c:显示每一个主机上当前连接的数量
     --stats:统计数据
     --rate :output of rate information

5.保存和重载:

ipvsadm -S == ipvsadm-save

ipvsadm -R == ipvsadm-restore

实例1.lvs-net模式实验

1.实验前提
(1)调度器:centos6.8,双网卡 eth0 10.1.6.68;eth1为vmnet1模式 192.168.0.1;安装ipvsadm打开核心转发功能
~]# echo 1 > /proc/sys/net/ipv4/ip_forward
ifconfig eth1 192.168.22.1/24 up
(2)RealServer:均为centos7.2安装好相应的服务网卡为vmnet1模式ip 192.168.22.11 ip 192.168.22.22
添加默认路由
route add default gw 192.168.22.1

2、测试

RealServer开通web服务并添加测试页面
LB Cluster 负载均衡集群 ----lvs 配置详解
用10.1.6.68主机测试发现正常

3.添加集群服务
LB Cluster 负载均衡集群 ----lvs 配置详解

4.测试
LB Cluster 负载均衡集群 ----lvs 配置详解

5.换个算法再测试一下
LB Cluster 负载均衡集群 ----lvs 配置详解

LB Cluster 负载均衡集群 ----lvs 配置详解

负载均衡集群的设计要点:

(1) 是否需要会话保持;
(2) 是否需要共享存储;
    共享存储:NAS, SAN, DS(分布式存储)
    数据同步:

        课外作业:rsync+inotify实现数据同步

lvs-nat:

设计要点:
    (1) RIP与DIP在同一IP网络, RIP的网关要指向DIP;
    (2) 支持端口映射;

实践作业(博客):负载均衡一个php应用;
    测试:(1) 是否需要会话保持;(2) 是否需要共享存储;

lvs-dr:

LB Cluster 负载均衡集群 ----lvs 配置详解
这种模型就是负载均衡器接收到报文时在报文的首部添加一层MAC地址,再通过交换机(这里只能是交换机)转发到后端主机,后端主机接收到报文拆解后发现目标地址是lo上的地址就经lo进入input链进行响应,响应的结果就又从lo接口出去,这样就保证了源ip为请求ip,发送到路由器到客户端。这里可以不经过交换机。

dr模型中,各主机上均需要配置VIP,解决地址冲突的方式有三种:

  • (1) 在前端网关做静态绑定;

  • (2) 在各RS使用arptables;

  • (3) 在各RS修改内核参数,来限制arp响应和通告的级别;
    限制响应级别:arp_ignore

      0:默认值,表示可使用本地任意接口上配置的任意地址进行响应;
      1: 仅在请求的目标IP配置在本地主机的接收到请求报文接口上时,才给予响应;

    限制通告级别:arp_announce

      0:默认值,把本机上的所有接口的所有信息向每个接口上的网络进行通告;
      1:尽量避免向非直接连接网络进行通告;
      2:必须避免向非本网络通告;

RS的预配置脚本:个Rs均适用

#!/bin/bash
#
vip=10.1.0.5
mask='255.255.255.255'

case $1 in
start)
    echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
    echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
    echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
    echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce

    ifconfig lo:0 $vip netmask $mask broadcast $vip up
    route add -host $vip dev lo:0
    ;;
stop)
    ifconfig lo:0 down

    echo 0 > /proc/sys/net/ipv4/conf/all/arp_ignore
    echo 0 > /proc/sys/net/ipv4/conf/lo/arp_ignore
    echo 0 > /proc/sys/net/ipv4/conf/all/arp_announce
    echo 0 > /proc/sys/net/ipv4/conf/lo/arp_announce

    ;;
    *) 
    echo "Usage $(basename $0) start|stop"
    exit 1
    ;;
esac

测试web

  • V server配置

LB Cluster 负载均衡集群 ----lvs 配置详解

  • 客户端测试
    LB Cluster 负载均衡集群 ----lvs 配置详解

测试mysql
LB Cluster 负载均衡集群 ----lvs 配置详解

LB Cluster 负载均衡集群 ----lvs 配置详解

LB Cluster 负载均衡集群 ----lvs 配置详解

LB Cluster 负载均衡集群 ----lvs 配置详解
VS的配置脚本:

#!/bin/bash
#
vip='10.1.0.5'
iface='eno16777736:0'
mask='255.255.255.255'
port='80'
rs1='10.1.0.7'
rs2='10.1.0.8'
scheduler='wrr'
type='-g'

case $1 in
start)
ifconfig $iface $vip netmask $mask broadcast $vip up
    iptables -F

    ipvsadm -A -t ${vip}:${port} -s $scheduler
    ipvsadm -a -t ${vip}:${port} -r ${rs1} $type -w 1
    ipvsadm -a -t ${vip}:${port} -r ${rs2} $type -w 1
    ;;
stop)
    ipvsadm -C
    ifconfig $iface down
    ;;
*)
    echo "Usage $(basename $0) start|stop"
    exit 1
    ;;
esac    


课外扩展作业:vip与dip/rip不在同一网段的实验环境设计及配置实现; 

博客作业:lvs的详细应用
    讲清楚类型、调度方法;并且给出nat和dr类型的设计拓扑及具体实现;

FWM:FireWall Mark

借助于防火墙标记来分类报文,而后基于标记定义集群服务;可将多个不同的应用使用同一个集群服务进行调度;

打标记方法(在Director主机):

    # iptables -t mangle -A PREROUTING -d $vip -p $proto --dport $port -j MARK --set-mark NUMBER 

基于标记定义集群服务:
    # ipvsadm -A -f NUMBER [options]

环境为之前环境
LB Cluster 负载均衡集群 ----lvs 配置详解
不过这样两个集群是分离的

定义为同一个集群,利用iptables
LB Cluster 负载均衡集群 ----lvs 配置详解

LB Cluster 负载均衡集群 ----lvs 配置详解

我们一般建议http和https两个集群绑定在一块

lvs persistence:持久连接

持久连接模板:实现无论使用任何算法,在一段时间内,实现将来自同一个地址的请求始终发往同一个RS;

ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]]

port Affinity:
每端口持久:每集群服务单独定义,并定义其持久性;
每防火墙标记持久:基于防火墙标记定义持久的集群服务;可实现将多个端口上的应用统一调度,即所谓的port Affinity;
每客户端持久:基于0端口定义集群服务,即将客户端对所有应用的请求统统调度至后端主机,而且可使用持久连接进行绑定;这种0端口只能适用于持久连接 -p。

保存及重载规则:

因为在此服务在centos中有系统启动脚本用rpm -ql 就能看到 /usr/lib/systemd/system/ipvsadm.service
,要是启动不了可能是没有/etc/sysconfig/ipvsadm文件 touch一下就好了
保存:建议保存至/etc/sysconfig/ipvsadm

    ipvsadm-save > /PATH/TO/IPVSADM_FILE
    ipvsadm -S > /PATH/TO/IPVSADM_FILE
    systemctl stop ipvsadm.service 

重载:    
    ipvsadm-restore < /PATH/FROM/IPVSADM_FILE
    ipvsadm -R < /PATH/FROM/IPVSADM_FILE
    systemctl restart ipvsadm.service

考虑:

    (1) Director不可用,整个系统将不可用;SPoF
        解决方案:高可用 
            keepalived :在用到ipvs时用这个
            heartbeat/corosync
    (2) 某RS不可用时,Director依然会调度请求至此RS;
        解决方案:对各RS的健康状态做检查,失败时禁用,成功时启用;
            keepalived
            heartbeat/corosync, ldirectord

        检测方式:
            (a) 网络层检测;意味着ping通
            (b) 传输层检测,端口探测;扫描端口。
            (c) 应用层检测,请求某关键资源;

            ok --> failure
            failure --> ok

原创文章,作者:qzx,如若转载,请注明出处:http://www.178linux.com/56332

(0)
qzxqzx
上一篇 2016-10-30
下一篇 2016-10-30

相关推荐

  • Linux系统之用户和组

    Linux系统之用户和组 1、什么是用户 用户:资源获取标识符,资源分配,安全权限模型的核心要素之一 2、没有用户,操作系统可否正常执行? 答案是肯定的 在Linux系统上,用户管理是基于用户名和密码的方式进行资源的分配, Username/UID分为以下类别:     管理员:root, 0  &…

    Linux干货 2016-08-04
  • 用户和组的配置文件

    一.linux上的用户和组   linux上的用户:       linux上的用户即Username/UID分为以下类别:         管理员:root,0    …

    Linux干货 2016-10-23
  • sed,vim练习

    1 、删除/etc/grub2.cfg 文件中所有以空白开头的行行首的 空白字符 [root@localhost ~]# sed -r 's@^[[:space:]]+@@' /etc/grub2.cfg 2 、删除/etc/fstab 文件中所有以#开头,后面至少跟一个空白字符的行的行首…

    Linux干货 2016-08-10
  • gitlib环境部署

         GitLab是利用 Ruby on Rails一个开源的版本管理系统,实现一个自托管的Git项目仓库,可通过Web界面进行访问公开的或者私人项目。它拥有与Github类似的功能,能够浏览源代码,管理缺陷和注释。可以管理团队对仓库的访问,它非常易于浏览提交过的版本并提供一个文件历史库。它还提供一个代码片段收集功能可以轻松…

    2016-05-19
  • Apache通过mod_proxy模块连接Tomcat并使用Memcached+MSM做Tomcat会话保持

    一 实验目的 本实验使用Apache的mod_proxy模块连接Tomcat, Nginx在前端做负载均衡,并使用Memcahced+MSM的方式保持Tomcat的会话,实现会话共享。 二 实验拓扑 说明:为测试方便,Memcached与Tomcat安装在同一机器中,正式环境应该安装在不同机器中。 三 实验环境 主机 IP 安装组件 node1 192.16…

    Linux干货 2017-01-17
  • LAMP 通过使用脚本的方式安装并部署Discuz

    该脚本有很多辅助的部分,主要是为了让脚本在中途运行失败可以多次运行,所产生的结果是预期的,与第一运行并成功的结果是一样的。初次摄入bash脚本有很多不足,敬请指正。 所需要的软件 apr-1.5.2.tar.bz2 apr-util-1.5.4.tar.bz2 Discuz_X3.2_SC_UTF8.zip freetype-2.5.4.tar.gz htt…

    Linux干货 2016-04-05