Nginx快速入门:Nginx实现高可用|结合keepalived实现主备节点(九)

news2024/10/1 17:23:47

0. 引言

在生产中我们要尽可能避免单点故障,nginx也不例外,因此搭建主备节点必不可少,今天我们来学习下如何利用keepalived实现主备

1. keepalived简介

keepalived 是一个LINUX系统中开源的负载均衡和故障转移软件,它主要用于高可用性(HA)环境中的服务监控和冗余,其核心含义就是“保活”。

keepalived 最初是为 Linux Virtual Server(LVS)设计的,但随着时间的推移,它已经发展成为一个更为通用的工具,可以用于各种类型的服务监控和负载均衡任务。

keepalived 的工作原理是通过所谓的“虚拟路由冗余协议”(VRRP)来实现的。在 VRRP 中,多个服务实例被配置为提供相同的虚拟 IP 地址(VIP),但只有一个实例在任何给定时间点是活跃的(即它是“主”实例)。如果主实例失败,其他实例可以接管 VIP,成为新的主实例,从而实现故障转移。

keepalived 提供了几种不同的冗余模式,包括:

  • 主备模式(Master-Slave):

在这种模式下,只有一个主实例负责处理请求,而其他备用实例处于待命状态。如果主实例失败,最优先的备用实例将接管成为新的主实例。

  • 负载均衡模式(Load Balancing):

在这种模式下,所有的实例都参与处理请求,keepalived 负责将客户端请求分发到不同的实例。这可以通过各种算法来实现,如轮询(Round Robin)、最少连接(Least Connections)等。

  • 主备负载均衡模式(Master-Slave Load Balancing):

这种模式结合了主备模式和负载均衡模式的特点,允许在主实例失败时进行故障转移,同时所有实例都参与处理请求。

keepalived 还提供了一些高级功能,如健康检查(用于监控服务实例的健康状态)、故障恢复(用于在服务实例失败后自动重启它们)等。它可以通过简单的配置文件进行配置,并且可以通过命令行工具进行管理和监控。

如下为nginx搭建高可用架构的流程示意图
在这里插入图片描述
keepalived实现主备切换的原理
keepalived主要有3个核心模块:core、check和VRRP。
Core模块负责启动和维护Keepalived的主进程,以及加载解析全局配置文件。
Check模块负责健康检查(Health Checking),用于监控网络服务(如HTTP、MySQL等)的状态。
VRRP模块负责实现VRRP协议,管理主备之间的状态和切换。

而VRRP协议就是实现主备切换的关键,VRRP可以将两台或多台物理路由器设备虚拟成一个虚拟路由器,这个虚拟路由器通过虚拟IP(一个或多个)对外提供服务,当其中一个设备故障,就会将路由切换到另一个设备上,但对外提供的虚拟ip不变,从而保证服务一直可用。

2. keepalived安装与配置

0、首先准备两台服务器,安装nginx

yum install nginx -y

1、两台服务上都安装keepalived

yum install keepalived -y

2、查看服务器网卡名

ifconfig -a

在这里插入图片描述
3、修改主节点keeplived配置文件

vim /etc/keepalived/keepalived.conf

配置内容

global_defs {
   notification_email { # 发生故障时的邮件通知邮箱
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from xxx@qq.com # 邮件发送邮箱
   smtp_server smtp.qq.com # 邮箱发送服务器,这个配置成你公司的,或者使用其他第三方的,可以配置第三方的,比如腾讯的:smtp.qq.com
   smtp_connect_timeout 30
   router_id LVS_DEVEL
   vrrp_skip_check_adv_addr
   vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}
# 配置心跳检测脚本
vrrp_script nginx_check {
  script "/etc/keepalived/nginx_check.sh"
  interval 1 #每1秒钟检测一次脚本
}
vrrp_instance VI_1 {
    state MASTER
    interface ens160 # 网卡名
    virtual_router_id 51 # 主备服务器的virtual_router_id要相同
    priority 100 # 优先级,一般主节点更大,备节点更小
    advert_int 1 # 每隔1s发送心跳检测
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.244.100 # 虚拟ip, 可以配置多个,与你服务局域网的网段保持一致
    }
    track_script {
      nginx_check
    }
}

3、修改从节点keepalived配置文件,注意修改对应的网卡名

global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from xxx@qq.com
   smtp_server smtp.qq.com
   smtp_connect_timeout 30
   router_id LVS_DEVEL
   vrrp_skip_check_adv_addr
   vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}
vrrp_script nginx_check {
  script "/etc/keepalived/nginx_check.sh"
  interval 1 #每1秒钟检测一次脚本
}
vrrp_instance VI_1 {
    state BACKUP
    interface ens160
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.244.100 # 与你服务局域网的网段保持一致
    }
    track_script {
        nginx_check
    } 
}

