摘要:本文以ubuntu
系统为基础运行环境,展示了在docker
环境和物理机环境下的keepalived
配置方式,和配置说明。
简介
什么是keepalived
Keepalived
是一个用C语言编写的路由软件,它的主要目标是为Linux
系统和基于Linux的基础设施提供简单而健壮的负载平衡和高可用性工具。负载平衡框架依赖于众所周知的、被广泛使用的Linux虚拟服务器(IPVS
)内核模块提供Laver4负载均衡。Keepalived实现了一组检查器,根据服务器池的健康状况动态地、自适应地维护和管理负载均衡的服务器池。另一方面,高可用性是通过VRRP协议来实现的,此外,VRRP是路由器故障转移的基础。Keepalived实现了一组对VRRE有限状态机的钩子,提供了低速和高速的协议交互。为了提供快速的网络故障检测,Keepalived实现了BFD协议VR RP状态转换,可以考虑BFD提示来驱动快速的状态转换。keepalive
框架可以独立使用,也可以全部使用,以提供弹性基础设施。
使用指南
ubuntu
物理机安装
apt-get install keepalived
配置说明
- 默认的配置文件是
/etc/keepalived/keepalived.conf
keepalived.conf
文件内容
! Configuration File for keepalived
global_defs {
router_id LVS_DEVEL
}
vrrp_instance VI_1 {
state MASTER
interface ens33
virtual_router_id 160
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.137.160/24
}
}
启动及日志查看
- 启动服务
systemctl start keepalived
- 查看状态
systemctl status keepalived
- 停止服务
systemctl stop keepalived
- 设置开机启动
systemctl enable keepalived
启动结果如下
向局域网内的机器发送了
arp
广播报文,让大家知道192.168.137.160
地址的mac
地址
docker
容器安装
我个人推荐用
docker
进行安装,因为可以隔离不同的环境可以用同样的镜像,宿主机内就不用用不同的包来安装keepalived
keepalived.conf
配置文件
! Configuration File for keepalived
global_defs {
router_id LVS_DEVEL
}
vrrp_instance VI_1 {
state MASTER
interface ens33
virtual_router_id 160
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.137.160/24
}
}
docker-compose.yml
version: "3"
services:
keepalived:
image: 'huzhihui/keepalived:2.2.8'
container_name: keepalived
network_mode: host
volumes:
- ./keepalived.conf:/etc/keepalived/keepalived.conf
cap_add:
- NET_ADMIN
- NET_BROADCAST
- NET_RAW
注意
如下的配置是增加容器的权限,让可以操作网络
cap_add:
- NET_ADMIN
- NET_BROADCAST
- NET_RAW
启动及日志查看
- 启动
docker-compose up -d
- 停止
docker-compose down
- 日志查看
docker logs -f keepalived
和上面的执行结果一致。
配置参数说明表
官方文档 www.keepalived.org/manpage.htm…
global_defs
模块
该模块是全局模块
常用配置
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}
说明
个人觉得邮件没啥用,还是
shell
脚本调用钉钉或者微信比较方便
参数 | 描述 |
---|---|
global_defs | 全局配置标识 |
notification_email | 用于设置报警的邮件地址,可以设置多个,每行一个。如果要开启邮件报警,需要开启本机的sendmail服务 |
smtp_server | 设置邮件的smtp server地址 |
smtp_connect_timeout | 设置连接smtp server的超时时间 |
router_id | 运行keepalived的一个标识,唯一 |
global_defs | 全局配置标识 |
global_defs | 全局配置标识 |
vrrp_instance
与vrrp_script
模块
两者配合起来用,用于生成和调度
VIP
常用配置
vrrp_script nginx_check {
script /tools/nginx_check.sh"
interval 1
}
vrrp_instance VI_1 {
state MASTER
interface ens33
virtual_router_id 52
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass test
}
virtual_ipaddress {
192.168.137.160
}
track_script {
nginx_check
}
notify_master /tools/master.sh
notify_backup /tools/backup.sh
notify_fault /tools/fault.sh
notify_stop /tools/stop.sh
}
vrrp_script
说明
自定义资源监控脚本,vrrp实例根据脚本返回值进行下一步操作,脚本可被多个实例调用
参数 | 描述 |
---|---|
script | 监控执行的脚本,如果返回状态码是0,那么就认为服务正常,反之亦然 |
interval | 每隔1S执行一次脚本 |
weight | 优先级调整,失败一次将优先级减去多少(-20) |
fail | 检测允许失败的最大次数,超过制定次数就认为节点故障 |
rise | 执行成功制定次数,就认为节点恢复正常 |
vrrp_instance
说明
参数 | 描述 |
---|---|
state | 指定keepalived节点的初始状态,MASTER(主服务器)/BACKUP(备用) |
interface | vrrp实例绑定的网卡接口,用于发送vrrp包 |
virtual_router_id | 虚拟路由标识,数字形式,同一个VRRP实例使用唯一的标识,即在同一个vrrp_instance下,master和backup必须一致 |
priority | 节点优先级,数字越大表示节点的优先级越高,在一个VRRP实例下,MASTER的优先级必须要比BACKUP高,不然就会切换角色 |
advert_int | 用于设定MASTER与BACKUP之间同步检查的时间间隔,单位为秒 |
auth_type | 预共享密钥认证,同一个虚拟路由器的keepalived节点必须一样 |
auth_pass | 设置密钥 |
virtual_ipaddress | 设置虚拟IP地址,可以设置多种形式:10.0.0.100不指定网卡,默认为eth0,注意:不指定/prefix,默认为/32;10.0.0.101/24 dev eth1 指定VIP的网卡;10.0.0.102/24 dev eth2 label eth2:1 #指定VIP的网卡label |
nopreempt | 设置为非抢占模式,同一实例下主备设置必须一样 |
preemtp_delay | 设置抢占模式的延时时间,单位为秒 |
notify_master | 当前节点成为主节点时触发的脚本 |
notify_backup | 当前节点转为备节点时触发的脚本 |
notify_fault | 当前节点转为“失败”状态时触发的脚本 |
notify_stop | 当停止VRRP时触发的脚本 |
docker
镜像封装指南
下面给出我封装镜像的步骤
Dockerfile
FROM huzhihui/ubuntu:18.04-fonts
# Keepalived version
ARG KEEPALIVED_VERSION=2.2.8
# Download, build and install Keepalived
RUN apt-get update && apt-get -y install vim openssl libssl-dev autoconf curl gcc ipset iptables libnfnetlink-dev make musl-dev
&& curl -o keepalived.tar.gz -SL https://keepalived.org/software/keepalived-${KEEPALIVED_VERSION}.tar.gz
&& mkdir -p /source-software
&& tar -xzf keepalived.tar.gz --strip 1 -C /source-software
&& cd /source-software
&& ./configure
&& make && make install
&& cd - && mkdir -p /etc/keepalived
&& rm -rf keepalived.tar.gz
&& rm -rf /source-software
&& apt-get clean
&& apt-get -y autoremove autoconf gcc ipset iptables libnfnetlink-dev make musl-dev openssl libssl-dev
ENTRYPOINT [ "keepalived", "-f", "/etc/keepalived/keepalived.conf", "--dont-fork", "--log-console", "--log-detail", "--dump-conf" ]
构建命令
docker build -d huzhihui/keepalived:2.2.8 .
查看镜像
[root@localhost keepalived]# docker images|grep keepalived
huzhihui/keepalived 2.2.8 4a2267e2ec8d 32 hours ago 245MB