lvs

Lvs

一、lvs集群的类型:4类工作模式

1.1、lvs-nat

lvs

特点:通过将请求报文中的目标地址和目标端口修改为挑选出的某RSRIPPORT实现转发。

客户端访问lvs集群服务,此时报文的源地址为cip,目标地址为vip,通过lvs进行dnat转发后端服务器主机,此时,报文的源地址为cip,目标地址为rip;后端主机响应时,报文源地址为rip,目标地址为cip,后端的各个真实主机,必须把网关指向lvs集群服务的dip;这样,才能保证响应给lvs集群服务主机;响应报文到达lvs集群服务进行地址转换,此时,源地址为vip,目标地址为cip,最终,响应给客户端;其实,还支持端口映射,即可修改端口进行端口转换;

lvs工作类型,由于使用nat,链接跟踪机制不可避免的启用;所以,并发数量是受限的;

注意:

1RIPDIP必须在同一IP网络,且应该使用私有地址;RS的网关必须指向DIP

2)请求报文和响应报文都经由Director转发,高负载下,vs易于成为系统性能瓶颈;

3)支持端口映射;后端真实主机尽量为同一端口;

4VS必须是LinuxRS可以是任意OS(操作系统);

 

1.1.1、设计要点:

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

                   (2) 支持端口映射;

1.1.2、实验环境:

RS11.1.1.2             RS2:1.1.1.3              DIP1.1.1.1

                   VIP10.1.72.20

——————-VS服务器———————————

[root@centos6 ~]# ipvsadm -A -t 10.1.72.20:80 -s rr

[root@centos6 ~]# ipvsadm -a -t 10.1.72.20:80 -r 1.1.1.2 -m

[root@centos6 ~]# ipvsadm -a -t 10.1.72.20:80 -r 1.1.1.3 -m

[root@centos6 ~]# echo 1 > /proc/sys/net/ipv4/ip_forward

[root@centos6 ~]# cat /proc/sys/net/ipv4/ip_forward

1

[root@centos6 ~]# ipvsadm -ln

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags

  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn

TCP  10.1.72.20:80 rr

  -> 1.1.1.2:80                   Masq    1      0          1        

  -> 1.1.1.3:80                   Masq    1      0          2

[root@centos6 ~]# ntpdate 10.1.0.1                //最好要同步时间

27 Oct 12:07:09 ntpdate[4088]: step time server 10.1.0.1 offset 41536.506821 sec

——————————-RS———————————

lvs

lvs

=====================使用sh调度算法==================

[root@centos6 ~]# ipvsadm -E -t 10.1.72.20:80 -s sh

[root@centos6 ~]# ipvsadm -e -t 10.1.72.20:80 -r 1.1.1.2 -m

[root@centos6 ~]# ipvsadm -e -t 10.1.72.20:80 -r 1.1.1.3 -m

[root@centos6 ~]# !curl

curl 10.1.72.20/index.html

this 1.1.1.3

[root@centos6 ~]# curl 10.1.72.20/index.html

this 1.1.1.3

[root@centos6 ~]# curl 10.1.72.20/index.html

this 1.1.1.3

 

===================使用wrr调度算法=====================

[root@centos6 ~]# ipvsadm -E -t 10.1.72.20:80 -s wrr

[root@centos6 ~]# ipvsadm -e -t 10.1.72.20:80 -r 1.1.1.2 -m -w 3

[root@centos6 ~]# ipvsadm -e -t 10.1.72.20:80 -r 1.1.1.3 -m -w 1

[root@centos6 ~]# curl 10.1.72.20/index.html

this is 1.1.1.2

[root@centos6 ~]# curl 10.1.72.20/index.html

this 1.1.1.3

[root@centos6 ~]# curl 10.1.72.20/index.html

this is 1.1.1.2

[root@centos6 ~]# curl 10.1.72.20/index.html

this is 1.1.1.2

[root@centos6 ~]# curl 10.1.72.20/index.html

this is 1.1.1.2

[root@centos6 ~]# curl 10.1.72.20/index.html

this 1.1.1.3

[root@centos6 ~]# curl 10.1.72.20/index.html

this is 1.1.1.2

[root@centos6 ~]# curl 10.1.72.20/index.html

this is 1.1.1.2

[root@centos6 ~]# curl 10.1.72.20/index.html

this is 1.1.1.2

[root@centos6 ~]# curl 10.1.72.20/index.html

this 1.1.1.3

 

1.1.3、利用防火墙标记配置lvs

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

[root@centos6 ~]# iptables -t mangle -A PREROUTING -d 1.1.1.1 -p tcp –dport 80 -j MARK –set-mark 1

[root@centos6 ~]# ipvsadm -A -f 1 -s rr

[root@centos6 ~]# ipvsadm -a -f 1 -r 1.1.1.2 -m

[root@centos6 ~]# ipvsadm -a -f 1 -r 1.1.1.3 -m

