Nginx+Keepalived实现服务高可用

news2024/11/19 23:22:41

Nginx 和 Keepalived 是常用于构建高可用性(High Availability)架构的工具。Nginx 是一款高性能的Web服务器和反向代理服务器,而Keepalived则提供了对Nginx服务的健康状态监测和故障切换功能。

下载Nginx

在服务器1和服务器2分别下载nginx

yum install nginx

配置Nginx

在服务器1配置,vim /usr/share/nginx/html/index.html 

在服务器2配置, vim /usr/share/nginx/html/index.html 

启动Nginx

启动服务器1和服务器2的nginx 

nginx # 启动nginx
nginx -s reload # 重启nginx
nginx -t # 检查nginx配置

 访问服务

访问服务1

访问服务2

 Keepalived架构

环境搭建

VIPIP主机名主/从
192.168.2.3keepalived 1Master
192.168.2.200
192.168.2.4keepalived 2Backup

keepalived的安装

前置下载,keepalived需要gcc

yum install gcc
yum install openssl openssl-devel

通过链接wget获取 

wget https://www.keepalived.org/software/keepalived-2.0.20.tar.gz --no-check-certificate

创建keepalived目录,方便管理资源

mkdir keepalived

将压缩文件进行解压缩,解压缩到指定的目录

tar -zxf keepalived-2.0.20.tar.gz -C keepalived/

对keepalived进行配置,编译和安装

cd keepalived/keepalived-2.0.20
	./configure --sysconf=/etc --prefix=/usr/local
	make && make install

以上服务器2同理 

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

Keepalived配置

服务器1 ,vim /etc/keepalived/keepalived.conf 

! Configuration File for keepalived

global_defs {
   #通知邮件,当keepalived发送切换时需要发email给具体的邮箱地址
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   #设置发件人的邮箱信息
   notification_email_from Alexandre.Cassen@firewall.loc
   #指定smpt服务地址
   smtp_server 192.168.2.1
   #指定smpt服务连接超时时间
   smtp_connect_timeout 30
   #运行keepalived服务器的一个标识,可以用作发送邮件的主题信息
   router_id keepalived1
   vrrp_skip_check_adv_addr
   vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}
vrrp_instance VI_1 {
    state MASTER #有两个值可选MASTER主 BACKUP备
    interface ens33 #vrrp实例绑定的接口,用于发送VRRP包[当前服务器使用的网卡名称]
    virtual_router_id 51 #指定VRRP实例ID,范围是0-255
    priority 100 #指定优先级,优先级高的将成为MASTER
    advert_int 1 #指定发送VRRP通告的间隔,单位是秒
    authentication { #vrrp之间通信的认证信息
        auth_type PASS #指定认证方式。PASS简单密码认证(推荐)
        auth_pass 1111 #指定认证使用的密码,最多8位
    }
    virtual_ipaddress {  #虚拟IP地址设置虚拟IP地址,供用户访问使用,可设置多个,一行一个
        192.168.2.200
    }
}

服务器2,vim /etc/keepalived/keepalived.conf 

! Configuration File for keepalived

global_defs {
   #通知邮件,当keepalived发送切换时需要发email给具体的邮箱地址
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   #设置发件人的邮箱信息
   notification_email_from Alexandre.Cassen@firewall.loc
   #指定smpt服务地址
   smtp_server 192.168.2.1
   #指定smpt服务连接超时时间
   smtp_connect_timeout 30
   #运行keepalived服务器的一个标识,可以用作发送邮件的主题信息
   router_id keepalived2
   vrrp_skip_check_adv_addr
   vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}
vrrp_instance VI_1 {
    state BACKUP#有两个值可选MASTER主 BACKUP备
    interface ens33 #vrrp实例绑定的接口,用于发送VRRP包[当前服务器使用的网卡名称]
    virtual_router_id 51 #指定VRRP实例ID,范围是0-255
    priority 90 #指定优先级,优先级高的将成为MASTER
    advert_int 1 #指定发送VRRP通告的间隔,单位是秒
    authentication { #vrrp之间通信的认证信息
        auth_type PASS #指定认证方式。PASS简单密码认证(推荐)
        auth_pass 1111 #指定认证使用的密码,最多8位
    }
    virtual_ipaddress {  #虚拟IP地址设置虚拟IP地址,供用户访问使用,可设置多个,一行一个
        192.168.2.200
    }
}

Keepalived启动

在服务器1、2启动服务

cd /usr/local/sbin
./keepalived

测试

查看服务器1

查看服务器2,虚拟IP没有存在在服务器2

 当把192.168.2.3服务器上的keepalived关闭后,再次查看ip

systemctl disable keepalived
systemctl stop keepalived

查看服务器1,虚拟IP没有存在在服务器1

查看服务器2

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

测试Nginx

systemctl start keepalived # 启动
 

