甩祸 发表于 2018-12-30 08:39:55

LVS结合keepalived配置

  ps:
  上一节DR模式实验,可以实现两个机器负载均衡,但是有一个问题我们没有考虑过,假如其中一台机器宕掉之后,
   比方把rs1的nginx停掉
  # /etc/init.d/nginx stop
  停止 nginx:                                             [确定]
  # curl localhost
  curl: (7) couldn't connect to host
  解释说明:
  这样访问就不正常了
  测试查看
  # curl 192.168.10.110
  curl: (7) couldn't connect to host
  # curl 192.168.10.110
  curl: (7) couldn't connect to host
  # curl 192.168.10.110
  curl: (7) couldn't connect to host
  # curl 192.168.10.110
  222222
  # curl 192.168.10.110
  curl: (7) couldn't connect to host
  # curl 192.168.10.110
  curl: (7) couldn't connect to host
  # curl 192.168.10.110
  curl: (7) couldn't connect to host
  # 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
  # rpm -qa ipvsadm keepalived
  
  2、 清除DR模式实验脚本启动的VIP
  r1 ~]# ifconfig lo:0 down
  r2 ~]# ifconfig lo:0 down
  dr ~]# ifconfig eth0:0 down
  
  3、 把之前的规则清空
  # ipvsadm -C
  4、 安装keepalived,如果之前安装过pel扩展源则可以直接安装
  # yum install -y keepalived
  
  # yum install -y ipvsadm
  # yum install -y keepalived
  5、 安装后编辑配置文件(先清空配置文件)
  # > /etc/keepalived/keepalived.conf
  # 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、 拷贝到从上
  # scp /etc/keepalived/keepalived.conf 192.168.10.14:/etc/keepalived/keepalived.conf
  7、 从上编辑配置文件
http://note.youdao.com/yws/res/9272/WEBRESOURCE81442ec0ba105fbcbdf88ae6c717fc18
  8、主上启动
  # /etc/init.d/keepalived start
  
  9、 启动keepalived后通过addr命令查看vip是否启动
  # 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、从上启动
  # /etc/init.d/keepalived start
  11、主上查看规则
  # ipvsadm -ln
  IP Virtual Server version 1.2.1 (size=4096)
  Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port         Forward Weight ActiveConn InActConn
  TCP192.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上执行下脚本
  # sh /usr/local/sbin/lvs_dr_rs.sh
  # sh /usr/local/sbin/lvs_dr_rs.sh
  解释说明:
        测试后没反应,所以就再执行了一下rs上的脚本
  13、 测试
  # curl 192.168.10.110
  11111111
  # curl 192.168.10.110
  11111111
  # curl 192.168.10.110
  11111111
  # curl 192.168.10.110
  222222
  # curl 192.168.10.110
  11111111
  # curl 192.168.10.110
  11111111
  # curl 192.168.10.110
  11111111
  # curl 192.168.10.110
  222222
  14、那这时我们停掉一台机器(看是不是会自动地把它剔除掉)
  # /etc/init.d/nginx stop
  15、 测试
  # curl 192.168.10.110
  222222
  # curl 192.168.10.110
  222222
  # curl 192.168.10.110
  222222
  # curl 192.168.10.110
  222222
  # curl 192.168.10.110
  222222
  解释说明:
  这时会一直讲求rs2上
  16、 查看到那条规则也会去掉
  # ipvsadm -ln
  IP Virtual Server version 1.2.1 (size=4096)
  Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port         Forward Weight ActiveConn InActConn
  TCP192.168.10.110:80 rr
  -> 192.168.10.14:80             Route   100    0          12
  17、 再把rs1启动了
  # /etc/init.d/nginx start
  18、 再查看规则就有了
  # ipvsadm -ln
  IP Virtual Server version 1.2.1 (size=4096)
  Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port         Forward Weight ActiveConn InActConn
  TCP192.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停掉
  # /etc/init.d/keepalived stop
  20、 查看从keepalived
  # 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、 查看从上规则
  # ipvsadm -ln
  IP Virtual Server version 1.2.1 (size=4096)
  Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port         Forward Weight ActiveConn InActConn
  TCP192.168.10.110:80 rr
  -> 192.168.10.13:80             Route   100    0          1         
  -> 192.168.10.14:80             Local   100    0          1   
  22、 测试
  # curl 192.168.10.110
  11111111
  # curl 192.168.10.110
  222222
  # curl 192.168.10.110
  11111111
  # curl 192.168.10.110
  222222
  # curl 192.168.10.110
  11111111
  # curl 192.168.10.110
  222222
  23、 再把主启动
  # /etc/init.d/keepalived start
  24、 测试
  # curl 192.168.10.110
  11111111
  # curl 192.168.10.110
  11111111
  # curl 192.168.10.110
  11111111
  # curl 192.168.10.110
  222222
  # curl 192.168.10.110
  11111111
  # curl 192.168.10.110
  11111111
  # curl 192.168.10.110
  11111111
  # curl 192.168.10.110
  222222
  




页: [1]
查看完整版本: LVS结合keepalived配置