当前位置: 首页 > news >正文

高可用集群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

1.4 配置简介

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.5 配置细节

root @ubuntu24-13: ~ # tcpdump -i ens33 host 224.0.0.18 -nn    # vrrp 通信数据
1.6  简单实践
两台主机安装nginx(略)
keepalived里面修改
   virtual_ipaddress {        
192.168.8.100
   }
 interface ens224
每个主机都增加一个网卡例如ens224
最终修改实现的效果如下
未完待续。。。。
http://www.xdnf.cn/news/601651.html

相关文章:

  • 数页码--数位dp
  • 板卡设计资料:基于fpga的10G以太网AD、Camera数据传输适配器
  • 服务器日志监控与分析:提前发现黑客攻击迹象
  • Ubuntu16.04 Qt的安装与卸载
  • Linux 之 Ubuntu Server 安装
  • 【ARM 嵌入式 编译系列 10.4.2 -- 查看 bss 段中有哪些内容】
  • Ubuntu 24-部署FTP和自定义用户
  • 【ARM/RISCV 嵌入式 编译系列 16 -- GCC 进制优化编译的常用方法】
  • echarts实现项目进度甘特图
  • 甘特图实例 dhtmlxGantt.js
  • 第六章 进阶12 周报的妙用
  • OverLoCK:先概览,再聚焦。CVPR2025全新主干网络
  • 打卡Day33
  • 300. 最长递增子序列【 力扣(LeetCode) 】
  • android13 禁止用户修改指定APP运行时权限
  • 前端vue2-完全前端生成pdf->pdf-lib,html2canvas+jspdf,原生打印,三种方式(打印带有echarts图的pdf)
  • 【论文精读】2023 AAAI--FastRealVSR现实世界视频超分辨率(RealWorld VSR)
  • 学习黑客TTryHackMe — Tcpdump基础 | 网络安全入门(THM)
  • 【AS32X601驱动系列教程】SMU_系统时钟详解
  • Flume的大概简单介绍
  • 微信小程序:列表项上同样的css样式在IOS上字体大小不一样
  • 原创|查询大数据级数据表的AI实现思路(Excel2SQL,Text2SQL)
  • POI模板生成EXCEL 64000 style in a .xlsx Workbook
  • 数字信号处理大实验2 利用FFT估计信号的频率
  • QML与C++联合编程
  • OpenSSL详解
  • 【数据架构06】可信数据空间架构篇
  • MySQL 8.0 OCP 1Z0-908 题目解析(13)
  • MySQL 8.0 OCP 英文题库解析(八)
  • MySQL 8.0 OCP 1Z0-908 题目解析(12)