linux cluster—-lvs

一. Linux Cluster:

    

     Cluster:计算机集合,为解决某个特定问题组合起来形成的单个系统;


     Linux Cluster类型:

         LB:Load Balancing,负载均衡;

         HA:High Availiablity,高可用;

             A=MTBF无故障运行时长/(MTBF无故障运行时长+MTTR故障时间)

             衡量指数: (0,1):90%, 95%, 99%, 99.5%,  99.9%, 99.99%, 99.999%

     HP:High Performance,高性能;

    

     系统扩展方式:

     Scale UP:向上扩展

     Scale Out:向外扩展

    

    

二. LB  Cluster:

     LB Cluster的实现:

     硬件:

         F5 Big-IP

         Citrix Netscaler

         A10 A10

     软件:

         lvs:Linux Virtual Server

         nginx

         haproxy

         ats:apache traffic server (流量调度器)

         perlbal

         pound

    

     基于工作的协议层次划分:

         传输层(通用解决方案):(DPORT)

             lvs:未涉及套接字,仅在内核中直接转发报文

             nginx:(stream)利用隧道机制,监听在指定端口,并分发流量,最多也仅支持65534个监听套接字

             haproxy:(mode tcp)

    

         应用层(专用解决方案):(自定义的请求模型分类)

             proxy sferver:

             http:nginx, httpd, haproxy(mode http), …

             fastcgi:nginx, httpd, …

             mysql:mysql-proxy, …

             ..

    站点指标:

             PV:Page View

             UV:Unique Vistor

             IP:独立IP访问量

        

    会话保持:

             (1) session sticky

             Source IP

             Cookie

             (2) session replication;

             session cluster

             (3) session server

            注意: 集群中,全部主机的时间必须一致! 否则会出错,因此建议使用同一的时间服务器

            vim /etc/chrony.conf:

            在开头部分的server pool 中,注释其他时间服务器,添加指定的时间服务器:

            server 10.1.0.1 iburst

            保存后,重启chronyd.service


    三. lvs 简介

       1.

             lvs:Linux Virtual Server

             VS: Virtual Server

             RS: Real Server

             工作机制–l4:四层路由器,四层交换机;

             VS:根据请求报文的目标IP和目标协议及端口将其调度转发至某RealServer,

            根据调度算法来挑选RS;

            

            lvs机制类比:

             iptables/netfilter:

             iptables:用户空间的管理工具;

             netfilter:内核空间上的框架;

             流入:PREROUTING –> INPUT

             流出:OUTPUT –> POSTROUTING

             转发:PREROUTING –> FORWARD –> POSTROUTING

            

             DNAT:目标地址转换; PREROUTING;

        

        

       2. lvs: ipvsadm/ipvs

             ipvsadm:用户空间的命令行工具,规则管理器,用于管理集群服务及RealServer;

             ipvs:工作于内核空间的netfilter的INPUT钩子之上的框架;

            

      3. lvs集群类型中的术语:

                 vs:Virtual Server, Director, Dispatcher, Balancer

                 rs:Real Server, upstream server, backend server

            

                 CIP:Client IP,    VIP: Virtual serve IP,   RIP: Real server IP,    DIP: Director IP

            

      4.   数据报文流向:

             CIP <–> VIP == DIP <–> RIP

        


    四. lvs 集群类型详解

         1. lvs集群的类型:

             lvs-nat:修改请求报文的目标IP

             lvs-dr:操纵封装新的MAC地址;

             lvs-tun:在原请求IP报文之外新加一个IP首部;

             lvs-fullnat:修改请求报文的源和目标IP;

        

         2. lvs-nat:

             多目标IP的DNAT,通过将请求报文中的目标地址和目标端口修改为某挑出的RS的

            RIP和PORT实现转发;

             拓扑示意图:

        

                wKiom1gUldzBzQfgAACOMenRsyE766.png-wh_50

            (1)RIP和DIP必须在同一个IP网络,且应该使用私网地址;RS的网关要指向DIP;

             (2)请求报文和响应报文都必须经由Director转发;Director易于成为系统瓶颈;

             (3)支持端口映射,可修改请求报文的目标PORT;

             (4)vs必须是Linux系统,rs可以是任意系统;

        

         3. lvs-dr:

          Direct Routing,直接路由;

           

             通过为请求报文重新封装一个MAC首部进行转发,源MAC是DIP所在的接口的

            MAC,目标MAC是某挑选出的RS的RIP所在接口的MAC地址;

            源IP/PORT,以及目标IP/PORT均保持不变;

            (此时,RS物理网卡地址为RIP, lo 网卡地址设置为VIP)

            

                wKioL1gUld2zOrlxAAChSAtj1yE272.png-wh_50

                

                vip与dip/rip不在同一网段的实现拓扑:

                         