我们把192.168.2.3服务器的keepalived再次启动下,由于它的优先级高于服务器192.168.2.4的,所有它会再次成为MASTER,VIP也会"漂移"过去,然后我们再次通过浏览器访问nginx:

如果把192.168.2.3服务器的keepalived关闭掉,再次访问相同的地址  

Nginx状态检测脚本

效果实现了以后, 我们会发现要想让vip进行切换,就必须要把服务器上的keepalived进行关闭,而什么时候关闭keepalived呢?应该是在keepalived所在服务器的nginx出现问题后,把keepalived关闭掉,就可以让VIP执行另外一台服务器,但是现在这所有的操作都是通过手动来完成的,我们如何能让系统自动判断当前服务器的nginx是否正确启动,如果没有,要能让VIP自动进行"漂移" 。

vrrp_script

keepalived只能做到对网络故障和keepalived本身的监控,即当出现网络故障或者keepalived本身出现问题时,进行切换。但是这些还不够,我们还需要监控keepalived所在服务器上的其他业务,比如Nginx,如果Nginx出现异常了,仅仅keepalived保持正常,是无法完成系统的正常工作的,因此需要根据业务进程的运行状态决定是否需要进行主备切换,这个时候,我们可以通过编写脚本对业务进程进行检测监控。

编写脚本 

vim /root/keepalived/ck_nginx.sh ,这是一个 Bash 脚本,用于检查 Nginx 服务是否正在运行,并在 Nginx 未启动时启动它,并在启动失败后关闭 Keepalived 服务

#!/bin/bash
num=`ps -C nginx --no-header | wc -l`
if [ $num -eq 0 ];then
 /usr/sbin/nginx  #使用 which nginx 可查找到nginx的启动目录
 sleep 2
 if [ `ps -C nginx --no-header | wc -l` -eq 0 ]; then
  killall keepalived
 fi
fi

设置权限

为脚本文件设置权限

chmod 755 ck_nginx.sh

Keepalived添加配置

vim /etc/keepalived/keepalived.conf ,将脚本添加到Keepalived配置

global_defs {
    ...
}
vrrp_script ck_nginx {
   script "/root/keepalived/ck_nginx.sh" #执行脚本的位置
   interval 2           #执行脚本的周期,秒为单位
   weight -20           #权重的计算方式
}

以上服务器2同理 

测试

服务器1,停止nginx服务

systemctl stop nginx

查看服务器1,虚拟IP不在此服务器

查看服务器2 ,虚拟IP转移到此服务器

如果master服务死掉后backup会变成master,但是当master服务又好了的时候 master此时会抢占VIP,这样就会发生两次切换对业务繁忙的网站来说是不好的。所以我们要在配置文件加入 nopreempt 非抢占,但是这个参数只能用于state 为backup,故我们在用HA的时候最好master 和backup的state都设置成backup 让其通过priority来竞争。  

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

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

相关文章

深入理解 python 虚拟机:原来虚拟机是这么实现闭包的

深入理解 python 虚拟机:原来虚拟机是这么实现闭包的 在本篇文章当中主要从虚拟机层面讨论函数闭包是如何实现的,当能够从设计者的层面去理解闭包就再也不用死记硬背一些闭包的概念了,因为如果你理解闭包的设计原理之后,这些都是…

嵌入式学习笔记(48)什么是I2C通信

10.1.1物理接口:SCL SDA (1)SCL:时钟线,传输CLK,一般是I2C主设备向从设备提供时钟的通道。 (2)SDA:数据线,通信数据都通过SDA线传输。 10.1.2通信特征:串行、同步、非差分、低速 (1)I2C属于…

Python中的多态

迷途小书童 读完需要 3分钟 速读仅需 1 分钟 当我们谈到多态时,可以将其比喻为一个人具有多种身份的能力。在不同的情境下,这个人可以表现出不同的行为和特征。在 Python 中,多态是面向对象编程中的一个重要概念,它允许我们使用相…

PHP 伪协议:使用 php://filter 为数据流应用过滤器

文章目录 参考环境PHP 伪协议概念为什么需要 PHP 伪协议? php://filter概念格式 基本使用普通读写file_get_contents 与 file_put_contentsinclude 过滤器的基本使用base64 的编码与解码rot13 加解密rot13 算法string.rot13 过滤器列表多个过滤器的使用注意事项 处理…

【软件测试】功能测试/接口测试/自动化测试/性能测试/验收测试

软件测试的主要流程 一、测试主要的四个阶段 1.测试计划设计阶段:产品立项之后,进行需求分析,需求评审,业务需求评级,绘制业务流程图。确定测试负责人,开始制定测试计划; 2.测试准备阶段&…

【每日一题】股票价格跨度