lvs

1.2、lvs-dr

lvs

通过修改请求报文的MAC地址,重新封装一个MAC首部进行转发;源MACDIP所在接口的MAC地址,目标MAC是挑选出的某RSRIP所在接口的MAC地址;IP首部不会发生变化(依然是CIP<–>VIP

lvs服务主机与后端服务器主机接在同一交换机上,且每个后端主机都配有vip,为了避免地址冲突,把各后端主机配置的vip进行隔离;隔离的方法有3种:

方法一:可使用arptables命令,专门控制进行arp广播隔离;

方法二:在RS上修改内核参数以限制arp通告及应答级别;

                            arp_announce

                            arp_ignore

方法三:在前端lvs服务器上游的路由器上绑定lvsMAC地址与lvsvip地址;此方法,较为不便,一般路由器有运营商负责,且lvs服务器主机会有两个,所以绑定MAC后,当一台坏了时,另一台则不能通过路由器与外界通信;

特点:

1)确保前端路由器将目标IPVIP的请求报文转发往调度服务器;

2RSRIP可以使用私有地址,也可以使用公网地址;

3RSDirector必须在同一物理网络(基于MAC地址转发);RS的网关必须不能指向DIP

4)请求报文必须由Directory调度,但响应报文必须不能经由Director

5)不支持端口映射;

 

1.2.1、注意事项:

         dr模型中,各主机上均需要配置VIP,解决地址冲突,方法:

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

                   限制响应级别:arp_ignore

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

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

                   限制通告级别:arp_announce

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

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

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

设计要点:

1)各主机一个接口即可,但需要在同一物理网络中;

2RIP的网关不能指向DIPRIPDIP通常应在同一网络,但此二者未必会与VIP在同一网络;

3)各RS需要先设置内核参数,再设置VIP和路由

1.2.2、实验环境

VSVIP 10.1.72.21              DIP10.1.72.20

RS1VIP 10.1.72.21            RIP1 10.1.72.70

RS2VIP 10.1.72.21           RIP2 10.1.72.10

—————————–RS1—————————–

[root@localhost ~]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce

