高可用集群keepalived

1.不同操作系统的安装

1.1 不同系统编译安装

ubuntu环境
apt-get - y install libssl-dev libpopt-dev daemon build-essential libssl-dev openssl libpopt-dev libsnmp-dev libnl-3-dev libnl-genl-3-dev
centos环境 (其他的下同)
yum install - y gcc curl openssl-devel libnl3-devel net-snmp-devel
ubuntu server版本编译环境配置 - 时间可能有些长
apt update
apt - y install make gcc ipvsadm build-essential pkg-config automake autoconf libipset-dev libnl-3-dev libnl-genl-3-dev libssl-dev libxtables-dev libip4tc-dev libip6tc-dev libmagic-dev libsnmp-dev libglib2 .0 - dev libpcre2-dev libnftnl-dev libmnl-dev libsystemd-dev libpopt-dev daemon
ubuntu server 安装日志环境
apt install rsyslog - y
获取软件并解压
mkdir / data / {server,softs} - p && cd / data / softs
wget https :// keepalived.org / software / keepalived-2 .3.2 .tar.gz
tar xvf keepalived-2 .3.2 .tar.gz
配置文件
cd keepalived-2 .3.2
. / configure -- prefix =/ data / server / keepalived
编译于安装
make
makeinstall
使用默认的服务启动文件
cp keepalived / keepalived.service / lib / systemd / system /
定制专属的配置文件
/data/server/keepalived/sbin/keepalived --help
Usage : / data / server / keepalived / sbin / keepalived [OPTION .. .]
-f , -- use-file = FILE          Use the specified configuration file                                
default
'/data/server/keepalived/etc/keepalived/keepalived.conf' or '/etc/keepalived/keepalived.conf'
配置的文件路径:
/ data / server / keepalived / etc / keepalived / keepalived.conf (优先高)
或者
/ etc / keepalived / keepalived.conf (优先级低)
直接使用模版文件
cd / data / server / keepalived / etc / keepalived /
mkdir / etc / keepalived
mv keepalived.conf.sample / etc / keepalived / keepalived.conf
定制服务配置文件(注意此操作不管是源安装还是编译安装都需要进行 否则服务起不来)
sed - i '/virtual_server/,$d' / etc / keepalived / keepalived.conf
sed - i 's/eth0/ens33/g' / etc / keepalived / keepalived.conf    注:ens33不是唯一 根据对应网卡修改
同时ubuntu源安装后还要注意
[root@ubantu24 ~]# mv /etc/keepalived/keepalived.conf.sample /etc/keepalived/keepalived.conf                    #更改配置文件名,否则服务起不来
启动服务
# systemctl daemon-reload
# systemctl start keepalived

1.2 防火墙规则 nftables

hostname -I     # 检测服务后的 ip 效果
root @ubuntu24-13: ~ # apt install iputils-ping psmisc -y
root @ubuntu24-13: ~ # ping -c1 192.168.200.16
# 结果无法反应,处于阻塞的状态 ..
它存在新式的防火墙规则, nftables 规则
root @ubuntu24-13: ~ # apt -y install nftables   (若没有则可以安装,本人测试的时候没有安装)
查看防火墙规则,这里显示出来 拒绝了 keepalived 生产的三个默认的 vip 地址  命令: nft list ruleset
(1)root @ubuntu24-13: ~ # nft flush ruleset    #临时清理
(2)ruleset 规则在 keepalive 每次重启后,都会存在, 如果不想让它存在,可以清理默认的策略规则
root @ubuntu24-13: ~ # systemctl stop nftables    首先关闭服务
root @ubuntu24-13: ~ # nft flush ruleset     清理默认规则
root @ubuntu24-13: ~ # > /etc/nftables.conf    清理开机自启动服务规则
root @ubuntu24-13: ~ # systemctl restart nftables    重启服务
root @ubuntu24-13: ~ # nft list ruleset     确认效果

1.3 环境部署脚本