wKioL1gUld7C4POLAACsKH23U_8353.png-wh_50


           

          数据报文流向:

            client –>router–>sw–>DIrector–>RS—>sw–>router–>client

            


           Director和各RS都得配置使用VIP

             (1) 确保前端路由器将目标IP为VIP的请求报文发往Director:


                实现方法:

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

                 (b) 在RS上使用arptables;

                 (c) 在RS上修改内核参数以限制arp通告及应答级别;

                 arp_announce

                 arp_ignore

             (2) RS的RIP可以使用私网地址,也可以是公网地址;RIP与DIP在同一IP网络;

                RIP的网关不能指向DIP,以确保响应报文不会经由Director;

             (3) RS跟Director要在同一个物理网络;

             (4) 请求报文要经由Director,但响应不能经由Director,而是由RS直接发往

                Client;

                RS的响应报文,可以用原路由返回client,也可以从其他网关返回至client

                (注意: 路由转发报文时候,只关注目标IP,忽略源IP,因此RIP,VIP均不影响

                响应报文发送)

             (5) 不支持端口映射;

        

         4.lvs-tun:

             转发方式:不修改请求报文的IP首部(源IP为CIP,目标IP为VIP),而在原IP报

            文之外再封装一个IP首部(源IP是DIP,目标IP是RIP),将报文发往挑选出的目标RS;

            

             (1) DIP, VIP, RIP都应该是公网地址;

             (2) RS的网关不能,也不可能指向DIP;

             (3) 请求报文要经由Director,但响应不能经由Director;

             (4) 不支持端口映射;

             (5) RS的OS得支持隧道功能;

            

               wKiom1gUld3iEW86AABqjpDRAuU212.png-wh_50

           5.lvs-fullnat:

             通过同时修改请求报文的源IP地址和目标IP地址进行转发;

             CIP –> DIP

             VIP –> RIP

            

             (1) VIP是公网地址,RIP和DIP是私网地址,且通常不在同一IP网络;

                因此,RIP的网关一般不会指向DIP;

             (2) RS收到的请求报文源地址是DIP,因此,只需响应给DIP;

                但Director还要将其发往Client;

             (3) 请求和响应报文都经由Director;

             (4) 支持端口映射;

            

             注意:此类型默认不支持;

        ————————————————————————————————-

    回顾:

     lvs类型:

     lvs-nat:通过修改请求报文的目标IP地址完成调度并转发;请求和响应报文都经由Director;

     lvs-dr:通过直接封装新的MAC首部完成调度并转发;仅请求报文经由Director;

     lvs-tun:通过在原IP报文首部之外新封装一个IP首部完成调度并转发;仅请求报文经由Director;

     lvs-fullnat:通过修改请求报文的目标IP地址和源IP地址完成调度并转发;请求和响应报文都经由Director;

    

     会话保持:

     session sticky, session replication, session server;

    

     lvs:

     ipvsadm/ipvs

     ————————————————————————————————

   


五.调度算法:

     ipvs scheduler:

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

    

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

         RR:roundrobin,轮询;

         WRR:Weighted RR,加权轮询;

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

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

    

     动态方法:主要根据每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

     ipvsadm/ipvs:

     1. ipvs:内核集成的报文处理模块

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

        

         支持的协议:TCP, UDP, AH, ESP, AH_ESP, SCTP;

        

         ipvs集群:

         集群服务

         服务上的RS

    

     2. ipvsadm命令:

         ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]] [-M netmask] [–pe persistence_engine] [-b sched-flags]

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

         ipvsadm -C

         ipvsadm -R

         ipvsadm -S [-n]

         ipvsadm -a|e -t|u|f service-address -r server-address [options]

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

         ipvsadm -L|l [options]

         ipvsadm -Z [-t|u|f service-address]


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

         增、改:

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

        

         删:

         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,是一个数字;

        

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

    

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

         增、改:

         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:

         rip[:port]

            

         选项:

             lvs类型:

             -g: gateway, dr类型

             -i: ipip, tun类型

             -m: masquerade, nat类型

            

             -w weight:权重;

        

     清空定义的所有内容:

          ipvsadm -C

    

     查看:

         ipvsadm -L|l [options]

         –numeric, -n:numeric output of addresses and ports

         –exact:expand numbers (display exact values)

        

         –connection, -c:output of current IPVS connections

         –stats:output of statistics information

         –rate :output of rate information

        

     保存和重载:

         ipvsadm -S = ipvsadm-save

         ipvsadm -R = ipvsadm-restore

        

         保存:建议保存至/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



