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

[经验分享] Linux自学笔记——linux cluster 之lvs

[复制链接]

尚未签到

发表于 2019-1-3 11:33:24 | 显示全部楼层 |阅读模式
  Cluster

  系统扩展的方式:
         Scale up:向上扩展;
         Scale out:向外扩展
  集群类型:
         LB:负载均衡集群,Load Balancing
         HA:高可用集群,High Availability
         HP:高性能集群,High Performancing
  系统:
         可扩展性
         可用性
         容量
         性能
  系统运维:可用 à 标准化 à 自动化
         www.top500.org
  构建高可用扩展性系统的重要原则:在系统内部尽量避免串行化和交互;
  
  GSLB:Global Service Load Balancing
         SLB:Service Load Balancing
  总结:
         分层
         分割
         分布式
                分布式应用
                分布式静态资源
                分布式数据和存储
                分布式计算
  LB集群的实现:
         硬件:
                F5 BIG-IP
                Citrix  NetScaler
                A10 A10
                Array
                Redware
         软件:
                lvs
                haproxy
                nginx
                ats(apache  traffic  server)
                perlbal
  
                基于工作的协议层次划分:
                       传输层:
                              lvs,haproxy(mode tcp)
                       应用层:
                              haproxy,nginx,ats,perlbal
  lvs(1)
         章文嵩:正明;
         Lvs:linux virtual server
        
         L4:四层交换,四层路由;
                根据请求报文的目录ip和port将其转发至后端主机集群中的某一台主机(根据挑选算法);
        
                netfilter
                       PREROUTING à INPUT
                       PREROUTING à FORWARD à POSTROUTING
                       OUTPUT – POSTROUTING
         lvs
                ipvsadm/ipvs
                ipvsadm:用户空间的命令行工具,用于管理集群服务;
                ipvs:工作内核中的netfilter  INPUT钩子上;
  
                支持TCP,UDP ,AH , EST , AH_EST , SCTP等诸多协议;
         lvs arch
                调度器:director,dispatcher,balancer
                RS:Real Server
  
                Client ip:CIP
                Director Virtual ip:VIP
                Director IP:DIP
                Real Server ip:RIP
         lvs type
                lvs-nat
                lvs-dr(direct routing)
                lvs-tun(ip tunneling)
                lvs-fullnat
  
                lvs-nat
多目标的DNAT(iptables):它通过修改请求报文的目标ip地址(同时可能会修改目标端口)至挑选出某RS的RIP地址实现转发;
1)      RS应该和DIP应该使用私网地址,且RS的网关要指向DIP;
2)      请求和响应报文都要经由director转发;极高负载的场景中,director可能会成为系统瓶颈;
3)      支持端口映射;
4)      RS可以使用任意OS;
5)      RS的RIP和Director的DIP必须在同一IP网络;
      
Note:客户端主机地址为cip,调度器Director主机有两块网卡,一块地址为vip,一块为dip,两台RS 的主机地址分为为RIP1,RIP2;
lvs-dr:direct routing
    它通过修改请求报文的目标MAC      地址进行转发;
           Director:VIP , DIP
           RSs:RIP , VIP
1)      保证全段路由器将目标ip为VIP的请求报文送给director;
解决方案:
       静态绑定
       arptables
       修改RS主机内核的参数
2)      RS的RIP可以使用私有地址;但也可以使用公网地址;
3)      RS跟Director必须在同一物理网络中;
4)      请求报文经由Director调度,但响应报文一定不能经由Director;
5)      不支持端口映射;
6)      RS可以是大多数的OS;
7)      RS的网关不能指向DIP
   
两个内核参数
      限制响应级别:arp_ignore;
             0:默认值,表示可使用本地任意接口上配置的任意地址响应;
             1:仅在请求的目标ip配置在本地主机的接收到请求报文接口上时,才给予回应;
      限制通告级别:arp_announce;
             0:默认值,把本机上所有的接口的所有信息向每个接口上的网络进行通告;
             1:尽量避免向非直接连接网络进行通告;
             2:必须避免向非本地直接连接网络进行通告;
      
