keepalived 实现 IP 地址漂移


🎈 作者:Linux猿

🎈 简介:CSDN博客专家🏆,华为云享专家🏆,Linux、C/C++、云计算、物联网、面试、刷题、算法尽管咨询我,关注我,有问题私聊!

🎈 欢迎小伙伴们点赞👍、收藏⭐、留言💬


目录

一、实验环境

二、安装软件

2.1 安装 keepalived 和 ipvsadm

2.2 安装 httpd

2.3 配置修改

2.4 启动服务

三、测试 keepalived

四、总结


本篇文章主要介绍 keepalived 的配置,实现 VIP 漂移。

一、实验环境

实验环境为 CentOS 7.9,如下所示。

[root@k8s-node-1 node]# cat /etc/centos-release
CentOS Linux release 7.9.2009 (Core)
[root@k8s-node-1 node]#

准备两台同样的机器,配置如下。

实验机器
名称系统IP
mastercentos7.9192.168.231.152 
slavecentos7.9192.168.231.151

二、安装软件

2.1 安装 keepalived 和 ipvsadm

分别在 master 和 slave 上安装 keepalived 包,执行命令如下所示。

[root@k8s-node-1 node]# yum -y install keepalived ipvsadm
[root@k8s-node-1 node]# systemctl enable keepalived

上面两个命令分别是安装软件包 keepalived 和 ipvsadm,然后设置 keepalived 开机自启动。

2.2 安装 httpd

[root@k8s-node-1 node]# yum -y install httpd
[root@k8s-node-1 node]# systemctl enable httpd

2.3 配置修改

(1)master 机器

添加 index.html,执行如下命令。

[root@k8s-master node]# echo "<h1>This is master</h1>" > /var/www/html/index.html

修改 keepalived 的配置文件 /etc/keepalived/keepalived.conf,如下所示。

! Configuration File for keepalivedglobal_defs {router_id 1
}
vrrp_instance VI_1 {state MASTERinterface ens33virtual_router_id 1priority 100advert_int 1authentication {auth_type PASSauth_pass 123456}virtual_ipaddress {192.168.231.160}
}

(2)slave 机器

添加 index.html,执行如下命令。

[root@k8s-node-1 node]# echo "<h1>This is backup</h1>" > /var/www/html/index.html

修改 keepalived 的配置文件 /etc/keepalived/keepalived.conf ,如下所示。

! Configuration File for keepalived
global_defs {router_id 2
}
vrrp_instance VI_1 {state BACKUPinterface ens33virtual_router_id 1nopreemptpriority 99advert_int 1authentication {auth_type PASSauth_pass 123456}virtual_ipaddress {192.168.231.160}
}

其中,配置文件的规则如下所示。

global_defs {router_id 1 //router_id 自定义,主备不能相同,备:router_id 2
}
vrrp_instance VI_1 {state MASTER // 主:state MASTER,备:state BACKUPinterface eth0 // 改为自己网卡名称virtual_router_id 1 // 组的ID,主备要一致mcast_src_ip 192.168.231.150 // 本段服务器IPpriority 100 // 优先级,主要高于备,备改为99advert_int 1 // 通告间隔描述,心跳频率nopreempt    // 不抢夺 VIP 重要!authentication {auth_type PASS // 主备一致auth_pass 123456 // 主备一致virtual_ipaddress {192.168.231.160 // 指定的VIP,主备一致}
}

(3)关闭防火墙

关闭防火墙,谨慎操作,仅用于测试环境。 

[root@k8s-node-1 node]# systemctl stop firewalld.service

2.4 启动服务

分别在 master 和 slave 节点上执行如下命令,启动 keepalived。

[root@k8s-node-1 node]# systemctl start keepalived.service

分别在 master 和 slave 节点上执行如下命令,启动 httpd。

[root@k8s-node-1 node]# systemctl start httpd

三、测试 keepalived

首先,在 master 上执行命令 ip a,查看是否已经配置成功。

[root@k8s-master node]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope hostvalid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000link/ether 00:0c:29:ca:f5:28 brd ff:ff:ff:ff:ff:ffinet 192.168.231.152/24 brd 192.168.231.255 scope global noprefixroute ens33valid_lft forever preferred_lft foreverinet 192.168.231.160/32 scope global ens33  # 出现这个表示配置成功!!!valid_lft forever preferred_lft foreverinet6 fe80::e3a3:533b:4112:90d5/64 scope link tentative noprefixroute dadfailedvalid_lft forever preferred_lft foreverinet6 fe80::57e:3922:f35e:9904/64 scope link tentative noprefixroute dadfailedvalid_lft forever preferred_lft foreverinet6 fe80::1bb3:d02e:702b:d4dc/64 scope link noprefixroutevalid_lft forever preferred_lft forever
3: virbr0: <BROADCAST,MULTICAST> mtu 1500 qdisc noqueue state DOWN group default qlen 1000link/ether 52:54:00:84:91:8b brd ff:ff:ff:ff:ff:ff
4: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast master virbr0 state DOWN group default qlen 1000link/ether 52:54:00:84:91:8b brd ff:ff:ff:ff:ff:ff
[root@k8s-master node]#

如上所示,出现 192.168.231.160 的 IP 表示配置成功,通过在浏览器中输入 192.168.231.160,执行结果如下所示。

