由于工作中有用到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 存在。