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

[经验分享] LVS+keepalived(双主模型)

[复制链接]

尚未签到

发表于 2018-12-30 09:42:47 | 显示全部楼层 |阅读模式
   集群类型:

            LB:负载均衡
                    组件:负载均衡器、调试器、分发器
            HA:高可用
                     活动服务器、备用服务器
            HP:高性能
            DS:分布式
                    分布式存储、分布式计算
  

    主要写LB类型,lvs集群:
            lvs集群类型:
                 lvs-nat
                 lvs-dr
                 lvs-tun
                 lvs-fullnat     
  

      lvs-nat  :多目标的DNAT,将请求报文中的目标IP和目标PORT修改为某一RS的IP和PORT实现转发。
        特点:
             1、请求报文和响应报文都是由Director转发,较高负载下,Director易于成为系统性能瓶颈。
             2、lvs主机必须是Linux,RS可以是任意OS  
             3、RIP和DIP必须在同一IP网络,且应该使用私有地址;RS的网关要指向DIP(保证响应报文必                  须经由VS)
              4、支持端口映射

      lvs-dr:通过为请求报文的重新封闭一个MAC首部进行转发,源MAC是DIP所在接口的MAC,目标MAC是挑选出某RS的RIP所在接口的MAC地址;IP首部不会发生变化;之后由RS直接响应客户端,不经由Director,是通过修改RS的内核参数,使每个RS都有Director的地址,但多个RS之间又不会互相冲突。
           特点:
                1、请求报文必须由Directory调度,但响应报文必须不能经由Director
                2、RS可以使用大多的OS
                3、RS的RIP可以使用私有地址,也可以使用公网地址;
                4、不支持端口映射
  

       lvs-tun:tunnel隧道模型
  
   修改请求报文的源IP和目标IP,将请求报文的原IP和目标IP上再次封装一个Directory自己的原IP和目标IP,基于此种机制进行转发;
                   特点:
                          1、RIP,DIP,VIP全得是公网地址;
  2、RS网关不能指向也可能指向DIP;
  3、请求报文经由Director转发,但响应报文将直接发往CIP;
  4、不支持端口映射;
  5、RS的OS必须支持隧道功能;
  

          lvs-fullnat:
                通过同时修改请求报文的源IP地址(CIP-->DIP)和目标IP地址(VIP-->RIP)进行转发;
  
  (1)VIP是公网地址,RIP和DIP是私网地址,且通常不在同一网络中,但需要经由路由器互通;
  (2)RS收到的请求报文源IP为DIP,因此响应报文将直接响应给DIP;
  (3)请求和响应报文都经由Director;
  (4)支持端口映射;
  

             lvs会话保存方法:
  session sticky 地址绑定,原地址哈希(会影响负载均衡效果)
  session cluster 会话集群,负载到任何一个节点,会话都存在
  session server 找一台服务器专用保持会话
  

  
  lvs调度方法:

  有两种模式:基于是否考虑后端主机的当前负载
  静态方法:
  rr, wrr, sh, dh (仅根据算法本身进行调度);
                      动态方法:
                            lc, wlc, sed, nq, lblc, lblcr (  根据算法及各RS当前的负载状态进行调度


  静态方法:
  RR:Round Robin:轮询/轮调/轮叫;
                        WRR:Weighted RR:加权轮询;(根据各个rs的情况,公平分配)
                        SH:Source Hashing:源地址哈希;(将来自同一IP地址的请求始终发往同一rs),很粗糙,削弱了负载均衡
                        DH:Destination Hashing:目标地址哈希;(客户端上次所请求的地址是由哪台服务器所代理,服务器会有缓存,下次来直接就分配给上一次代理的服务器)
  
  
  动态方法:
                        负载值Overhead=
  
                        LC: least connections,最少连接;
                                    Overhead=Active*256+Inactive活动链接数x256+非活动连接数
                        WLC: Weighted LC, 加权最少连接;
                                    Overhead=(Active*256+Inactive)/weight活动链接数x256+非活动连接数÷权重
                         SED:Shortest Expections Delay最短期望延迟
                                    Overhead=(Active+1)*256/weight活动链接数+1x256÷权重
                         NQ:Never Queue永不排队,先按权重大小,之后再用sed算法
                         LBLC:Locality-Based LC
                                  动态的DH算法;
                         LBLCR:LBLC with Replication
                             带复制功能的LBLC;
  
  ipvsadm:用户空间的集群服务管理工具;

  # ipvsadm -Ln 查看规则

  Prot:哪个协议

  LocalAddress:Port  : vip的地址
  
  Scheduler : 调度方法
  Flags :标志位

  RemoteAddress:Port   :rs的地址
  Forward: 转发方法
  weight:权重
  ActiveConn:活动联连接数
  InActConn:非活动连接数

  #ipvsadm -Ln --rate  查看速率

   CPS :每秒钟的连接数
   InPPS  :每秒的入站报文
   OutPPS:每秒的出报文
   InBPS:每秒的入站字节
   OutBPS:每秒的出站字节
  # ipvsadm -Ln --stats  统计数据
   Conns :总的连接数
   InPkts:入站报文书数
   OutPkts :出站的报文数
   InBytes:入站的字节数
   OutBytes:出站的字节数
  

  
  管理集群服务:增、改,删,查
  ipvsadm -A|E -t|u|f service-address [-s scheduler]  [-p [timeout]]
  -A:增
  -E:修改
  -t:tcp
  -u:udp
  -f:firewall mark防火墙标标记
  service-address:
  -t, tcp, vip:port
  -u, udp, vip:port
  -f, fwm, mark标记
  -s scheduler:调度方法,默认为wlc;
  

  e.g. 添加一个集群
       # ipvsadm -A -t 192.168.19.129:80 -s rr
  # ipvsadm -Ln
  e.g. 将算法改为wrr
  # ipvsadm -E -t 192.168.19.129:80 -s wrr
  
  ipvsadm -D -t|u|f service-address(指明哪个协议哪个地址)
  -D:删除
  
  管理集群上的RS:

  ipvsadm -a|e -t|u|f service-address -r server-address [-g|i|m] [-w weight]
  -a:增
  -e:改
  -r server-address
  RS的地址;
  rip[:port](有些类型不支持端口映射,此处端口可以省略)
  集群类型:
          -g, gateway, dr类型,默认
  -i, ipip, tun类型
  -m, masquerade, nat类型
          -w weight---权重(有的算法不支持权重)
  
  e.g.添加一个RS
  # ipvsadm -a -t 192.168.19.129:80 -r 192.168.19.128 -m -w 1
            e.g.将 w改为3(注意地址不能改,只能删)
                  # ipvsadm -e -t 192.168.19.129:80 -r 192.168.19.128 -m -w 3
  
  e.g.  以上两步骤图示:
  
  

  
  查看:
  ipvsadm -L|l [options]
  -n, --numeric:数字格式显示IP和PORT;
  --exact:精确值;不做单位换算
  -c, --connection:显示IPVS连接;
  --stats:统计数据;
  --rate:速率;
  
  清空规则:
  -C:
  
  保存和重载:

  ipvsadm -S > /PATH/TO/SOME_RULE_FILE
  重载:

  ipvsadm -R <  /PATH/TO/SOME_RULE_FILE
  
  清空计数器:
  ipvsadm -Z [-t|u|f service-address]
  


  e.g.   保存刚才的规则
              # ipvsadm -S > /tmp/ipvsadm-config.v1
           需要用时只需重载即可
              # ipvsadm -R < /tmp/ipvsadm-config.v1
  

  要想开机自启:(CentOS 7)
  # ipvsadm -S > /etc/sysconfig/ipvsadm
  

  
  lvs-nat:
  设计要点:
  (1) DIP与RIP要在同一IP网络,RIP的网关要指向DIP;
  (2) 支持端口映射;
  (3) 是否用到共享存储取决业务需求;
  

  Lvs(DR)+keepalived(双主):
  

  版本:
  keeplived :1.2.21
  ipvsadm :1.26
  

  准备4台服务器:
  Directo 1:
  DIP   192.168.1.55
  主VIP 192.168.1.15
  备VIP 192.168.1.16
  

  Directo 2:
  DIP   192.168.1.56
  主VIP 192.168.1.16
  备VIP 192.168.1.15
  

  RS1
  eth0 192.168.1.57
  VIP 192.168.1.15
  VIP 192.168.1.16
  

  RS2
  eth0 192.168.1.58
  VIP 192.168.1.15
  VIP 192.168.1.16
  

  1、确保 iptables  selinux 不会成为阻碍
  2、确保两台lvs同步时间
  3、在Directo 1、Directo 2,都按装上ipvsadm、keepalived。
  4、在RS1、RS2,都安装上http服务。
  

  安装keepalived:
  

  # cd /app/soft
  # su - CACC
  $ mkdir /app/keepalived
  $ wget http://www.keepalived.org/software/keepalived-1.2.21.tar.gz
  $ tar -xf keepalived-1.2.21.tar.gz
  $ cd  keepalived-1.2.21
  $ ./configure --prefix=/app/keepalived
  $ make && make install
  $ vim /app/keepalived/etc/keepalived/keepalived.conf
  vrrp_instance VI_1 {
  state MASTER
  interface eth0
  virtual_router_id 51
  priority 100
  advert_int 1
  authentication {
  auth_type PASS
  auth_pass HNx6k728
  }
  virtual_ipaddress {
  192.168.1.15
  }
  }
  vrrp_instance VI_2 {
  state BACKUP
  interface eth0
  virtual_router_id 511
  priority 98
  advert_int 1
  authentication {
  auth_type PASS
  auth_pass HNx6k728
  }
  virtual_ipaddress {
  192.168.1.16
  }
  }
  

  virtual_server 192.168.1.15 80 {
  delay_loop 6
  lb_algo rr
  lb_kind DR
  protocol TCP
  

  real_server 192.168.1.57 80{
  weight 1
  HTTP_GET {
  }
  url {
  path /
  }
  connect_timeout 3
  nb_get_retry 3
  delay_before_retry 3
  }
  }
  real_server 192.168.1.58 80 {
  weight 1
  HTTP_GET {
  }
  url {
  path /
  }
  connect_timeout 3
  nb_get_retry 3
  delay_before_retry 3
  }
  }
  }
  

  virtual_server 192.168.1.16 80 {
  delay_loop 6
  lb_algo rr
  lb_kind DR
  protocol TCP
  real_server 192.168.1.57 80 {
  weight 1
  HTTP_GET {
  url {
  path /
  

  }
  connect_timeout 3
  nb_get_retry 3
  delay_before_retry 3
  }
  }
  real_server 192.168.1.58 80 {
  weight 1
  HTTP_GET {
  url {
  path /
  }
  connect_timeout 3
  nb_get_retry 3
  delay_before_retry 3
  }
  }
  }
  

  # scp /etc/keeplived/keepalived.conf root@192.168.1.56:/etc/keepalived/keepalived.conf
  

  另一个lvs:            
  keepalived.conf只需修改以下即可
  vrrp_instance VI_1 {
  state BACKUP
  interface eth0
  virtual_router_id 51
  priority 98
  

  vrrp_instance VI_2 {
  state MASTER
  interface eth0
  virtual_router_id 511
  priority 100
  

  ipvsadm 安装:
  

  检查是否安装依赖包:
  rpm -ql Kernel-devel
  rpm -ql gcc
  rpm -ql openssl
  rpm -ql openssl-devel
  rpm -ql popt
  rpm -ql popt-deve
  rpm -ql libnl
  rpm -ql libnl-devel
  rpm -ql popt-static
  # cd /app/soft
  # wget http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.26.tar.gz
  建立编译安装需要的软连接:
  # ln -s /usr/src/kernels/2.6.32-642.4.2.el6.x86_64/ /usr/src/linux
  # make && make install
  验证:
  # ipvsadm
  

  另一台ipvsadm同样操作;
  

  关闭RS1、RS2 arp响应:
  echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
  echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
  echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
  echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
  

  配置RS1与RS2的VIP(分别在RS1、RS2执行)
  ifconfig lo:0 192.168.1.15 netmask 255.255.255.255 broadcast 192.168.1.15
  ifconfig lo:00 192.168.1.16 netmask 255.255.255.255 broadcast 192.168.1.16
  
  为RS1、RS2添加路由(分别在RS1、RS2执行)
  route add -host 192.168.1.15 dev lo:0
  route add -host 192.168.1.16 dev lo:00
  Directo 1:
  $ /app/keepalived/sbin/keepalived
  # service network restart
  查看规则:
  # ipvsadm
  IP Virtual Server version 1.2.1 (size=4096)
  Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
  TCP  192.168.1.15:80 rr
  -> 192.168.1.57:80              Route   1      0          0         
  -> 192.168.1.58:80              Route   1      0          0         
  TCP  192.168.1.16:80 rr
  -> 192.168.1.57:80              Route   1      0          0         
  -> 192.168.1.58:80              Route   1      0          0      
  Directo 2:
  $ /app/keepalived/sbin/keepalived
  # service network restart
  查看规则:
  # ipvsadm
  IP Virtual Server version 1.2.1 (size=4096)
  Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
  TCP  192.168.1.15:80 rr
  -> 192.168.1.57:80              Route   1      0          0         
  -> 192.168.1.58:80              Route   1      0          0         
  TCP  192.168.1.16:80 rr
  -> 192.168.1.57:80              Route   1      0          0         
  -> 192.168.1.58:80              Route   1      0          0      
  

  在RS1与RS2上安装http服务并启动。
  

  测试:
  curl 192.168.1.15
  curl 192.168.1.16
  停掉LVS2的keepalived服务,查看LVS1的ip及测试是否正常
  ip addr show eth0






运维网声明 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-657466-1-1.html 上篇帖子: 5 keepalived高可用ipvs(主备模式) 下篇帖子: 通过keepalived为ipvs和web实现高可用能力
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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