LVS

1 集群的概念

  • Cluster的概念
- 当系统的性能实在是不够用,一般的系统的扩展方式
  Scale Up: 向上扩展,增强
  Scale Out: 向外扩展,增加设备,但是存在调度问题
Cluster: 集群,为解决某个特定的问题将多台计算机组合起来形成的单个系统
Linux Cluster类型:
  LB: Load Balancing, 负载均衡
  HA: High Availiablity,高可用,解决SPOF(Single Point Of Failuer)单点故障
  HPC: High-performance computing,高性能计算
分布式系统:
  分布式存储:云盘
  分布式计算: hadoop, Spark
  • Cluster 的分类
硬件: 
  F5 Big-IP
  Citrix Netscaler
  A10
软件:
  LVS: Linux Virtual Server
  nginx: 支持四层调度
  haproxy:支持四层调度
基于工作的协议层次划分:
  传输层(通用):DPORT
    lvs,nginx(stream),haproxy(mode tcp)
  应用层(专用):对特定的协议
    proxy server(代理服务器)
    http: nginx, httpd, haproxy(mode http)
    fastcgi: nginx, httpd
    mysql: mysql-proxy
  • 与Cluster相关的一些问题及解决
会话保持: 负载均衡
  1 session sticky: 同一个用户调度固定的服务器
    Source IP: LVS sh 算法(对特定的服务而言)
    Cookie
  2 session replication: 每一台拥有的全部的session
    session multicast cluster
  3 session server: 专门的session服务器
    Memcached, Redis
HA集群实现方案:
  keepalived:基于 vrrp(虚拟冗余路由协议)
  ais:application interface standard(应用接口规范)
    heartbeat, cman+rgmanager, corosync+pacemaker

2 LVS的介绍

  • LVS: Linux Virtual Server,负载调度器,集成内核(在netfileter的框架上),由章文嵩研发
lvs:基于四层调度,根据一定的算法将客户端的请求分发给后端的服务器
工作原理: VS根据请求的报文的目标IP和目标协议及端口将其调度转发到某RS,根据调度算法来挑选RS
iptables/netfilter:
  iptables:用户空间的管理工具
  netfileter: 内核空间的框架
  流入: PREROUTING --> INPUT
  流出: OUTPUT --> POSTROUTING
  转发: PREROUTING --> FORWARD --> POSTROUTING
查看内核是否支持ipvs
  grep -i -A 20 'ipvs' /boot/config-xxx
  • LVS的概念:
  • LVS中的一些术语
VS: VIrtual Server,Director Server(DS)
  Dispatcher(调度器),Load Balancer
RS: Real Server(lvs), upstream server(在nginx中叫), backend server(在haproxy叫)
CIP: Client IP
VIP: Virtual server IP VS外网的IP
DIP: Direcor IP VS内网的IP
RIP: Real server IP 真是服务器的IP地址
访问流程: CIP <--> VIP==DIP <-->RIP
  • LVS 集群的类型:
lvs: ipvsadm/ipvs
  ipvsadm: 用户空间的命令行工具,规则管理器,用于管理集群服务及RealServer
  ipvs: 工作于内核空间netfilter的INPUT钩子上的框架
    支持的协议: tcp udp ah_esp esp ah sctp
lvs集群的类型:
  lvs-nat: 修改请求报文的目标IP,多目标IP的DNAT
  lvs-dr: 操纵封装新的MAC地址
  lvs-tun: 在原请求IP报文之外新加一个IP首部
  lvs-fullnat: 修改请求报文的源和目标
  • lvs-nat
lvs-nat
多目标DNAT(iptables) 他通过修改报文的目标IP地址(同时可能会修改目标端口)至挑选出来某RS的RIP地址实现转发
    1 RS 应该使用私有网络地址,且RS的网关指向DIP(DIP和RIP之间可以使用路由器)
    2 请求和相应报文都要经由director转发,极高负载的场景中,director可能会成为系统瓶颈
    3 支持端口映射
    4 RS 可以使用任意操作系统
    5 RS的RIP和Director的DIP在同一IP网络,也可以不在同一个网段
  • lvs-dr
