nginx配置实例-高可用主备模式

目录

什么是高可用?

解决的问题?

双机热备方案

keepalived是什么?

故障转移机制

环境准备

一、实现过程

1.1安装keepalived

 安装好以后,将keepalived程序开启,并且加入到开机启动项中

1.2修改主机(192.168.81.130)keepalived配置文件

1.3修改备机(192.168.81.131)keepalived.conf配置文件

1.4重启keepalived,使得修改的配置文件生效。

1.5在主节点和从节点上查看虚拟IP是否绑定到ens33网卡上

二、高可用验证

2.1修改两个服务器默认访问的nginx的html页面作为区别

2.2在浏览器使用虚拟IP地址来访问服务

2.3接下来模拟宕机

2.3.1杀死主节点的keepalived的三个进程、停止nginx服务

2.3.2观察虚拟IP,此时绑定到从节点的网卡上

2.4在浏览器在此使用虚拟IP访问服务


什么是高可用?

高可用HA(High Availability)是分布式系统架构设计中必须考虑的因素之一,它通常是指,通过设计减少系统不能提供服务的时间。如果一个系统能够一直提供服务,那么这个可用性则是百分之百,但是天有不测风云。所以我们只能尽可能的去减少服务的故障。

解决的问题?

在生产环境上很多时候是以Nginx做反向代理对外提供服务,但是一天Nginx难免遇见故障,如:服务器宕机。当Nginx宕机那么所有对外提供的接口都将导致无法访问。

虽然我们无法保证服务器百分之百可用,但是也得想办法避免这种悲剧,今天我们使用keepalived来实现Nginx的高可用。

双机热备方案

这种方案是国内企业中最为普遍的一种高可用方案,双机热备其实就是指一台服务器在提供服务,另一台为某服务的备用状态,当一台服务器不可用另外一台就会顶替上去。

keepalived是什么?

Keepalived软件起初是专为LVS负载均衡软件设计的,用来管理并监控LVS集群系统中各个服务节点的状态,后来又加入了可以实现高可用的VRRP (Virtual Router Redundancy Protocol ,虚拟路由器冗余协议)功能。因此,Keepalived除了能够管理LVS软件外,还可以作为其他服务(例如:Nginx、Haproxy、MySQL等)的高可用解决方案软件

故障转移机制

Keepalived高可用服务之间的故障切换转移,是通过VRRP 来实现的。
在 Keepalived服务正常工作时,主 Master节点会不断地向备节点发送(多播的方式)心跳消息,用以告诉备Backup节点自己还活着,当主 Master节点发生故障时,就无法发送心跳消息,备节点也就因此无法继续检测到来自主 Master节点的心跳了,于是调用自身的接管程序,接管主Master节点的 IP资源及服务。而当主 Master节点恢复时,备Backup节点又会释放主节点故障时自身接管的IP资源及服务,恢复到原来的备用角色。

环境准备

192.168.81.130 centos01

192.168.81.131 centos02

两台centos 7,安装好nginx

一、实现过程

1.1安装keepalived

yum 方式直接安装,该方式会直接安装依赖

yum install -y keepalived
 安装好以后,将keepalived程序开启,并且加入到开机启动项中
systemctl start keepalived
systemctl enable keepalived
1.2修改主机(192.168.81.130)keepalived配置文件

yum 方式安装的会在配置文件在/etc/keepalived下

vi /etc/keepalived/keepalived.conf

keepalived.conf