总结:
  lvs-nat:请求和响应报文都经由director,且RIP和DIP必须在同一网络;
  lvs-dr:仅请求报文经由director,响应报文是由RS直接响应给client,Director与RS必须在同一物理网络;

  lvs-tun
不修改请求报文的ip首部,而是通过在原有的ip首部(cip vip)之外,在封装一个ip首部(dip《--》rip)
1)      RIP,DIP,VIP全得是公网地址;
2)      RS的网关不能指向DIP;
3)      请求报文必须经由director调度,但响应报文必须不能经由director;
4)      不支持端口映射;
5)      RS的OS必须支持隧道功能;
lvs-fullnat
    director通过同时请求报文的目标地址和源地址进行转发;
1)      VIP是公网地址;RIP和DIP是私网地址,二者无须在同一网络中;
2)      RS接收到的请求报文的源地址为DIP,因此要响应给DIP;
3)      请求报文和响应报文都必须经由director;
4)      支持端口映射机制;
5)      RS可以使用任意OS;
http:stateless无状态
  session保持:
         session绑定:
                source ip hash
                cookie
  session集群:
  session服务器;
lvs scheduler
  静态方法:仅根据算法本身进行调度;
         RR:round robin,论调
         WRR:weighted rr,带权重的轮调;
         SH:source hash,实现session保持的机制;将来自于同一个ip的请求始终调度至同一RS;
         DH:destination hash,将对同一个目标的请求始终发往同一个RS;
  动态方法:根据算法及各RS的当前负载状态进行调度;
                Overhead=
         LC:Least Connection
                Overhead=Active*256+Inactive
         WLC:Weighted  LC
                Overhead=(Active*256+Inactive)/weight
         SED:Shortest  Expection  Delay
                Overhead=(Active+1)*256/weight
         NQ:Never Queue
                SED算法的改进;
         LBLC:Loality-Based  LC,即为动态的DH算法;
                正向代理情形下的cache  server调度;
         LBLCR:Locality-Based  Least-Connection with Replication,带复制功能的LBLC算法;
ipvs的集群服务:
  tcp, udp , ah , esp , ah_esp , sctp
1)      一个ipvs主机可以同时定义多个cluster service;
tcp ,udp
2)      一个cluster service上至少应该一个real server;
定义时:指明lvs-type,以及lvs scheduler;
         ipvsadm的用法:
                管理集群服务
                       ipvsadm –A|E  -t|u|f  service-address  [-s scheduler]
                       ipvsadm   -D –t|u|f  service-address
                              service-address
                                     tcp: -t  ip:port
                                     udp: -u  ip:port
                                     fwn: -f  mark
                              -s scheduler
                                     默认为WLC
                管理集群服务中的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:numeric,基于数字格式显示地址和端口;
                              -c:connection,显示ipvs连接;
                              --states:统计数据;
                              --rate:速率;
                              --exact:精确值;
                保存和重载:
                       Ipvsadm –R
                       Ipvsadm  -S [-n]
                置零计数器:
                       Ipvsadm  -Z [-t|u|f  service-address]
  
  lvs-nat演示:
  实验环境:
        
         三台虚拟主机,一台作Director,另外两台作RS,在这里,Director的两块网卡,vip是nat模式,dip是自定义vmnet2模式,两台RS的网卡也是vmnet2模式;两台RS的网关都指向dip;
1.      打开Director的核心转发功能;
   
2.      设置Director的ip地址;
   
3.      两台RS主机的ip地址配置
          1)      RS1主机的配置:

              Note:这里在配置IP地址时在配置文件中直接指明了网关;如果没有指明用route命令添加路由;

          2)      RS2主机的ip配置;

4.      提供测试页面,并开启web服务;
          1)      RS1测试页面及服务开启;

          2)      RS2测试页面及服务开启;

5.      在Director上添加规则;
   
6.      访问测试;
   
由上可知,此次试验确实达到了负载均衡集群的目的。同时我们也可以在添加规则时,还另外的调度算法再进行测试,这里就不演示了。
  
  Lvs-dr演示:
  实验环境:
        
         准备三台虚拟主机,一台作Director,另外两台作RS,在Director上配置两个ip地址,DIP配置在ens33网卡上,vip配置在ens33 的别名上ens33:0,另外RS也同样配置两个地址,RIP配置在网卡eth0上,vip配置在lo的别名上lo:0;
         同时各RS要修改内核参数,来限制arp响应和通告的级别;
