LVS+Nginx高可用集群---keepalived原理与实战

1.高可用集群架构keepalived双机主备原理

高可用:(HA)
部署nginx存在两台nginx。当主节点的nginx宕机停止服务的时候,nginx备用机起到跟nginx(主)
keepalived的概念:解决单点故障;组件免费;可以实现高可用HA机制;基于VRRP协议

虚拟路由冗余协议VRRP:virtual router redundancy protocol
解决内网单机故障的路由协议;构建有多个路由器的MASTER BACKUP(路由器可以理解为单个nginx节点);虚拟ip-VIP(virtual IP Address)(包含内网ip和虚拟ip)
存在多个虚拟ip(有权重),在主节点宕机,多个BACKUP会有个竞争的过程。谁的权重越高,谁就成为临时“领导”。

Keepalived双机主备原理:
在这里插入图片描述
主节点宕机后,虚拟ip会进行心跳检测,这时候虚拟ip会跟备用机绑定到一起。
高可用的故障转移跟故障切换都是通过VIp协议完成的,(主节点)不停的往备用机发送心跳,备用机拿到之后就知道主节点还活着。如果发生故障,备用机就接受不到心跳了。备用机就会接管主节点的服务了

2.Keepalived安装部署

通过ftp工具上传到linux中,/home/software

解压:
tar -zxvf keepalived-2.0.18.tar.gz

解压后进入到解压出来的目录,看到会有configure,那么就可以做配置了
在这里插入图片描述

使用configure命令配置安装目录与核心配置文件所在位置
./configure --prefix=/usr/local/keepalived --sysconf=/etc

prefix:keepalived安装的位置
sysconf:keepalived核心配置文件所在位置,固定位置,改成其他位置则keepalived启动不了,/var/log/messages中会报错
配置过程中可能会出现警告信息,如下所示:
*** WARNING - this build will not support IPVS with IPv6. Please install libnl/libnl-3 dev libraries to support IPv6 with IPVS.

安装libnl/libnl-3依赖
yum -y install libnl libnl-devel
5.3. 重新configure一下,此时OK。

安装keepalived:
make && make install

进入到/etc/keepalived,该目录下为keepalived核心配置文件
在这里插入图片描述
如果忘记安装配置的目录,则通过如下命令找到:
在这里插入图片描述

3.Keepalived核心配置

通过命令 vim keepalived.conf 打开配置文件

global_defs {# 路由id:当前安装keepalived的节点主机标识符,保证全局唯一router_id keep_171
}vrrp_instance VI_1 {# 表示状态是MASTER主机还是备用机BACKUPstate MASTER# 该实例绑定的网卡interface ens33# 保证主备节点一致即可virtual_router_id 51# 权重,master权重一般高于backup,如果有多个,那就是选举,谁的权重高,谁就当选priority 100# 主备之间同步检查时间间隔,单位秒advert_int 2# 认证权限密码,防止非法节点进入authentication {auth_type PASSauth_pass 1111}# 虚拟出来的ip,可以有多个(vip)virtual_ipaddress {192.168.1.161}
}

查看网卡的名称:
在这里插入图片描述
启动keepalived:
在这里插入图片描述
查看进程:ps -ef|grep keepalived
在这里插入图片描述
查看vip:虚拟ip
在这里插入图片描述

4.把keepalived注册为系统服务

使用Switchhosts:首先配置网址
171是虚拟机ip。161是keepalived的VIP
在这里插入图片描述
首先查看两个虚拟机中nginx的配置
Keepalived的关闭方式杀死对应的进程 kill -9 pid

将/home/software/keepalived-2.2.7/keepalived/etc目录下的 init.d/keepalived 移动到/etc/keepalived.

在这里插入图片描述
刷新,加载keepalived服务。
命令:systemctl daemon-reload

keepalived命令:

# 启动keepalived
systemctl start keepalived
# 停止keepalived
systemctl stop keepalived
# 重启keepalived
systemctl restart keepalived查看进程:ps -ef|grep keepalived

5.keepalived实现双机主备高可用

首先安装backup节点的keepalived,修改对应keepalived里的配置(参考之前配置的内容),并且配置为系统服务。

启动测试成功。测试backup是否好用。
关闭主服务的keepalived,
打开备用的服务器,使用ip addr查看虚拟ip,是否多出查看keepalived是否启用。如下图:
在这里插入图片描述

再重启主服务的keepalived,解绑成功。Backup的ip addr 命令查不到192.168.1.161
配置的keepalived的配置模板:

