在 ubuntu 22.04 中,通过源码编译安装 keepalived 服务
系统环境
标题 | 版本 | 备注 |
---|---|---|
系统版本 | ubuntu 22.04.3 LTS (Jammy Jellyfish) | - |
内核版本 | 5.15.0-88-generic #98-Ubuntu SMP Mon Oct 2 15:18:56 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux | - |
Keepalived | v2.2.8 | - |
Keepalived 简介
Keepalived 官方地址: https://www.keepalived.org/index.html
Keepalived是一个基于vrrp协议来实现的服务器高可用解决方案,可以利用其实现避免IP单点故障,类似的工具还有heartbeat、corosync。不过其不会单独出现,而是搭配着 LVS、Nginx、HAproxy,一起协同工作达到高可用的目的。
工作原理
Keepalived本质就是为ipvs服务的,它也不需要共享存储。IPVS其实就是一些规则,Keepalived主要的任务就是去调用ipvsadm命令,来生成规则,并自动实现将用户需要访问的地址转移到可用LVS节点实现。所以keepalive的高可用是属于具有很强针对性的高可用,它和corosync这种通用性HA方案不同。
Keepalived的主要目的就是它自身启动为一个服务,它工作在多个LVS主机节点上,当前活动的节点叫做Master备用节点叫做Backup,Master会不停的向Backup节点通告自己的心跳,这种通告是基于VRRP协议的。Backup节点一旦接收不到Master的通告信息,它就会把LVS的VIP拿过来,并且把ipvs的规则也拿过来,在自己身上生效,从而替代Master节点。
Keepalived除了可以监控和转移LVS资源之外,它还可以直接配置LVS而不需要直接使用ipvsadm命令,因为它可以调用,也就是说在LVS+KEEPALIVED模型中,你所有的工作在Keepalived中配置就可以了,而且它还有对后端应用服务器健康检查的功能。
直接一句话Keepalived就是VRRP协议的实现,该协议是虚拟冗余路由协议。
VRRP协议
VRRP全称 Vritual Router Redundancy Protocol,虚拟路由冗余协议。通过把几台提供路由功能的设备组成一个虚拟路由设备,使用一定的机制保证虚拟路由的高可用,从而达到保持业务的连续性与可靠性。
在配置组成的一个虚拟路由器中,有MASTER和BACKUP之分。MASTER是主节点,在一个虚拟路由器中,只能有一个MASTER,但可以有多个BACKUP,BACKUP是备用节点,也就是当master挂掉之后,BACKUP接管MASTER节点的所有资源,当有多个BACKUP节点时,根据其priority(优先级)的值的大小,来选举谁作为MASTER的替代者。当BACKUP节点的优先级值相同时,根据其IP地址的大小,来决定。
Keepalived 安装
先决条件
- 节点之间的时间必须同步。
- 确保Firewalld及SELinux不会成为阻碍。
- 各节点用于集群服务的网络接口必须支持MULTICAST(多播)<可以使用 ifconfig 命令查看。如果未开启,则可以使用命令
ip link set multicast on dev ens33
进行开启>通信。采用D类地址(224-239)。多播地址建议手动定义,因为若有多个集群服务都使用默认的,虽有认证机制,但仍会互发信息,可能会影响性能,更会产生无用日志信息。 - 安装必要的依赖包。
1
sudo apt install -y gcc libssl-dev make libnl-3-dev libnl-utils
安装 keepalived
1.点击这里下载 keepalived 源码包到服务器的 /usr/local/src/
目录下:
1 | $ sudo wget -O /usr/local/src/keepalived-2.2.8.tar.gz https://www.keepalived.org/software/keepalived-2.2.8.tar.gz |
2.解压下载的源码包至下载目录:
1 | $ sudo tar -zxf /usr/local/src/keepalived-2.2.8.tar.gz -C /usr/local/src/ |
3.进入解压目录:
1 | $ cd /usr/local/src/keepalived-2.2.8 |
4.配置编译参数:
1 | $ sudo ./configure --prefix=/usr/local/keepalived |
5.编译及安装:
1 | $ sudo make |
6.在 /etc/profile.d/
目录下创建 keepalived 环境脚本文件 keepalived.sh,内容如下:
1 | sudo sh -c 'cat << EOF > /etc/profile.d/keepalived.sh |
7.执行 source /etc/profile.d/keepalived.sh
命令,加载下 keepalived 的环境:
1 | source /etc/profile.d/keepalived.sh |
8.执行命令 keepalived --version
验证下 keepalived 是否安装成功(能正确输出版本号):
1 | $ keepalived --version |
9.复制 keepalived 源码目录下的 keepalived 启动脚本文件到 /lib/systemd/system/
目录下:
1 | sudo cp /usr/local/src/keepalived-2.2.8/keepalived/keepalived.service /lib/systemd/system/ |
10.执行命令 systemctl daemon-reload
加载下启动脚本
1 | sudo systemctl daemon-reload |
到此,keepalived 安装已经完成
keepalived 配置
1.重命名 /usr/local/keepalived/etc/keepalived/keepalived.conf.sample
为 /usr/local/keepalived/etc/keepalived/keepalived.conf
1 | $ sudo cp /usr/local/keepalived/etc/keepalived/keepalived.conf.sample /usr/local/keepalived/etc/keepalived/keepalived.conf |
2.编辑 /usr/local/keepalived/etc/keepalived/keepalived.conf
,配置说明如下:
1 | ! Configuration File for keepalived |
报错及解决方法
configure 错误:
错误一:no acceptable C compiler found in $PATH
报错信息:
1 | checking whether make sets $(MAKE)... no |
解决方法:
安装 gcc
1 | $ sudo apt install -y gcc |
报错二:!!! OpenSSL is not properly installed on your system. !!!
报错信息:
1 | checking for openssl/ssl.h... no |
解决方法:
安装 libssl-dev
1 | $ sudo apt install -y libssl-dev |
报错三:Something went wrong bootstrapping makefile fragments for automatic dependency tracking
报错信息:
1 | hecking for sphinx-build... No |
解决方法:
安装 make
1 | $ sudo apt intall -y make |
报错四:WARNING - this build will not support IPVS with IPv6. Please install libnl/libnl-3 dev libraries to support IPv6 with IPVS.
报错信息:
1 | *** WARNING - this build will not support IPVS with IPv6. Please install libnl/libnl-3 dev libraries to support IPv6 with IPVS. |
解决方法:
安装 libnl-3-dev
1 | $ sudo apt install -y libnl-3-dev libnl-utils |