1.      配置Director的物理网卡DIP和物理网卡别名VIP;
   
2.      写一个脚本自动配置RS;
          1)      编辑执行RS1脚本;
              
              执行脚本后,查看配置:

          2)      编辑执行RS2的脚本;

          执行脚本后查看配置:

3.      使用ipvsadm定义集群规则;
   
4.      开启RS1和RS2的web服务;
5.      客户端测试;
   
此次用的是带权重的rr算法。所以调用两次RS2,再调用一次RS1,实现了集群。
  
  lvs(2)
  FWM:FireWall  Mark
  功用:借助于防火墙标记来分类报文,而后基于标记定义集群服务;可将共享一组RS的集群服务统一进行定义;
  通过FWN定义集群的方式:
1)      在director上的netfilter的mangle表的PREROUTING定义用于“打标”的规则;
iptables –t  mangle  -A  PREROUTING  -d  $vip  -p $protocol  --dports  $port  -j MARK --set-mark  #
$vip:VIP地址
$protocol:协议
$port:协议端口
2)      基于FWM定义集群服务;
Ipvsadm –A  -f  #  -s  scheduler
Ipvsadm  -a  -f #  -r  RS  …
  
  演示:
1.      前两个步骤与上面的演示一样;
2.      定义iptables规则;
   
3.      定义集群规则;
   
4.      开启RS1和RS2的web服务;
5.      测试
          1)      Web服务测试;

          2)      ssh服务测试;

  由上可以看出,web服务和ssh服务都实现乐集群负载均衡;
  
  lvs persistence:lvs的持久连接
         功能:无论ipvs使用何种调度方法,其都能实现来自于同一个client的请求始终定向至第一次调度时挑选出的RS;
                持久连接模板:独立于算法
                       Sourceip  rs  timer
         持久连接的实现方式:
                每端口持久:PPC,单服务器持久调度
                每FWM持久:PFWMC,单FWM持久调度
                       PORT  AFFINITY
                每客户端持久:PCC,单客户端持久调度
                       Director会将用户的任何请求都识别为集群服务,并向RS进行调度;
                              TCP:1-65535
                              UDP:1-65535
  演示:lvs的持久连接;
1.      以上的测试是在做持久连接之前的测试,下面我们将在做持久连接之后,对比测试结果,前两个步骤跟上面的一样;
2.      定义集群规则;
   
3.      测试;
定义持久连接之前;
   
定义持久连接之后;
   
      Note:以上是每端口持久,至于每FWM持久定义则先使用iptbales定义标记,在定义标记持久;每客户端持久,则在定义调度器时,把ip:port,port写成0,意义为所有端口;
  
  HA
         SPOF:Single  Point  of  Failure
         director:在节点级别进行冗余:HA集群解决方案:keepalived
         realserver:让director对其做健康状态监测,并且根据检测的结果自动完成添加或移除等管理功能;
1.      基于协议层检查
Ip:icmp
传输层:检测端口的开放状态
应用层:请求获取关键性资源;
2.      检查频度
3.      状态判断
下线:ok --> failure --> failure -->failure
上线:failure --> ok --> ok
4.      back server,sorry server
  示例脚本:
        
  DR类型director示例:
        
  DR类型RS示例:
        
  
  实践任务:
1)      建立一个至少由两个RS组成的负载均衡集群:rs用于提供apache+php,mysql由单独的服务器实现;
2)      部署安装discuz_x3.1:分别基于rr/lc/sh算法调度,查看两台rs是否都接收到了请求;
部署环境说明:架设页面访问路径为/www/app/discuz,则需要将discuz_3.1部署于/www/app目录中,而后将/www/app/discuz创建为符号链接,链接至带版本号的目录上;多台RS路径均采用此方式;
3)      基于灰度的方式进行应用程序升级;
4)      尝试着写脚本自动进行灰度发步;

待续。




运维网声明 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.iyunv.com/thread-658955-1-1.html 上篇帖子: LVS实现web服务的负载均衡 下篇帖子: LVS集群NAT模式
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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