keepalived 高可用搭建

一、部署准备

准备两台Linux(ubuntu)设备

主机:192.168.2.78
备机:192.168.2.18

设备安装keepalived(主机和备机都安装)

sudo apt-get install keepalived

keepalived配置文件为keepalived.conf,开始时文件可能不存在,需要自行创建,默认路径如下:

/etc/keepalived/keepalived.conf

keepalived.conf 的权限必须设置为644,否则可能无法启动 keepalived 服务,权限太高也不行。

keepalived 的日志可以这样查看:

tail -f /var/log/syslog 

设备上keepalived的虚拟IP(V-ip)查询命令:

ip a show dev 网卡名 或  ip addr

二、开始部署

  1. 安装keepalived(主机和备机都安装)
sudo apt-get install keepalived
  1. 创建配置文件
    V-ip约定为:192.168.2.233
sudo vi /etc/keepalived/keepalived.conf

内容如下:
====> 主机:

! Configuration File for keepalivedglobal_defs {# 全局唯一的主机标识router_id server_a
}
#健康检查
vrrp_script health_check {script "/home/ubuntu/work/health_check.sh" # 指定脚本interval 2   # 脚本执行间隔,单位秒timeout 2    # 脚本超时时间,单位秒fall 2       # 失败次数,超过此次数脚本将被标记为DOWNrise 1       # 成功次数,超过此次数脚本将被标记为UPweight -30   # 服务宕掉时,权重减少30
}
vrrp_instance VI_1 {# 标识是主节点还是备用节点,值为 MASTER 或 BACKUPstate MASTER# 绑定的网卡,指定设备实际的网卡名interface wlp0s20f3# 虚拟路由id,保证主备节点是一致的virtual_router_id 51# 权重priority 100# 同步检查时间,间隔默认1秒advert_int 1# 认证授权的密码,所有主备需要一样authentication {auth_type PASSauth_pass 1111}# 虚拟IP,主备需要一样virtual_ipaddress {192.168.2.233}#调用脚本track_script {health_check}##keepalived代理HTTP端口#virtual_server 192.168.2.233 10000 {#    # ######}
}

====> 备机:

! Configuration File for keepalivedglobal_defs {# 全局唯一的主机标识router_id server_b
}
#健康检查
vrrp_script health_check {script "/home/azurengine/health_check.sh" # 指定脚本interval 2   # 脚本执行间隔,单位秒timeout 2    # 脚本超时时间,单位秒fall 2       # 失败次数,超过此次数脚本将被标记为DOWNrise 1       # 成功次数,超过此次数脚本将被标记为UPweight -30   # 服务宕掉时,权重减少30
}
vrrp_instance VI_1 {# 标识是主节点还是备用节点,值为 MASTER 或 BACKUPstate BACKUP# 绑定的网卡,指定设备实际的网卡名interface enp2s0# 虚拟路由id,保证主备节点是一致的virtual_router_id 51# 权重priority 90# 同步检查时间,间隔默认1秒advert_int 1# 认证授权的密码,所有主备需要一样authentication {auth_type PASSauth_pass 1111}# 虚拟IP,主备需要一样virtual_ipaddress {192.168.2.233}#调用脚本track_script {health_check}# #keepalived代理HTTP端口# virtual_server 192.168.2.233 10000 {# #### }
}
  1. 健康检查脚本
    health_check.sh
#!/bin/bashVALUE_TO_CHECK="yes"  ## 模拟检查的结果if [ $VALUE_TO_CHECK == "yes" ]; thenecho "Server is healthy"exit 0
elseecho "Server is not healthy"exit 1
fi
  1. 重启keepalived服务
    (主备都需要重启)
sudo systemctl restart keepalived
  1. 验证
    (1)正常情况。
    在主机查看V-ip,可以看到存在V-ip:
