设为首页 收藏本站
查看: 1161|回复: 0

[经验分享] lvs的结构以及使用方法

[复制链接]

尚未签到

发表于 2019-1-5 07:36:08 | 显示全部楼层 |阅读模式
  内容:
  1、lvs的概念
  2、lvs的工作过程
  3、lvs的类型
  4、lvs的调度方法
  5、ipvsadm的使用
  

  一、lvs
  LVS(Linux Virtual Server)是前阿里巴巴首席科学家章文嵩博士在大学期间的一款开源的负载均衡软件, 可实现四层的负载均衡。
  首先,lvs工作在传输层,lvs的架构和iptables类似,lvs由ipvsadm/ipvs组成,其中ipvsadm工作在用户空间
  lvs的术语:
  vs:virtual server,director
  rs:real server
  CIP:client IP
  VIP:virtual server IP
  DIP:ditecter IP(connect with rs)
  RIP:real server IP
  用户请求的IP一定是VIP,否则vs就失去了负载均衡的调度意义
  

  二、lvs的工作过程

  
  三、lvs的类型
  lvs有四种模型,其中前三种是通用的标准:
  (1)lvs-nat(DNAT)
  (2)lvs-dr
  (3)lvs-tun
  (4)lvs-fullnat(SANT、DNAT)(淘宝内部研发的模型,并非lvs标准的模型,要使用该模型要打上专门的补丁)
  
  

  LVS NAT的特性(实质是多目标的DNAT)
  1、RS应该使用私有地址;
  2、RS的网关的必须指向DIP;
  3、RIP和DIP必须在同一网段内;
  4、请求和响应的报文都得经过Director;在高负载场景中,Director很可能成为系统性能瓶颈;
  5、支持端口映射;
  6、RS可以使用任意支持集群服务的OS;
  lvs-nat:工作流程如图:
  
  

  LVS DR类型的特性:
  1、RS可以使用私有地址;但也可以使用公网地址,此时可以直接通过互联网连入RS以实现配置、监控等;
  2、RS的网关一定不能指向DIP;
  3、RS跟Dirctory要在同一物理网络内(不能由路由器分隔,因为VS通过封装MAC地址到RS);
  4、请求报文经过Directory,但响应报文一定不经过Director
  5、不支持端口映射;
  6、RS可以使用大多数的操作系统;
  
  由于DR类型中,VS、RS的VIP都是一样,如果在同一网段内会造成地址冲突,因此要解决地址冲突有一下三种方法:
  禁止RS响应对VIP的ARP广播请求:
  1、在前端路由上实现静态MAC地址VIP的绑定;
  前提:得有路由器的配置权限;
  缺点:Directory故障转时,无法更新此绑定;
  2、arptables
  前提:在各RS在安装arptables程序,并编写arptables规则
  缺点:依赖于独特功能的应用程序
  3、修改Linux内核参数
  前提:RS必须是Linux;
  缺点:适用性差;
  

  两个参数:
  arp_announce:定义通告模式
  arp_ignore:定义收到arp请求的时响应模式
  配置专用路由,以使得响应报文首先通过vip所配置的lo上的别名接口
  lvs-dr:工作流程如图
  
  lvs-tun:IP隧道
  1、RIP、DIP、VIP都得是公网地址;
  2、RS的网关不会指向也不可能指向DIP;
  3、请求报文经过Directory,但响应报文一定不经过Director;
  4、不支持端口映射;
  5、RS的OS必须得支持隧道功能;
  
  lvs-tun:工作流程如图:也是基于lvs-dr的模型,只不过不同的是,rs和vs不必在同一个物理的网络(实现物理冗余),而是通过隧道技术进行vs和rs间的通信

  

  lvs-fullnat:同时修改源IP和目标IP来进行转发
  特性:
  1、VIP是公网IP,DIP和RIP是私网地址,且通常不在同一网络中,但需要经路由器互通
  2、RS收到的请求报文源IP是DIP,因此响应报文直接响应给DIP
  3、请求和响应的报文都经由DIP,因此vs需要承受较大的压力
  4、支持端口映射
  
  
  四、lvs的调度方法
  lvs scheduler:lvs调度
  LVS的调度方法可以分为静态方法和动态方法:
  静态方法:仅根据算法本身进行调度,并没有考虑RS的负载情况
  rr: Round Robin 路由轮询
  wrr: Weighted RR 加权轮询
  sh: source hashing 源地址哈希,主要作用是保持session,使同一个客户端被调度到之前访问的同一个RS,所以需要保持会话时才使用该调度方法
  dh: destination hashing:目标地址哈希
  

  动态方法:根据算法及RS当前的负载状况
  lc: Least Connection最少连接
  Overhead=Active*256+Inactive
  结果中,最小者胜出;
  wlc: Weighted LC 加权的最少连接
  Overhead=(Active*256+Inactive)/weight
  结果中,最小者胜出
  sed: Shortest Expect Delay 最短期望延时
  Overhead=(Active+1)*256/weight
  结果中,最小者胜出
  nq: Nerver Queue 永不排队,sed算法的改进,第一轮时每个都要响应一次
  lblc: Locality-based Least Connection
  dh+lc
  lblcr: Replicated and Locality-based Least Connection,带复制的lblc
  其中wlc算法最为通用
  
  既然是负载均衡调度,我们也知道,http协议是无状态的,那么就要考虑一个问题,如果用户被调到不同RS时,其访问的信息怎么同步:
  
  负载均衡中Session持久机制:
  1、session sticky绑定:始终将同一个请求者的连接定向至同一个RS(第一次请求时仍由调度方法选择);没有容错能力,有损均衡效果;SH算法
  2、session cluster复制:在RS之间同步session,因此,每个RS持集群中所有的session;对于大规模集群环境不适用;
  3、session server服务器:利用单独部署的服务器来统一管理session;
  

  五、ipvsadm/ipvs的使用:
  (1)首先要查看内核是否已经装有ipvs的模块或功能,如果没有需要重新编译内核