七. lvs –nat  模型实例

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

         (1) 是否需要会话保持;

         (2) 是否需要共享存储;

         共享存储:NAS, SAN, DS(分布式存储)

         数据同步:

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

    

     2. lvs-nat:

    

         设计要点:

         (1) RIP与DIP在同一IP网络, RIP的网关要指向DIP;

         (2) 支持端口映射;

       

    

八. lvs-dr 模式实例

     lvs-dr:

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

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

     (2) 在各RS使用arptables;

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

         限制响应级别:arp_ignore

             0:默认值,表示可使用本地任意接口上配置的任意地址进行响应;

             1: 仅在请求的目标IP配置在本地主机的接收到请求报文接口上时,

                才给予响应;

         限制通告级别:arp_announce

             0:默认值,把本机上的所有接口的所有信息向每个接口上的网络进

                行通告;

             1:尽量避免向非直接连接网络进行通告;

             2:必须避免向非本网络通告;

    

    

     2.  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

        

     3.  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


    

九.FWM:FireWall Mark

     1. fwm: 借助于防火墙标记来分类报文,而后基于标记定义集群服务;可将多个不同的应用使

        用同一个集群服务进行调度;

    

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

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

        –set-mark NUMBER

    

     3. 基于标记定义集群服务:

         # ipvsadm -A -f NUMBER [options]

    

    

十. lvs persistence

    lvs persistence:持久连接  (用于session 绑定)

    

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

    发往同一个RS;

    

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

    

     5. port Affinity:

         每端口持久:每集群服务单独定义,并定义其持久性;

         每防火墙标记持久:基于防火墙标记定义持久的集群服务;可实现将多个端口上的应用

        统一调度,即所谓的port Affinity;

         每客户端持久:基于0端口定义集群服务,即将客户端对所有应用的请求统统调度至后

        端主机,而且可使用持久连接进行绑定;

    

    考虑:

     (1) Director不可用,整个系统将不可用;SPoF

     解决方案:高可用

     keepalived

     heartbeat/corosync

     (2) 某RS不可用时,Director依然会调度请求至此RS;

     解决方案:对各RS的健康状态做检查,失败时禁用,成功时启用;

     keepalived

     heartbeat/corosync, ldirectord

     检测方式:

     (a) 网络层检测;

     (b) 传输层检测,端口探测;

     (c) 应用层检测,请求某关键资源;

    

     ok –> failure

     failure –> ok

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

(0)
上一篇 2016-10-29 20:33
下一篇 2016-10-29 21:03

相关推荐

  • 7.22_Linux入门和帮助文件的使用

    Linux系统登录的两种方式 GUI:图形界面 Graphic User Interface 默认在Linux下面有三种可用的图形界面程序可选,分别为 1.gnome(c,图形库gtk) 2.kde(c++,图形库qt) 3.xface(轻量级桌面) 每一种图形界面下面开发的软件并不兼容,因为它们开发时候所用的开发语言也各不相同 启动方式:cli模…

    Linux干货 2016-08-04
  • Linux 磁盘、文件系统管理

    Linux 磁盘、文件系统管理                                               &nb…

    Linux干货 2016-09-01
  • Linux中正则表达式及find指令的使用

    1、显示当前系统上root、Fedora或user1用户的默认shell [root@centos6 ~]# grep -E "^\<(root|fedora|user1)\>" /etc/passwd root:x:0:0:root:/root:/bin/bash fedor…

    Linux干货 2016-10-24
  • Storm集群安装详解

    storm有两种操作模式: 本地模式和远程模式。 本地模式:你可以在你的本地机器上开发测试你的topology, 一切都在你的本地机器上模拟出来;  远端模式:你提交的topology会在一个集群的机器上执行。 本文以Twitter Storm官方Wiki为基础,详细描述如何快速搭建一个Storm集群,其中,项目实践中遇到的问题及经验总结,在相应章…

    Linux干货 2015-04-04
  • vim编辑器

    一、vim编辑器简介     文本:ASCII,Unicode     文本编辑种类:     行编辑器:sed     全屏编辑器:nano,vi     v…

    Linux干货 2016-08-10
  • 0809linux基础小记(sed和vim用法)

    sed  [options] ‘scripts’ inputfile -n: 不输出模式空间内容的自动打印 -e: 多点编辑 -f:从指定文件中读取编辑脚本 -i:原处编辑 scripts: ’地址命令’ 地址定界: (1)  不给地址:对全文进行处理 (2)  单地址: #:  指定的行 例: sed '2…

    Linux干货 2016-08-11

评论列表(1条)

  • 马哥教育
    马哥教育 2016-10-30 20:43

    尽量用自己的话语总结出来老师的笔记,为不是对简单粘贴笔记。