暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

Keepalived高可用安装配置与工作原理总结

原创 chirpyli 2025-10-29
65

Keepalived 是集群管理中保证集群高可用的一个服务软件,用来防止单点故障。

Keepalived 是以 VRRP(Virtual Router Redundancy Protocol,虚拟路由冗余协议)协议为实现基础的,这个协议可以认为是实现了路由器高可用的协议,将多台提供相同功能的路由器组成一个路由器组。

这里面有一个 MASTER 和多个 BACKUP;
MASTER 上面有一个对外提供服务的 Virtual IP(VIP);
MASTER 会发组播,当 BACKUP 收不到 VRRP 包时就认为 MASTER 宕机
这时需要根据 VRRP 优先级来选举一个 BACKUP 为 MASTER,这样就保证路由器的正常使用了。

安装

github/keepalived上下载源码keepalived-2.0.18.zip,安装依赖,可参考INSTALL

预先安装:

sudo yum install make autoconf automake
sudo yum install openssl-devel libnl3-devel

然后编译安装:

unzip keepalived-2.0.18.zip
cd keepalived-2.0.18
./build_setup
./configure --prefix=/usr/local/keepalived
make 
sudo make install

创建启动文件:

# 拷贝执行文件
sudo cp /usr/local/keepalived/sbin/keepalived /usr/sbin/

# 将初始化脚本拷贝到系统初始化目录下
sudo cp keepalived/etc/init.d/keepalived /etc/init.d/

# 将keepalived配置文件拷贝到etc下
sudo cp keepalived/etc/sysconfig/keepalived /etc/sysconfig/

# 创建keepalived文件夹
sudo mkdir /etc/keepalived/

# 将keepalived配置文件拷贝到etc下
sudo cp keepalived/etc/keepalived/keepalived.conf /etc/keepalived/

# 添加可执行权限
sudo chmod +x /etc/init.d/keepalived

# 添加keepalived到开机启动
chkconfig --add keepalived
chkconfig keepalived on

然后编辑配置文件/etc/keepalived/keepalived.conf,可参考keepalived.conf

配置

这里给出一主一备的配置示例:

主节点:

! Configuration File for keepalived

global_defs {
   router_id lvs_master
}

vrrp_instance VI_1 {
    state MASTER    // 指定 keepalived 的角色,MASTER 表示此主机是主服务器,BACKUP 表示此主机是备用服务器
    interface ens160   // 指定网卡
    garp_master_delay 10
    virtual_router_id 51  // 虚拟路由标识,这个标识是一个数字,同一个vrrp实例使用唯一的标识,即同一vrrp_instance下,MASTER和BACKUP必须是一致的
    priority 100   // 定义优先级,数字越大,优先级越高(0-255)在同一个vrrp_instance下,MASTER的优先级必须大于BACKUP的优先级
    advert_int 1  // 设定 MASTER 与 BACKUP 负载均衡器之间同步检查的时间间隔,单位是秒
    // 设置验证类型和密码
    authentication {
        auth_type PASS   // 设置验证类型,主要有PASS和AH两种
        auth_pass 1111  // 设置验证密码,在同一个vrrp_instance下,MASTER与BACKUP必须使用相同的密码才能正常通信
    }
    // 设置虚拟IP地址,可以设置多个虚拟IP地址,每行一个
    virtual_ipaddress {
        192.168.0.100
    }
}

备节点

! Configuration File for keepalived

global_defs {
   router_id lvs_standby
}

vrrp_instance VI_1 {
    state BACKUP
    interface ens160
    garp_master_delay 10
    virtual_router_id 51
    priority 100
    advert_int 1
    nopreempt
    authentication {
        auth_type PASS
        auth_pass asdf
    }
    virtual_ipaddress {
        192.168.0.100
    }
    notify_master "sh /home/sl/keepalived/up.sh"
}

启动

此时已加入系统服务 可使用services 启动:

#启动
sudo service keepalived start
#停止
sudo service keepalived stop
#重启
sudo service keepalived restart
#查看启动情况
ps -aux |grep keepalived

查看是否启动成功:

[sl@linuxtestf9c4 keepalived-2.0.18]$ ip addr show ens160
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:50:56:b2:a2:06 brd ff:ff:ff:ff:ff:ff
    inet 10.20.43.157/24 brd 10.20.43.255 scope global ens160
       valid_lft forever preferred_lft forever
    inet 192.168.0.100/32 scope global ens160
       valid_lft forever preferred_lft forever
    inet6 fca1:571:1:24:250:56ff:feb2:a206/64 scope global mngtmpaddr dynamic 
       valid_lft 2591937sec preferred_lft 604737sec
    inet6 fe80::250:56ff:feb2:a206/64 scope link 
       valid_lft forever preferred_lft forever

工作原理

理解其工作原理的核心就是要理解IP到MAC的映射,arp缓存这些概念。多台机器(A,B)设置为一个VIP也就是虚拟IP(vip)后,假设设定A为master(ip_a,mac_a),B为backup(ip_b,mac_b),主机C要访问vip,这时,因为A是master,我们应该要访问A,所以在主机C上,首次访问vip,需要arp协议去通过IP获取MAC地址,这时候会广播arp request消息,主机A,B收到消息后,因为A是master,所以响应vip的请求,返回mac_a的地址,主机C中arp缓存更新为vip–>mac_a,从而访问主机A。当主机A down掉后,B升为master,需要一个协议刷新主机C中arp缓存vip -->mac_a更新为vip–>mac_b,这样,C就可以访问B从而不中断服务。怎么知道master挂了呢?master会定时向backup广播消息,当backup收不到消息的时候,会认为master挂掉了。

对以上过程的细化就是VRRP协议去实现的,包括master选举,节点间通信处理,等等。当然,具体的VRRP协议比我说的复杂很多。上面这些是理解Keepalived工作原理最基本的核心内容,理解了后,再看VRRP协议理解Keepalived就容易很多。

最后补充讲一下VIP(虚拟IP),为什么需要VIP呢?客户端访问服务,最终要落实到ip:port才能访问到主机上的服务,如果指定为A主机或者B主机的物理ip,则,切换主机的时候,客户端也需要更改ip,这样做是十分不好的,而如果设置为vip去实现,即使物理主机切换了,vip的地址也没有变,客户端层面无需修改,这样是比较合理的。


参考资料:

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论