Nginx高可用

news2024/9/22 21:34:33

在生产环境上很多时候是以Nginx做反向代理对外提供服务,但是Nginx难免遇见故障,如:服务器宕机。当Nginx宕机那么所有对外提供的接口都将导致无法访问。因此需要两台以上的Nginx服务器对外提供服务,这样的话就可以解决其中一台宕机了,另外一台还能对外提供服务。

Keepalived高可用软件

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

  • VRRP介绍

VRRP协议将两台或多台路由器设备虚拟成一个设备,对外提供虚拟路由器IP,而在路由器组内部,如果实际拥有这个对外IP的路由器如果工作正常的话就是MASTER,MASTER实现针对虚拟路由器IP的各种网络功能。其他设备不拥有该虚拟IP,状态为BACKUP,除了接收MASTER的VRRP状态通告信息以外,不执行对外的网络功能。当主机失效时,BACKUP将接管原先MASTER的网络功能。
VRRP可以把一个虚拟路由器的责任动态分配到局域网上的 VRRP 路由器中的一台。其中的虚拟路由即Virtual路由是由VRRP路由群组创建的一个不真实存在的路由,这个虚拟路由也是有对应的IP地址。而且VRRP路由1和VRRP路由2之间会有竞争选择,通过选择会产生一个Master路由和一个Backup路由。
Master路由和Backup路由之间会有一个心跳检测,Master会定时告知Backup自己的状态,如果在指定的时间内,Backup没有接收到这个通知内容,Backup调用自身的接管程序,接管主Master节点的 IP资源及服务。而当主 Master节点恢复时,备Backup节点又会释放主节点故障时自身接管的IP资源及服务,恢复到原来的备用角色。
Master路由有一个特权就是虚拟路由和后端服务器都是通过Master进行数据传递交互的,而备份节点则会直接丢弃这些请求和数据,不做处理,只是去监听Master的状态

  • 环境准备
    | VIP | IP | 主机名 | 主/从 |
    | — | — | — | — |
    | | 192.168.28.177 | keepalived1 | Master |
    | 192.168.28.253 | | | |
    | | 192.168.28.94 | keepalived2 | Backup |

安装Keepalived

安装完成后,有两个文件,一个是 /etc/keepalived/keepalived.conf(keepalived的系统配置文件,我们主要操作的就是该文件),一个是/usr/local/sbin目录下的keepalived,是系统配置脚本,用来启动和关闭keepalived

1. 从官方网站下载keepalived,官网地址https://keepalived.org/
	 wget https://keepalived.org/software/keepalived-2.1.5.tar.gz
2. 创建keepalived目录,方便管理资源
	 mkdir keepalived
3. 将压缩文件进行解压缩,解压缩到指定的目录
	tar -zxf keepalived-2.1.5.tar.gz -C keepalived/
4. 对keepalived进行配置,编译和安装
	cd keepalived/keepalived-2.1.5
	./configure --sysconf=/etc --prefix=/usr/local
	make && make install

Keepalived配置文件介绍

# global全局部分:
global_defs {
   # 通知邮件,当keepalived发送切换时需要发email给具体的邮箱地址
   notification_email {
     tom@itcast.cn
     jerry@itcast.cn
   }
   # 设置发件人的邮箱信息
   notification_email_from zhangsan@163.cn
   # 指定smpt服务地址
   smtp_server 192.168.200.1
   # 指定smpt服务连接超时时间
   smtp_connect_timeout 30
   # 运行keepalived服务器的一个标识,可以用作发送邮件的主题信息
   router_id LVS_DEVEL
   # 默认是不跳过检查。检查收到的VRRP通告中的所有地址可能会比较耗时,设置此命令的意思是,如果通告与接收的上一个通告来自相同的master路由器,则不执行检查(跳过检查)
   vrrp_skip_check_adv_addr
   # 严格遵守VRRP协议。
   vrrp_strict
   # 在一个接口发送的两个免费ARP之间的延迟。可以精确到毫秒级。默认是0
   vrrp_garp_interval 0
   # 在一个网卡上每组na消息之间的延迟时间,默认为0
   vrrp_gna_interval 0
}

# VRRP部分,该部分可以包含以下四个子模块
1. vrrp_script
2. vrrp_sync_group
3. garp_group
4. vrrp_instance
# 我们会用到第一个和第四个,
# 设置keepalived实例的相关信息,VI_1为VRRP实例名称
vrrp_instance VI_1 {
	  # 有两个值可选MASTER主 BACKUP备
    state MASTER  	
    # vrrp实例绑定的接口,用于发送VRRP包[当前服务器使用的网卡名称]
    interface ens192		
    # 指定VRRP实例ID,范围是0-255
    virtual_router_id 51
    # 指定优先级,优先级高的将成为MASTER
    priority 100		
    # 指定发送VRRP通告的间隔,单位是秒
    advert_int 1		
    # vrrp之间通信的认证信息
    authentication {	
    	  # 指定认证方式。PASS简单密码认证(推荐)
        auth_type PASS
        # 指定认证使用的密码,最多8位
        auth_pass 1111	
    }
    virtual_ipaddress {
       # 虚拟IP地址设置虚拟IP地址,供用户访问使用,可设置多个,一行一个
        192.168.28.253
    }
}

