keepalive + nginx 来实现 对于nginx的高可用, 以及如何搭建主备模式

news/2024/3/28 22:06:51/文章来源:https://blog.csdn.net/u014374009/article/details/129220497

keepalive + nginx 来实现 对于nginx的高可用, 以及如何搭建主备模式。

keeplived简介

Keepalived是用纯ANSI/ISO C编写的。该软件围绕一个中央I/O多路复用器进行连接,以提供实时网络设计。

1.1 Keepalived进程被分为3个不同进程
在这里插入图片描述

A.一个极简的父进程,负责fork和监控子进程,父进程监控框架称为watchdog
B.两个子进程,一个负责VRRP框架,另一个负责健康检查

1.2 使用场景
mysql数据库双主架构;
nginx主从架构;通过keepalived进行切换。

1.3 故障切换框架
Keepalived实现了用于导向器故障切换的VRRP协议。在实现的VRRP堆栈中,VRRP数据包调度程序负责为每个VRRP实例多路分发特定的I/O。
VRRP实例同步:我们可以指定2个VRRP实例之间的状态监控,也称为VRRP同步组。它保证2个VRRP实例保持相同状态,同步实例间相互监视。

二、安装部署

2.1 通过二进制安装
1)安装依赖

yum install curl gcc openssl-devel libnl3-devel net-snmp-devel

2)下载解压安装包并编译

tar xz keepalived-1.2.15.tar.gz
./configure
Make && make install

3)安装到指定目录

./configure --prefix=/usr/local/keepalived-1.2.15

2.2 通过依赖包安装

yum -y install keepalived
yum -y install nmap-ncat

– 测试

systemctl status keepalived.service
systemctl start keepalived.service

三、配 置

例如两台互为主主的nginx或mysql同时可提供服务,一台服务宕掉后另一台可接管。
示例:主节点

! Configuration File for keepalivedglobal_defs {router_id test_kp
}vrrp_script chk_local {script "/local/keepalived/etc/stop.sh"interval 15fall 3rise 1
# weight 10
}
vrrp_instance VI_1 {state BACKUPinterface bond0virtual_router_id 1001priority 100advert_int 1nopreempt   ## backup 节点不需要配置authentication {auth_type PASSauth_pass server101}track_script {chk_local}virtual_ipaddress {192.168.10.101/24}
}

示例:备节点

! Configuration File for keepalivedglobal_defs {router_id test_kp
}vrrp_script chk_local {script "/local/keepalived/etc/stop.sh"interval 3weight -5}vrrp_instance VI_1 {state BACKUPinterface eth0virtual_router_id 1001priority 99advert_int 1authentication {auth_type PASSauth_pass server101}virtual_ipaddress {192.168.10.101/24}
track_script {chk_local}
}

参数详解

在这里插入图片描述

四、常见问题

4.1 日志提示

WARNING - script '/etc/keepalived/check_nginx.sh' is not executable for uid:gid 0:0 - disabling.

原因:备机上keepalived监控脚本没有执行权限。
解决:chmod +x ~/check_nginx.sh

4.2 Keeplived主备vip地址无法切换
原因:keeplived配置的优先级相同。
解决:检查keepalived.cof配置文件的priority参数,主从节点优先级设置为不同。


1.概述
前面有了解keepalive 的主备的基本使用, 但是那种是针对宕机等情况 停止了keepalive 的进程实现的 vip的漂移,本篇把keepalive 添加校验nginx存活脚本 实现针对nginx的监控, 实现nginx的高可用

在这里插入图片描述

2.准备工作
准备2台机器 , 把111定义为 keepalive 的 MASTER 节点

在这里插入图片描述

分别在2台服务器上配置好nginx 并且修改默认的 index.html 添加上 ip 标识方便区分. 如下:

在这里插入图片描述

3.配置 keepalived
在keepalived 的配置文件中的 instance 里面配置 track_script 指定 检查nginx是否存活的脚本

3.1 master (172.16.225.111)

! Configuration File for keepalivedglobal_defs {router_id LB111
}vrrp_script chk_nginx {# 具体的脚本script "/etc/keepalived/nginx_check.sh"interval 2 # 2s执行一次weight -20 # 失败一次 则优先级 -20
}vrrp_instance VI_1 {state MASTERinterface ens160virtual_router_id 51priority 100advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {172.16.225.200}# 指定脚本track_script {chk_nginx}
}

3.2 master (172.16.225.110)

! Configuration File for keepalivedglobal_defs {router_id LB111
}vrrp_script chk_nginx {script "/etc/keepalived/nginx_check.sh"interval 2weight -20
}vrrp_instance VI_1 {state BACKUPinterface ens160virtual_router_id 51priority 90advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {172.16.225.200}track_scrip {chk_nginx}
}