! Configuration File for keepalivedglobal_defs {notification_email {	#设置报警邮件地址,需要开启本机postfix或者sendmail服务;xxx@alibaba-inc@qq.com}notification_email_from root@localhost.com	#用于设置邮件的发送地址,即报警邮件发送者;smtp_server 127.0.0.1	#用于设置邮件的SMTP Server地址;smtp_connect_timeout 30	#设置连接SMTP Server的超时时间;router_id LVS_DEVEL #LVS_DEVEL这字段在/etc/hosts文件中看;通过它访问到主机
}vrrp_script chk_ngnix {script /etc/keepalived/scripts/chk_nginx.sh #监控nginx脚本路径interval 2 #检测时间间隔weight -10 #如果条件成立的话,则权重 -10
}vrrp_instance VI_1 {state MASTER      #主从状态(MASTER/BACKUP)interface ens33      #绑定虚拟 IP 的网络接口,注:ip addr查询virtual_router_id 52 #虚拟路由的 ID 号, 两个节点设置必须一样mcast_src_ip 192.168.81.130 #填写本机ippriority 100 #主节点优先级,主要比从节点优先级高 #garp_master_delay 30advert_int 1        #每隔1s发送一次心跳authentication {    auth_type PASSauth_pass 1111  #校验类型:密码=1111}# 将track_script块加入 instance 配置块track_script {chk_ngnix       #执行Nginx监控服务}virtual_ipaddress {192.168.81.136  #虚拟ip(设置虚拟ip网段需要同一个,需要根据项目去调整 )}
}

virtual_ipaddress 里面可以配置vip,在线上通过vip来访问服务。

interface需要根据服务器网卡进行设置通常查看方式ip addr

authentication配置授权访问后备机也需要相同配置1.3

1.3修改备机(192.168.81.131)keepalived.conf配置文件
! Configuration File for keepalivedglobal_defs {notification_email {	#设置报警邮件地址,需要开启本机postfix或者sendmail服务;xxx@alibaba-inc@qq.com}notification_email_from root@localhost.com	#用于设置邮件的发送地址,即报警邮件发送者;smtp_server 127.0.0.1	#用于设置邮件的SMTP Server地址;smtp_connect_timeout 30	#设置连接SMTP Server的超时时间;router_id LVS_DEVEL #LVS_DEVEL这字段在/etc/hosts文件中看;通过它访问到主机
}vrrp_script chk_ngnix {script /etc/keepalived/scripts/chk_nginx.sh #监控nginx脚本路径interval 2 #检测时间间隔weight -10 #如果条件成立的话,则权重 -10
}vrrp_instance VI_1 {state BACKUP      #主从状态(MASTER/BACKUP)interface ens33      #绑定虚拟 IP 的网络接口,注:ip addr查询virtual_router_id 52 #虚拟路由的 ID 号, 两个节点设置必须一样mcast_src_ip 192.168.81.131  #填写本机ippriority 90 #主节点优先级,主要比从节点优先级高#garp_master_delay 30advert_int 1        #每隔1s发送一次心跳authentication {    auth_type PASSauth_pass 1111  #校验类型:密码=1111}# 将track_script块加入 instance 配置块track_script {chk_ngnix       #执行Nginx监控服务}virtual_ipaddress {192.168.81.136  #虚拟ip(设置虚拟ip网段需要同一个,需要根据项目去调整 )}
}

1.4编写nginx监控脚本

#创建
mkdir -p /etc/keepalived/scripts/#编辑
vim /etc/keepalived/scripts/chk_nginx.sh#添加可执行权限
chmod 755 /etc/keepalived/scripts/chk_nginx.sh 
#!/bin/bash#      ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#      + 1、此脚本为nginx监控脚本,与keepalived组件配合使用    
#      + 2、keepalived配置文件:/etc/keepalived/keepalived.conf       
#      + 3、脚本输出日志/etc/keepalived/check_service.log
#      + 4、默认脚本路径在/etc/keepalived/scripts下,需要改变路径,请修改keepalived配置   	               
#      + 5、创建此脚本后请赋予可执行权限chmod +x /etc/keepalived/scripts/chk_nginx.sh      
#      ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++####################基础参数####################
#获取当前时间
DATE=`date +%Y%m%d`
#日志输出路径
logPath=/etc/keepalivedA=`ps -C nginx --no-header |wc -l` 
# 判断nginx是否宕机,如果宕机了,尝试重启
echo "$(date +%Y'-'%m'-'%d' '%H':'%M':'%S) 进程数:$A" | tee -a ${logPath}/check_service.log 
if [ $A -eq 0 ];then /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
# 等待一小会再次检查nginx,如果没有启动成功,则停止keepalived,使其启动备用机 sleep 3 if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then echo "$(date +%Y'-'%m'-'%d' '%H':'%M':'%S)nginx is over! stop keepalived!" | tee -a ${logPath}/check_service.logsystemctl stop keepalivedexit 1fi
elseecho "$(date +%Y'-'%m'-'%d' '%H':'%M':'%S) nginx is run!" | tee -a ${logPath}/check_service.logexit 0		
fi

1.4重启keepalived,使得修改的配置文件生效。
systemctl restart keepalived
1.5在主节点和从节点上查看虚拟IP是否绑定到ens33网卡上

主节点

从节点

二、高可用验证

2.1修改两个服务器默认访问的nginx的html页面作为区别

2.2在浏览器使用虚拟IP地址来访问服务

2.3接下来模拟宕机
2.3.1杀死主节点的keepalived的三个进程、停止nginx服务

当主节点的 Nginx 停止工作时,keepalived 会检测到主服务器的状态发生了变化,并尝试将虚拟 IP 转移到备用服务器上。但是,如果主节点的 keepalived 还在运行,它可能会认为主节点仍然可用,并尝试保持虚拟 IP 在主服务器上,这将导致无法通过虚拟 IP 访问服务。

因此,在停止主节点的 nginx 时,应该同时停止主节点的 keepalived,以便从节点可以接管虚拟 IP,并成为新的主节点。这样,即使主节点的 nginx 停止工作,从节点也可以接管服务并继续提供服务。

2.3.2观察虚拟IP,此时绑定到从节点的网卡上

2.4在浏览器在此使用虚拟IP访问服务

至此,keepalived对nginx高可用已经实现!!!

#为美好的开源世界贡献一份力量

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

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

相关文章

winform入门篇3 -- 手工创建窗口

手工创建窗口 Form, 窗口 可以手工创建一个窗口类 class MyFrom : Form { } 1.创建一个windows 窗体应用 这样就自动创建了一个窗体应用Form1 现在不使用这个自动创建的,手工写一个 2.手动创建 1.删除Form1.cs 2.添加 新建MyForm 类 让该类继承Form 在构造…

Covalent Network(CQT)推出以太坊质押迁移计划,以增强长期结构化数据可用性、塑造万亿级 LLM 参数体系

作为 Web3 领先的链上数据层,Covalent Network(CQT)宣布了其将质押操作从 Moonbeam 迁移回以太坊的决定。此举是 Covalent Network(CQT)走向以太坊时光机(EWM)的第一步,EWM 是一个为…

Python | 超前滞后分析

Nino SST Indices (Nino 12, 3, 3.4, 4; ONI and TNI) 有几个指标用于监测热带太平洋,所有这些指标都是基于海表温度(SST)异常在一个给定的区域的平均值。通常,异常是相对于30年的周期来计算的。厄尔尼诺3.4指数(Nio 3.4 index)和海洋厄尔尼诺指数(Ocea…

Qt C++ 实现文件监视源码

以下是使用Qt C++实现文件监视的一个简单示例代码: #include <QCoreApplication> #include <QFileSystemWatcher> #include <QDebug>int main(int argc, char *argv[

Linux操作系统上面安装mysql指南

1.到达一个官网当中开始下载linux操作版本的mysql版本进行下载。 版本号&#xff1a;8.0.35 Red Hat Enterprise Linux / Oracle LinuxOperating System: Red Hat Enterprise Linux 7 / Oracle Linux 7 (x86, 64-bit) 开始对其进行查找和选择 先让其开始进行基础的下载&#xf…

golang代码练习样例模版--推荐--测试学习使用的方法

golang代码练习样例模版 以前用的python代码&#xff0c;每次测试都是一个python文件&#xff0c;但是go就是以文件夹为目录为 结构的测试&#xff08;同一个文件夹下&#xff0c;不能有同名的函数&#xff09; 大部分时间就是测试&#xff0c;如何对go程序函数进行测试&#…

智能成绩表---重点 覆写comparator排序的compare函数

小明来到某学校当老师&#xff0c;需要将学生按考试总分或单科分数进行排名&#xff0c;你能帮帮他吗&#xff1f; 输入描述 第 1 行输入两个整数&#xff0c;学生人数 n 和科目数量 m。 0 < n < 100 0 < m < 10 第 2 行输入 m 个科目名称&#xff0c;彼此之间用…

BERT实战指南:使用预训练模型进行文本分类任务

1. 简介 在本章中&#xff0c;我们将介绍BERT&#xff08;Bidirectional Encoder Representations from Transformers&#xff09;预训练模型的背景和应用领域。 BERT背景介绍 BERT是由Google在2018年提出的一种预训练语言模型&#xff0c;它基于Transformer架构进行设计&am…

【java工具-灵活拉取数据库表结构和数据】

需求&#xff1a; 假设我们现在有一个需求&#xff0c;需要快速拉取数据库的某些表建表语句&#xff0c;和数据&#xff0c;平时做备份之类&#xff1b; 我这边自己写了个工具&#xff0c;不多废话&#xff0c;也不整虚的&#xff0c; 直接看代码&#xff1a; package com.…

在线客服系统:企业沟通的未来

随着互联网技术的飞速发展&#xff0c;企业与客户之间的沟通方式也在经历着翻天覆地的变化。在这个信息爆炸的时代&#xff0c;一个高效、便捷、智能的在线客服系统成为了企业提升服务质量、增强客户满意度的关键。在线客服系统的重要性在线客服系统是企业与客户进行实时沟通的…

GitLab教程(一):安装Git、配置SSH公钥

文章目录 序一、Git安装与基本配置&#xff08;Windows&#xff09;下载卸载安装基本配置 二、SSH密钥配置 序 为什么要使用代码版本管理工具&#xff1a; 最近笔者确实因为未使用代码版本管理工具遇到了一些愚蠢的问题&#xff0c;笔者因此认为代码版本管理工具对于提高团队…

JR-SMD201-P便携式网络解码器

详细介绍&#xff1a; JR-SMD201-P便携式网络解码器采用1/2U设计&#xff0c;支持AVS/H.265/H.264/MPEG2解码&#xff0c;支持IP输入&#xff0c;支持1080P/1080I/720P/576I/480I多种分辨率&#xff0c;支持DRA/AC3/EAC3/AAC/MPEG等音频。 产品特点 支持输入方式IP 接口丰富&a…

React 状态管理:安全高效地修改对象属性的 3 种方法

在 React 应用程序中,状态(state)是驱动整个应用程序的核心。当应用程序的状态发生变化时,React 会自动重新渲染相应的组件,以确保用户界面的更新。 与数组状态一样,对象状态在 React 中也需要特别处理。直接修改对象属性是不被允许的,因为 React 的不可变性原则要求我们创建一…

户外骑行存档(图新地球与运动健康App)经验分享

0序 之前天天加班熬夜&#xff0c;身体素质有些下降&#xff0c;在锻炼的过程中喜欢上了骑行&#xff0c;周周骑、天天骑。 骑行会产生很多的轨迹&#xff08;有很多朋友不喜欢装很多app&#xff0c;就用手机自带的运动健康&#xff0c;也有喜欢专业运动app的&#xff0c;道理…

RedisDesktopManager 命令

RedisDesktopManager 命令 Redis Desktop Manager&#xff08;RDM&#xff09;是一个图形化工具&#xff0c;用于管理和监控Redis数据库。虽然其主要功能是提供直观的用户界面来与Redis交互&#xff0c;但它也内置了一个命令行界面&#xff08;Console&#xff09;&#xff0c…

SQL注入原理与信息获取及常规攻击思路靶场实现

SQL注入原理与信息获取及常规攻击思路靶场实现 很早的时候就写了&#xff0c;权当备份吧 Web程序三层架构 表示层 &#xff1a;与用户交互的界面 , 用于接收用户输入和显示处理后用户需要的数据 业务逻辑层 &#xff1a;表示层和数据库访问层之间的桥梁 , 实现业务逻辑 ,验证、…

BPMN.JS中文教程学习

基础篇 vue bpmn.js 建模BpmnModeler将数据转图形bpmnModeler.importXML // basic.vue<script>// 引入相关的依赖import BpmnModeler from bpmn-js/lib/Modelerimport {xmlStr} from ../mock/xmlStr // 这里是直接引用了xml字符串export default {name: ,components: {…

三维点云:对原始点云数据进行体素化

文章目录 一、原始点云二、对原始点云进行体素化三、结果展示 一、原始点云 &#x1f349;原始点云为.pts文件&#xff0c;内容为x, y, z的坐标 原始点云展示 二、对原始点云进行体素化 使用open3d库实现&#xff0c;如果没有需要在命令行执行pip install open3d import o…

从零开始学RSA:低加密指数广播攻击

(10)低加密指数广播攻击 如果选取的加密指数较低&#xff0c;并且使用了相同的加密指数给一个接受者的群发送相同的信息&#xff0c;那么可以进行广播攻击得到明文。 适用范围&#xff1a;模数n、密文c不同&#xff0c;明文m、加密指数e相同。一般情况下&#xff0c;ek (k是题…

vue vue3 手写 动态加载组件

效果展示 一、需求背景&#xff1a; # vue3 项目涉及很多图表加载、表格加载 #考虑手写一个动态加载组件 二、实现思路 通过一个加载状态变量&#xff0c;通过v-if判断&#xff0c;加载状态的变量等于哪一个&#xff0c;动态加载组件内部就显示的哪一块组件。 三、实现效果…