访问测试

启动keepalived之前的网卡配置

  • 177机器配置
    在这里插入图片描述

  • 94机器配置
    在这里插入图片描述

启动Keepalived之后的配置

cd /usr/local/sbin
./keepalived

  • 177机器配置

177被选为master
在这里插入图片描述

  • 94机器配置

94没有改变

在这里插入图片描述

关闭177上的keepalived观察94变化

关闭177后,虚拟ip切换到94上去了
虚拟IP(VIP)会在MASTER节点上,当MASTER节点上的keepalived出问题以后,因为BACKUP无法收到MASTER发出的VRRP状态通过信息,就会直接升为MASTER。VIP也会"漂移"到新的MASTER。

  • 177机器
    在这里插入图片描述

  • 94机器
    在这里插入图片描述

  • 访问虚拟ip来控制nginx

访问http://192.168.28.253:8069/
在这里插入图片描述

自动切换keepalived主

想让vip进行切换,就必须要把服务器上的keepalived进行关闭,在keepalived所在服务器的nginx出现问题后,把keepalived关闭掉,就可以让VIP执行另外一台服务器。
keepalived只能做到对网络故障和keepalived本身的监控,即当出现网络故障或者keepalived本身出现问题时,进行切换。但是不同的场景需要不同的条件来判断是否需要进行主备切换。

  • 在keepalived配置文件中添加对应的配置像
v# rrp_script 脚本名称
{
    script "脚本位置"
    interval 3 #执行时间间隔
    weight -20 #动态调整vrrp_instance的优先级
}
  • 编写脚本

Linux ps命令用于显示当前进程 (process) 的状态。
**-C(command) **:指定命令的所有进程
**–no-header **排除标题

#!/bin/bash
num=`ps -C nginx --no-header | wc -l`
if [ $num -eq 0 ];then
 /usr/local/nginx/sbin/nginx
 sleep 2
 if [ `ps -C nginx --no-header | wc -l` -eq 0 ]; then
  killall keepalived
 fi
fi
  • 为脚本文件设置权限

chmod 755 ck_nginx.sh

  • 将脚本添加到
vrrp_script ck_nginx {
   # 执行脚本的位置
   script "/etc/keepalived/ck_nginx.sh" 
   # 执行脚本的周期,秒为单位
   interval 2		
   # 权重的计算方式
   weight -20		
}
vrrp_instance VI_1 {
    state MASTER
    interface ens192
    virtual_router_id 10
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.28.253
    }
    track_script {
      ck_nginx
    }
}

如果效果没有出来,可以使用 tail -f /var/log/messages查看日志信息,找对应的错误信息。

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

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

相关文章

再探Kotlin 跨平台——迁移Paging分页库至KMM

前言 KMM的发展除了靠官方社区的支持外,一些大企业的开源落地也尤为重要。从这些开源中我们需要借鉴他的设计思想和实现方式。从而在落地遇到问题时,寻得更多的解决办法。 上周,Square正式将Paging分页库迁移到了Kotlin Multiplatform平台&…

目标检测论文解读复现之十:基于YOLOv5的遥感图像目标检测

前言 此前出了目标改进算法专栏,但是对于应用于什么场景,需要什么改进方法对应与自己的应用场景有效果,并且多少改进点能发什么水平的文章,为解决大家的困惑,此系列文章旨在给大家解读最新目标检测算法论文&#xff0c…

接上篇文章,完成Hadoop集群部署实验

这里写目录标题一、实验介绍1.1 实验内容1.2 实验知识点1.3 实验环境1.4 实验资源1.5 实验步骤清单二、实验架构三、实验环境准备四、实验步骤4.1 查看环境4.2部署Hadoop集群4.2.1安装hadoop(master)4.2.2创建hdfs数据文件存储目录(master)4.2.3修改配置文件(master)4.2.4主从节…

项目管理:团队执行力差,管理不善是根源

为什么说团队执行力差,多半是管理者的问题?如何提高团队的执行力? 1、员工不知道该做什么 项目开始一段时间,员工都还没弄清楚该做什么,是什么职位啊?为什么会产生这样的问题呢? 这是因为管理…

clickhouse使用clickhouse-keeper代替zookeeper

目录 异常现象: 1. clickhouse的异常日志 2. 追踪对应节点的zookeeper日志 使用clickhouse-keeper代替 zookeeper的步骤: 1: 准备 clickhouse-keeper的配置文件 1.1- 设置通信地址,以便对外通信 1.2- 在config.xml中…

java计算机毕业设计ssm宠物店管理系统element vue前后端分离

项目介绍 宠物店管理平台是使用JAVA的SSM技术,MySQL作为数据库开发,用户通过查看宠物,在线购买商品情况,并可以查看宠物店铺嘻嘻,实现宠物信息化管理。首先对本论文进行分析后,提出平台的相关技术,然后整理系统的需求分析,根据需求进行功能和数据库设计,最后进行系统实现和测试…