4.配置 nginx_check.sh
主要是这个脚本 这个脚本的内容就是 通过ps命令检查 nginx进程是否存活 ,如果不存活 则尝试启动一次 则检查 ,如果还是启动不起来 则 把keepalived 关闭, 从而让 keepalived 能检测到 并且 vip 能够漂移到其他机器:

#!/bin/bash
status=$(ps -C nginx --no-heading|wc -l)
if [ "${status}" = "0" ]; then# 尝试启动一次systemctl start nginx# 再次检查ngixn 进程status2=$(ps -C nginx --no-heading|wc -l)if [ "${status2}" = "0" ]; then# 关闭 keepalivedsystemctl stop keepalivedfi
fi

需要在2台机器上都配置上这个脚本:

# 给脚本一个 可执行的权限
chmode +x /etc/keepalived/nginx_check.sh
# 重启或者启动 keepalived
systemctl restart keepalived

5.关闭 selinux
如果重启后或者启动后 查看日志有如下抛错 , 则是 selinux 没有关闭。
在这里插入图片描述

# 临时关闭
setenforce 0#永久关闭
sed -i 's/SELINUX=enforcing/\SELINUX=disabled/' /etc/selinux/config

6.模拟测试
2台机器 分别启动nginx 和 keepalive 后。访问 vip 172.16.225.200 这个vip 目前在 111 master机器上。
在这里插入图片描述

在master机器上 把ngixn关闭。

# 关闭 nginx
./nginx -s stop
# 此时查看 keepalived 的状态就是 dead了
systemctl status keepalived● keepalived.service - LVS and VRRP High Availability MonitorLoaded: loaded (/usr/lib/systemd/system/keepalived.service; disabled; vendor preset: disabled)Active: inactive (dead)

再次访问vip 172.16.225.200 , 可以看到 vip 已经跑到了 backup机器110上了。
在这里插入图片描述
总结
keepalive + nginx 的基本的主备配置 实现了 nginx 的高可用,核心点就是配置 nginx_check.sh脚本给keepalive 的执行, 这个nginx_check.sh 脚本内如果发现nginx 不存活 尝试启动 如果还是不存活 则直接关闭 keepalive 进程。

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

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

相关文章

【JavaSE】复习(进阶)

文章目录1.final关键字2.常量3.抽象类3.1概括3.2 抽象方法4. 接口4.1 接口在开发中的作用4.2类型和类型之间的关系4.3抽象类和接口的区别5.包机制和import5.1 包机制5.2 import6.访问控制权限7.Object7.1 toString()7.2 equals()7.3 String类重写了toString和equals8.内部类8.1…

【深度学习】什么是线性回归逻辑回归单层神经元的缺陷

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录逻辑回归&线性回归单层神经元的缺陷单层神经元的缺陷逻辑回归&线性回归 线性回归预测的是一个连续值, 逻辑回归给出的”是”和“否”的回答. 等…

4、算法MATLAB---认识矩阵

认识矩阵1、矩阵定义和基本运算1.1 赋值运算符:1.2 等号运算符:1.3 空矩阵1.4 一行一列矩阵1.5 行矩阵(元素用空格或逗号分隔)1.6 列矩阵(分号表示换行)1.7 m行n列的矩阵:行值用逗号间隔&#x…

如何在Linux中实现进程间通信

致前行路上的人: 要努力,但不要着急,繁花锦簇,硕果累累都需要过程! 目录 1.进程间通信介绍 1.1进程间通信的目的 1.2进程间通信发展 1.3进程间通信分类 1.4进程间通信的本质 2.管道 2.1什么是管道 2.2管道与进程的关系…

轻量级网络模型ShuffleNet V2

在学习ShuffleNet V2内容前需要简单了解卷积神经网络和MobileNet,以及Shuffnet V1的相关内容,大家可以出门左转,去看我之前的几篇博客MobileNet发展脉络(V1-V2-V3),轻量级网络模型ShuffleNet V1🆗&#xff…

Android 高工分享一波性能优化的总结~

随着 Android 开发越来越规范,国内工程师的素质,以及用户对产品的要求也越来越高。这也间接导致我们对研发项目的质量要求到了近乎苛刻的地步,**内存优化、UI 卡顿优化、App 崩溃监控等性能调优也逐渐成了人手必备的技能。**工作之余&#xf…

【数据挖掘】1、综述:背景、数据的特征、数据挖掘的六大应用方向、有趣的案例

目录一、背景1.1 学习资料1.2 数据的特征1.3 数据挖掘的应用案例1.4 获取数据集1.5 数据挖掘的定义二、分类三、聚类四、关联分析五、回归六、可视化七、数据预处理八、有趣的案例8.1 隐私保护8.2 云计算的弹性资源8.3 并行计算九、总结一、背景 1.1 学习资料 推荐书籍如下&a…

【Spark分布式内存计算框架——Spark Streaming】3.入门案例(上)官方案例运行