[23:13 root@centos6.8~]# cat /boot/config-2.6.32-642.el6.x86_64 |grep -A 10 -i 'ipvs'
# IPVS transport protocol load balancing support
#支持的协议
CONFIG_IP_VS_PROTO_TCP=y
CONFIG_IP_VS_PROTO_UDP=y
CONFIG_IP_VS_PROTO_AH_ESP=y
CONFIG_IP_VS_PROTO_ESP=y
CONFIG_IP_VS_PROTO_AH=y
CONFIG_IP_VS_PROTO_SCTP=y
#
# IPVS scheduler
#支持的调度算法
CONFIG_IP_VS_RR=m
CONFIG_IP_VS_WRR=m
CONFIG_IP_VS_LC=m
CONFIG_IP_VS_WLC=m
CONFIG_IP_VS_LBLC=m
CONFIG_IP_VS_LBLCR=m
CONFIG_IP_VS_DH=m
CONFIG_IP_VS_SH=m
CONFIG_IP_VS_SED=m
CONFIG_IP_VS_NQ=m
--
# IPVS application helper
#
CONFIG_IP_VS_FTP=m
CONFIG_IP_VS_PE_SIP=m
#
# IP: Netfilter Configuration
#
CONFIG_NF_DEFRAG_IPV4=m
CONFIG_NF_CONNTRACK_IPV4=m
# CONFIG_NF_CONNTRACK_PROC_COMPAT is not set  (2)安装ipvsadm的客户端使用包
[23:21 root@centos6.8~]# yum install -y ipvsadm  
  ipvsadm的命令:
  ipvsadm
  ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]] [-M netmask]
  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]
  

  (3)可以讲命令安装一定的功能分类:
  集群服务相关:
      -A: 添加一个集群服务
      -t: tcp
      -u: udp
      -f: firewall mark,通常用于将两个或以上的服务绑定为一个服务进行处理时使用;
  

      service-address:
      -t VIP:port
      -u VIP:port
      -f firewall_mark
  

      -s 调度方法,默认为wlc
  

      -p timeout: persistent connection, 持久连接
  

      -E:修改定义过的集群服务
  

      -D -t|u|f service-address:删除指定的集群服务
  

  RS相关:
  

  -a:向指定的CS中添加RS
  -t|-u|-f service-address:指明将RS添加至哪个Cluster Service中
  

  -r: 指定RS,可包含{IP[:port]},只有支持端口映射的LVS类型才允许此处使用跟集群服务中不同的端口
  

  LVS类型:
  -g: Gateway, DR
  -i: ipip, TUN
  -m: masquerade, NAT
  

  指定RS权重:
  -w
  

  -e: 修改指定的RS属性
  

  -d -t|u|f service-address -r server-address:从指定的集群服务中删除某RS
  

  清空所有的集群服务
  -C
  

  保存规则:(使用输出重定向)
  ipvsadm-save
  ipvsadm -S
  

  载入指定的规则:(使用输入重定向)
  ipvsadm-restore
  ipvsadm -R
  

  查看ipvs规则等:
  -L [options]
  -n: 数字格式显示IP地址
  -c: 显示连接数相关信息
  --stats: 显示统计数据
  --rate: 速率
  --exact:显示统计数据的精确值
  

  -Z: 计数器清零
  

  FWM:FireWall Mark :借助于防火墙标记来分类报文,而后基于标记定义集群服务;可将多个不同的应用使用同一个集群服务进行调度;
  打标记方法(在Director主机):
  # iptables -t mangle -A PREROUTING -d $vip -p $proto --dport $port -j MARK --set-mark NUMBER
  
  基于标记定义集群服务:
  # ipvsadm -A -f NUMBER [options]
  
  (4)lvs persistence:持久连接
  持久连接模板:实现无论使用任何算法,在一段时间内,实现将来自同一个地址的请求始终发往同一个RS;
  
  ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]]
  
  port Affinity:
  每端口持久:每集群服务单独定义,并定义其持久性;
  每防火墙标记持久:基于防火墙标记定义持久的集群服务;可实现将多个端口上的应用统一调度,即所谓的port Affinity;
  每客户端持久:基于0端口定义集群服务,即将客户端对所有应用的请求统统调度至后端主机,而且可使用持久连接进行绑定;
  
  (5)保存及重载规则:
  保存:建议保存至/etc/sysconfig/ipvsadm
  ipvsadm-save > /PATH/TO/IPVSADM_FILE
  ipvsadm -S > /PATH/TO/IPVSADM_FILE
  systemctl stop ipvsadm.service
  
  重载:
  ipvsadm-restore < /PATH/FROM/IPVSADM_FILE
  ipvsadm -R < /PATH/FROM/IPVSADM_FILE
  systemctl restart ipvsadm.service
  
  





运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-659456-1-1.html 上篇帖子: 集群之lvs 基础知识 下篇帖子: LVS的三种模式
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表