global_defs {router_id keep_172
}vrrp_instance VI_1 {# 备用机设置为BACKUPstate BACKUPinterface ens33virtual_router_id 51# 权重低于MASTERpriority 80advert_int 2authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {# 注意:主备两台的vip都是一样的,绑定到同一个vip192.168.1.161}
}

6.keepalived配置nginx自动重启

当发生nginx挂掉,而keepalived仍然在运行。

写相应的标本文件,写在核心配置文件下。

(1).增加nginx重启检测脚本:

vim /etc/keepalived/check_nginx_alive_or_not.sh#!/bin/bashA=`ps -C nginx --no-header |wc -l`
# 判断nginx是否宕机,如果宕机了,尝试重启
if [ $A -eq 0 ];then/usr/local/nginx/sbin/nginx# 等待一小会再次检查nginx,如果没有启动成功,则停止keepalived,使其启动备用机sleep 3if [ `ps -C nginx --no-header |wc -l` -eq 0 ];thenkillall keepalivedfi
fi增加运行权限:chmod +x /etc/keepalived/check_nginx_alive_or_not.sh

(2).配置keepalived监听nginx脚本

vrrp_script check_nginx_alive {script "/etc/keepalived/check_nginx_alive_or_not.sh"interval 2 # 每隔两秒运行上一行脚本weight 10 # 如果脚本运行成功,则升级权重+10# weight -10 # 如果脚本运行失败,则升级权重-10
}

(3).在VRRP_instance中新增监控的脚本。

track_script {check_nginx_alive   # 追踪 nginx 脚本
}

(4).重启keepalived使配置文件生效

Systemctl restart keepalived

7.实现keepalived双主热备

先修改核心配置文件
主节点配置:

global_defs {router_id keep_171
}vrrp_instance VI_1 {state MASTERinterface ens33virtual_router_id 51priority 100advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.1.161}
}vrrp_instance VI_2 {state BACKUPinterface ens33virtual_router_id 52priority 80advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.1.162}
}

备用节点配置:

global_defs {router_id keep_172
}vrrp_instance VI_1 {state BACKUPinterface ens33virtual_router_id 51priority 80advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.1.161}
}vrrp_instance VI_2 {state MASTERinterface ens33virtual_router_id 52priority 100advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.1.162}
}

重启两条keepalived:
重启Keepalived
systemctl restart keepalived

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

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

相关文章

Unity不用脚本实现点击按钮让另外一个物体隐藏

1.首先在场景中创建一个按钮和一个其他随便什么东西 2.点击按钮中的这个加号 3.然后将刚刚你创建的物体拖到这里来 4.然后依次点击下面这些给按钮绑定事件 5.运行游戏并点击按钮,就会发现拖进来的物体消失了 总结:如果按钮的功能单一,可以使用…

EPLAN 去掉PDF中的红色跳转标识

EPLAN PDF图纸导出后体验跳转标识会有红色标识,如何去掉呢?下面介绍一下方法: 此为现象: EPLAN 2.9的帮助文档里提示: 在导出的 PDF 文档中,跳转后的跳转目标现在通过红色的闪烁框进行标识。可能的跳转目…

尚硅谷大数据技术-数据湖Hudi视频教程-笔记03【Hudi集成Spark】

大数据新风口:Hudi数据湖(尚硅谷&Apache Hudi联合出品) B站直达:https://www.bilibili.com/video/BV1ue4y1i7na 尚硅谷数据湖Hudi视频教程百度网盘:https://pan.baidu.com/s/1NkPku5Pp-l0gfgoo63hR-Q?pwdyyds阿里…

让AI语言模型自由飞翔:LangChain框架的奇妙世界

今天,我将为大家揭开一项令人激动的技术——LangChain。想象一下,如果能将人工智能的强大能力与我们日常使用的数据和工具无缝连接,那将开启怎样崭新且无限的可能! LangChain,一个专为大型语言模型设计的框架&#xf…

数据分析——numpy教程

1.NumPy: 是Python的一个开源的数值计算库。可以用来存储和处理大型矩阵,比python自身的嵌套列表结构要高效,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库,包括数学、逻辑、形状操作、排序、…

Python实现批量转换图片格式:告别单调乏味的图片圈套!

各位小伙伴们,你是不是也厌倦了那些单调乏味的图片格式?又或者饱受不同格式的图片文件所困扰?别急,今天小编来给你送上一份活泼有趣的Python教程,让我们一起告别单调,迎接多彩多姿的图片世界吧!…

R包:TreeAndLeaf二分类树构建R包

介绍 树形图显示了二叉树,重点是表示树元素之间的层次关系。树状图包含节点、分支(边)、根和叶。根是分支和节点的来源,指示到叶的方向,即终端节点。 树形图布局的大部分空间用于排列分支和内部节点,留给叶子的空间有限。对于大…

