负载均衡-LVS介绍、DR搭建

LVS

  • LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统。本项目在1998年5月由章文嵩博士成立,是中国国内最早出现的自由软件项目之一。

  • LVS是个负载均衡设备,它不提供任何服务,用户请求到这里的时候,它是将客户需求转发至后端真正提供服务的服务,所以说后端的服务称作real server。LVS分为两段,前一段称为ipvsadm(管理集群服务的命令行工具),后面一段叫做ipvs(内核模块)【提示:LVS和iptables不能同时使用】。

lvs实现的前提

  1. Ipvs : 已经嵌入到linux的内核

  2. IPVsadm:管理应用程序

负载均衡器

  1. 硬件:
    1. F5 BIG-IP
    2. Citrix NetScaler
    3. A10
  2. 软件
    1. 四层:tcp 之上的第四层协议

      LVS:只能操作IP,端口 ,在操作系统内核中。

    2. 七层:http,ajp,https,(应用层)

      1. nginx
      2. haproxy
      3. httpd

调度方法

四种静态:

1. rr(Round Robin):轮询调度,轮叫调度

轮询调度算法的原理是每一次把来自用户的请求轮流分配给内部中的服务器,从1开始,直到N(内部服务器个数),然后重新开始循环。算法的优点是其简洁性,它无需记录当前所有连接的状态,所以它是一种无状态调度。==提示:这里是不考虑每台服务器的处理能力==

2. wrr:weight,加权(以权重之间的比例实现在各主机之间进行调度)

由于每台服务器的配置、安装的业务应用等不同,其处理能力会不一样。所以,我们根据服务器的不同处理能力,给每个服务器分配不同的权值,使其能够接受相应权值数的服务请求。

3. Dh:Destination hashing:目标地址散列。把同一个IP地址的请求,发送给同一个server

目标地址散列调度算法也是针对目标IP地址的负载均衡,它是一种静态映射算法,通过一个散列(Hash)函数将一个目标IP地址映射到一台服务器。目标地址散列调度算法先根据请求的目标IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。

4. sh:source hashing,源地址散列。主要实现会话绑定,能够将此前建立的session信息保留了

源地址散列调度算法正好与目标地址散列调度算法相反,它根据请求的源IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的并且没有超负荷,将请求发送到该服务器,否则返回空。它采用的散列函数与目标地址散列调度算法的相同。它的算法流程与目标地址散列调度算法的基本相似,除了将请求的目标IP地址换成请求的源IP地址,所以这里不一个一个叙述。

动态调度方法:

1. lc(Least-Connection):最少连接

最少连接调度算法是把新的连接请求分配到当前连接数最小的服务器,最小连接调度是一种动态调度短算法,它通过服务器当前所活跃的连接数来估计服务器的负载均衡,调度器需要记录各个服务器已建立连接的数目,当一个请求被调度到某台服务器,其连接数加1,当连接中止或超时,其连接数减一,在系统实现时,我们也引入当服务器的权值为0时,表示该服务器不可用而不被调度。

简单算法:active*256+inactive(谁的小,挑谁)

2. wlc(Weighted Least-Connection Scheduling):加权最少连接。

加权最小连接调度算法是最小连接调度的超集,各个服务器用相应的权值表示其处理性能。服务器的缺省权值为1,系统管理员可以动态地设置服务器的权限,加权最小连接调度在调度新连接时尽可能使服务器的已建立连接数和其权值成比例。
简单算法:(active*256+inactive)/weight【(活动的连接数+1)/除以权重】(谁的小,挑谁)

3. sed(Shortest Expected Delay):最短期望延迟

基于wlc算法

简单算法:(active+1)256/weight 【(活动的连接数+1)256/除以权重】

4. nq(never queue):永不排队(改进的sed)

无需队列,如果有台realserver的连接数=0就直接分配过去,不需要在进行sed运算。

5. LBLC(Locality-Based Least Connection):基于局部性的最少连接

