您的位置:首页 > 其它

31---keepalived功能及使用场景(1)

2017-06-25 12:59 232 查看
2017-06-26  补充描述了sorry_server等的作用

=================
What is keepalived?
现在我们已经知道LVS是一个通过ipvs规则实现一个高效的3、4层负载均衡器/调度器解决方案,但是美中不足的是该调度器并不能检测后端real server的状态,当后端的real server集群中的某台主机宕机后,我们就得通过ipvsadm手动修改ipvs规则来剔除之。是不是感觉很low?没关系,马上出场的keepalive就能很好地解决这个问题。keepalive的功能之一就是帮助我们生成并维护ipvs规则:生成规则的机制和ipvsadm类似,是通过系统调用把规则写到内核,规则是事先写在keepalive.conf这个配置文件中的;维护规则的机制则是通过周期性地探测后端real
server的状态来增删ipvs规则。
====================
How to use keepalived?
现在来看看怎么使用吧(man keepalived.conf介绍的很详细)。keepalived的安装使用yum -y install keepalived就搞定,通过rpm -ql keepalived看下软件包里面都有什么。可以看到其实keepalived就只有一个配置文件,配置文件里面分了几个部分,本次我们只讲其中与real server状态监控相关的部分,其余部分在下一篇博客中介绍。
实验拓扑如下,VMware上构建两个虚拟网络,分别为 192.168.10.0/24 和 192.168.20.0/24



===== director 上配置如下 =====
global_defs { #全局配置,主要配置了邮件通知相关事宜和vrrp相关的一些配置(本文不涉及)
  notification_email { #email收件人列表
  root@localhost
  }
  notification_email_from root@localhost #email发件人
  smtp_server 127.0.0.1
  smtp_connect_timeout 30
  router_id 6A #仅仅做real server状态检查的话,可删除
  vrrp_mcast_group4 224.0.0.19 #vrrp相关的
4000
配置,不使用vrrp的话可删掉
}

virtual_server 192.168.10.131 80 { #定义集群服务,类似于 ipvsadm -A -t 192.168.10.131:80 -s rr -p 10
  delay_loop 6 #探测间隔,单位是s。本例中每6s发送一个探测报文
  lb_algo rr
  lb_kind NAT    // 支持 NAT | DR | TUN   ---> 复习下上篇讲过的 lvs
  persistence_timeout 10 #和ipvsadm中的-p选项一样,即10s内,来自同一台client的访问都被调度到同一台real server上
  protocol TCP #仅支持探测后端real server的TCP业务
  sorry_server  127.0.0.1 80    #建议调度器上也开启web业务,当后端的real server全部宕机时,可以显示sorry page向访问者说明情况。
  real_server 192.168.20.130 80 { #类似于ipvsadm -a -t 192.168.10.131:80 -r 192.168.20.130 -m -w 1 这里的NAT已经在上面指定了
       weight 1 #如果状态检测失败的话,权重会被设置为0,也就是从real server中剔除了
       HTTP_GET {
            url {
                 path /
                 status_code 200
            }
            nb_get_retry 3
            delay_before_retry 1
            connect_timeout 1
       }
  }
  real_server 192.168.20.131 80 {
       weight 1
       TCP_CHECK {
            connect_timeout 1
       }
  }
  real_server 192.168.20.132 80 {
       weight 1
       TCP_CHECK {
            connect_timeout 1
       }
  }
}

对后端real server的状态探测粒度是可以指定的,分别是 HTTP_GET|SSL_GET,TCP_CHECK,SMTP_CHECK,MISC_CHECK。我们需要在配置文件中指明探测的粒度和探测的条件,只有当探测条件满足时才认为real server状态是ok的(写在real server下的探测条件是“and”的关系),如果条件不满足,则将weight设置为0,即在real server集群中剔除该主机。
HTTP_GET|SSL_GET
  是对HTTP资源的探测。可以探测指定url,然后判断访问该url返回的状态码或摘要(genhash得之),一致则认为通过。
TCP_CHECK
  即检查与real server能否建立TCP连接,也就是3次握手是否能成功。若成功则认为检查通过,然后给real server发送 reset 标志位释放real server上的套接字资源。
SMTP_CHECK(用得少,不介绍)
MISC_CHECK
  自定义检查项,也就是执行个脚本对real server做下检查啥的,然后根据脚本的返回状态码调整real server在集群中的weight。
补充介绍如下:
 real_server ip port {
      weight 1
      notify_up "/your/script/path  script_param"    #real server被检测up/down后可执行自定义的脚本,给出脚本路径即可(支持参数)
      notify_down "/your/script/path  script_param"
      inhibit_on_failure  //加上这个命令状态为fault的real server虽然weight为0,但是ipvsadm -L -n 依然可以看到,不加该命令则彻底看不到fault的rs

      HTTP_GET {
           url {
                path /
                status_code 200
           }
           url {
                path /image/haha.jpg
                digest 9b3a0c85a887a256d6939da88aabd8cd  //返回页面的摘要
           }
      nb_get_retry 3 #超时后的重试次数
      delay_before_retry 1 #响应超时后等待1s再重试
      connect_timeout 1 #等待响应报文的超时时间
     }         
      TCP_CHECK {
           bindto x.x.x.x  #用哪个IP来做探测报文源IP(可选项,缺省为接口IP)
           bind_port yyy #用哪个端口来做探测报文源端口(可选项,缺省为随机)
           connect_timeout 1
      }
      MISC_CHECK {
            you can execute your script here
       }
  }

配置完成后重启 keepalived,在 director 上 ipvsadm -L -n 查看 ipvs 规则,然后 down 掉 real server1,再用 ipvsadm -L -n 查看 ipvs 规则,发现real server1已经被剔除。
恢复real server1 上线,再执行 ipvsadm -L -n 发现real server1 回来了。

下一篇 会讲到 keepalived 的其他作用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: