三、配置文件详解


Keeaplived的配置包含三部分:
1)全局配置,配置邮件等;
2)VRRPD配置,配置VRRP实例;
3)LVS配置,配置LVS的应用服务器;
若只是单独使用keepalived,通过IP漂移实现服务的高可用,则只需要配置前两部分就可以,若结合LVS使用,实现LVS负载均衡层的高可用、应用服务层的状态监控,则还需要配置第三部分。

具体配置参考Keepalived权威指南中文

四、Keepalived监控端口



keepalived监控类型有三种,最常见的两种就是主服务器网络不通和主服务器keepalived服务down掉,备份机能够自动接管。  还有一种类型是监控应用程序的服务状态,可以用vrrp_script实现,例如监控postgreSQL端口5432。

主服务器配置 

vim /etc/keepalived/keepalived.conf

 global_defs {

router_id HA_1

 } 

vrrp_script chk_postgreSQL_port {

script "/tcp/127.0.0.1/5432"

interval 1

weight -30

vrrp_instance VI_1 {

state MASTER

interface eth0

virtual_router_id 1

priority 100

advert_int 1

authentication {

auth_type PASS

auth_pass 123456

virtual_ipaddress {

192.168.8.254

 tob_id_5794

track_script { 

chk_postgreSQL_port

}

}

 

 

备用服务器配置

vim /etc/keepalived/keepalived.conf

global_defs {

router_id HA_1

vrrp_script chk_postgreSQL_port {

script "/tcp/127.0.0.1/5432"

interval 1

weight -30

vrrp_instance VI_1 {

state MASTER

interface eth0

virtual_router_id 1

priority 90

advert_int 1

authentication {

auth_type PASS

auth_pass 123456

virtual_ipaddress {

192.168.8.254

track_script { 

chk_postgreSQL_port

}

注:主备的参数state都是MASTER,根据priority的值大小竞争来决定谁是真正的MASTER。脚本检测也是在失败的时候会把权重减去相应的值,比如主服务器原来的priority=100,如果脚本检测到端口5432无法连接,就会priority-30=70,备用服务器的priority=90,此时备用服务器将竞争成为master,这样就实现了postgreSQL应用的热备。

五、keepalived运行时遇到的问题



5.1 IP漂移



1、主keepalived被杀掉,备keepalived竞争成Master;

2、主keepalived网络不通,备keepalived接收不到主组播的信息,备keepalived竞争成Master;

3、在各个keepalived中配置vrrp_script,这种情况由vrrp_script中shell脚本中配置情况的不同,从而kill掉主keepalived或者降低权重,使其他keepalived竞争成Master。(这里在vrrp_script中可以配置端口监控,进程监控,以及其他任何监控)

4、自己写应用程序合理控制keepalived的启停,实现IP漂移

5.2 脑裂现象



脑裂现象是指出现两个Master都绑定VIP,这种情况会造成资源抢夺。

建议使用非抢占模式减少脑裂现象发生。当主备之间的通信发生故障时,很容易发生脑裂现象,需考虑脑裂现象的处理。

5.3 keepalived模式



Keepalived分为抢占模式和非抢占模式。抢占模式是指主被杀掉后,备成为Master,当主又被启动时,主就从备抢过Master。而非抢占模式是指主被杀掉后,备成为Master,当主又被启动时,主不会从备抢过Master。

抢占模式的配置如下

vrrp_instance VI_1 {

state BACKUP

……

}

vrrp_instance VI_1 {

    state MASTER

    ……

}

 

非抢占模式的配置如下

vrrp_instance VI_1 {

state BACKUP

nopreempt

……

}

vrrp_instance VI_1 {

state BACKUP

nopreempt

    ……

}