Nginx静态资源配置

Nginx配置成系统服务 把Nginx应用服务设置成为系统服务,方便对Nginx服务的启动和停止等相关操作,具体实现步骤: 在/usr/lib/systemd/system目录下添加nginx.service,内容如下: [Unit] # Unit表明该服务的描述,类型描述 Descriptionnginx w…

MQ(二)RabbitMQ快速入门

一、RabbitMQ 概述和安装 RabbitMQ 是基于 Erlang 语言开发的开源消息通信中间件 1. RabbitMQ的结构和概念 RabbitMQ中的几个概念: (1)channel:操作MQ的工具 (2)exchange:路由消息到队列中 &…

数据结构知识点补充

(67条消息) c语言怎么return ok,C语言中的 return与exit_哈哈哈可以的博客-CSDN博客 假如把i或i放入到for循环的函数体中,若没有变量或函数来接收其返回值,那么它们的作用效果也是相同的(67条消息) C语言的for循环中i和i的关系_肥嘟嘟的左卫门的博客-CSD…

1226:装箱问题 (贪心)

【题目描述】 一个工厂制造的产品形状都是长方体,它们的高度都是h,长和宽都相等,一共有六个型号,他们的长宽分别为11,22,33,44,55,66。这些产品通常使用一个66h的长方体包裹包装然后邮寄给客户。因为邮费很贵,所以工厂…

爬虫工具-BeautifulSoup

BeautifulSoup: 1. 是一个高效的网页解析库,可以从HTML或者XML文件中提取数据 2. 支持不同的解析器,可以对HTML、XML等进行解析 3. 是一个敏感又方便的网页解析库,处理高效,支持多种解析器 4. 利用它在不编写正则表达式…

Unreal 和 Unity 3D 各有什么特点?如何选择?

一、两个引擎简述 Unreal Engine VS Unity Unity是实时3D互动内容创作和运营平台。包括游戏开发、美术、建筑、汽车设计、影视在内的所有创作者,借助Unity将创意变成现实。Unity平台提供一整套完善的软件解决方案,可用于创作、运营和变现任何实时互动的…

【设计模式】软件设计原则

1. 软件设计原则: 为了提高系统软件的可维护性、可复用性、可扩展性和灵活性 1.1 开闭原则: 对扩展开放,对修改关闭 (热插拔) 实现方式: 通过定义接口和实现类的方式实现开闭原则,我们再进行…

ASEMI代理艾赛斯IXTY02N50D-TRL车规级MOSFET

编辑-Z 艾赛斯车规级MOS管IXTY02N50D-TRL参数: 型号:IXTY02N50D-TRL 漏极-源极电压(VDS):500V 连续漏电流(ID):200mA 功耗(PD):25W 工作结温…

如何运营推特营销主账号

在推特上做产品推广,Twitter群(发)推王建议:一般需要两类账号。 主账号:也就是官方号,用来聚集粉丝,日常产品信息、新闻资讯发布的; 批量推广号:也叫小号或者广告号&am…

oracle数据库定义语言—DDL

文章目录1、数据定义语言2 创建表2.2 oracle 数据库中的表2.2.1 常见的数据字典表2.3 用查询创建表2.3.1 示例3 ALTER TABLE 语句3.1 添加一个新的列3.2 修改数据类型3.3 修改默认值3.4 修改列名3.5 删除一个列4、修改名称5、截断表6 、删除表(删除表以及表结构&…

《垃圾回收算法手册 自动内存管理的艺术》——引用计数与垃圾回收器的比较(笔记)

文章目录五、引用计数5.1 引用计数算法的优缺点5.2 提升效率5.3 延迟引用计数5.4 合并引用计数5.5 环状引用计数**步骤**5.6受限域引用计数六、垃圾回收器的比较6.1 吞吐量6.2 停顿时间6.3 内存空间6.4 回收器的实现6.5 自适应系统6.6 统一垃圾回收理论6.6.1 垃圾回收的抽象6.6…

神经网络在故障诊断中的应用

人工神经网络是近年来发展迅速,广泛地应用于各个领域,包括航天,自动控制,金融,电子,制造,医药等多个行业,已经有许多成功的先例,并展示了更为广阔的应用前景。基于神经网…

【区块链 | 智能合约】Ethereum源代码(8)- Ethereum服务和以太坊P2P协议发送广播源码分析

在“【区块链 | 智能合约】Ethereum源代码(2)- go-ethereum 客户端入口代码和Node分析”一文中,我们提到Ethereum作为一个service,被Node 注册进去。Node start的时候会启动其注册的所有服务,Ethereum service也是一样。 一、ethereum service的初始化和启动 func geth(c…

【MySQL数据库笔记 - 进阶篇】(二)索引

✍个人博客:https://blog.csdn.net/Newin2020?spm1011.2415.3001.5343 📚专栏地址:暂定 📝视频地址:黑马程序员 MySQL数据库入门到精通 📣专栏定位:这个专栏我将会整理 B 站黑马程序员的 MySQL…