keepalived的工作原理

由于工作中有用到keepalived 服务简单记录一下keepalived 简单的原理 

keepalived  顾名思义保持在线,一般在的高可用或者是热备中用到。来防止单点故障 。 (单点故障: 指一个节点发现故障导致整个集群或者架构收到影响不可用) 主要用于检查服务器状态, 如果有一台server 故障了,这台server 会备keepalived 自动剔除,会选举一个新的server 来代替故障server 来维持服务可用性,当故障server 被修复会被keepalived 检查到纳管到集群中。 除了修复故障server 需要人为干预其他的都keepalived 自己解决。 

keepalived 是有三个模块: 

  1.  core : 负责主进程的启动维护,和全局配置文件的加载解析

  2. check: 负责健康检查 

  3. vrrp: 实现vrrp 协议的

keepalived 主要是以VRRP 协议为基础实现的。 

VRRP (虚拟路由冗余协议)

  容错的主备模式的协议,由多台提供统一服务或者功能的路由器组成一个集群,里面是有一个主的路由器,其他的为备的路由器。主路由器上有一个vip 对外提供访问的,vip 在主的路由器上时会一直发组播,当主路由器挂掉了,备路由器收不到主路由器发过来的vrrp 报文,他们会认为主故障,备的路由器们会选举出一个路由器来充当主路由器的代替工作。 (这里比较容易出现脑裂问题,主节点没有挂掉,但是没有发出vrrp 报文, 主节点认为自己是主,备节点认为主节点挂掉了,会在选举一个主节点, 这时候有两个主节点存在,这就是所谓的脑裂。)

keepalived  两种模式

1. 抢占模式(默认): 其中一台设置为master,一台设置为backup。当master出现异常后,backup自动切换为master。然而当master恢复正常后会再次抢占成为master,最终导致不必要的主备切换。;

2. 非抢占模式(需要配置 nopreempt ): 在非抢占方式下,两台keepalived初始状态均配置为backup,设置不同的优先级,优先级高的设置为nopreempt来解决异常恢复后再次抢占的问题

实例: 这只是简单的keepalived 的实现

环境: ubunut 14.04 

server1 : 192.168.1.3

server2:  192.168.1.4

两个节点都需要做

1. 安装 keepalived 的安装包和依赖包

apt-get install -y keepalived

apt-get install build-essential libssl-dev

2. 编辑keepalived 的配置文件  /etc/keepalived/keepalived.conf 

server 1 

root@test3:~# cat /etc/keepalived/keepalived.conf
global_defs {
router_id haproxy_DH
}

vrrp_instance VI_1 {
interface eth0             #虚拟ip 使用的网卡
state BACKUP              #配置为BACKUP节点,一般有三个配置可选MASTER(主机)、BACKUP(备机)

virtual_router_id 50          #vrrp 组名,一个集群里配置vrrp组名必须同步。表示在一个vrrp 组里
nopreempt                #配置为不抢占模式,必须配合backup 使用,在配置该模式后优先级就失去了作用,谁先启动谁就是master ,失败后必须kill 掉keepalived 进程,再次重启不会抢占资源。实际生产环境也建议使用该模式,默认不配置nopreempt 是抢占模式,抢占模式可能会出现脑裂等问题。 


priority 99          #节点的优先级  (1-254区间)
advert_int 1            # vrrp 组播信息发送的间隔,多个节点 必须设置相同

virtual_ipaddress {      #设置vip (虚拟ip) 多个节点设置必须相同 

192.168.1.100
}
}

root@test4:~# cat /etc/keepalived/keepalived.conf
global_defs {
router_id haproxy_DH
}

vrrp_instance VI_1 {
interface eth0
state BACKUP
virtual_router_id 50
nopreempt
priority 100
advert_int 1
virtual_ipaddress {
192.168.1.100
}
}

 启动keepalived 服务

service keepalived  restart

可以在节点上ip a 检查是否有vip 存在。 

原文地址:https://www.cnblogs.com/yk0625/p/14174264.html