也可以通过下面的脚本进行安装
#!/bin/bash
# 定义日志文件路径
LOG_FILE="/var/log/keepalived_install.log"# 定义环境变量
KEEPALIVED_VERSION="2.3.2"
KEEPALIVED_INSTALL_PATH="/data/server/keepalived"
KEEPALIVED_TAR_NAME="keepalived-${KEEPALIVED_VERSION}"# 读取节点角色
read -p "当前节点的角色(MASTER|BACKUP): " KEEPALIVED_ROLE# 定义日志记录函数
function log() {local timestamp=$(date "+%Y-%m-%d %H:%M:%S")local message="$1"echo "[${timestamp}] ${message}" | tee -a ${LOG_FILE}
}# 定义函数:基本环境定制
function setup_environment() {log "开始基本环境定制"echo "正在更新软件包列表..."apt update 2>&1 | tee -a ${LOG_FILE}if [ $? -eq 0 ]; thenlog "软件包列表更新成功"elselog "软件包列表更新失败"exit 1fiecho "正在安装必要的软件包..."apt -y install make gcc ipvsadm build-essential pkg-config automake autoconf \libipset-dev libnl-3-dev libnl-genl-3-dev libssl-dev libxtables-dev libip4tc-dev \libip6tc-dev libmagic-dev libsnmp-dev libglib2.0-dev libpcre2-dev libnftnl-dev \libmnl-dev libsystemd-dev libpopt-dev daemon 2>&1 | tee -a ${LOG_FILE}if [ $? -eq 0 ]; thenlog "必要软件包安装成功"elselog "必要软件包安装失败"exit 1fi
}# 定义函数:下载软件
function download_software() {log "开始下载软件"echo "正在创建目录并下载 Keepalived ${KEEPALIVED_VERSION}..."mkdir -p /data/{server,softs} 2>&1 | tee -a ${LOG_FILE}if [ $? -eq 0 ]; thenlog "目录创建成功"elselog "目录创建失败"exit 1ficd /data/softsif [ ! -f ${KEEPALIVED_TAR_NAME}.tar.gz ]; thenlocal keepalived_url="https://keepalived.org/software/${KEEPALIVED_TAR_NAME}.tar.gz"wget "${keepalived_url}" 2>&1 | tee -a ${LOG_FILE}if [ $? -eq 0 ]; thenlog "Keepalived ${KEEPALIVED_VERSION} 下载成功"elselog "Keepalived ${KEEPALIVED_VERSION} 下载失败"exit 1fifiecho "正在解压 Keepalived ${KEEPALIVED_VERSION}..."local untar_dir="/data/softs/${KEEPALIVED_TAR_NAME}"[ -d ${untar_dir} ] && rm -rf ${untar_dir}tar xvf "${KEEPALIVED_TAR_NAME}.tar.gz" 2>&1 | tee -a ${LOG_FILE}if [ $? -eq 0 ]; thenlog "Keepalived ${KEEPALIVED_VERSION} 解压成功"elselog "Keepalived ${KEEPALIVED_VERSION} 解压失败"exit 1fi
}# 定义函数:编译安装
function compile_and_install() {log "开始编译安装"echo "正在进入解压目录并进行配置..."cd "${KEEPALIVED_TAR_NAME}"./configure --prefix="${KEEPALIVED_INSTALL_PATH}" 2>&1 | tee -a ${LOG_FILE}if [ $? -eq 0 ]; thenlog "配置成功,安装路径为 ${KEEPALIVED_INSTALL_PATH}"elselog "配置失败,安装路径为 ${KEEPALIVED_INSTALL_PATH}"exit 1fiecho "正在编译 Keepalived ${KEEPALIVED_VERSION}..."make 2>&1 | tee -a ${LOG_FILE}if [ $? -eq 0 ]; thenlog "编译成功"elselog "编译失败"exit 1fiecho "正在安装 Keepalived ${KEEPALIVED_VERSION} 到 ${KEEPALIVED_INSTALL_PATH}..."make install 2>&1 | tee -a ${LOG_FILE}if [ $? -eq 0 ]; thenlog "安装成功,安装路径为 ${KEEPALIVED_INSTALL_PATH}"elselog "安装失败,安装路径为 ${KEEPALIVED_INSTALL_PATH}"exit 1fi
}# 定义函数:定制服务文件
function customize_service_file() {log "开始定制服务文件"echo "正在复制服务文件..."cd /data/softs/${KEEPALIVED_TAR_NAME}/keepalivedcp keepalived.service /lib/systemd/system/ 2>&1 | tee -a ${LOG_FILE}if [ $? -eq 0 ]; thenlog "服务文件复制成功"elselog "服务文件复制失败"exit 1fi
}# 定义函数:定制配置文件
function customize_config_file() {log "开始定制配置文件"echo "正在定制配置文件..."cd "${KEEPALIVED_INSTALL_PATH}/etc/keepalived/"[ ! -d /etc/keepalived ] && mkdir /etc/keepalived || rm -rf /etc/keepalived/*mv keepalived.conf.sample /etc/keepalived/keepalived.conf 2>&1 | tee -a ${LOG_FILE}local net_name=$(ip a | awk -F " |:" '/MULTICAST/{print $3}'|head -n1)sed -i "s/eth0/${net_name}/g" /etc/keepalived/keepalived.confsed -i '/virtual_server/,$d' /etc/keepalived/keepalived.confif [ "${KEEPALIVED_ROLE}" == "BACKUP" ]; thensed -i 's/MASTER/BACKUP/' /etc/keepalived/keepalived.confsed -i 's/ty 100/ty 90/' /etc/keepalived/keepalived.conf  # 注意:这里可能存在拼写错误(ty应为priority)fiif [ $? -eq 0 ]; thenlog "配置文件定制成功,安装路径为 ${KEEPALIVED_INSTALL_PATH}"elselog "配置文件定制失败,安装路径为 ${KEEPALIVED_INSTALL_PATH}"exit 1fi
}# 定义函数:启动服务
function start_service() {log "开始启动服务"echo "正在重新加载 systemd 管理器配置..."systemctl daemon-reload 2>&1 | tee -a ${LOG_FILE}if [ $? -eq 0 ]; thenlog "systemd 管理器配置重新加载成功"systemctl start keepalivedelselog "systemd 管理器配置重新加载失败"exit 1fi
}# 主函数,按顺序调用各个子函数
function main() {# 检查环境变量是否为空if [ -z "${KEEPALIVED_VERSION}" ]; thenlog "错误:KEEPALIVED_VERSION 环境变量为空"exit 1fiif [ -z "${KEEPALIVED_INSTALL_PATH}" ]; thenlog "错误:KEEPALIVED_INSTALL_PATH 环境变量为空"exit 1fisetup_environmentdownload_softwarecompile_and_installcustomize_service_filecustomize_config_filestart_servicelog "Keepalived ${KEEPALIVED_VERSION} 安装及配置完成,安装路径为 ${KEEPALIVED_INSTALL_PATH}!"echo "Keepalived ${KEEPALIVED_VERSION} 安装及配置完成,安装路径为 ${KEEPALIVED_INSTALL_PATH}!"
}# 执行主函数
main

2.配置解读

1.1 配置简介

keepalived 默认配置文件主要有三部分组成, global_defs vrrp_instance virtual_server 其中最重要的配置内容是 vrrp_instance ,在这个配置段中,设置了 keepalived 对外提供的统一入口。
修改两台 keepalived 主机的global_defs vrrp_instance 部分内容,就能让 keepalived 正常启动。
global_defs - 全局配置段router_id 设定当前keepalived提供的路由标识,它在keepalived集群中必须唯一vrrp_instance - vrrp配置段state 描述keepalived主机间的角色定位的,一般只有两个值MASTER、BACKUPinterface 指定在哪个网卡上绑定VIPvirtual_router_id 指定VIP的唯一标识,在keepalived集群中,此配置必须一致。priority 被VRRP协议来判断那个router_id作为主路由,值越大,优先级越高authentication 多个路由之间通信的认证virtual_ipaddress 指定VIP的地址,可以是多个。virtual_server - vs配置段lb_algo 定制算法信息protocol 数据通信协议的定制real_server 后端真实主机的定制
查看帮助信息
二进制包安装方式
man keepalived.conf
源码包安装方式
man /usr/share/man/man5/keepalived.conf.5.gz

1.2 配置细节

root @ubuntu24-13: ~ # tcpdump -i ens33 host 224.0.0.18 -nn    # vrrp 通信数据

1.3 简单实践

两台主机安装nginx(略)
keepalived里面修改
   virtual_ipaddress {        
192.168.8.100
   }
 interface ens224
每个主机都增加一个网卡例如ens224
最终修改实现的效果如下
命令:for i in {1..10};do curl 192.168.8.100;done
结果显示: VIP 效果完全正常,可以替代原来的 web 地址访问效果
15主机上抓包     tcpdump -i ens224 -nn host 224.0.0.18 12主机优先级高所以它占用vip
停掉12主机   15主机抢了VIP,说明keepalived默认 工作模式抢占式开启12主机后又恢复。

1.4 日志功能

(1)日志存放在哪里
默认情况下, keepalived 的日志功能是放入到 syslog 文件里面的,但是 syslog 文件不仅仅给 keepalived使用,还给很多其他的服务去使用,所以,一般情况下,我们需要将keepalived 的日志功能,单独独立出来。
cat /data/server/keepalived/etc/sysconfig/keepalived          #查看依赖的配置文件
KEEPALIVED_OPTIONS = "-D" # 记录详细的日志
data/server/keepalived/sbin/keepalived --help    # 查看 keepalived 的命令启动选项
KEEPALIVED_OPTIONS="-D -S 6"  注:里面解释了左边命令所写的原因
(2)定制日志输出
在/etc/rsyslog.d/目录下创建 keepalived的日志配置文件keepalived.conf
[root@rocky9-15 ~]# vim /etc/rsyslog.d/keepalived.conf
local6. * / var / log / keepalived.log
& ~
注意:  & ~ 表示 keepalived 日志仅仅写入 / var / log / keepalived.log 中,不写入 / var / log / syslog 文件。
[root@rocky9-15 ~]# vim /etc/sysconfig/keepalived   # apt 安装的在 / etc / default / keepalived
KEEPALIVED_OPTIONS = "-D -S 6"
systemctl restart rsyslog.service              #重启rsyslog服务
systemctl restart keepalived.service        #重启keepalived服务
tail /var/log/keepalived.log                       #查看日志效果

1.5 子配置[M]

当生产环境复杂时, / etc / keepalived / keepalived.conf 文件中内容过多,除了全局级别的配
置,还有大量的业务级别的配置,相当的不易管理。 利用 include 指令可以实现包含子配置文件。
配置格式:
include / path / file
定制主从配置文件  其中#里面的内容是定制从节点配置要写的
global_defs {router_id kpmaster   #kpbackup
}vrrp_instance VI_1 {state MASTER         #BACKUP interface ens224virtual_router_id 50priority 100         #100以下,例99authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.8.100}
}
确定确认要截取的内容
主从节点相同的完全步骤
1 定制子配置文件
mkdir / etc / keepalived / conf.d /
cd / etc / keepalived
sed - nr '5,$p' keepalived.conf > / etc / keepalived / conf.d / cluster1.conf
2 定制主配置
sed - i '5,$d' / etc / keepalived / keepalived.conf
echo 'include /etc/keepalived/conf.d/*.conf' >> / etc / keepalived / keepalived.conf
3 重启服务
systemctl restart keepalived.service

3.工作模式[L]

Keepalived 是一个基于 VRRP 协议的实现高可用的软件,在 Keepalived 中,抢占式非抢占式是两种重要的工作模式。keepalived 默认抢占式工作模式。
非抢占式配置
注意:要关闭 VIP 抢占, 必须将各 Keepalived 服务器 state 配置为 BACKUP
master主机配置比slave主机配置多了nopreempt而已 其他配置相同
nopreempt 的主要目的是为了保持服务的稳定性和连续性,避免由于主服务器的频繁恢复和抢占导致的服务中断和网络抖动。
结果显示: 虽然 master 节点优先级高,因为处于非抢占模式,所以 vip 依然在 slave 节点上。
slave 节点服务异常, vip 才会被 master 接管 , 这样避免了 vip 的频繁移动
非抢占延迟模式
Keepalived 的非抢占延时模式是在非抢占式模式基础上增加了延时机制
主从节点主机配置 如下 其他的不变
state BACKUP
preempt_delay 60  #表示60s 
关于工作模式的小结
抢占模式
    -主挂了,备立刻抢vip
    -主恢复了,立刻抢备vip
延迟抢占
    -主挂了,备让几秒钟,确保主挂了,然后抢vip
    -主恢复了,让让
非抢占
   -主挂了,备立刻抢vip
   -主恢复了,不抢备的vip
4. 消息传递
单播: 是一种点到点的通信方式,数据从发送方发送到特定的一个接收方。即 一对一。
多播: 是一种点到多点的通信方式,数据从发送方发送到一组特定的接收方,即 一对多。
如何配置多播通信

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/news/906651.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringCloud - 整合MQ实现消息总线服务

一、背景介绍 每当修改配置文件内容,如果需要客户端也同步更新,就需要手动调用/refresh接口,以便客户端能获取到最新的配置内容。 当客户端越来越多的时候,通过人工进行处理显然非常鸡肋。有没有一种更加高效的办法,…

测试W5500的第3步_使用ioLibrary库创建TCPServer

W5500是一款具有8个Socket的网络芯片,支持TCP Server模式,最多可同时连接8个客户端。本文介绍了基于STM32F10x和W5500的TCP Server实现,包括SPI初始化、W5500复位、网络参数配置、Socket状态管理等功能,适用于需要多客户端连接的嵌…

Web攻防-SQL注入数据库类型用户权限架构分层符号干扰利用过程发现思路

知识点: 1、Web攻防-SQL注入-产生原理&应用因素 2、Web攻防-SQL注入-各类数据库类型利用 演示案例-WEB攻防-SQL注入-数据库类型&架构分层&符号干扰 一、数据库知识 1、数据库名,表名,列名,数据 2、自带数据库&…

手机合集(不定期更新)

一、华为手机: 1.华为手机自助维修的方法: https://blog.csdn.net/humors221/article/details/145946128 2.华为手机实用功能介绍: https://blog.csdn.net/humors221/article/details/132514011 3.华为手机清理大数据的方法:…

移动安全Android——ROOT检测绕过

工具准备 Magisk GitHub - topjohnwu/Magisk: The Magic Mask for Android ZygisckNext GitHub - Dr-TSNG/ZygiskNext at v1.2.8 Shamiko Releases LSPosed/LSPosed.github.io 安卓ROOT教程 Magisk 安装教程 - Magisk 中文网 问题 大多数手机在ROOT状态下会出现APP闪…

Python高效网络爬虫开发指南

Python 网络爬虫入门与实战 一、引言 随着互联网数据的爆炸性增长,获取和分析这些数据变得越来越重要。网络爬虫作为数据采集的重要工具,在这其中扮演了不可或缺的角色。 二、环境搭建 首先我们需要安装Python环境以及一些必要的库: req…

wireshark: Display Filter Reference

https://www.wireshark.org/docs/dfref/// 这个里面的扩展功能还是很强大,可以帮着问题分析。支持大量的自定义化的字段读取功能,支持很多的协议。 https://www.wireshark.org/docs/dfref///f/frame.html frame.time_delta Time delta from previous ca…

dify创建银行客服系统例子

传统的银行客服系统,通常以会话管理的方式实现,配置繁琐复杂,固定且不灵活。如: 智能体的出现,为实现银行客服系统提供了想象空间,可以集知识库和业务流程为一体实现灵活可控的智能客服系统,即能…

前端函数防抖(Debounce)完整讲解 - 从原理、应用到完整实现

🌷 古之立大事者,不惟有超世之才,亦必有坚忍不拔之志 🎐 个人CSND主页——Micro麦可乐的博客 🐥《Docker实操教程》专栏以最新的Centos版本为基础进行Docker实操教程,入门到实战 🌺《RabbitMQ》…

服务接口鉴权与内部认证:自定义注解与AOP实现的企业级实践

本文深入解析企业级系统中接口安全管控的核心需求,提出基于Spring AOP与自定义注解的轻量级鉴权方案。通过解构注解元数据定义、切面拦截逻辑、上下文传递机制等关键技术环节,系统阐述零侵入式鉴权体系的构建路径。结合金融支付网关、多租户SaaS平台、物…

26考研|高等代数:线性变换

前言 线性变换这一章节是考频较高的一部分,此部分涉及考点较多,涉及的考题也较多,学习线性变换时,应该注意搭建线性变换与矩阵之间的联系,掌握如何利用矩阵表示一个线性变换结构,同时介绍了最简单的线性变…

电磁兼容(EMC)仿真(精编版)

写在前面 本系列文章主要讲解电磁兼容(EMC)仿真的相关知识,希望能帮助更多的同学认识和了解电磁兼容(EMC)仿真。 若有相关问题,欢迎评论沟通,共同进步。(*^▽^*) 随着产品复杂性和密集度的提高以及设计周期的不断缩短,在设计周期的后期解决电磁兼容性(EMC)问题变得…

解决:dpkg: error: dpkg frontend lock is locked by another process

1、等待其他进程完成 如果后台有其他包管理操作(如自动更新、软件安装等),等待几分钟再重试。 可以通过以下命令查看是否有相关进程: ps aux | grep -E apt|apt-get|dpkg 2、强制终止占用锁的进程 如果确认没有其他包管理操作&…

LVGL(lv_textarea文本框控件)

文章目录 一、lv_textarea 是什么?二、基本用法1. 创建 lv_textarea 对象2. 设置提示文字(占位符)3. 设置最大长度4. 设置密码模式(显示为\*号)5. 获取和设置内容6. 配合虚拟键盘使用(常用于触摸屏&#xf…

【Java高阶面经:数据库篇】18、分布式事务:如何在分库分表中实现高性能与一致性?

一、分布式事务核心挑战:分库分表下的一致性困境 在分布式系统架构中,分库分表通过将数据分散存储提升了扩展性和性能,但却打破了传统单库事务的边界,使得分布式事务成为保障数据一致性的核心难题。其挑战主要体现在以下三方面: 1.1 ACID特性的分布式撕裂 原子性(Atomi…

【云呐】房地产企业固定资产如何管理

房产类固定资产如办公楼、门面房、宿舍楼、库房等,价值高、使用年限长、权属复杂、变更流程多,是企业最为关键的资产类型之一。管理房产类资产不仅要“看得到”,更要“管得住”。 房产资产管理应从权属明确开始。固定资产管理系统支持房产资产…

oracle数据库生成awr报告,排查数据库服务器CPU100%,系统卡顿,慢sql,根据sqlid查询关键信息,如会话SID,客户端机器名

AWR报告简介 AWR是Oracle 10g版本推出的特性,全称叫做 Automatic Workload Repository 全自动负载信息库 。Oracle启动后,会有后台进程定时采集并保存系统快照信息,也可以手工创建快照。AWR通过对比两个时间点的快照信息,生成该时间段的AWR报告,帮助DBA或开发人员了解 Ora…

kafka吞吐量提升总结

前言 原本自以为阅读了很久kafka的源码,对于kafka的了解已经深入到一定程度了,后面在某大厂的面试中,面试官询问我,如果需要提升kafka的性能,应该怎么做,我发现我能答上来的点非常的少,也暴露了…

鸿蒙 HarmonyOS NEXT 系统 Preference 首选项使用全解析

鸿蒙HarmonyOS系统Preference首选项使用全解析 大家好,我是威哥。在鸿蒙应用开发里,用户偏好设置的管理是极为重要的一环。HarmonyOS为我们提供了Preference组件,它能让我们轻松实现应用设置界面,对用户首选项进行高效管理。接下…

xdc约束学习

对clk的约束 //约束clk为 125M Hz create_clock -period 8.000 -name gt_refclk1_p -waveform {0.000 4.000} [get_ports gt_refclk1_p] 伪时钟路径,用于两个时钟域之间数据的交互 单边性(unateness)对于时序很重要,因为它指定的…