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

[经验分享] LVS基础及LVS+Keepalived实现双主高可用负载均衡

[复制链接]

尚未签到

发表于 2018-12-29 11:13:06 | 显示全部楼层 |阅读模式
LVS基础及LVS+Keepalived实现双主高可用负载均衡

  
  
  LB集群:
     (Load  Balancing)即负载均衡集群,其目的是为了提高访问的并发量及提升服务器的性能,其    实现方式分为硬件方式和软件方式。
    硬件实现方式:
          常用的有 F5公司的BIG-IP系列、A10公司的AX系列、Citrix公司的 NetScaler系列等
    软件实现方式:
    LVS工作于传输层、nginx工作于应用层、haproxy工作于传输层和应用层
  本文主要讲解LVS。


  一、什么是LVS ?
   1. LVS:(Linux Virtual Server)Linux虚拟服务,工作于前端调度器内核的netfilter模块上,根据请求报文的目标IP和目标PORT将其调度转发至后端的某主机,其转发是依赖于四层协议的特征进行转发的,因此需要在内核的TCP/IP协议栈进行过滤筛选,这样的过滤转发规则由系统管理员进行定义。

   2. LVS两段式组成:
     ipvsadm:用户空间的命令行工具,用于管理集群服务及集群服务上的主机(RS)。
     ipvs:工作与内核上的netfilter的INPUT钩子之上的程序,可根据用户定义的集群实现请求转发。
  

     工作原理图解如下:
  

  LVS集群专用术语:
         CIP:发送请求的客户端IP地址。
VIP:lvs调度器的IP地址,也是向客户端提供服务的IP地址。
DIP:lvs调度器与后端real server之间通信使用的IP地址。
RIP:提供真正服务的real server的IP地址。
vs:虚拟服务器,调度器,
rs: 后端提供真实服务的服务器

  3.LVS集群的类型:
  1)lvs-nat:
     多目标的DNAT,通过将请求报文中的目标地址和目标端口修改为挑选出的某RS的RIP和PORT实现转发
  2)lvs-dr:
     通过为请求报文的重新封闭一个MAC首部进行转发,源MAC是DIP所在接口的MAC,目标MAC是挑选出某RS的RIP所在接口的MAC地址;IP首部不会发生变化(CIPVIP)
  3)lvs-tun:
      不修改请求报文的IP首部(源IP为CIP,目标IP为VIP),而是原IP首部之外再封装一个IP首部(源IP为DIP,目标IP为挑选出的RS的RIP)
  4)lvs-fullnat
     通过同时修改请求报文的源IP地址(CIP-->DIP)和目标IP地址(VIP-->RIP)进行转发

  4.LVS集群的调度算法(Scheduler):
        根据其调度时是否考虑后端主机的当前负载,可分为静态方法和动态方法两类
  
  静态算法:仅根据算法自身进行调度

  动态算法:根据算法及后端主机当前的负载状态进行调度
  

  
  查看当前系统支持的算法:
  

  
  5.ipvsadm管理工具用法
  

  管理集群:ipvsadm -A|E -t|u|f service_address [-s scheduler]
                A:增  -E:修改
-t:tcp  -u:udp  -f:firewall mark
-s scheduler:调度算法,默认为wlc
ipvsadm -D  -t|u|f service_address  删除集群
  管理集群上的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
  

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

  重载:
  ipvsadm -R <  /PATH/TO/SOME_RULE_FILE
  ipvsadm-restore < /PATH/TO/SOME_RULE_FILE
  

  清空计数器:
  ipvsadm -Z [-t|u|f service-address]
  

  
   二、LVS-NAT工作模型及原理
  
  1.lvs-nat原理
     多目标的DNAT,通过将请求报文中的目标地址和目标端口修改为挑选出的某RS的RIP和PORT实现转发;
  

  (1)RIP和DIP必须在同一IP网络,且应该使用私有地址;RS的网络要指向DIP(保证响应报文必须经由VS);
  (2)请求报文和响应报文都经由Director转发,较高负载下,Director易于成为系统性能瓶颈;
  (3)支持端口映射;
  (4)VS必须是Linux,RS可以是任意OS

  2.lvs-nat测试
  
    测试环境:3台虚拟机
Director主机(两张网卡)IP:
         外网:172.18.123.14
         内网:192.168.100.254
         RS1主机IP:192.168.100.20
