前言
Keepalived可以实现对服务器的健康检查,当主服务器出现故障时,自动将服务切换到备份服务器上,确保服务的连续性,避免单点故障。它还可以管理一个虚拟 IP 地址,在主备服务器之间进行灵活切换,对外提供统一的访问入口,使得客户端无需感知服务器的具体切换操作。
当我们在嵌入式边缘设备上部署服务时,为了保障服务稳定性,使用keepalived时很有必要的。
准备工作
- 根据芯片平台确定交叉编译工具链。
此处以在飞腾E2000上移植keepalived命令为例,采用的工具链为:aarch64-linux-gnu-xxx
安装命令:sudo apt install gcc-aarch64-linux-gnu g++-aarch64-linux-gnu
- 下载keepalived源码及其依赖的三方库源码。
keepalived下载地址:keepalived-2.2.8.tar.gz
openssl下载地址: openssl-1.1.1u.tar.gz
交叉编译openssl
解压文件
tar axvf openssl-1.1.1u.tar.gz
cd openssl-1.1.1u
配置生成Makefile
./config no-asm shared no-async --prefix=$(pwd)/install --cross-compile-prefix=aarch64-linux-gnu-
修改Makefile
输入如下命令。删除Makefile中的交叉编译工具链不支持的-m64
参数。
sed -i '/-m64/d' Makefile
也可打开文件手动删除:
编译源码
make && make install
编译完成后,在当前openssl-1.1.1u目录下会生成一个install目录,目录下即可获取到所有的编译产物,主要检查生成的动态库文件.so是否正确,后续keepalived交叉编译时需要用到。
交叉编译keepalived
配置生成Makefile
./configure --host=aarch64-linux-gnu --prefix=$(pwd)/install CC=aarch64-linux-gnu-gcc CFLAGS=-I/home/fangye/build_keepalived/openssl-1.1.1u/install/include LDFLAGS=-L/home/fangye/build_keepalived/openssl-1.1.1u/install/lib --disable-fwmark
参数含义:
--host=
表示目标平台的名称
--prefix=
表示编译产物安装目标路径
CFLAGS
表示gcc编译参数,用于指定openssl头文件搜索路径
LDFLAGS
表示gcc链接参数,用于指定openssl库文件搜索路径
--disable-fwmark
表示禁用iptables规则,可防止VIP无法访问
编译源码
make && make install
安装的时候会报错,是因为要将keepalived.service
文件安装到/lib/systemd/system
目录下没有权限。我们交叉编译时一般用不到,可以不用管。如果需要可自行在keepalived目录下找到相应文件。
编译生成的产物如下:
至此,交叉编译完成。将之前openssl的库文件、keepalived可执行文件及其keepalived配置文件拷贝至arm开发板相应目录下,即可完成keepalived移植。