ubuntu@linux:~$ ip a show dev wlp0s20f3
2: wlp0s20f3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000link/ether 90:09:df:a7:8d:b6 brd ff:ff:ff:ff:ff:ffinet 192.168.2.78/24 brd 192.168.2.255 scope global dynamic noprefixroute wlp0s20f3valid_lft 68900sec preferred_lft 68900secinet 192.168.2.233/32 scope global wlp0s20f3 ## V-ipvalid_lft forever preferred_lft foreverinet6 2408:8956:7a80:2d1d:c2eb:6e24:3e0:b/128 scope global dynamic noprefixroute valid_lft 6955sec preferred_lft 3355secinet6 fdc2:eb6e:2403:e000:31c1:5b9b:b739:417d/64 scope global temporary dynamic valid_lft 6978sec preferred_lft 3378secinet6 fdc2:eb6e:2403:e000:6eee:ca49:7e64:8cca/64 scope global dynamic mngtmpaddr noprefixroute valid_lft 6978sec preferred_lft 3378secinet6 2408:8956:7a80:2d1d:26c:136c:3b20:7ca7/64 scope global temporary dynamic valid_lft 6978sec preferred_lft 3378secinet6 2408:8956:7a80:2d1d:a8d3:eef6:1dee:e9a0/64 scope global dynamic mngtmpaddr noprefixroute valid_lft 6978sec preferred_lft 3378secinet6 fe80::e9dd:d4e4:c753:3c00/64 scope link noprefixroute valid_lft forever preferred_lft forever

在备机查看V-ip,V-ip不存在:

azurengine@azurengine-Default-string:/$ ip a show dev enp2s0
3: enp2s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000link/ether 00:e0:97:21:d6:ec brd ff:ff:ff:ff:ff:ffinet 192.168.2.18/24 brd 192.168.2.255 scope global noprefixroute enp2s0valid_lft forever preferred_lft foreverinet6 fdc2:eb6e:2403:e000:2e0:97ff:fe21:d6ec/64 scope global dynamic mngtmpaddr noprefixroute valid_lft 7121sec preferred_lft 3521secinet6 2408:8956:7a80:2d1d:2e0:97ff:fe21:d6ec/64 scope global dynamic mngtmpaddr noprefixroute valid_lft 7121sec preferred_lft 3521secinet6 fe80::2e0:97ff:fe21:d6ec/64 scope link noprefixroute valid_lft forever preferred_lft forever

(2)异常情况
(主机health_check.sh脚本的VALUE_TO_CHECK改为‘no’)

主机查看V-ip,显示不存在V-ip:

ubuntu@linux:~$ ip a show dev wlp0s20f3
2: wlp0s20f3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000link/ether 90:09:df:a7:8d:b6 brd ff:ff:ff:ff:ff:ffinet 192.168.2.78/24 brd 192.168.2.255 scope global dynamic noprefixroute wlp0s20f3valid_lft 69107sec preferred_lft 69107secinet6 2408:8956:7a80:2d1d:c2eb:6e24:3e0:b/128 scope global dynamic noprefixroute valid_lft 7162sec preferred_lft 3562secinet6 fdc2:eb6e:2403:e000:31c1:5b9b:b739:417d/64 scope global temporary dynamic valid_lft 7185sec preferred_lft 3585secinet6 fdc2:eb6e:2403:e000:6eee:ca49:7e64:8cca/64 scope global dynamic mngtmpaddr noprefixroute valid_lft 7185sec preferred_lft 3585secinet6 2408:8956:7a80:2d1d:26c:136c:3b20:7ca7/64 scope global temporary dynamic valid_lft 7185sec preferred_lft 3585secinet6 2408:8956:7a80:2d1d:a8d3:eef6:1dee:e9a0/64 scope global dynamic mngtmpaddr noprefixroute valid_lft 7185sec preferred_lft 3585secinet6 fe80::e9dd:d4e4:c753:3c00/64 scope link noprefixroute valid_lft forever preferred_lft forever

在备机上查看V-ip,发现V-ip漂移到备机上了:

azurengine@azurengine-Default-string:/$ ip a show dev enp2s0
3: enp2s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000link/ether 00:e0:97:21:d6:ec brd ff:ff:ff:ff:ff:ffinet 192.168.2.18/24 brd 192.168.2.255 scope global noprefixroute enp2s0valid_lft forever preferred_lft foreverinet 192.168.2.233/32 scope global enp2s0 ## V-ipvalid_lft forever preferred_lft foreverinet6 fdc2:eb6e:2403:e000:2e0:97ff:fe21:d6ec/64 scope global dynamic mngtmpaddr noprefixroute valid_lft 7180sec preferred_lft 3580secinet6 2408:8956:7a80:2d1d:2e0:97ff:fe21:d6ec/64 scope global dynamic mngtmpaddr noprefixroute valid_lft 7180sec preferred_lft 3580secinet6 fe80::2e0:97ff:fe21:d6ec/64 scope link noprefixroute valid_lft forever preferred_lft forever

(3)恢复
当主机脚本恢复VALUE_TO_CHECK恢复为‘yes’的时候,V-ip再次会到主机上,备机不存在V-ip(此处不贴结果了)。

  1. 遇到的问题