异常检测算法

目录 一、异常检测算法功能:二、正态(高斯)分布:三、异常检测算法执行过程:四、如何选择特征:五、评估异常检测算法: 一、异常检测算法功能: 异常检测算法用来检测数据集中的一些异…

OpenGL笔记二之glad加载opengl函数以及opengl-API(函数)初体验

OpenGL笔记二之glad加载opengl函数以及opengl-API(函数)初体验 bilibili赵新政老师的教程看后笔记 code review! 文章目录 OpenGL笔记二之glad加载opengl函数以及opengl-API(函数)初体验1.运行2.重点3.目录结构4.main.cpp5.CMakeList.txt 1.运行 2.重点 3.目录结构 01_GLFW_…

oracle控制文件详解以及新增控制文件

文章目录 oracle控制文件1、 控制文件包含的主要信息如下:2、查看目前系统的控制文件信息,主要是查看相关的字典视图 oracle新增控制文件 oracle控制文件 控制文件是一个很小的二进制文件(10MB左右),含有数据库结构信息,包括数据…

AI安全系列——[第五空间 2022]AI(持续更新)

最近很长时间没有更新,其实一直在学习AI安全,我原以为学完深度学习之后再学AI安全会更加简单些,但是事实证明理论转实践还是挺困难的,但是请你一定要坚持下去,因为“不是所有的坚持都有结果,但总有一些坚持…

uniapp发送Form Data格式请求

设置header的Content-Type为 application/x-www-form-urlencoded 即可 uni.request({url: , // 接口urldata: {input: 写一篇一千字的作文}, // 入参method: POST, // 参数类型header: {"Content-Type": "application/x-www-form-urlencoded"}, // 请求头…

如何构建全生命周期的安全体系架构来确保容器的安全?

容器技术在云原生应用和微服务架构中得到了广泛应用,其轻量、灵活和高效的特点使其成为现代IT环境中的重要工具。然而,尽管容器带来了许多优势,但其安全性问题也不容忽视。接下来跟随博主一起探索如何构建全生命周期的安全体系架构以确保容器…

js 请求blob:https:// 图片

方式1 def get_file_content_chrome(driver, uri):result driver.execute_async_script("""var uri arguments[0];var callback arguments[1];var toBase64 function(buffer){for(var r,nnew Uint8Array(buffer),tn.length,anew Uint8Array(4*Math.ceil(t/…

【LSTM和GRU极简,和最新的TT也就是状态】机器学习模型来学习状态

LSTM(长短期记忆网络)中的关键参数包括输入门、遗忘门、输出门、细胞状态和隐藏状态。以下是如何进行推理计算的示例: LSTM参数和公式 输入门(i_t):决定输入的信息量。 遗忘门(f_t&#xff0…

处理在 electron 中使用开启了懒加载的 el-image 后,窗口最大化或窗口尺寸变化后图片无法显示的问题

文章目录 1、问题描述2、详情动图3、解决思路4、解决方案5、效果展示 1、问题描述 在 electron 中使用 el-image 时,开启了懒加载后,发现只有当窗口滚动后,图片才会显示,即便图片已经处于窗口的可视区域。当拖动窗口使其尺寸变大…

解决ESLint和Prettier冲突的问题

在配置了ESLint的项目中使用Prettier进行格式化可能会出现冲突,不如Prettier配置了使用双引号,ESLint配置了单引号,当然可以一个一个改成一样的配置,但是比较麻烦。我发现可以直接使用ESLint的规则进行格式化。在VSCode配置过程如…

FPGA上板项目(二)——PLL测试

目录 实验内容实验原理实验步骤实验结果 实验内容 将差分时钟信号转化为 192MHz 时钟信号作为输出。 实验原理 PLL,即锁相环,一种反馈控制电路,具有时钟倍频、分频、相位偏移和可编程占空比的功能。 实验步骤 添加 clocking wizard IP核&…

Spring Boot 集成 RabbitMQ

依赖与配置 在 pom.xml 中引入 RabbitMQ 相关依赖 <!-- AMQP 依赖, RabbitMq --> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId><version>3.2.7</version> &…

ElementUI el-select 组件动态设置disabled后,高度变更的问题解决办法

问题描述 Vue2 项目在使用 el-select 组件时&#xff0c;动态将disabled变更为了 true&#xff0c;元素的高度发生了变化。 问题原因 通过浏览器开发人员工具面板&#xff0c;发现&#xff0c;组件内的 input 元素被动态设置了height的样式&#xff1a; 在项目中检查后并…