文章目录 Tag题目来源题目解读解题思路方法一:暴力枚举方法二:单调栈 写在最后 Tag 【单调栈】【设计类】【数组】【2023-10-07】 题目来源 901. 股票价格跨度 题目解读 找出小于等于今天股票价格的最大连续天数(从今天往回数,…

AI颠覆法律行业,律师要失业了?

如果要说一个 AI 真正起飞,并且对行业从业者带来的更多是正面影响的垂直行业,小编觉得在目前阶段,法律可以算一个。这个行业有几个特点:对人的依赖很大,专业性很强,大量繁复的文字工作。因此,在…

水土保持方案编制丨点型项目、市政工程、线型工程、矿山工程、水利工程、取土场/弃渣场、补报项目、水土保持监测验收等

目录 专题一 点型水土保持方案编制方法及案例分析 专题二 市政工程水土保持方案编制方法及案例分析 专题三 线型工程水土保持方案编制方法及案例分析 专题四 矿山工程水土保持方案编制方法及案例分析 专题五 水利工程水土保持方案编制方法及案例分析 专题六 取土场、弃渣…

电影产业的数据洞察:爬虫技术在票房分析中的应用

概述 电影产业是一个庞大而复杂的行业,涉及到各种各样的因素,如导演、演员、类型、主题、预算、宣传、口碑、评分、奖项等。这些因素都会影响电影的票房收入,也会反映出电影市场的动态和趋势。为了更好地了解电影产业的数据洞察,…

Python机器学习实战-特征重要性分析方法(6):XGBoost(附源码和实现效果)

实现功能 计算一个特性用于跨所有树拆分数据的次数。更多的分裂意味着更重要。 实现代码 import xgboost as xgb import pandas as pd from sklearn.datasets import load_breast_cancer import matplotlib.pyplot as pltX, y load_breast_cancer(return_X_yTrue) df pd.D…

CMMI5认证哪些企业可以申请

CMMI5认证哪些企业可以申请 什么是CMMI5认证 CMMI(Capability Maturity Model Integration)是一种用于评估组织的软件工程能力的国际标准。CMMI模型包括5个等级,其中CMMI5是最高等级,代表组织具有达到持续优化和创新的能力。获得…

源码编译dotnetcore的runtime

为了dotnetcore运行时的安可目标,特意在国庆假期研究了怎么编译dotnetcore的runtime。由于我们用的是.net6,最新的是8,所以从github下载的.net6的分支代码进行的编译。查遍了国内外资料,估计微软服务太体贴了,竟然没什…

关于 “高可用集群” 的 从业经验漫谈

关于高可用集群 PART 1 高可用的概念 高可用(High Availability)是高可用集群(High Availability Cluster)的简称,至少由2台服务器组成,一般指的是应用服务对客户端的持续可用。高可用集群可以借助多种技术…

SuperMap:开启地理信息的无限可能

文章目录 引言简介SuperMapSuperMap的背景和发展SuperMap的功能特点 SuperMap的应用案例城市规划与管理天气预报与灾害管理物流与运输管理地理信息服务 最佳实践与技巧数据准备与处理地图制作与展示空间分析与决策 展望未来结论 引言 随着现代社会的发展,地理信息系…

CentOS Integration SIG 正式成立

导读CentOS 董事会已批准成立 CentOS Integration Special Interest Group (SIG)。该小组旨在帮助那些在 Red Hat Enterprise Linux (RHEL) 或特别是其上游 CentOS Stream 上构建产品和服务的人员,验证其能否在未来版本中继续运行。 红帽 RHEL CI 工程师 Aleksandr…

性能测试?

目录 一、什么是性能测试 二、系统性能指标 2.1 响应时间 2.2 系统处理能力 2.3 吞吐量 2.4 并发用户数 2.5 错误率 三、资源性能指标 3.1 CPU 3.2 内存 3.3 磁盘吞吐量 3.4 网络吞吐量 四、中间件指标 五、数据库指标 六、稳定性指标 一、什么是性能测试 先看…

PageRank(下):数据分析 | 数据挖掘 | 十大算法之一

⭐️⭐️⭐️⭐️⭐️欢迎来到我的博客⭐️⭐️⭐️⭐️⭐️ 🐴作者:秋无之地 🐴简介:CSDN爬虫、后端、大数据领域创作者。目前从事python爬虫、后端和大数据等相关工作,主要擅长领域有:爬虫、后端、大数据…

为何说医疗器械售后前景呈持续发展趋势?

为何说医疗器械售后前景呈持续发展趋势?如果医院的设备突然不运转了无法工作了,医院如果不及时维修,一天下来不仅患者有生命危险,医院的经济损失也不可估量,但是你知道这些医院的这些设备是怎么维修的吗?医…

淘宝商品数据分析接口,淘宝商品详情数据接口

淘宝商品数据分析接口可以通过淘宝API进行获取。 淘宝API是一种程序接口,通过编程的方式,让开发者能够通过HTTP协议直接访问淘宝平台的数据,包括商品信息、店铺信息、物流信息等,从而实现淘宝平台的数据开放。 通过淘宝API提供的…