4、书写上述脚本,存放到两个服务器上

vim /etc/keepalived/nginx_check.sh

脚本内容

#!/bin/bash
result=`pidof nginx`
if [ ! -z "${result}" ];
then
  exit 0
else
  exit 1
fi

5、给脚本赋权

chmod +x /etc/keepalived/nginx_check.sh

6、如果没有安装ipvsadm工具,需要先安装

yum install ipvsadm -y
# 启动ipvsadm
ipvsadm

在这里插入图片描述

7、主备节点上都启动keepalived

# 启动
systemctl start keepalived
# 重启
systemctl restart keepalived
# 停止
systemctl stop keepalived

8、如果发现访问不了虚拟ip,可以检查下keepalived启动日志,根据启动日志报错来进行排查

tail -500f /var/log/messages

正常启动日志如下:
在这里插入图片描述
备用节点启动日志
在这里插入图片描述

9、用虚拟ip访问测试,发现能够正常转发到nginx则设置成功
在这里插入图片描述
10、我们将主节点nginx关闭,观察看虚拟ip会不会漂移到备用节点

nginx -s stop

11、再次访问nginx,可以正常访问,说明已经转移到备用节点
在这里插入图片描述
通过ip a指令,也可以看到备用节点虚拟ip,主节点因为宕机已经没有虚拟ip了
在这里插入图片描述

3. 常见报错

1、Cant find interface eth0 for vrrp_instance VI_1 !!!
在这里插入图片描述
解决:

一般是由于网卡名错误导致的,使用ifconfig -a 查询网卡名,然后修改keepalived.conf中的interface参数即可
在这里插入图片描述

2、IPVS: Can’t initialize ipvs: Protocol not available
在这里插入图片描述
解决:

这是因为没有安装ipvsadm工具导致的,安装即可

yum install ipvsadm -y
# 启动ipvsadm
ipvsadm

在这里插入图片描述

4. 总结

综上,我们就实现了nginx主备节点的搭建,通过keepalived组件实现了健康检测,为转发服务实现高可用保驾护航

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

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

相关文章

解决 POST http://x.x.x.x:8000/aaa/ net::ERR_CONNECTION_TIMED_OUT

记录一下我遇到的问题和解决办法 我的项目前后端分离,在前端用的vue访问后端时连接不上后端,一切操作都触发不了后端,数据也传不到后端去; 原因:url有问题,url地址写的不是本机,所以导致连接超…

Nginx快速入门:worker、master进程的作用和热部署原理(十)

0. 引言 我们通过查询nginx进程,可以发现nginx有两个进程:worker和master。一个程序启动了两个进程,那么这两个进程的作用和区别是什么呢?nginx又是如何利用这两个进程进行工作的呢?nginx不停机热部署又是如何实现的&…

如何使用UUP从windows更新服务器下载windows10原版镜像

UUP是指Windows 10中的一种更新技术,全称为Unified Update Platform。UUP的目标是提供更快、更高效的更新体验,它通过增量更新的方式来更新操作系统,只下载和安装实际变化的部分,而不是整个更新包。这样可以节省带宽和时间&#x…

LLM漫谈(二)| QAnything支持任意格式文件或数据库的本地知识库问答系统

一、QAnything介绍 QAnything (Question and Answer based on Anything) 是致力于支持任意格式文件或数据库的本地知识库问答系统,可断网安装使用。 您的任何格式的本地文件都可以往里扔,即可获得准确、快速、靠谱的问答体验。 目前已支持格式: PDF&…

Mac Parallels19.1.0 Install CentOS7.9

0、资源准备 # centos7.9镜像一份 链接: https://pan.baidu.com/s/1acIjUnsTGhk_2cYCZLSoGg?pwd6666 提取码: 6666 --来自百度网盘超级会员v7的分享1、打开PD 2、选择镜像进行安装 指定镜像名称 创建 进行密码设置 安装目的地点开后直接点击完成 网络和主机名称 开…

SonarQube 漏洞扫描

SonarQube 漏洞扫描 一、部署服务 1.1 docker方式部署 #安装docker curl -L download.beyourself.org.cn/shell-project/os/get-docker-latest.sh | sh yum install -y docker-compose #进去输入:set paste可以保证不穿行 [rootlocalhost sonar]# vim docker-compose.yml v…

什么猫粮便宜又好?什么牌子的主食冻干猫粮健康又实惠?

冻干对于猫咪的好处,相信许多养猫的朋友们都非常了解。冻干猫粮是将含有水分的新鲜肉在低温且真空的环境中急速冻结,使得冰直接升华成水蒸气,从而排掉水分,让肉变得干燥。这种方式可以保证蛋白质和维生素等物质的生物活力&#xf…