1.启动 keepalived 报错。解决方法:keepalived.conf 的权限修改为644。
2.主机健康检查失败后,备机自动接管V-ip,但是主机运行 ip addr 依然显示存在 V-ip。解决方法:防火墙会影响keepalived的心跳通信,所以主机和备机都需要关闭防火墙,或者允许特定的端口提供给keepalived进行通信。

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

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

相关文章

MySQL utf8mb3 和 utf8mb4引发的问题

问题描述 Cause: java.sql.SQLException: Incorrect string value: \xF4\x8F\xBB\xBF-b... for column sddd_aaa_ark at row 1 sddd_aaa_ark 存储中文字符时&#xff0c;出现上述问题 原因分析 sddd_aaa_ark在数据库中结构是 utf8字符的最大字节数是3 byte&#xff0c;但是某些…

ONLYOFFICE 文档8.2更新评测:PDF 协作编辑、性能优化及更多新功能体验

文章目录 &#x1f340;引言&#x1f340;ONLYOFFICE 产品简介&#x1f340;功能与特点&#x1f340;体验与测评ONLYOFFICE 8.2&#x1f340;邀请用户使用&#x1f340; ONLYOFFICE 项目介绍&#x1f340;总结 &#x1f340;引言 在日常办公软件的选择中&#xff0c;WPS 和微软…

SAP-ABAP开发-ONLINE 程序、DIALOG屏幕开发

目录 一、Online 程序概览 1、程序类型 2、Online程序的主要对象 二、界面 1、SAP的屏幕开发 2、屏幕功能实现 3、界面中的事件块&#xff08;Event Block&#xff09; 4、界面的创建 三、简单界面元素 1、文本/输入框控件 2、数据检查 3、一些常用的关键字 四、复…

java、excel表格合并、指定单元格查找、合并文件夹

#创作灵感# 公司需求 记录工作内容 后端&#xff1a;JAVA、Solon、easyExcel、FastJson2 前端&#xff1a;vue2.js、js、HTML 模式1&#xff1a;合并文件夹 * 现有很多文件夹 想合并全部全部的文件夹的文件到一个文件夹内 * 每个部门发布的表格 合并全部的表格为方便操作 模…

平替谷歌翻译--沉浸式翻译

这款插件真特么的猛啊&#xff01;&#xff01;&#xff01; 谷歌插件或者油猴插件都有。 沉浸式翻译 - 免费双语对照网页翻译插件

SDL基本使用

#include <stdio.h>#include <SDL.h>#undef main int main() {printf("Hello World!\n");SDL_Window *window NULL; // 声明窗口SDL_Init(SDL_INIT_VIDEO); // 初始化SDL// 创建SDL Windowwindow SDL_CreateWindow("Basic Window"…

印尼市场潜力无限!用友司库直联助力中企印尼“掘金”

在经济全球化的浪潮下&#xff0c;东南亚市场正焕发出勃勃生机。而其中印度尼西亚作为东盟 大的经济体&#xff0c;被认为是东南亚重要、有活力的市场之一&#xff0c;成为中企出海竞相布局的热门目的地。然而&#xff0c;在积极进军印尼市场的过程中&#xff0c;中国企业普遍面…

【系统架构设计师】2023年真题论文: 论软件可靠性评价的设计与实现(包括和素材和论文)

更多内容请见: 备考系统架构设计师-专栏介绍和目录 文章目录 真题题目(2023年 试题3)论文素材参考论文参考摘要正文总结真题题目(2023年 试题3) 软件可靠性评价是利用可靠性数学模型、统计技术等,对软件失效数据进行处理,评估和预测软件可靠性的过程,包括选择模型、收集数…

【贪心算法】No.1---贪心算法(1)

文章目录 前言一、贪心算法&#xff1a;二、贪心算法示例&#xff1a;1.1 柠檬⽔找零1.2 将数组和减半的最少操作次数1.3 最⼤数1.4 摆动序列1.5 最⻓递增⼦序列1.6 递增的三元⼦序列 前言 &#x1f467;个人主页&#xff1a;小沈YO. &#x1f61a;小编介绍&#xff1a;欢迎来到…

自动驾驶---“火热的”时空联合规划

1 背景 早期的不少规划算法都是横纵分离的&#xff08;比如Apollo&#xff09;&#xff0c;先求解path之后&#xff0c;依赖path的结果再进行speed的求解。这种横纵解耦的规划方式具有以下特点&#xff1a; 相对较为简单&#xff0c;计算量通常较小&#xff0c;容易实现实时性…