RS2主机IP:192.168.100.21
        注:Director内网ip及RS主机网卡均设置为仅主机模式,RS主机的网关需指向192.168.100.254,安装apache服务且处于开启状态。
  1).在Director主机上安装ipvsadm并配置集群服务。


   2).测试


  

  三、LVS-DR工作模型及原理
  
  1.lvs-dr
        Direct Routing:通过为请求报文的重新封闭一个MAC首部进行转发,源MAC是DIP所在接口的MAC,目标MAC是挑选出某RS的RIP所在接口的MAC地址;IP首部不会发生变化(CIPVIP);
  

  1)确保前端路径器将目标IP为VIP的请求报文发往Director:
       解决方案:
    在路由器上静态绑定VIP和Director的MAC地址;
    禁止RS响应VIP的ARP请求,禁止RS的VIP进行通告
                 (a) arptables
          (b) 修改RS的内核参数,并把VIP绑定lo的别名上;
              arp_ignore, arp_announce
  2)RS的RIP可以使用私有地址,也可以使用公网地址;

  3)RS跟Director必须在同一物理网络;RS的网关必须不能指向DIP;
  4)请求报文必须由Directory调度,但响应报文必须不能经由Director;
  5)不支持端口映射;
  6)RS可以使用大多的OS;
  
  2.lvs-dr测试
  
    测试环境(CentOS 7)在director上安装ipvsadm
  
     Director:
          DIP:172.18.123.14
VIP:172.18.123.15
     RS1:
RIP:172.18.123.50
VIP:172.18.123.15
     RS2:
RIP:172.18.123.51
          VIP:172.18.123.15
  

  

  1.关闭RS1RS2arp响应:分别在RS1RS2主机上执行以下命令
  
  2.分别在三台主机上配置VIP

  在Director
  分别在RS1及RS2上设置VIP
  
  3.增加路由
  在Director:
  

  RS1及RS2:
  
  
  4.在Director上添加集群列表
  
  
  5.测试

