返回顶部

热点聚焦

LVS负载均衡集群服务搭建详解

日期:2016-03-18 点击:     关键词:LVS负载均衡集群服务搭建详解

2016-03-18

  LVS负载均衡集群服务搭建详解

  一、LVS概述

  1.LVS:Linux Virtual Server

  四层交换(路由):根据请求报文的目标IP和目标PORT将其转发至后端主机集群中的某台服务器(根据调度算法);

  不能够实现应用层的负载均衡

  lvs(又称ipvs),基于内核中的防火墙netfilter实现

LVS负载均衡集群服务搭建详解

  2.lvs集群术语:

  vs:Virtual Server

  虚拟服务,可称为Director、Dispatcher分发器、Balancer负载均衡器

  rs:Real Server

  真实服务器

  CIP:Client IP

  客户端IP

  VIP:Director Virtual IP

  等同于FIP(流动IP),负载均衡器虚拟IP

  DIP:Director IP

  调度IP(第二张网卡IP地址)

  RIP:Real Server IP

  真实服务器IP

  3.LVS:ipvsadm/ipvs

  (1)ipvsadm: CLI工具

  用户空间的命令行工具,用于管理集群服务及集群服务上的RS等;# yum install -y ipvsadm

  (2)ipvs:内核存在(CentOS默认支持)

  工作于内核上的netfilterINPUT钩子之上的程序代码;其集群功能依赖于ipvsadm定义的集群服务器规则;

  支持基于TCP、UDP、SCTP、AH、EST、AH_EST等协议的众多服务;

  4.负载均衡集群中设计时的要点:

  (1)session保持

  session sticky (iphash):IP地址绑定,来源IP记录在ip hash表作统一调度

  session cluster(multicast/broadcast/unicast):广播集群同步(复制)session,只适用于小规模场景

  session server ():session服务器

  (2)数据共享(提供一致性存储)

  1) 共享存储;

  NAS:Network Attached Storage (文件级别),网络附加存储,文件服务器

  SAN:Storage Area Network (块级别),存储区域网络

  DS:Distributed Storage,分布式春初

  2) 数据同步:rsync… ...

  二、LVS模型

  1.lvs-nat:地址伪装模型

  多目标的DNAT:通过将请求报文的目标地址和目标端口修改为挑选出某RS的RIP和PORT来实现;

  客户端主机发起请求报文CIP指向VIP,通过内核的核心网卡间转发功能,VIP会将请求交给DIP进行调度,DIP根据设定的算法进行负载均衡给后端的RS主机的RIP,在这个过程中DIP调度功能会将目标IP地址重写为RIP。请求和返回请求读要调度DIP来进行转换操作。

  (1)RIP和DIP应该使用私网地址,RS的网状应该指向DIP;

  (2)请求和响应报文都要经由director转发;极高负载的场景中,Director可能会成为系统瓶颈(响应报文大);

  (3) 支持端口映射(转发);

  (4) VS必须为Linux,RS可以为任意操作系统;

  (5)RS的RIP与Director的DIP必须在同一IP网络;

  2.lvs-dr(direct routing直接路由):网关模型

  通过修改请求报文的MAC地址进行转发;IP首部不会发生变化(源IP为CIP,目标IP始终为VIP)

  客户端发起请求,经过层层路由到达离VS服务器最近的交换机,通过交换机转发给VS服务器,由VS服务器负载均衡转发请求给RS服务器。在此过程中VIP修改MAC地址调度请求给真实主机。在此过程中通过ARP协议在一个局域网中广播寻找真实主机的MAC地址。每个RS真实主机的网卡会一个别名地址VIP,实现全过程源地址为CIP,目标地址为VIP不变。调度基于寻找MAC。网关模型中的所有主机均要能与外网通信。这样RS主机就能够直接响应客户机。

  (1)确保前端路由器将目标IP为VIP的请求报文一定会发送给Director;

  解决方案:

  1)静态绑定;

  2)禁止RS响应VIP的ARP请求;

  a) arptables上定义;

  b) 修改各RS的内核参数,并把VIP配置在特定的接口上实现禁止其响应;

  (2)RS的RIP可以使用私有地址,也可以使用公网地址;

  RIP使用私有地址可以通过在之前加一个路由器的方式和外网通信,直接响应客户机

  (3)RS跟Director必须在同一物理网络中;

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

  (5) 不支持端口映射;

  (6) 各RS可以使用大多数的操作系统;

  3.lvs-tun(ip tunneling):IP隧道模型

  转发方式:不修改请求报文的IP首部(源IP为CIP,目标IP为VIP),而是在原有的IP首部这外再次封装一个IP首部(源IP为DIP,目标IP为RIP);

  (1)RIP,DIP,VIP全得是公网地址;

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

  (3)请求报文经由Director调度,但响应报文将直接发给CIP;

  (4) 不支持端口映射;

  (5)RS的OS必须支持IP隧道功能;

  4.lvs-fullnat:完整模型(同时改变请求报文的源IP和目标IP)

  通过同时修改请求报文的源IP地址(cip-->dip)和目标IP地址(vip--> rip)实现转发;

  注意:前三种为标准类型,第四种为后添加类型,内核默认可能不支持,需自编译内核

  (1)VIP是公网地址;RIP和DIP是私网地址,且可以不在同一IP网络中,但需要通过路由互相通信;

  (2)RS收到的请求报文的源IP为DIP,因此其响应报文将发送给DIP;

  (3)请求报文和响应报文都必须经由director;

  (4) 支持端口映射;

  (5) RS可使用任意OS;

  三、LVS scheduler调度算法

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

  (1)RR :round robin,轮询机制,依次分配请求,方式简单但时负载均衡的效果一般

  (2)WRR :weighted rr,加权轮询,权重越大承担负载越大

  (3)SH :source ip hash,源地址哈希,将来自同一个ip请求通过记录在ip hsash表中绑定在同一个服务器,实现session保持

  缺点:调度粒度大,对负载均衡效果差;session黏性不同,连接时长保持不同

  (4)DH :desination ip hash,目标地址哈希。能实现连接追踪,但不考虑负载均衡效果

  正向web代理,负载均衡内网用户对互联网的请求;

  Client--> Director --> Web Cache Server(正向代理)

  2.动态方法:根据算法及各RS当前的负载状态进行评估

  Overhead

  负载值,VS转发时记录每个RS的Active和Inactive数量(甚至权重)进行算法计算

  Active

  活动链接值,当发起新请求后保持在ESTABLISHED状态时,仍有请求响应

  Inactive

  非活动链接值,在ESTABLISHED状态时,尚未断开保持空闲等待状态

  (1)LC:least connection,最少连接

  Overhead=Active*256+Inactive

  后端的RS谁的连接少就分发请求至那台RS,若overhead一样则自上而下轮询列表中的RS

  (2)WLC:weighted least connection,加权最小连接

  Overhead=(Active*256+Inactive)/weight,计算结果小的将为选中的下一跳RS服务器

  缺点:当Overhead一样时,自上而下轮询响应,权重小的若在列表上方则其会响应

  (3)SED:Shortest Expection Delay,最短期望延迟

  Overhead=(Active+1)*256/weight

  缺点:解决WLC问题,但时无法确保权重小的主机一定响应

  (4)NQ:never Queue,永不排队,SED算法改进

  RS权重大小排列,每台RS服务器先分配一个请求,其余的按照权重大小计算分配

  (5)LBLC:Locality-Based LC,基于本地的最少连接,动态的 DH连接算法

  (6)LBLCR:LBLC with Replication,带复制功能的LBLC

  四、ipvsadm命令

  1.管理集群服务:

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

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

  -A:添加、-E:修改、-D:删除

  service-address

  服务地址和 -t|u|f 结合使用,具体格式如下

  -t, tcp, vip:port

  TCP的ip和port

  -u, udp, vip:port

  UDP的ip和port

  -f, fwm, MARK

  防火墙标记

  -s scheduler:默认为WLC调度算法,可省;

  -p [timeout] :超出时长,持久连接相关,默认时长为300秒

  2.管理集群服务上的RS:

  ipvsadm-a|e -t|u|f service-address -rserver-address [-g|i|m] [-w weight]

  ipvsadm -d-t|u|fservice-address -rserver-address

  -a:添加一个RS、-e:修改一个RS、-d:删除一个RS

  server-address指的是rip[:port],端口可省表示与之前的service-address相同,只有nat模式支持端口映射才会使用

  [-g|i|m]

  -g:GATEWAY (默认),lvs-dr模型

  -i: IPIP, lvs-tun隧道模型

  -m: MASQUERADE,lvs-nat模型

  3.查看

  ipvsadm -L|l[options]

  -n:numeric,数字格式显示地址和端口;

  -c:connection,显示ipvs连接;

  --stats:显示统计数据;

  --rate:速率

  --exact:精确值,不经过单位换算的数值

  4.清空规则:

  ipvsadm -C

  5.数器清零:

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

  6.保存和重载:

  保存:

  ipvsadm-S > /PATH/TO/SOME_RULE_FILE

  ipvsadm-save > /PATH/TO/SOME_RULE_FILE

  重载:

  ipvsadm -R < /PATH/FROM/SOME_RULE_FILE

  ipvsadm-restore< /PATH/FROM/SOME_RULE_FILE

  注意:需要结合重定向一起使用,从自定义的规则文件中导入导出

  附录(ipvsadm -h):

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

  [-p[timeout]] [-M netmask] [-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

  [-g|i|m][-w weight] [-x upper] [-y lower]

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

  ipvsadm-L|l [options]

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

  ipvsadm--set tcp tcpfin udp

  ipvsadm-h

  五、lvs-nat模型构建

  1.lvs-nat模型示意图

  本次构建的lvs-nat模型的示意图如下,其中所有的服务器和测试客户端均使用VMware虚拟机模拟,所使用的CentOS 7

  VS内核都支持ipvs功能,且安装ipvsadm控制书写lvs规则工具。

  RS端两台服务器为httpd服务器做请求的负载均衡。

  注意;

  1) 客户端可以使用Windows上的浏览器,会后缓存影响结果,所以采用CentOS上的curl命令请求http协议显示更加直观

  2) DIP上不能配置iptables规则

  2.VS网卡配置

  (1)增加网卡

  在"虚拟机设置"中增加一个网络适配器设备,并将其自定义特定网络为VMnet2模式,此处为了模拟负载均衡服务器的两张网卡处于不同网段

  (2)配置VS两张网卡的IP地址

  [root@localhost ~]# nmtui# CentOS 7 文本图形界面配置网卡命令

  [root@localhost ~]# systemctl start network.service

  注意:

  网络适配器1(172.16.249.57)模拟为外网网卡,网络适配器2(192.168.100.1)模拟为内网,且该网卡的Ip地址要和RS服务器得ip在同一网段,DIP作为RIP的网络调度(网关),无需配置GATEWAY

  [root@localhost~]# ifconfig

  3.RS网卡配置

  此处使用两台CentOS 7虚拟机作为负载均衡后端真实响应主机,安装RPM包格式httpd服务,并启动服务。nmtui命令配置网卡信息,RS1的IP:192.168.100.2,RS2的IP:192.168.100.3,RIP和DIP在同一网段,虚拟机网卡和DIP同时匹配值为VMnet2模式,且两台RS服务器主机网关指向DIP:192.168.100.1

  [root@localhost~]# yum install -y httpd

  [root@localhost ~]# systemctl start httpd.service

  注意:安装完成后在各httpd服务器上配置测试页面,/var/www/html/index.html.

  [root@localhost ~]# nmtui # 配置方法同上,此处省略

  … ...

  [root@localhost ~]# systemctl start network.service

  [root@localhost~]# ifconfig

  4.测试所有主机是否能够通信

  用ping命令测试各节点的通信,例如RIP1和VIP、DIP、RIP2之间是否能够通信

  [root@localhost ~]# ping IPADDR

  5.VS主机:核心转发和安装ipvsadm

  (1)安装ipvsadm组件:[root@localhost ~]# yum install -y ipvsadm

  (2)启动网卡间核心转发功能:[root@localhost ~]# sysctl -w net.ipv4.ip_forward=1

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

  6.VS主机:定义配置lvs-nat服务(此处采用rr算法)

  (1)定义ipvsadm负载均衡集群规则,并查看

  此处定义DIP是以-s指定为rr算法进行轮询调度,-m指定模式为lvs-nat,配置命令如下:

  [root@localhost~]# ipvsadm -A -t 172.16.249.57:80 -s rr

  [root@localhost~]# ipvsadm -a -t 172.16.249.57:80 -r 192.168.100.2:80 -m

  [root@localhost~]# ipvsadm -a -t 172.16.249.57:80 -r 192.168.100.3:80 -m

  [root@localhost~]# ipvsadm -L -n

  (2)Client客户机测试

  在客户端主机上使用curl命令对VIP发起请求,负载均衡服务器会将请求按照rr算法依次将请求调度给不同的主机进行处理,依次请求给分发给192.168.100.2和192.168.100.3主机响应。

  [root@localhost~]# curl http://172.16.249.57

  7.VS主机:定义配置lvs-nat服务(此处采用wrr算法)

  (1)定义ipvsadm负载均衡集群规则,并查看

  此处将在上面lvs-nat的rr的基础上进行修改,改成wrr加权轮询算法;将192.168.100.2的权重设置为1,192.168.100.3的权重设置为3。

  [root@localhost~]# ipvsadm -E -t 172.16.249.57:80 -s wrr

  [root@localhost~]# ipvsadm -e -t 172.16.249.57:80 -r 192.168.100.2 -w 1 -m

  [root@localhost~]# ipvsadm -e -t 172.16.249.57:80 -r 192.168.100.3 -w 1 -m

  [root@localhost~]# ipvsadm -L -n

  (2)Client客户机测试

  在客户端主机用curl发起请求,负载均衡主机VS会将其按照权重大小转发给各个主机,四个请求有三个发给了192.168.100.3请求响应,一个发给了192.168.100.2主机处理。并以此算法做轮询负载请求

  [root@localhost~]# curl http://172.16.249.57

  六、lvs-dr模型构建

  1.lvs-dr模型示意图

  三台主机为虚拟机CentOS 7,每台主机仅有一块网卡,且使用桥接方式都指向外部网络的网关172.16.100.1

  2.配置VS和RS服务器的VIP

  此处的VIP均已别名的形式配置在往卡上,VS是配置在对外通信的DIP的网卡上;RS配置在lo本地回环网卡

  注意:此时配置的VIP的子网掩码必须为255.255.255.255,广播地址为自己本身

  VS:[root@localhost~]# ifconfig eno16777736:0 172.16.50.50 netmask 255.255.255.255 broadcast172.16.50.50 up

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

  3.RS服务器上配置路由

  [root@localhost~]# route add -host 172.16.50.50 dev lo:0

  4.RS服务器配置APR内核参数修改

  [root@localhost~]# ll /proc/sys/net/ipv4/conf

  (1)ARP响应行为和ARP解析行为内核参数:

  1)arp_annouce定义通告级别

  0:默认级别,将本地的任何接口上的配置的地址都在网络中通告

  1:尽量避免向本主机上的其他网卡进行网络通信,特殊情况下其他接口也可以

  2:总是使用最佳网络地址接口(仅使用定义的网卡接口在同网络通信)

  2)arp_ignore定义响应级别(0-8九个级别),响应时忽略方式

  0:都全都响应

  1:只对从本接口进入的请求响应,且本接口地址是个网络地址

  … …

  注释:一般使用arp_annouce=2,arp_ignore=1

  (2)配置各RS主机参数

  注意:all必须配置、eno16777736(本地)和lo两个可以同时全部配置或者配置其中一个

  RealServer内核参数:

  #echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore

  # echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce

  #echo 1 > /proc/sys/net/ipv4/conf/INTERFACE/arp_ignore

  # echo 2 > /proc/sys/net/ipv4/conf/INTERFACE/arp_announce

  注意:INTERFACE为你的物理接口;此处网卡接口指的是eno16777736和lo

  5.VS主机:定义配置lvs-dr模式(此处采用rr算法)

  (1)配置查看

  [root@localhost~]# ipvsadm -A -t 172.16.50.50:80 -s rr

  [root@localhost~]# ipvsadm -a -t 172.16.50.50:80 -r 172.16.200.10 -g

  [root@localhost~]# ipvsadm -a -t 172.16.50.50:80 -r 172.16.200.11 -g

  [root@localhost~]# ipvsadm -L -n

  (2)测试

  [root@localhost~]# curl http://172.16.50.50

  因为基于rr算法调度,依次分发给RS主机

  七、通过防火墙标记来定义lvs

  1.FWM防火墙标记功能

  防火墙标记可以实现多个集群服务绑定为同一个,实现统一调度;将共享一组RS的集群服务统一进行定义

  FWM基于iptables的mangle表实现防护墙标记功能,定义标记做策略路由

  2.FWM定义集群的方式

  (1)在director上netfilter的mangle表的PREROUTING定义用于"打标"的规则

  ~]#iptables -t mangle -A PREROUTING -d $vip -p $protocol --dport $port -j MARK--set-mark #

  $vip:VIP地址

  $protocol:协议

  $port:协议端口

  (2)基于FWM定义集群服务:

  ~]#ipvsadm -A -f # -s scheduler

  3.实例演示

  [root@localhost~]# iptables -t mangle -A PREROUTING -d 172.16.50.50 -p tcp --dport 80 -j MARK--set-mark 5

  [root@localhost~]# ipvsadm -A -f 5 -s rr

  [root@localhost~]# ipvsadm -a -f 5 -r 172.16.200.10 -g

  [root@localhost~]# ipvsadm -a -f 5 -r 172.16.200.11 -g

  八、LVS持久连接功能:lvs persistence

  1.lvs persistence功能

  无论ipvs使用何种scheduler,其都能够实现在指定时间范围内始终将来自同一个ip地址的请求发往同一个RS;实现方式和lvs调度的十种算法无关,通过lvs持久连接模板(hash表)实现,当超过自定义的可持节连接时长候再根据LVS算法本身进行调度。

  ipvsadm命令中-p选项实现,在-p后不指定具体数字(单位:秒),默认为300,到时候会自动延长2分钟,对于web本身就是15秒

  2.模式

  (1)每端口持久(PPC)

  客户端对同一服务端口发起请求,会基于该服务的端口实现请求在一段时间内对同一RS服务器持久连接;

  例如:有两台主机做为RS服务器做http和hssh的两种服务的集群,仅http做每端口持久,Client请求会实现绑定在,但是22号端口请求不会绑定在同一台RS

  (2)每客户端持久(PCC):定义tcp或udp协议的0号端口为集群服务端口

  director会将用户的任何请求都识别为集群服务,并向RS进行调度;同一客户端的请求任何端口都发往同一台第一次选定的RS服务器

  (3)每防火墙标记持久(PFWMC)

  将两个或两个以上服务通过防火墙打标绑定在一起,这些服务的请求实现同时定向与同一台RS服务器,服务绑定同一RS

  实例:

  lvs-dr模式下以rr算法绑定http和https服务

  ~]#iptables -t mangle -A PREROUTING -d 172.16.100.9 -p tcp --dport 80 -j MARK--set-mark 99

  ~]#iptables -t mangle -A PREROUTING -d 172.16.100.9 -p tcp --dport 443 -j MARK--set-mark 99

  ~]#ipvsadm -A -f 99 -s rr -p

  ~]#ipvsadm -a -f 99 -r 172.16.100.68 -g

  ~]#ipvsadm -a -f 99 -r 172.16.100.69 -g

  附录:LVS-DR类型RS脚本示例

  #!/bin/bash

  #

  vip=172.16.50.50

  interface="lo:0"

  case$1 in

  start)

  echo1 > /proc/sys/net/ipv4/conf/all/arp_ignore

  echo1 > /proc/sys/net/ipv4/conf/lo/arp_ignore

  echo2 > /proc/sys/net/ipv4/conf/all/arp_announce

  echo2 > /proc/sys/net/ipv4/conf/lo/arp_announce

  ifconfig$interface $vip broadcast $vip netmask 255.255.255.255 up

  routeadd -host $vip dev $interface

  ;;

  stop)

  echo0 > /proc/sys/net/ipv4/conf/all/arp_ignore

  echo0 > /proc/sys/net/ipv4/conf/lo/arp_ignore

  echo0 > /proc/sys/net/ipv4/conf/all/arp_announce

  echo0 > /proc/sys/net/ipv4/conf/lo/arp_announce

  ifconfig$interface down

  ;;

  status)

  ififconfig lo:0 |grep $vip &> /dev/null; then

  echo"ipvs is running."

  else

  echo"ipvs is stopped."

  fi

  ;;

  *)

  echo"Usage: `basename $0` {start|stop|status}"

  exit1

  esac

  云烁服务,您身边的IT服务商,期待与您的合作!相关内容请咨询在线客服,或致电400-0806-056.

  来源:互联网

400-0806-056