基于局部性的最少连接算法是针对请求报文的目标IP地址的负载均衡调度,目前主要用于Cache集群系统,因为Cache集群中客户请求报文的目标IP地址是变化的,这里假设任何后端服务器都可以处理任何请求,算法的设计目标在服务器的负载基本平衡的情况下,将相同的目标IP地址的请求调度到同一个台服务器,来提高个太服务器的访问局部性和主存Cache命中率,从而调整整个集群系统的处理能力。
基于局部性的最少连接调度算法根据请求的目标IP地址找出该目标IP地址最近使用的RealServer,若该Real Server是可用的且没有超载,将请求发送到该服务器;若服务器不存在,或者该服务器超载且有服务器处于一半的工作负载,则用“最少链接”的原则选出一个可用的服务器,将请求发送到该服务器。

6. LBLCR(Locality-Based Least Connections withReplication):带复制的基于局部性最少链接

带复制的基于局部性最少链接调度算法也是针对目标IP地址的负载均衡,该算法根据请求的目标IP地址找出该目标IP地址对应的服务器组,按“最小连接”原则从服务器组中选出一台服务器,若服务器没有超载,将请求发送到该服务器;若服务器超载,则按“最小连接”原则从这个集群中选出一台服务器,将该服务器加入到服务器组中,将请求发送到该服务器。同时,当该服务器组有一段时间没有被修改,将最忙的服务器从服务器组中删除,以降低复制的程度

IPVS实现负载均衡的方法

NAT:地址转换(类似于DNAT)

  1. 集群节点跟director必须工作在同一个IP的网络中
  2. RIP通常是私有地址,仅用于各集群节点间的的通信
  3. director位于client和real server之间,并负责处理进出的所有通道。
  4. realserver必须将网关执行DIP
  5. director支持端口映射
  6. realserver可以使用任何类型的操作系统(os)
  7. 较大规模应用场景中,director易成为系统瓶颈
  • VIP:虚拟服务器地址
  • DIP:转发的网络地址
  • RIP:后端真实主机(后端服务器)
  • CIP:客户端IP地址
NAT

DR:直接路由

  1. 各集群节点跟director必须在同一个物理网络中;
  2. RIP可以使用公网地址,实现便携的远程管理和监控;
  3. director仅负责处理入站请求,响应报文则有realserver直接发往客户端
  4. realserver不能将网关指向DIP,而是直接指向前端网关;
  5. director不支持端口映射
  6. 大多数操作系统能够用在realserver
  7. director能够处理更多的realserver
DR

TUN:隧道

  1. 集群节点可以跨越Internet
  2. RIP必须是公网地址
  3. director仅负责处理入站请求,响应报文则由realserver直接发往客户端
  4. realserver网关不能指向director
  5. 只有咫尺隧道功能的OS才能用于realserver
  6. 不支持端口映射

==端口映射:端口映射就是将主机的IP地址的一个端口映射到局域网中一台机器,当用户访问这个IP的这个端口时,服务器自动将请求映射到对应局域网分机 (就这么简单)==

ipvsadm命令

管理集群服务

添加:-A -t|u|f service-address [-s scheduler]
        -t: TCP协议的集群 
    -u: UDP协议的集群
        service-address:     IP:PORT
    -f: FWM: 防火墙标记 
        service-address: Mark Number
    -s:所选的调度策略
修改:-E
删除:-D -t|u|f service-address

# ipvsadm -A -t 172.16.100.1:80 -s rr

管理集群服务中的RS

添加:-a -t|u|f service-address -r server-address [-g|i|m] [-w weight]
        -t|u|f service-address:事先定义好的某集群服务
        -r server-address: 某RS的地址,在NAT模型中,可使用IP:PORT实现端口映射;
        [-g|i|m]: LVS类型 
              -g: DR
                      -i: TUN
              -m: NAT
         [-w weight]: 定义服务器权重
        修改:-e
        删除:-d -t|u|f service-address -r server-address

# ipvsadm -a -t 172.16.100.1:80 -r 192.168.10.8 –g
# ipvsadm -a -t 172.16.100.1:80 -r 192.168.10.9 -g
    
查看:
    -L|l
            -n: 数字格式显示主机地址和端口
        --stats:统计数据
        --rate: 速率
        --timeout: 显示tcp、tcpfin和udp的会话超时时长
        -c: 显示当前的ipvs连接状况

删除所有集群服务:   -C:清空ipvs规则