图1 访问结果

 你可以进一步进行测试,例如:关掉 master 节点,在浏览器中输入 192.168.231.160 后执行结果如下所示。

图2 访问结果

 如果再次将 master 节点启动起来,在浏览器中输入 192.168.231.160 后执行结果如下所示。

图1 访问结果

四、总结

本篇文章介绍到这里,有问题欢迎在评论区交流,后续会更新 keepalived 的原理,敬请期待!

参考链接:

CentOS7 部署 Keepalived保姆级教程_centos7 keepalived_未来村长的博客-CSDN博客

 Keepalived 设置master故障恢复后不重新抢回VIP(解决nopreempt无效)_征服.刘华强的博客-CSDN博客


🎈 感觉有帮助记得「一键三连支持下哦!有问题可在评论区留言💬,感谢大家的一路支持!🤞猿哥将持续输出「优质文章回馈大家!🤞🌹🌹🌹🌹🌹🌹🤞


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

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

相关文章

RabbitMQ学习笔记9 TTL死信队列+延迟队列实战

我们去新建一个交换机&#xff1a; 然后我们再用这种方法直接创建一个队列&#xff1a; 点击bind这样我们的交换机和队列就绑定到一起了。 然后我们要新建普通队列&#xff0c;设置过期时间&#xff0c;指定死信交换机。 发布一条消息。 它会把队列传递到死信队列中去。

nvm 下载nodejs 失败

解决办法&#xff1a; 1.查看nvm安装路径 nvm root2、在安装路径下找到setting.txt,添加两句话 node_mirror: http://npm.taobao.org/mirrors/node/ npm_mirror: https://npm.taobao.org/mirrors/npm/3.再执行nvm install 就可以了。

【网络】TCP三次握手和四次挥手(感性理解)

目录 三次握手 文字描述三次握手过程 为什么是三次握手&#xff1f; 什么是SYN洪水&#xff1f; 连接和半连接队列 一次、两次握手行不行&#xff0c;四/五/六次握手行不行&#xff1f; 三次握手一定会成功吗&#xff1f; 三次握手的过程中可不可以携带数据 TCP中的IS…

flutter开发实战-自定义Switch开关控件Widget

flutter开发实战-自定义Switch开关控件 在flutter中实现自定义Switch&#xff0c;主要实现类似IOS的UISwitch样式的开关控件 一、效果图 二、实现Switch开关的Widget 实现自定义Switch的Widget&#xff0c;主要实现交织动画。 交织动画 有些时候我们可能会需要一些复杂的动画…

OpenCV在一个图像上画一个空心绿色的圆和一个实心红色的圆

/*** void cvCircle( CvArr* img, CvPoint center, int radius, CvScalar color, int thickness=1, int line_type=8, int shift=0 );* Opencv画点 其实画的是小圆圈* img:图像。* center:圆心坐标。* radius:圆形的半径。* color:线条的颜色。* thickness:如果是正数,表…

了解k8s容器组pods

一&#xff1a;Pods概述 在 部署第一个应用程序 中创建 Deployment 后&#xff0c;k8s创建了一个 Pod&#xff08;容器组&#xff09; 来放置应用程序实例&#xff08;container 容器&#xff09; Pod 容器组 是一个k8s中一个抽象的概念&#xff0c;用于存放一组 container&a…

文字和祝福语:创意的粒子效果网页(❤️好看好用❤️)HTML+CSS+JS

✨博主&#xff1a;命运之光 &#x1f338;专栏&#xff1a;Python星辰秘典 &#x1f433;专栏&#xff1a;web开发&#xff08;简单好用又好看&#xff09; ❤️专栏&#xff1a;Java经典程序设计 ☀️博主的其他文章&#xff1a;点击进入博主的主页 前言&#xff1a;欢迎踏入…

Stable Diffusion 多角度人设立绘快速生成多种方法

对于插画师构建人物立绘图设计一套多方位的人设可能要很久&#xff0c;但是使用SD进行操作的话就非常简单了&#xff0c;这个利用ControlNet骨骼图进行配置操作。 供一些样图参考&#xff0c;也可以使用ADetailer进行人物相关部位的修复。 文章目录 准备工作关键词绘制使用骨骼…

Git--远程操作

文章目录 前言一、理解分布式版本控制系统二、远程仓库1.新建远程仓库2.克隆远程仓库3.向远程仓库推送4.拉取远程仓库5.配置Git忽略特殊文件 给命令配置别名 总结 前言 正文开始!!! 一、理解分布式版本控制系统 我们目前所说的所有内容(工作区,暂存区,版本库等等),都是在本地…

数据库-SQL-DML语句

文章目录 DML语句添加数据修改数据DML-删除数据 DML语句 添加数据 表的结构 修改数据 DML-删除数据 DML-总结&#xff1a;

【Redis】2、Redis 的 Java 客户端(Jedis 和 SpringDataRedis)

目录 零、Redis 的 Java 客户端有哪些&#xff1f;二、Jedis 客户端(1) 引依赖(2) 连接 Redis 服务并测试(3) Redis 连接池 三、SpringDataRedis 介绍四、SpringBoot 中集成 SpringDataRedis(1) 引入依赖(2) 配置文件中书写相关配置(3) RedisTemplate 的默认序列化方式(4) 自定…

Qt保存代码

补全保存代码 #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//字体按钮对应的槽函数 void Widget::on_fontBtn_clicked() {…