2.1 官方案例运行 运行官方提供案例,使用【$SPARK_HOME/bin/run-example】命令运行,效果如下: 具体步骤如下: 第一步、准备数据源启动端口,准备数据 nc -lk 9999 spark spark hive hadoop spark hive 第二步、运行…

面试官: 你知道 JWT、JWE、JWS 、JWK嘛?

想起了 之前做过的 很多 登录授权 的项目 它相比原先的session、cookie来说,更快更安全,跨域也不再是问题,更关键的是更加优雅 ,所以今天总结了一篇文章来介绍他 JWT 指JSON Web Token,如果在项目中通过 jjwt 来支持 J…

hook与mixin

看完vue3就开始看vue3的源码,表示很懵~ 刚把rollup打包搞完,这不响应式就接着来了!,还是写篇直接使用vue3的博客清清脑吧! 什么是hook、mixin? mixin: Vue2中多个组件内存在重复JS业务逻辑,使…

k8s学习之路 | Day15 k8s 中的 yaml 语法

文章目录yaml 基础什么是 yaml&#xff1f;yaml 特性适用场景基本语法规则数据类型yaml 对象yaml 数组yaml 纯量yaml 引用k8s 中的 yaml 语法\<string>\<Object>\<map[string]string>\<[]Object>\<boolean>示例 yaml 说明我在学习过程中&#xf…

Mr. Cappuccino的第44杯咖啡——Kubernetes之Service

Kubernetes之ServiceService的概念Service的类型Service演示案例环境准备ClusterIP&#xff08;集群内部访问&#xff09;IptablesIPVSEndpointNodePort&#xff08;对外暴露应用&#xff09;LoadBalancer&#xff08;对外暴露应用&#xff0c;适用于公有云&#xff09;Ingress…

echo命令

这是一条内置命令。 输出指定的字符串 一、语法 echo [选项] [参数] 二、选项 -e&#xff1a;激活转义字符。 使用-e选项时&#xff0c;若字符串中出现以下字符&#xff0c;则特别加以处理&#xff0c;而不会将它当成一般文字输出&#xff1a; \a 发出警告声&#xff1b; \b 删…

产业链金融的前世今生

产业链金融脱胎于供应链金融&#xff0c;又不同于供应链金融。二者的区别是&#xff0c; 供应链金融服务于单个环节、单个企业&#xff0c;而产业链金融是以产业链的核心 企业为依托&#xff0c;针对产业链的各个环节&#xff0c;设计个性化、标准化的金融服务产品&#xff0c;…

阿里巴巴内网 Java 面试 2000 题解析(2023 最新版)

前言 这份面试清单是今年 1 月份之后开始收集的&#xff0c;一方面是给公司招聘用&#xff0c;另一方面是想用它来挖掘在 Java 技术栈中&#xff0c;还有一些知识点是我还在探索的&#xff0c;我想找到这些技术盲点&#xff0c;然后修复它&#xff0c;以此来提高自己的技术水平…

DNS 域名解析

介绍域名 网域名称&#xff08;英语&#xff1a;Domain Name&#xff0c;简称&#xff1a;Domain&#xff09;&#xff0c;简称域名、网域。 域名是互联网上某一台计算机或计算机组的名称。 域名可以说是一个 IP 地址的代称&#xff0c;目的是为了便于记忆。例如&#xff0c…

3.2 网站图的爬取路径

深度优先与广度优先方法都是遍历树的一种方法&#xff0c;但是网站的各个网页 之间的关系未必是树的结构&#xff0c;它们可能组成一个复杂的图形结构&#xff0c;即有回路。如果在前面的网站中每个网页都加一条Home的语句&#xff0c;让每个网页都能回到主界面&#xff0c;那么…

JasperReports studio相关操作

1.2 JasperReports JasperReports是一个强大、灵活的报表生成工具&#xff0c;能够展示丰富的页面内容&#xff0c;并将之转换成PDF&#xff0c;HTML&#xff0c;或者XML格式。该库完全由Java写成&#xff0c;可以用于在各种Java应用程序&#xff0c;包括J2EE&#xff0c;Web应…

Playbook的用法

目录 Playbook Playbook 与 Ad-Hoc 对比 YAML 语言特性 YAML语法简介 支持的数据类型 写法格式 1 scalar 标量 建议缩进两个空格&#xff0c;可多 2 Dictionary 字典 3 List 列表 三种常见的数据格式 Playbook 核心组件 不要用 tab 可以#注释 hosts remote_us…

Oracle-01-简介篇

&#x1f3c6;一、Oracle的历史和发展 Oracle公司成立于1977年&#xff0c;由拉里埃里森&#xff08;Larry Ellison&#xff09;、鲍勃明特&#xff08;Bob Miner&#xff09;和埃德奥茨&#xff08;Ed Oates&#xff09;共同创立。起初&#xff0c;公司的主要业务是开发和销售…