1 保证前端路由器将目标IP为VIP的请求报文发送给director
  解决方案
    静态绑定
    arptables  后台主机不能使windows
      arptables -A IN -d $VIP -j DROP
      arptables -A OUT -s $VIP -j mangle --mangle-ip-s $RIP
    修改RS主机内核参数
      arp_announce
      arp_ignore
2 RS的RIP可以使用私有地址,但是也可以使用公网地址
3 RS跟Director必须在同一物理网络中
4 请求报文经由Director 调度,但响应报文一定不能经由Director;
5 不支持端口映射
6 RS 可以是大多数操作系统
7 RS的网关不能指向DIP
  • lvs-tun
转发方式:不修改请求报文的IP首部(源IP为CIP,目标IP为VIP),而在原IP报文之外再封装一个IP首部(源IP是DIP,目标IP是RIP),将报文发往挑选出的目标RS;RS直接响应给客户端(源IP是VIP,目标IP是CIP)
  (1) DIP, VIP, RIP都应该是公网地址
  (2) RS的网关不能,也不可能指向DIP
  (3) 请求报文要经由Director,但响应不能经由Director
  (4) 不支持端口映射
  (5) RS的OS须支持隧道功能
  • lvs-fullnat: 这种类型kernel不支持,所以也就不做介绍了
  • LVS工作模式的总结


lvs-nat与lvs-fullnat:请求和响应报文都经由Director
lvs-nat: DIP的网关指向DIP
lvs-fullnat: DIP和RIP未必在同一个网络,但要能够通信
lvs-dr与lvs-tun:请求报文要经由Director,但响应报文由RS直接发往Client
lvs-dr: 通过封装新的MAC首部实现,通过MAC网络转发
lvs-tun: 通过在原IP报文封装新的IP头,实现转发,支持远程通信
  • ipvs scheduler: lvs的调度算法
根据是否考虑各个RS的负载状态,可分为两种:动态算法和静态算法
静态算法:四种
  1 RR: roundrobin,轮训
  2 WRR: weight RR, 加权的轮训
  3 SH: source hashing,实现 session sticky,源地址hash,将来自统一个IP的地址的请求始终发送给第一次挑中的RS,从而实现会话绑定,粒度比较粗
  4 DH: destination hashing: 目标地址hash,将发往同一个目标地址的请求始终发至第一次挑中的RS,典型的场景是正向代理缓存场景中的负载均衡
动态算法:
  1 LC: least connections 适用于长连接使用 overhead=active*256+inactiveconns
  2 WLC: weight LC: 默认调度算法 overhead=(activeconns*256+inactiveconns)/weight
  3 SED: shortest Expection Delay: 初始连接权重优先 overhead=(activeconns+1)*256/weight
  4 NQ: nerver queue: 第一次均匀分配,后续SED
  5 LBLC: locality-based lc,动态的DH算法,场景:根据负载状态实现正向代理
  6 LBLCR: LBLC with Replication,带复制功能的LBLC,解决LBLC不均匀问题,从负载重的复制到负载轻的RS
  • ipvsadm
ipvsadm 用法同iptables
  管理集群服务 
    ipvsadm -A|E -t|u|f service-address [-s scheduler]  E 修改
    ipvsadm -D -t|u|f service-address
      service-address
        tcp: -t ip:port
        udp: -u ip:port
        fwm: -f mark    
      -s scheduler
  管理集群服务中的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
        ip:port
      lvs-type    要注意使用 什么模型
        -g gateway dr
        -i ipip tun
        -m masquerade,nat   
  清空和查看
    ipvsadm -C
    ipvsadm -L|l [options]
      -n numberic 基于数字格式显示地址和端口
      -c connetcion 显示ipvs连接
      --rate 速率
      --stats 统计数据
      --exact 精确值
  保存和重载
    ipvsadm -R
    ipvsadm -S [n]
  置零计数器
    ipvsadm -Z [-t|u|f service-address]

3 LVS的实现

  • lvs-nat


