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 !//重试连接时间
}
}
}