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

[经验分享] 突破LVS瓶颈,LVS Cluster部署(OSPF + LVS)

[复制链接]

尚未签到

发表于 2019-1-2 13:10:22 | 显示全部楼层 |阅读模式
  转账至:https://my.oschina.net/lxcong/blog/143904
  前言
  LVS大家应该很熟悉,这款优秀的开源软件基本成为了IP负载均衡的代言词。但在实际的生产环境中会发现,LVS调度在大压力下很容易就产生瓶颈,其中瓶颈包括ipvs内核模块的限制,CPU软中断,网卡性能等,当然这些都是可以调优的,关于LVS的调优,会在这里详细讲 LVS调优攻略 。回到主题,那当无法避免的单台LVS调度机出现了性能瓶颈,有什么办法呢?在本文就来介绍如何横向扩展LVS调度机
  架构简图
DSC0000.jpg

  如上图三层设备的路由表,VIP地址1.1.1.1对应nexthop有三个地址,这三个地址是三台lvs调度机的地址。这样便可达到效果:用户访问------>VIP------>三台LVS调度机------>分发到多台RealServe
  架构优势
  1.LVS调度机自由伸缩,横向扩展(最大8台,受限于三层设备允许的等价路由数目)
  2.LVS调度资源全利用,All Active。不存在备份机
  部署方法
  1.硬件资源准备
  三层设备: 本文用的是h3c 5800三层交换机
  LVS调度机三台: 192.168.0.2 192.168.2.2 192.168.3.2
  Realserver三台:  1.1.1.100 1.1.1.101 1.1.1.102
  2.三层设备OSPF配置
  #查找与三层交换与lvs调度相连的端口,在本文端口分别为 g1/0/2 g1/0/3 g1/0/6
  #把g1/0/2改为三层端口,并配上IP
  interface GigabitEthernet1/0/2
  port link-mode route
  ip address 192.168.0.1 255.255.255.0
  #配置ospf的参数, timer hello是发送hello包的间隔,timer dead是存活的死亡时间。默认是10,40。
  #hello包是ospf里面维持邻居关系的报文,这里配置是每秒发送一个,当到4秒还没有收到这个报文,就会认为这个邻居已经丢失,需要修改路由
  ospf timer hello 1
  ospf timer dead 4
  ospf dr-priority 100
  #如此类推,把g1/0/3 g1/0/6都配置上
  interface GigabitEthernet1/0/3
  port link-mode route
  ip address 192.168.3.1 255.255.255.0
  ospf timer hello 1
  ospf timer dead 4
  ospf dr-priority 99
  interface GigabitEthernet1/0/6
  port link-mode route
  ip address 192.168.2.1 255.255.255.0
  ospf timer hello 1
  ospf timer dead 4
  ospf dr-priority 98
  #配置ospf
  ospf 1
  area 0.0.0.0
  network 192.168.0.0 0.0.0.255
  network 192.168.3.0 0.0.0.255
  network 192.168.2.0 0.0.0.255
  3.LVS调度机的OSPF配置
  a.安装软路由软件quagga
  yum –y install quagga
  b.配置zerba.conf
  vim /etc/quagga/zebra.conf
  hostname lvs-route-1
  password xxxxxx
  enable password xxxxxx
  log file /var/log/zebra.log
  service password-encryption
  c.配置ospfd.conf
  vim /etc/quagga/ospfd.conf
  #ospf的配置类似于上面三层设备,注意需要把vip声明出去(1.1.1.1)
  log file /var/log/ospf.log
  log stdout
  log syslog
  interface eth0
  ip ospf hello-interval 1
  ip ospf dead-interval 4
  router ospf
  ospf router-id 192.168.0.1
  log-adjacency-changes
  auto-cost reference-bandwidth 1000
  network 1.1.1.1/32 area 0.0.0.0
  network 192.168.0.0/24 area 0.0.0.0
  d.开启IP转发
  sed –i ‘/net.ipv4.ip_forward/d’ /etc/sysctl.conf
  echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.confsysctl –p
  e.开启服务
  /etc/init.d/zebra start
  /etc/init.d/ospfd start
  chkconfig zebra on
  chkconfig ospfd on
  4.LVS keepalived配置
  在此架构下,LVS只能配置成DR模式。如果要配置成NAT模式,我的想法是,需要参照上面的方式让LVS调度机与内网三层设备配置ospf,此方法未验证,有其他方案请告知。
  a.修改配置文件 keepalived.conf ,在Cluster架构中,所有调度机用相同的配置文件
  vim /etc/keepalived/keepalived.conf
  #keepalived的全局配置global_defs {
  notification_email {
  lxcong@gmail.com
  }
  notification_email_from lvs_notice@gmail.com
  smtp_server 127.0.0.1
  smtp_connect_timeout 30
  router_id Ospf_LVS_1
  }
  #VRRP实例,在这个架构下所有的LVS调度机都配置成MASTER
  vrrp_instance LVS_Cluster{  ##创建实例 实例名为LVS_Cluster
  state MASTER #备份服务器上将MASTER改为BACKUP
  interface eth0    ##VIP 捆绑网卡
  virtual_router_id 100   ##LVS_ID  在同一个网络中,LVS_ID是唯一的
  priority 100    #选举的优先级,优先级大的为MASTER  备份服务上将100改为99
  advert_int 1  #发送vrrp的检查报文的间隔,单位秒
  authentication {  ##认证信息。可以是PASS或者AH
  auth_type PASS
  auth_pass 08856CD8
  }
  virtual_ipaddress {
  1.1.1.1
  }
  }
  #LVS实例,在本文采用的是DR模式,WRR调度方式。其实在这种架构下也只能使用DR模式
  virtual_server 1.1.1.1 80 {
  delay_loop 6
  lb_algo wrr
  lb_kind DR
  persistence_timeout 60
  protocol TCP
  real_server 1.1.1.100 80 {
  weight 1                                           # 权重
  inhibit_on_failure                               # 若此节点故障,则将权重设为零(默认是从列表中移除)
  TCP_CHECK {
  connect_timeout 3
  nb_get_retry 3
  delay_before_retry 3
  connect_port 80
  }
  }
  real_server 1.1.1.101 80 {
  weight 1                                           # 权重
  inhibit_on_failure                               # 若此节点故障,则将权重设为零(默认是从列表中移除)
  TCP_CHECK {
  connect_timeout 3
  nb_get_retry 3
  delay_before_retry 3
  connect_port 80
  }
  }
  real_server 1.1.1.102 80 {
  weight 1                                           # 权重
  inhibit_on_failure                               # 若此节点故障,则将权重设为零(默认是从列表中移除)
  TCP_CHECK {
  connect_timeout 3
  nb_get_retry 3
  delay_before_retry 3
  connect_port 80
  }
  }
  }
  b.启动keepalived
  /etc/init.d/keepalived start
  chkconfig keepalived on
  5.realserver配置
  a.添加启动服务脚本/etc/init.d/lvs_realserver
  请自行按需要修改脚本中SNS_VIP变量
  #!/bin/sh
  ### BEGIN INIT INFO
  # Provides: lvs_realserver
  # Default-Start:  3 4 5
  # Default-Stop: 0 1 6
  # Short-Description: LVS real_server service scripts
  # Description: LVS real_server start and stop controller
  ### END INIT INFO
  #  Copyright 2013 lxcong
  #
  #  chkconfig: - 20 80
  #
  #  Author:  xxxx@xxxx
  #有多个虚拟IP,以空格分隔
  SNS_VIP="1.1.1.1"
  . /etc/rc.d/init.d/functions
  if [[ -z "$SNS_VIP"  ]];then
  echo 'Please set vips in '$0' with SNS_VIP!'
  fi
  start(){
  num=0
  for loop in $SNS_VIP
  do
  /sbin/ifconfig lo:$num $loop netmask 255.255.255.255 broadcast $loop
  /sbin/route add -host $loop dev lo:$num
  ((num++))
  done
  echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
  echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
  echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
  echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
  sysctl -e -p >/dev/null 2>&1
  }
  stop(){
  num=0
  for loop in $WEB_VIP
  do
  /sbin/ifconfig lo:$num down
  /sbin/route del -host $loop >/dev/null 2>&1
  ((num++))
  done
  echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore
  echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce
  echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore
  echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce
  sysctl -e -p >/dev/null 2>&1
  }
  case "$1" in
  start)
  start
  echo "RealServer Start OK"
  ;;
  stop)
  stop
  echo "RealServer Stoped"
  ;;
  restart)
  stop
  start
  ;;
  *)
  echo "Usage: $0 {start|stop|restart}"
  exit 1
  esac
  exit 0
  b.启动服务
  service lvs_realserver start
  chkconfig lvs_realserver on
  总结
  到这里,LVS Cluster架构已部署完了,如果各位有其他更好的LVS扩展方式请留意或者联系我,互相交流 QQ:83766787。另外以前做了一个LVS的管理平台,但是一直都做得不好,也希望有相关平台开发经验的能联系我,交流交流、
DSC0001.jpg



运维网声明 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-658670-1-1.html 上篇帖子: KeepalivedHA+LVS 部署安装文档 下篇帖子: 初识LVS(二)——LVS的DR工作模式
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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