三十三、Python基础语法(面向对象其他语法-下)

一、属性划分 1.类属性 类属性&#xff1a;类属性就是类对象具有的属性&#xff0c;一般写法在类内部、方法的外部定义的变量,就是类属性&#xff0c;类属性在内存中只有一份。可以通过类名直接访问&#xff0c;也可通过实例访问。 class Circle:# 类属性&#xff0c;定义圆…

在VSCode中读取Markdown文件

在VSCode安装Markdown All in One或Markdown Preview Enhanced即可 插件Markdown All in One GitHub&#xff1a;https://github.com/yzhang-gh/vscode-markdown v3.6.2下载链接&#xff1a;https://marketplace.visualstudio.com/_apis/public/gallery/publishers/yzhang/vs…

IDEA在编译时: java: 找不到符号符号: 变量 log

一、问题 IDEA在编译的时候报Error:(30, 17) java: 找不到符号符号: 变量 log Error:(30, 17) java: 找不到符号 符号: 变量 log 位置: 类 com.mokerson.rabbitmq.config.RabbitMqConfig 二、解决方案 背景&#xff1a;下载其他同事代码时&#xff0c;第一次运行&#xff0c…

蓝禾,汤臣倍健,三七互娱,得物,顺丰,快手,途游游戏25秋招内推

蓝禾&#xff0c;汤臣倍健&#xff0c;三七互娱&#xff0c;得物&#xff0c;顺丰&#xff0c;快手&#xff0c;途游游戏25秋招内推 ①蓝禾 【岗位】国内/国际电商运营&#xff0c;设计&#xff0c;研发&#xff0c;营销&#xff0c;职能&#xff0c;工作地&#xff1a;深圳 【…

简单又便宜的实现电脑远程开机唤醒方法

现有的远程开机方案 1&#xff09;使用向日葵开机棒 缺点是比较贵一点&#xff0c;开机棒要一百多&#xff0c;而且查了评论发现挺多差评说不稳定&#xff0c;会有断联和无法唤醒的情况&#xff0c;而且设置也麻烦&#xff0c;还需要网卡支持WOL 2&#xff09;使用远程开机卡 …

《SparkSQL--通过ThriftServer连接DataGrip》

ThriftServer 功能&#xff1a;类似于HiveServer2&#xff0c;负责解析客户端提交的SQL语句&#xff0c;转换成Spark的任务进行执行本质&#xff1a;Spark中的一个特殊的程序&#xff0c;利用程序的资源运行所有SQL&#xff0c;该程序除非手动关闭&#xff0c;否则一直运行 启…

为什么Python运行速度这么慢?有什么解决方法吗?

说起简单易学的编程语言&#xff0c;你一定会想到Python&#xff1b;然而&#xff0c;说起Python&#xff0c;许多人在说完它的优点后&#xff0c;会接一句“但是就是慢......” 与其他编程语言相比&#xff0c;Python的速度一直是它为人诟病的一点。但究竟是什么原因导致了它…

如何解决导入aioredis报错TypeError: duplicate base class TimeoutError的问题(轻松解决,亲测有效)

下面是根据你的要求撰写的文章: 文章目录 📖 介绍 📖🏡 演示环境 🏡📒 aioredis导包报错 📒📝 解决方案📝 小贴士⚓️ 相关链接 ⚓️📖 介绍 📖 最近在使用Python异步redis模块aioredis的时候遇到了一个错误,导包报错提示 TypeError: duplicate base cla…

泰鸿万立上会,业绩增速放缓,对吉利、长城依赖度较高

作者&#xff1a;Eric 来源&#xff1a;IPO魔女 2024年11月8日&#xff0c;深交所上市委将审议浙江泰鸿万立科技股份有限公司&#xff08;简称“鸿泰万立”&#xff09;主板IPO申请。公司保荐机构为东方证券。拟募集资金为11.50亿元。 鸿泰万立主营业务为汽车结构件、功能件的…

Vue项目隐藏所有页面/单独某个页面的浏览器原生滚动条

如果要隐藏项目中的所有页面的滚动条&#xff0c;则在 main.css 中添加&#xff1a; body, html {margin: 0 !important; /* 去除默认边距&#xff0c;优化显示效果 */padding: 0 !important; /* 去除默认边距&#xff0c;优化显示效果 */scrollbar-width: none; /* 隐藏滚动条…