注:arp响应限制
  1arp_ignore:
  定义对目标地址为本地IPARP询问不同的应答模式0
  0 - (默认值): 回应任何网络接口上对任何本地IP地址的arp查询请求
  1 - 只回答目标IP地址是来访网络接口本地地址的ARP查询请求
  2 -只回答目标IP地址是来访网络接口本地地址的ARP查询请求,且来访IP必须在该网络接口的子网段内
  3 - 不回应该网络界面的arp请求,而只对设置的唯一和连接地址做出回应
  4-7 - 保留未使用
  8 -不回应所有(本地地址)的arp查询
  
  2)arp_announce:
  对网络接口上,本地IP地址的发出的,ARP回应,作出相应级别的限制: 确定不同程度的限制,宣布对来自本地源IP地址发出Arp请求的接口
  0 - (默认) 在任意网络接口(eth0,eth1lo)上的任何本地地址
  1 -尽量避免不在该网络接口子网段的本地地址做出arp回应. 当发起ARP请求的源IP地址是被设置应该经由路由达到此网络接口的时候很有用.此时会检查来访IP是否为所有接口上的子网段内ip之一.如果改来访IP不属于各个网络接口上的子网段内,那么将采用级别2的方式来进行处理.
  2 - 对查询目标使用最适当的本地地址.在此模式下将忽略这个IP数据包的源地址并尝试选择与能与该地址通信的本地地址.首要是选择所有的网络接口的子网中外出访问子网中包含该目标IP地址的本地地址. 如果没有合适的地址被发现,将选择当前的发送网络接口或其他的有可能接受到该ARP回应的网络接口来进行发送.
  

  
  四、基于Keepalived实现lvs双主高可用集群及部署应用
  
  1.实验拓扑结构图
  

  
  2.部署环境

  3.安装软件
   1)保证LVS1LVS2时间同步,并能够通信,并在两台主机上安装keepalivedipvsadm
  

  2)配置LVS1keepalived.conf
  ! Configuration File for keepalived
  
  global_defs {
     notification_email {
                 root@localhost
     }
     notification_email_from zzpp@zp.com
     smtp_server 127.0.0.1
     smtp_connect_timeout 30
     router_id MY_LVS
  }
  
  vrrp_instance VI_1 {
      state MASTER
      interface eno16777736
      virtual_router_id 123
      priority 100
      advert_int 1
      authentication {
          auth_type PASS
          auth_pass abcdef
      }
      virtual_ipaddress {
          172.18.123.22
      }
  }
  
  vrrp_instance VI_2 {
      state BACKUP
      interface eno16777736
      virtual_router_id 223
      priority 98
      advert_int 1
      authentication {
          auth_type PASS
          auth_pass abcdef
      }
      virtual_ipaddress {
          172.18.123.23
      }
  }
  
  virtual_server 172.18.123.22 80 {
      delay_loop 6
      lb_algo rr
      lb_kind DR
      protocol TCP
  
      real_server 172.18.123.50 80 {
          weight 1
          HTTP_GET {
              url {
                path /
              }
              connect_timeout 3
              nb_get_retry 3
              delay_before_retry 3
          }
      }
  
      real_server 172.18.123.51 80 {
          weight 1
          HTTP_GET {
              url {
                path /
              }
              connect_timeout 3
              nb_get_retry 3
              delay_before_retry 3
          }
      }
  }
  
  virtual_server 172.18.123.23 80 {
      delay_loop 6
      lb_algo rr
      lb_kind DR
      protocol TCP
  
      real_server 172.18.123.50 80 {
          weight 1
          HTTP_GET {
              url {
                path /
              }
              connect_timeout 3
              nb_get_retry 3
              delay_before_retry 3
          }
      }
  
      real_server 172.18.123.51 80 {
          weight 1
          HTTP_GET {
              url {
                path /
              }
              connect_timeout 3
              nb_get_retry 3
              delay_before_retry 3
          }
      }
  }
  

  3) scp LVS1的keepalived.conf到LVS2的/etc/keepalived/下,并修改下述标识内容,其他内容不变。
  
  vrrp_instance VI_1 {
      state BACKUP
      interface eno16777736
      virtual_router_id 123
      priority 98
      advert_int 1
      authentication {
          auth_type PASS
          auth_pass abcdef
      }
      virtual_ipaddress {
          172.18.123.22
      }
  }
  
  vrrp_instance VI_2 {
      state MASTER
      interface eno16777736
      virtual_router_id 223
      priority 100
      advert_int 1
      authentication {
          auth_type PASS
          auth_pass abcdef
      }
      virtual_ipaddress {
          172.18.123.23
      }
  }
  
  
  4)在RS1及RS2上安装httpd、php及php-mysql
  

  准备测试页

  配置内核及VIP,运行下面脚本:bash
  #!/bin/bash
  #
  VIP1=172.18.123.22
  VIP2=172.18.123.23
  interface1="lo:0"
  interface2="lo:1"
  
  case $1 in
  start)
  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/all/arp_announce
  echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
  

  ifconfig $interface1 $VIP1 broadcast $VIP1 netmask 255.255.255.255 up
  route add -host $VIP1 dev $interface1
  ifconfig $interface2 $VIP2 broadcast $VIP2 netmask 255.255.255.255 up
  route add -host $VIP2 dev $interface2
  ;;
  stop)
  

  echo 0 > /proc/sys/net/ipv4/conf/all/arp_ignore
  echo 0 > /proc/sys/net/ipv4/conf/lo/arp_ignore
  echo 0 > /proc/sys/net/ipv4/conf/all/arp_announce
  echo 0 > /proc/sys/net/ipv4/conf/lo/arp_announce
  ifconfig $interface1 down
  ifconfig $interface2 down
  ;;
  status)
  if  ifconfig lo:0 | grep $VIP1 &> /dev/null && ifconfig lo:1 | grep $VIP2  &> /dev/null;then
  echo "ipvs is running"
  else
  echo "ipvs is stopped"
      fi
  ;;
  *)
  echo "Usage: `basename $0` {start|stop|status}"
  exit 1
  esac
  查看Rs主机的ip信息:
  
  
  5)测试,启动LVS1LVS2主机上的keepalived服务,查看两节点的ip信息及ipvs规则
  
  
  通过浏览器访问172.18.123.22172.18.123.23
  


  停掉LVS2keepalived服务,查看LVS1ip及测试访问均正常。
  
  6)在SQL1主机上安装Mariadb数据库,并授权用户
  
  在两台RS上配置测试是否连通Mariadb
  
  
  四、部署phpwind
  1.在RS1RS2主机上下载phpwind_v9.0.1.141223_utf8.zip,解压到/var/www/html目录下,更改解压后目录的属主属组为apache用户
  
  

  
  出现下述错误,安装php-xml即可
  
  

  安装成功
  
  测试OK
  


  


  

  

  


  

  

  

  

  


  


  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  




运维网声明 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-657189-1-1.html 上篇帖子: MySQL共享存储主备模式利用Keepalived实现双机高可用 下篇帖子: CentOS6.4 LVS+keepalived高可用负载均衡服务配置
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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