keepalived服务器高可用配置指南

2023年 7月 18日 27.1k 0

摘要:本文以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

启动结果如下

image.png

向局域网内的机器发送了arp广播报文,让大家知道192.168.137.160地址的mac地址

image.png

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

image.png

和上面的执行结果一致。

配置参数说明表

官方文档 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_instancevrrp_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

相关文章

JavaScript2024新功能:Object.groupBy、正则表达式v标志
PHP trim 函数对多字节字符的使用和限制
新函数 json_validate() 、randomizer 类扩展…20 个PHP 8.3 新特性全面解析
使用HTMX为WordPress增效:如何在不使用复杂框架的情况下增强平台功能
为React 19做准备:WordPress 6.6用户指南
如何删除WordPress中的所有评论

发布评论