引言
最近做 Nginx 的高可用集群,需要用到 Keepalived 组件,顺带做一个笔记。
编译
首先到官网下载合适的版本,笔者下载的是Version 2.0.16,然后将压缩包上传到Linux服务器;
接下来解压压缩包,运行如下命令:
tar -zxvf keepalived-2.0.16.tar.gz
然后进入解压后的文件夹,并运行 configure 命令检查当前环境是否满足安装要求,并进行配置:
cd keepalived-2.0.16
./configure
Unfortunately,笔者的环境中差依赖组件,运行后出现如下错误:
configure: error:
!!! OpenSSL is not properly installed on your system. !!!
!!! Can not include OpenSSL headers files. !!!
【解决方法】安装OpenSSL,运行如下命令:
yum -y install openssl-devel
安装完成后再次配置,出现如下警告:
*** WARNING - this build will not support IPVS with IPv6. Please install libnl/libnl-3 dev libraries to support IPv6 with IPVS.
【解决方法】安装libnl,运行如下命令:
yum -y install libnl libnl-devel
安装完成后再次配置,配置成功后进行编译,运行如下命令:
./configure
make && make install
配置
Keepalived有三个文件需要拷贝到系统配置目录下,分别存放在编译成功后的 Keepalived 目录中:
# Keepalived 启动脚本
keepalived/sbin/keepalived
# Keepalived 配置文件
keepalived/etc/keepalived/keepalived.conf
# Keepalived 日志级别配置文件
keepalived/etc/sysconfig/keepalived
运行如下命令将配置文件拷贝到系统对应的目录下:
mkdir /etc/keepalived
chmod 755 /usr/local/keepalived/sbin/keepalived
cp /usr/local/keepalived/sbin/keepalived /etc/rc.d/init.d/
cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
启动 Keepalived,并查看状态:
systemctl start keepalived
systemctl status keepalived
可以看到如下的状态:
status.png高可用主备配置
配置文件如下:
! Configuration File for keepalived
global_defs {
router_id 192.168.70.129 ## 标识id,通常为 hostname,当前部署机器的IP
vrrp_skip_check_adv_addr
#vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
## keepalived 会定时执行脚本并对脚本执行的结果进行分析,动态调整 vrrp_instance 的优先级.
##如果weight配置的值大于0,且脚本执行结果为 0,则优先级相应的增加;
##如果weight配置的值小于0,且脚本执行结果非 0,则优先级相应的减少。其他情况,维持原本配置的优先级,即配置文件中 priority 对应的值。
## 定义虚拟路由, VI_1 为虚拟路由的标示符,自己定义名称
vrrp_instance VI_1 {
state MASTER ## 主节点为 MASTER, 对应的备份节点为 BACKUP
interface eno16777736 ## 绑定虚拟 IP 的网络接口,与本机 IP 地址所在的网络接口相同, 我的是 eth016777736
virtual_router_id 51 ## 虚拟路由的 ID 号, 两个节点设置必须一样, 可选 IP 最后一段使用, 相同的 VRID 为一个组,他将决定多播的 MAC 地址
mcast_src_ip 192.168.70.129 ## 本机 IP 地址
priority 100 ## 节点优先级, 值范围 0-254, MASTER 要比 BACKUP 高
nopreempt ## 优先级高的设置 nopreempt 解决异常恢复后再次抢占的问题
advert_int 1 ## 组播信息发送间隔,两个节点设置必须一样, 默认 1s
## 设置验证信息,两个节点必须一致
authentication {
auth_type PASS
auth_pass 123@qwe.com ## 真实生产,按需求对应该过来
}
## 将 track_script 块加入 instance 配置块
track_script {
chk_nginx ## 执行 Nginx 监控的服务
} #
# 虚拟 IP 池, 两个节点设置必须一样
virtual_ipaddress {
192.168.70.11 ## 虚拟 ip,可以定义多个
}
}
网友评论