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; 谷歌插件或者油猴插件都有。 沉浸式翻译 - 免费双语对照网页翻译插件

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

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

【贪心算法】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;容易实现实时性…

在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…

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

现有的远程开机方案 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亿元。 鸿泰万立主营业务为汽车结构件、功能件的…

【笔记】扩散模型(九):Imagen 理论与实现

论文链接&#xff1a;Photorealistic Text-to-Image Diffusion Models with Deep Language Understanding 非官方实现&#xff1a;lucidrains/imagen-pytorch Imagen 是 Google Research 的文生图工作&#xff0c;这个工作并没有沿用 Stable Diffusion 的架构&#xff0c;而是级…

VScode建立Java项目

学了半天&#xff0c;项目、包是咋创建的都不知道&#x1f62d;&#x1f62d;&#x1f62d;&#xff0c;补习一下✏️✏️✏️ 打开命令面板&#xff0c;“查看”里打开&#xff0c;或者CtrlShiftP。 选择创建Java项目&#xff0c;现在没有用框架&#xff0c;只是普通学习&…

C语言变量与强制类型转换深度解析

在上一篇文章中&#xff0c;小编对数据类型进行了详细的讲解与剖析&#xff0c;所以本篇文章小编要带大家理解变量和强制类型转。还是老规矩&#xff0c;来波鸡汤&#xff0c;学习一定不能着急&#xff0c;无法一下就学明白的知识我们需要给他时间&#xff0c;一定不要在一个知…

国内短剧源码短剧系统搭建小程序部署H5、APP打造短剧平台

​在当今的互联网时代&#xff0c;短剧作为一种新兴的娱乐形式&#xff0c;受到了越来越多用户的喜爱。为了提供更好的用户体验和满足用户需求&#xff0c;一个好的短剧系统需要具备多元化的功能和优质的界面设计。 本文将介绍国内短剧源码短剧系统搭建小程序部署H5、APP所需的…

Synchronized 的几种用法解析

背景介绍 说到并发编程&#xff0c;总绕不开线程安全的问题。 实际上&#xff0c;在多线程环境中&#xff0c;难免会出现多个线程对一个对象的实例变量进行同时访问和操作&#xff0c;如果编程处理不当&#xff0c;会产生脏读现象。 线程安全问题 我们先来看一个简单的线程…