保存规则:  -S 
  # ipvsadm -S > /path/to/somefile
  
载入此前的规则:-R
# ipvsadm -R < /path/form/somefile

DR模式配置前须知

  • VIP: 虚拟主机IP
  • DIP: Director IP
  • kernel parameter:
    • arp_ignore: 定义接收到ARP请求时的响应级别;

      • 0:只要本地配置的有相应地址,就给予响应;
      • 1:仅在请求的目标(MAC)地址配置请求到达的接口上的时候,才给予响应;
    • arp_announce:定义将自己地址向外通告时的通告级别;

      • 0:将本地任何接口上的任何地址向外通告;
      • 1:试图仅向目标网络通告与其网络匹配的地址;
      • 2:仅向与本地接口上(MAC)地址匹配的网络进行通告;

LVS DR模式集群配置步骤

  1. 找一台主机作为DR(虚拟服务器),安装ipvsadm
    Yum install ipvsadm

  2. 在DR设置两个IP地址:

    1. DIP: 192.168.35.134 ,设置静态IP--通过修改/etc/sysconfig/network-scripts/ifcfg-eth0里面的BOOTPROTO=STATIC
    2. VIP:192.168.35.234 ifconfig eth0:1 192.168.35.234/24

    注:通过命令设置ip会在重启后失效

  3. 找多台机器作为RS( tomcat或者nginx )

    • 两台:静态设置192.168.35.137、192.168.35.138
    • 修改报文源IP的设置,需要设置内核参数
i.  echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
ii. echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
iii.    echo 2 > /proc/sys/net/ipv4/lo/eth0/arp_announce
iv. echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
  • 在两台机器(RS)上,设置网卡的别名IP:192.168.35.234
    • ifconfig lo:0 192.168.35.234 netmask 255.255.255.255 broadcast 192.168.35.234
  • 在两台机器(RS)上,添加一个路由
    • route add -host 192.168.35.234 dev lo:0
  • DR上需要加一个路由设置:route add -host 192.168.35.234 dev eth0:1
  • 在RS 检查web服务是否正常
  • 在DR上使用ipvsadm添加集群服务
    • ipvsadm –C
    • ipvsadm -A -t 192.168.35.234:80 -s wlc
    • ipvsadm -a -t 192.168.35.234:80 -r 192.168.35.137 -g -w 1
    • ipvsadm -a -t 192.168.35.234:80 -r 192.168.35.138 -g -w 1

通过以下脚本可以实现内核参数以及realserverVIP的配置:

#!/bin/bash 
#description : start realserver 
VIP=125.38.38.64 
/etc/rc.d/init.d/functions 
case "$1" in 
start) 
echo " start LVS of REALServer" 
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
/sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up

;; 
stop) 
/sbin/ifconfig lo:0 down 
echo "close LVS Directorserver" 
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

编写脚本后给脚本x权限,执行时会出现如下错误

./test.sh: line 4: /etc/rc.d/init.d/functions: Permission denied

给/etc/rc.d/init.d/functions赋予执行权限即可;
chmod u+x /etc/rc.d/init.d/functions

再次执行,错误消失

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,015评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,262评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,727评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,986评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,363评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,610评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,871评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,582评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,297评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,551评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,053评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,385评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,035评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,079评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,841评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,648评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,550评论 2 270

推荐阅读更多精彩内容

  • 【摘要】 面对大量用户访问、高并发请求,海量数据,可以使用高性能的服务器、大型数据库,存储设备,高性能Web服务器...
    静修佛缘阅读 4,458评论 0 24
  • 负载均衡集群是 load balance 集群的简写,翻译成中文就是负载均衡集群。常用的负载均衡开源软件有ngin...
    jiangmo阅读 1,276评论 0 1
  • 一、什么是负载均衡 首先我们先介绍一下什么是负载均衡:负载平衡(Load balancing)是一种计算机网络技术...
    小流江海阅读 910评论 0 2
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,100评论 18 139
  • 上一篇《WEB请求处理一:浏览器请求发起处理》,我们讲述了浏览器端请求发起过程,通过DNS域名解析服务器IP,并建...
    七寸知架构阅读 80,533评论 21 356