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

[经验分享] LVS结合keepalived配置

[复制链接]

尚未签到

发表于 2018-12-30 08:39:55 | 显示全部楼层 |阅读模式
  ps:
  上一节DR模式实验,可以实现两个机器负载均衡,但是有一个问题我们没有考虑过,假如其中一台机器宕掉之后,
   比方把rs1的nginx停掉
  [root@rs1 ~]# /etc/init.d/nginx stop
  停止 nginx:                                               [确定]
  [root@rs1 ~]# curl localhost
  curl: (7) couldn't connect to host
  解释说明:
  这样访问就不正常了
  测试查看
  [root@localhost ~]# curl 192.168.10.110
  curl: (7) couldn't connect to host
  [root@localhost ~]# curl 192.168.10.110
  curl: (7) couldn't connect to host
  [root@localhost ~]# curl 192.168.10.110
  curl: (7) couldn't connect to host
  [root@localhost ~]# curl 192.168.10.110
  222222
  [root@localhost ~]# curl 192.168.10.110
  curl: (7) couldn't connect to host
  [root@localhost ~]# curl 192.168.10.110
  curl: (7) couldn't connect to host
  [root@localhost ~]# curl 192.168.10.110
  curl: (7) couldn't connect to host
  [root@localhost ~]# curl 192.168.10.110
  222222
  解释说明:
  也出现这样的问题,3次不能访问,1次能访问,那这样的话,会把四分之三的请求产生这个坏点,也就是说4个人里面,有3个是不能访问的,所以说这种情况不是我们想要的结果,为了避免这种情况,我们就应该想到在lvs这一端能够有一个机制去检测,帮我们去检测当一个rs宕掉之后呢,它会把这个请求不再转发到这个坏掉的rs上去,我们直接把请求转发到好的rs上就行了,这样就会避免访问不到的情况。LVS本身没有这个功能,所以我们需要去借助一个第三方软件keepalived(它说白了是及负载均衡+HA高可用为一体)。
  做这个实验呢需要四台机器,也就是说keepalived需要两台(一主一从),就像之前讲的heartbeat一样,一个提供服务,它是在线状态,另一个是备用,不提供服务,既然是做实验,为了节省资源,就用三台机器,那其中一个rs,比如说rs2,就把它当keepalived的备用机器也是可以的。
  keepalived 用途
  帮助LVS检测后端Real Server的存活,如果正常则将请求分发给RS;如果RS宕掉的话,就不会把这个请求发给RS,这样更加科学,这样不会产生一部分客户端的请求访问不到。
  配置
  1、 首先检查是否安装ipvsadm与keepalived
  [root@dr ~]# rpm -qa ipvsadm keepalived
  
  2、 清除DR模式实验脚本启动的VIP
  [root@r1 ~]# ifconfig lo:0 down
  [root@r2 ~]# ifconfig lo:0 down
  [root@dr ~]# ifconfig eth0:0 down
  
  3、 把之前的规则清空
  [root@dr ~]# ipvsadm -C
  4、 安装keepalived,如果之前安装过pel扩展源则可以直接安装
  [root@dr ~]# yum install -y keepalived
  
  [root@rs2 ~]# yum install -y ipvsadm
  [root@rs2 ~]# yum install -y keepalived
  5、 安装后编辑配置文件(先清空配置文件)
  [root@dr ~]# > /etc/keepalived/keepalived.conf
  [root@dr ~]# vim /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 1111
      }
      virtual_ipaddress {
          192.168.10.110
      }
  }
  virtual_server 192.168.10.110 80 {      
      delay_loop 6
      lb_algo rr
      lb_kind DR
      persistence_timeout 0
      protocol TCP
  
      real_server 192.168.10.13 80 {
          weight 100
          TCP_CHECK {
          connect_timeout 10
          nb_get_retry 3
          delay_before_retry 3
          connect_port 80
          }
      }
      real_server 192.168.10.14 80 {
          weight 100
          TCP_CHECK {
          connect_timeout 10
          nb_get_retry 3
          delay_before_retry 3
          connect_port 80
          }
       }
  }
  解释说明:
  vrrp_instance 全局配置
  virtual_server 虚拟机,其实就是DS
  real_server 包含与DR中
  state 用于配置主MASTER/从BACKUP
  priority 这里配置注册优先级,主的数值高从的数值低即可
  authentication 验证,类似于HA的心跳线
  virtual_ipaddress 配置vip
  
  delay_loop 间隔多少秒钟检测一次RS状态
  lb_algo 设置lvs算法
  lb_kind 设置lvs的工作模式
  persistence_timeout 保持长连接的时间(同一IP的连接设置秒内被分配到同一台RS)
  protocol 使用什么协议RS状态
  
  weight 权重
  connect_timeout 设置时间内没有响应超时,单位为秒
  6、 拷贝到从上
  [root@dr ~]# scp /etc/keepalived/keepalived.conf 192.168.10.14:/etc/keepalived/keepalived.conf
  7、 从上编辑配置文件

  8、主上启动
  [root@dr ~]# /etc/init.d/keepalived start
  
  9、 启动keepalived后通过addr命令查看vip是否启动
  [root@dr ~]# ip addr
  2: eth0:  mtu 1500 qdisc pfifo_fast state UP qlen 1000
      link/ether 00:0c:29:d5:eb:5e brd ff:ff:ff:ff:ff:ff
      inet 192.168.10.12/24 brd 192.168.10.255 scope global eth0
      inet 192.168.10.110/32 scope global eth0
      inet6 fe80::20c:29ff:fed5:eb5e/64 scope link
         valid_lft forever preferred_lft forever
  
  10、从上启动
  [root@rs2 ~]# /etc/init.d/keepalived start
  11、主上查看规则
  [root@dr ~]# ipvsadm -ln
  IP Virtual Server version 1.2.1 (size=4096)
  Prot LocalAddress:Port Scheduler Flags
    -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
  TCP  192.168.10.110:80 rr
    -> 192.168.10.13:80             Route   100    0          0         
    -> 192.168.10.14:80             Route   100    0          0         
  
  12、测试之前再执行一下两个rs上执行下脚本
  [root@rs1 ~]# sh /usr/local/sbin/lvs_dr_rs.sh
  [root@rs2 ~]# sh /usr/local/sbin/lvs_dr_rs.sh
  解释说明:
        测试后没反应,所以就再执行了一下rs上的脚本
  13、 测试
  [root@localhost ~]# curl 192.168.10.110
  11111111
  [root@localhost ~]# curl 192.168.10.110
  11111111
  [root@localhost ~]# curl 192.168.10.110
  11111111
  [root@localhost ~]# curl 192.168.10.110
  222222
  [root@localhost ~]# curl 192.168.10.110
  11111111
  [root@localhost ~]# curl 192.168.10.110
  11111111
  [root@localhost ~]# curl 192.168.10.110
  11111111
  [root@localhost ~]# curl 192.168.10.110
  222222
  14、那这时我们停掉一台机器(看是不是会自动地把它剔除掉)
  [root@rs1 ~]# /etc/init.d/nginx stop
  15、 测试
  [root@localhost ~]# curl 192.168.10.110
  222222
  [root@localhost ~]# curl 192.168.10.110
  222222
  [root@localhost ~]# curl 192.168.10.110
  222222
  [root@localhost ~]# curl 192.168.10.110
  222222
  [root@localhost ~]# curl 192.168.10.110
  222222
  解释说明:
  这时会一直讲求rs2上
  16、 查看到那条规则也会去掉
  [root@dr ~]# ipvsadm -ln
  IP Virtual Server version 1.2.1 (size=4096)
  Prot LocalAddress:Port Scheduler Flags
    -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
  TCP  192.168.10.110:80 rr
    -> 192.168.10.14:80             Route   100    0          12  
  17、 再把rs1启动了
  [root@rs1 ~]# /etc/init.d/nginx start
  18、 再查看规则就有了
  [root@dr ~]# ipvsadm -ln
  IP Virtual Server version 1.2.1 (size=4096)
  Prot LocalAddress:Port Scheduler Flags
    -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
  TCP  192.168.10.110:80 rr
    -> 192.168.10.13:80             Route   100    0          0         
    -> 192.168.10.14:80             Route   100    0          0  
  19、 把主keepalived停掉
  [root@dr ~]# /etc/init.d/keepalived stop
  20、 查看从keepalived
  [root@rs2 ~]# ip addr
  1: lo:  mtu 16436 qdisc noqueue state UNKNOWN
      link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
      inet 127.0.0.1/8 scope host lo
      inet 192.168.10.110/32 brd 192.168.10.110 scope global lo:0
      inet6 ::1/128 scope host
         valid_lft forever preferred_lft forever
  2: eth0:  mtu 1500 qdisc pfifo_fast state UP qlen 1000
      link/ether 00:0c:29:e5:49:34 brd ff:ff:ff:ff:ff:ff
      inet 192.168.10.14/24 brd 192.168.10.255 scope global eth0
      inet 192.168.10.110/32 scope global eth0
      inet6 fe80::20c:29ff:fee5:4934/64 scope link
  21、 查看从上规则
  [root@rs2 ~]# ipvsadm -ln
  IP Virtual Server version 1.2.1 (size=4096)
  Prot LocalAddress:Port Scheduler Flags
    -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
  TCP  192.168.10.110:80 rr
    -> 192.168.10.13:80             Route   100    0          1         
    -> 192.168.10.14:80             Local   100    0          1   
  22、 测试
  [root@localhost ~]# curl 192.168.10.110
  11111111
  [root@localhost ~]# curl 192.168.10.110
  222222
  [root@localhost ~]# curl 192.168.10.110
  11111111
  [root@localhost ~]# curl 192.168.10.110
  222222
  [root@localhost ~]# curl 192.168.10.110
  11111111
  [root@localhost ~]# curl 192.168.10.110
  222222
  23、 再把主启动
  [root@dr ~]# /etc/init.d/keepalived start
  24、 测试
  [root@localhost ~]# curl 192.168.10.110
  11111111
  [root@localhost ~]# curl 192.168.10.110
  11111111
  [root@localhost ~]# curl 192.168.10.110
  11111111
  [root@localhost ~]# curl 192.168.10.110
  222222
  [root@localhost ~]# curl 192.168.10.110
  11111111
  [root@localhost ~]# curl 192.168.10.110
  11111111
  [root@localhost ~]# curl 192.168.10.110
  11111111
  [root@localhost ~]# curl 192.168.10.110
  222222
  





运维网声明 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-657422-1-1.html 上篇帖子: LAMP+LVS+KEEPALIVED(一) 下篇帖子: keepalived安装脚本
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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