1、什么是keepalived?

keepalived是集群管理中保证集群高可用的一个服务软件,用来检测服务器的状态以及loadbbalance主机和backup主机之间的failover(故障切换)防止单点故障。在集群当中如果有一台服务器宕机或工作出现故障,keepalived将检测到并将有故障的服务器踢出集群,同时让其他服务器来代替该服务器的工作,当服务器恢复正常后keepalived自动将该服务器加入到集群中,完全不需要人工干涉,只需要做好相关配置,并修复有故障的服务器即可。

2、keepalived有什么优势?

keepalived安装简单,配置简明,配置完之后所有切换都是自动完成,无需人工参与。

3、keepalived是如何工作的:

keepalived是以vrrp(virtual router redundancy protocol)协议,即虚拟路由冗余协议实现的。vrrp是实现路由器高可用的协议,将多台提供相同服务的路由器组成一个路由组,组内有一个主路由和多个备份路由组成。master使用组内的VIP(虚拟IP)对外提供服务,master使用组播地址224.0.0.18向backup发送vrrp通告。当backup收不到master发送的vrrp通告时,就认为master宕机了。通过vrrp的优先级在backup中重启选举一个优先级高的当做master对外提供服务。这样就保证了路由的高可用。

keepalived是一个类似于layer3, 4 & 7交换机制的软件,即IP/TCP协议栈的IP、TCP及应用层。

layer3工作原理:此时keepalived工作在IP/TCP协议栈的中IP层。以服务器的IP地址作为服务器工作正常与否的标准,master通过组播定期发送ICMP数据包,如果发现有返回异常的IP,keepalived将认为这台服务器失效,并提出服务器群

layer4工作原理:此时keepalived工作在IP/TCP协议栈的中TCP层。以服务提供的TCP端口的状态来决定服务器的工作是否正常,如果检测到端口监听异常,则keepalived将把这台服务器从服务器群中踢出。

layer7工作原理:此时keepalived工作在IP/TCP协议栈的中应用层。相比较来说比layer3、layer4要负责,网络占用带宽也要大一些,使用也相对较少。keepalived将根据用户自己的设定配置检查服务程序是否正常,如果跟用户设定不相符,则将视为服务器存在异常并将踢出服务器群。

4、keepalived的配置文件

一个功能比较完整的keepalived 的配置文件,其配置文件keepalived.conf 可以包含三个文本块:全局定义块(global_defs)、VRRP实例定义块(vrrp_instance)及虚拟服务器定义块(virtual_server)。全局定义块和虚拟服务器定义块是必须的,如果在只有一个负载均衡器的场合,就不须VRRP 实例定义块。其中"!"表示注释



4、修改配置文件。keepalived配置文件只有一个位于:/etc/keepalived/keepalived.conf,群组中所有主机上的配置文件基本都是相同的的,唯一不同的参数是:router_id(运行keepalived服务的一个服务器标识)、priority(选举优先级)、real_server(本机监听keepalived服务的IP及端口)





keepalived配置文件只有一个位于:/etc/keepalived/keepalived.conf

[root@node2 keepalived]# cat keepalived.conf 

! Configuration File for keepalived


global_defs { !//定义全局配置

   notification_email {               !//当发生VIP切换时,由哪些用户接收邮件。

     failover@firewall.loc

     sysadmin@firewall.loc

   }

   notification_email_from Alex.Cassen@firewall.loc     !//发件人

   smtp_server 192.168.200.1                           !//smtp服务器地址

   smtp_connect_timeout 30 !//连接smtp服务器超时时间

   router_id ROUTER_1 !//运行keepalived服务的一个服务器标识

}


vrrp_instance HTTP_1 {   !//定义VRRP实例

    state BACKUP !//节点在群组中的身份,做好都设置成BACKUP,避免相互抢占,导致写入错误

    interface eth0 !//实例绑定的网卡

    virtual_router_id 51 !//实例ID标记,范围1-255,群组中都要保持一致,同一网段中应该唯一,避免冲突

    priority 100 !//优先级,初始启动后优先级高的是master

    advert_int 5 !//健康检查时间间隔。默认为1s,

    nopreempt !//不抢占,只能设置在backup主机上并且优先级要比其他的高

    authentication { !//认证区域

        auth_type PASS !//认证类型:PASS,HA(IPSEC),推荐PASS

        auth_pass 1111 !//密码认证密码。

    }

    virtual_ipaddress { !//虚拟IP区域,指定VIP地址

        192.168.199.188

    }

}


virtual_server 192.168.199.188 80 { !//定义虚拟服务器,虚拟IP+端口

    delay_loop 5 !//健康检查时间间隔,单位:s

    lb_algo rr !//后端调度算法,(rr|wrr|lc|wlc|lblc|sh|dh)

    lb_kind DR !//负载均衡的转发规则(NAT|DR|TUN)

    persistence_timeout 50 !//会话保持时间,单位:s

    protocol TCP !//指定协议类型。(TCP|UDP)

    sorry_server 192.168.199.14 80      !//当所有realserver都失效后启用

    real_server 192.168.199.188 443 {    !//定义服务节点。指定后端IP+端口

        weight 1 !//配置权重

        SSL_GET { !//运行状态监测

            url {

              path /

              digest ff20ad2481f97b1754ef3e12ecd3a9cc

            }

            url {

              path /mrtg/

              digest 9b3a0c85a887a256d6939da88aabd8cd

            }

            connect_timeout 3   !//连接超时时间

            nb_get_retry 3 !//重试连接次数

            delay_before_retry 3 !//重试连接时间

        }

    }

}