1 布置此环境的时候,使用linux的主机进行实现
2 route的转发的功能需要实现,Director的核心转发就不需要打开
3 将RIP1和RIP2的网关指向DIP
4 然后在Director上写转发规则
5 在各RS布置上服务如,mysql或httpd的服务
6 在Director上写规则,使用的是mysql和http并且是使用的轮训的算法
  ipvsadm -A -t 192.168.8.3:80 -s rr
  ipvsadm -a -t 192.168.8.3:80 -r 172.18.23.71:80 -m -w 1
  ipvsadm -a -t 192.168.8.3:80 -r 172.18.23.72:80 -m -w 2
  ipvsadm -A -t 192.168.8.3:3306 -s rr 
  ipvsadm -a -t 192.168.8.3:3306 -r 172.18.23.71:3306 -m -w 1
  ipvsadm -a -t 192.168.8.3:3306 -r 172.18.23.72:3306 -m -w 2
  • lvs-dr
DIP和VIP是同网段的地址,如果用到生产环境,会需要很多的公网IP
1 布置此环境的时候,使用linux的主机进行实现
2 ,Director,route的转发的功能需要实现
3 将Director,RIP1和RIP2的网关指向router 2
4 在各个RS的服务器上修改内核参数
  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/lo/arp_ignore
  echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
  ifconfig lo:0 172.18.23.100/32 broadcast 172.18.23.100 up
  route add -host 172.18.23.100 dev lo:0 
5 在Director上配置IP地址
  ifconfig ens33 172.18.23.100/32 broadcast 172.18.23.100 up
  route add -host 172.18.23.100 dev ens33
6 在Director上写ipvs规则
  ipvsadm -A -t 172.18.23.100:80 -s rr
  ipvsadm -a -t 172.18.23.100:80 -r 172.18.23.71:80 -g -w 1
  ipvsadm -a -t 172.18.23.100:80 -r 172.18.23.72:80 -g -w 2
  ipvsadm -A -t 172.18.23.100:3306 -s rr
  ipvsadm -a -t 172.18.23.100:3306 -r 172.18.23.71:80 -g -w 1
  ipvsadm -a -t 172.18.23.100:3306 -r 172.18.23.72:80 -g -w 2
DIP和VIP是同网段的地址,可以使用内网IP
1 布置此环境的时候,使用linux的主机进行实现
2 Director,router的转发的功能需要实现,并且router上还应当有192.168.80.0/24地址,否则可能会有问题
3 将Director,RIP1和RIP2的网关指向router 2
4 在各个RS的服务器上修改内核参数
  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/lo/arp_ignore
  echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
  ifconfig lo:0 192.168.8.8/32 broadcast 192.168.8.8 up
  route add -host 192.168.8.8 dev lo:0 
5 在Director上配置IP地址
  ifconfig ens33 192.168.8.8/32 broadcast 192.168.8.8 up
  route add -host 192.168.8.8 dev ens33
6 这种方式,需要在前段路由器上添加一条路由规则,执行vip,通过route2 的网卡
7 在Director上写规则
  ipvsadm -A -t 192.168.8.8 -s rr
  ipvsadm -a -t 192.168.8.8:80 -r 172.18.23.71:80 -g -w 1
  ipvsadm -a -t 192.168.8.8:80 -r 172.18.23.72:80 -g -w 2
  ipvsadm -A -t 192.168.8.8:3306 -s rr
  ipvsadm -a -t 192.168.8.8:3306 -r 172.18.23.71:80 -g -w 1
  ipvsadm -a -t 192.168.8.8:3306 -r 172.18.23.72:80 -g -w 2

对于上面三种lvs的实现:可以使用FWM即:基于防火墙标记进行统一调度,请自行进行调节

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

推荐阅读更多精彩内容

  • 集群的概念LVS介绍ipvsadm的使用实现LVS-NAT实现LVS-DRLVS高可用 一、集群的概念 (一)系统...
    哈喽别样阅读 750评论 0 2
  • 1.Cluster(集群)概念 (1)系统扩展方式: Scale UP:向上扩展,增强Scale Out:向外扩展...
    尛尛大尹阅读 1,089评论 0 4
  • (一)LVS概念 LVS( Linux Virtual Server)是一种负载均衡(LB,Laod Balanc...
    uangianlap阅读 3,576评论 0 9
  • 负载均衡集群是 load balance 集群的简写,翻译成中文就是负载均衡集群。常用的负载均衡开源软件有ngin...
    jiangmo阅读 1,312评论 0 1
  • 本文部分观点图片采用于:http://chenx1242.blog.51cto.com 随着智能机的逐渐普及,大量...
    BossHuang阅读 3,114评论 0 16