码迷,mamicode.com
首页 > 其他好文 > 详细

服务负载之LVS

时间:2015-10-11 06:50:39      阅读:287      评论:0      收藏:0      [点我收藏+]

标签:lvs

duang!duang!duang!今天开始写服务高可用之lvs。

回顾一下,我们一般服务集群可分为以下三种:

  1.负载均衡集群,如lvs,nginx(7层负载),haproxy(4层,7层都可以)等

  2.高可用集群,如keepalive,heartbeat组成的高可用,数据自身的主从高可用,主主高可用

  3.高性能集群,如某些运算工作站

LVSLinux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统。lvs是根据TCP/IP4层协议,依赖内核的netfilter,工作在INPUT链上,实现4层负载,突破了套接字的限制,具有强大的并发能力。由于它不关心服务是否可用,在轮询等算法中,前端访问服务时,会出现固定比例的访问不可达,没有冗余功能。

lvs工作模式可分为:

  1.nat,多目标DNAT,顾名思义,目标地址转换,修改请求报文的目标地址(有时也会修改端口),转发给后端服务器。

  2.dr,直接路由,修改请求报文的目标mac地址,转发给同网段服务器。

  3.tun,隧道,不修改请求报文的IP首部,在原有的IP首部上,再封装一个IP首部,有可能会突破mut的限制,可能有一些手段限制请求包的大小。

lvs支持的算法:

  1.rr,轮询,根据ipvsadm管理表里面的次序,依次循环分配请求,绝对公平

  2.wrr,加权轮询,根据服务性能设置权重,根据权重比例分配请求,手握权重,我优先

  3.sh,源地址hash,把来自同一IP的请求始终分配同一RS主机,可以实现类似session会话保持功能

  4.dh,目标地址hash,对同一目标请求始终分配给同一RS主机,实现类似提高缓存命中功能

上面4种为静态算法。何为静态呢?是指,前端负载,不管后端服务的性能差异,始终我行我素的按照规则分配,根据现实社会规律,当人数太多,而每个人的能力强弱不一样,平均分配会使能力差的人不太公平,古人云,能者多劳。于是有了下面的算法;

  5.lc,最少链接,最少的家伙优先分配,公式:活动链接数*256+非活动链接数之和

  6.wlc,加权最少链接,lc升级版,权重大的优先分配,公式:(活动链接数*256+非活动链接数)/权重

  7.sed,最短期望延迟,公式:(活动链接数+1)*256/权重

  8.nq,按照权重大小一次分配,再按照sed算法

  9.lblc,基于本地最小链接的目标地址hash,即为动态DH算法,先LC,再DH,目前主要用于Cache集群系统

 10.lblcr,带复制功能的LBLC

ipvs管理工具:ipvsadm

常用命令: 

添加服务:ipvsadm -A -t 192.168.0.50:80 -s rr

修改服务:ipvsadm -E -t 192.168.0.50:80 -s wrr

保存服务:ipvsadm-save = ipvsadm -S

载入服务:ipvsadm-restore =ipvsadm -R

添加RS:ipvsadm -a -t 192.168.0.50:80 -r 172.16.1.90 -m -w 1 (-m为nat工作模式)

修改RS:ipvsadm -e -t 192.168.0.50:80 -r 172.16.1.90 -g -w 1 (-g为dr工作模式)

显示链接报文数: ipvsadm -L -n --stats

由于ipvs是工作在内核上的,我们只需要安装ipvsadm,往ipvs上面写规则就是了。

yum install -y ipvsadm

基于nat工作模式的lvs

在lvs服务端,清空iptables规则,准备2台httpd服务器

在服务端添加

iptables -F 

ipvsadm -A -t 172.16.2.10:80 -s rr

ipvsadm -a -t 172.16.2.10:80 -r 172.16.1.90 -g -w 1

ipvsadm -a -t 172.16.2.10:80 -r 172.16.1.91 -g -w 1


基于dr工作模式lvs

服务端配置:

iptables -F 

ifconfig eth0:0 172.16.2.10 up

route add -host 172.16.2.10 dev eth0:0

添加ipvs命令

ipvsadm -A -t 172.16.2.10:80 -s rr

ipvsadm -a -t 172.16.2.10:80 -r 172.16.1.90 -g -w 1

ipvsadm -a -t 172.16.2.10:80 -r 172.16.1.91 -g -w 1

技术分享

 

所有客户端配置:

先定义参数:

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

echo 2 > /proc/sys/net/ipv4/conf/eth0/arp_announce

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

echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore

在lo上配置ip别名

ifconfiglo:0 172.16.2.10/32 broadcast 172.16.2.10 up

添加lo到网卡的路由

route add -host 172.16.2.10 dev lo:0

技术分享

服务负载之LVS

标签:lvs

原文地址:http://iznowow.blog.51cto.com/6232028/1701703

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!