[root@localhost ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce

[root@localhost ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore

[root@localhost ~]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore

[root@localhost ~]# ifconfig lo:0 10.1.72.21 netmask 255.255.255.255 broadcast 10.1.72.21 up

[root@centos6 ~]# route add -host 10.1.72.21 dev lo

[root@localhost ~]# route -n

Kernel IP routing table

Destination     Gateway         Genmask         Flags Metric Ref    Use Iface

10.1.72.21      0.0.0.0         255.255.255.255 UH    0      0        0 lo

10.1.0.0        0.0.0.0         255.255.0.0     U     0      0        0 eth0

169.254.0.0     0.0.0.0         255.255.0.0     U     1002   0        0 eth0

0.0.0.0         10.1.0.1        0.0.0.0         UG    0      0        0 eth0

—————————RS2——————————

[root@centos6 ~]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce

[root@centos6 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce

[root@centos6 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore

[root@centos6 ~]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore

[root@centos6 ~]# ip addr add 10.1.72.21/32 broadcast 10.1.72.21 dev lo:0

[root@centos6 ~]# route add -host 10.1.72.21 dev lo

———————–VS——————————-

[root@centos6 ~]#ip addr add 10.1.72.21/32 broadcast 10.1.72.21 dev eth0

(地址16位掩码仍然可以成功) [root@centos6 ~]# ip addr add 10.1.72.21/16 dev eth0

[root@centos6 ~]# ipvsadm -A -t 10.1.72.21:80 -s rr

[root@centos6 ~]# ipvsadm -a -t 10.1.72.21:80 -r 10.1.72.10 -g

[root@centos6 ~]# ipvsadm -a -t 10.1.72.21:80 -r 10.1.72.70 –g

lvs

1.3、lvs-tun

lvs

转发方式:

不修改请求报文的IP首部(源IPCIP,目标IPVIP),而是源IP首部之外再封装一个IP首部(源IPDIP,目标IP为挑选出的RSRIP);

请求报文源IPcip,目标IPvip,到到达lvs服务进入INPUT链上,在整个ip报文外又加了一层ip首部,即IP报文传输IP报文所以叫IP隧道,此时外层源IPdip,目标IP为某一个被挑选出来远端的rip,远端的服务主机收到报文经过不断拆包后,将响应报文发给客户端,构建响应报文的源IPcip,目标IPcip

特点:

1RIPDIPVIP全得是公网地址;

2RS网关不能指向也不可能指向DIP

3)请求报文经由Director转发,但响应报文将直接发往CIP

4)不支持端口映射;

5RSOS必须支持隧道功能;

二、调度方法

2.1、静态调度方法

         2.1.1RR:轮询,只考虑起点不考虑终点,一个一个交替向后发送

2.1.2WRR:加权轮询,根据后端服务器性能,设置权重值,也就是可响应性能好的服务器,被选中的次数多;

2.1.3SH:根据客户端请求的源地址调度,调度服务器中会有一个缓存表,当客户端请求来时,查询此表,如果与表中的ip一样,那就选择与上次分配的真是服务器相同的服务器,如果表中没有匹配项,那么根据wrr的方式,来调度

2.1.4DH:当调度服务器后端为缓存服务器时,缓存服务器缓存着不同网站的内容,当有客户端请求到来时,查询客户端请求的地址,如果缓存服务器中有需要的缓存内容,那么不管客户端是谁,都调度到那个缓存服务器上,如果没有匹配到内容,则根据wrr调度算法,调度到后端,此时,这个调度服务器的表中会增加一条记录

 

2.2、动态调度方法:根据后端每个RS服务器的负载状态进行调度

         2.2.1LC:最少连接算法, 活动x256+非活动计算的值小的被选中;

         2.2.2WLC:加权最少连接算法,(活动连接*256+非活动连接)/权重 缺陷:权重小的服务器在前面,客户端第一次请求时会始终先调度给前面的服务器,而不是性能好、权重大的服务器;

         2.2.3SED:解决了WLC的缺陷,(活动连接+1*256/权重,使得权重大的结果一定会小于权重小的,这样能保证权重大的先接受响应任务;缺陷:使得权重大的始终保持响应任务,而权重小的始终没有任务;

         2.2.4NQ永不排队,改进了sed,开始时,保证每个服务器都轮询响应任务,之后再安装sed的方法进行计算;

       2.2.5、LBLC(动态dh):基于本地的最少连接,其实就是动态的dh算法,做dh时会考虑后端服务器负载状态,结果是有可能新请求被发往负载较小的服务器上,如果没有任何匹配,使用WLC算法进行调度,但始终会影响负载均衡效果,因为dh算法就决定了,请求只要是同一目标地址就被绑定在一个RS上;

       2.2.6:LBLCR:被调度的多台缓存服务器之间,可以复制部分内容,这样,在后端缓存服务器极不平衡的的状态下,通过复制部分内容来实现调度相对平衡的效果

三、配置命令格式

3.1ipvsadm命令:

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

         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]

 

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

         增、改:ipvsadm -A|E -t|u|f service-address [-s scheduler]

                   service-addressVIP

                   -t|u|f

                            -t: TCP协议的端口,VIP:TCP_PORT

                            -u: TCP协议的端口,VIP:UDP_PORT

                            -ffirewall MARK,是一个数字;

                                                       

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

 

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

                                                                         

3.3、管理集群上的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

                           

3.4、查看:

         ipvsadm -L|l [options]

                   –numeric, -nnumeric output of addresses and ports

                   –exactexpand numbers (display exact values)

                   –connection -coutput of current IPVS connections

                   –statsoutput of statistics information

                   –rate output of rate information

         保存和重载:

                   ipvsadm -S = ipvsadm-save

                   ipvsadm -R = ipvsadm-restore

 

 

 

 

 

 

 

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

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

相关推荐

  • python env seup

    ffffffffffffffffffffffffffffffffffffff

    2018-03-12
  • Linux第三周总结

    1、列出当前系统上所有已经登录的用户的用户名,注意:同一个用户登录多次,则只显示一次即可。 ~]# who | cut -d ” -f1 | uniq 2、取出最后登录到当前系统的用户的相关信息。 ~]# who|tail -1 3、取出当前系统上被用户当作其默认shell的最多的那个shell ~]# cut -d’:’…

    2017-07-16
  • Linux第六周学习博客作业

    对第六周学习的内容进行总结

    2018-01-14
  • 源码编译安装Apache

    编译安装Apache 系统环境:centos 7.2 前提: 提供开发工具及开发环境 开发工具:make, gcc等 开发环境:开发库,头文件 glibc:标准库 方式: 通过“包组”提供开发组件 centos 6 [root@centos6 ~]# yum groupinstall "Develo…

    Linux干货 2016-08-24
  • Grep 文本搜索工具与正则表达式

            grep (缩写来自Globally search a Regular Expression and Print)是一种强大的文本搜索工具,它能使用特定模式匹配(包括正则表达式)搜索文本,并默认输出匹配行。Grep在实际中对于我们的工作有着很大的作用,用于对文件的搜索,通过由正则表达式字符以及…

    2017-04-15
  • Gdevops 2017全球敏捷运维峰会【北京站】限时免费!

    Introduction 全球敏捷运维峰会 打造敏捷与运维领域标杆峰会! 2017年全球敏捷运维峰会(Gdevops, Global Devops Summit)将于2017年在成都、上海、北京、广州四城全面启动,本次Gdevops 2017全球敏捷运维峰会【北京站】由上海市经济和信息化委员会指导,上海市云计算产业促进中心、DBAplus社群主办,数十家媒体…

    Linux干货 2017-08-02