Zabbix实现网络响应超时监控

一、简介 在IT运维管理过程中,网络响应超时是比较常见的故障之一。尽管网络响应超时的原因多种多样,解决方案各不相同,但归根结底解决故障的首要前提是发现问题。 在网络超时监控方面,Zabbix能够实时捕获并响应网络设备的超时事…

技术方向:比较与选择

针对未入行、刚入行、工作好几年依然不停切换择业方向、长期技术无法突破的人。 1 技术栈 一切的开始其实是对编程的兴趣,兴趣指引你跨过所有障碍。 编程语言是基础,编程语言之上,发展为两个主要方向,服务和大数据。 2 编程语言…

【一】达梦数据库安装和使用-Windows

达梦数据库安装和使用-Windows 简介: 新能源行业关系到国计民生,保障能源安全的意识不容懈怠,近些年各行各业都在推进数字化进程,能源行业在国家3060双碳目标提出之后更是进行的如火如荼,能源互联网方面在数字化的同时…

软件测试|Python函数参数之必传参数、默认参数、可变参数、关键字参数的详细使用

在Python中,函数参数是定义在函数头部的变量,用于接收传递给函数的数据。Python函数参数有四种类型:必传参数、默认参数、可变参数和关键字参数。每种类型都有不同的使用方式和适用场景。本文将详细介绍这四种函数参数的使用方法。 Python函…

如何做一个炫酷的Github个人简介(3DContribution)

文章目录 前言3D-Contrib第一步第二步第三步第四步第五步第六步 前言 最近放假了,毕设目前也不太想做,先搞一点小玩意玩玩,让自己的github看起来好看点。也顺便学学这个action是怎么个事。 3D-Contrib 先给大家看一下效果 我的个人主页&am…

RH850P1X芯片学习笔记-A/D Converter (ADCF)

文章目录 Features of RH850/P1x-C ADCFNumber of UnitsRegister Base AddressClock SupplyInterrupts and DMAHardware ResetExternal Input/Output SignalsVirtual Channel OverviewFunctional OverviewBlock DiagramPhysical Channels, Virtual Channels and Scan Groups Re…

【airsim】python控制airsim

使用airsim 1.8.1编译完成,进过block项目在cpp测试后,开始踩坑使用python。 使用AirSim\PythonClient\setup.py或者pip安装airsim。 python setup.py install或者 pip install airsim此时,windows电脑的环境信息 (air_py38) D:\code\Gith…

UV胶水与聚氯乙烯PVC材料的塑料粘接,效果如何?

UV胶水可以与聚氯乙烯PVC很好地粘接。 PVC是一种常见的塑料材料,UV胶水通常对PVC具有良好的粘接性能。UV胶水可以在紫外线照射下迅速固化,形成坚固的粘接,因此通常被用于PVC制品的粘接和修复。 UV胶水与PVC粘接的优点: 1. 快速固…

Java并发集合详解

第1章:引言 大家好,我是小黑,在这篇博客中,咱们将一起深入探索Java中的并发集合。多线程编程是一个不可或缺的部分,它能让程序运行得更快,处理更多的任务。但同时,多线程也带来了一些挑战&…

Linux 编译安装 Nginx

目录 一、前言二、四种安装方式介绍三、本文安装方式:源码安装3.1、安装依赖库3.2、开始安装 Nginx3.3、Nginx 相关操作3.4、把 Nginx 注册成系统服务 四、结尾 一、前言 Nginx 是一款轻量级的 Web 服务器、[反向代理]服务器,由于它的内存占用少&#xf…

独立式键盘控制步进电机实验

#include<reg51.h> //包含51单片机寄存器定义的头文件 sbit S1P1^4; //将S1位定义为P1.4引脚 sbit S2P1^5; //将S2位定义为P1.5引脚 sbit S3P1^6; //将S3位定义为P1.6引脚 unsigned char keyval; //储存按键值 unsigned char ID; …

etcd基本介绍

etcd基本介绍 ETCD是SoreOs公司发布的一个分布式的、高可用的、key-value存储的数据库。基于Go语言实现&#xff0c;k8s中也使用了ETCD作为数据库。主要用于共享配置和服务发现。相对于zookeeper采用的Paxos&#xff0c;ETCD采用的是Raft算法&#xff0c;该算法具备的性能更佳…

Hadoop集群三节点搭建(二)

一、克隆三台主机&#xff08;hadoop102 hadoop103 hadoop104&#xff09; 以master为样板机克隆三台出来&#xff0c;克隆前先把master关机 按照上面的步骤克隆其他两个就可以了&#xff0c;记得修改ip和hostname 二、编写集群同步脚本 在/home/attest/ 创建bin目录&…