keepalived + Nginx 实现双机主备、双主热备(centOS 7.x 系统)

2023-11-02

1. Nginx安装教程可参考:Nginx安装教程(centOS 7.x 系统)

2. keepalived 的安装教程可参考:keepalived 安装教程(centOS 7.x)

3. (双机主备:主节点配置)修改配置文件 keepalived.conf

(1) 移动到配置文件目录

cd /etc/keeplived/

 (2) 修改文件

vim keepalived.conf

 修改成如下内容:

 具体信息为:

# 全局配置
global_defs {
   # 路由id:当前安装keepalived的节点主机标识符,保证全局唯一
   router_id keep_171
}
# vrrp_instance vrrp实例(基于VRRP的服务器节点)vrrp_instance是主机内配置的实例名称,不同主机可以不一致
vrrp_instance VI_1 {
    # 表示状态是MASTER主机还是备用机BACKUP
    state MASTER
    # 该实例绑定的网卡
    interface ens33
    # 保证主备节点一致即可
    virtual_router_id 51
    # 权重,master权重一般高于backup,如果有多个,那就是选举,谁的权重高,谁就当选
    priority 100
    # 主备之间同步检查时间间隔,单位秒
    advert_int 2
    # 认证权限密码,防止非法节点进入
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    # 虚拟出来的ip,可以有多个(vip)
    virtual_ipaddress {
        192.168.1.161
    }
}

之后重启 keepalived,使用 ip addr 可以看到虚拟ip

4. (双机主备:备节点配置)修改配置文件 keepalived.conf

第 9 步是将当前 keepalived 所在的计算机节点配置为 主节点,接下来可以将另一台 keepalived 所在的服务器节点配置成 备用节点

配置文件内容只需修改成:

global_defs {
   router_id keep_172
}

vrrp_instance VI_1 {
    # 备用机设置为BACKUP
    state BACKUP
    interface ens33
    virtual_router_id 51
    # 权重低于MASTER
    priority 80
    advert_int 2
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        # 注意:主备两台的vip都是一样的,绑定到同一个vip
        192.168.1.161
    }
}

主备节点之间的配置内容,主要有三处不同:

5.  keepalived 配置 Nginx重启检测脚本(该配置可要可不要)

整个服务器挂了,keepalived才会切换到备用机,如果只有Nginx 挂了,并不会切换,所以需要通过脚本来定时检测nginx是否正常,如果nginx已经关闭,则将对应的keepalived也关了,触发虚拟ip绑定到备用机上。

(1)增加Nginx重启检测脚本

vim /etc/keepalived/check_nginx_alive_or_not.sh

(2)check_nginx_alive_or_not.sh文件内容如下

#!/bin/bash

A=`ps -C nginx --no-header |wc -l`
# 判断nginx是否宕机,如果宕机了,尝试重启
if [ $A -eq 0 ];then
    /usr/local/nginx/sbin/nginx
    # 等待一小会再次检查nginx,如果没有启动成功,则停止keepalived,使其启动备用机
    sleep 3
    if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
        killall keepalived
    fi
fi

文件内容解释如下:

定义一个参数  A 这个但是是判断 nginx是否宕机的属性值;

  • 如果这个状态等于 0 代表宕机 nginx;

  • 然后会尝试重启nginx

  • 等待3秒后,在进行一次判断

  • 如果还是宕机状态,直接杀死当前 keepalived进程

(3)添加运行权限 

chmod +x /etc/keepalived/check_nginx_alive_or_not.sh

(4)在 keepalived.conf 文件中增加如下脚本

vrrp_script check_nginx_alive {
    script "/etc/keepalived/check_nginx_alive_or_not.sh"
    interval 2 # 每隔两秒运行上一行脚本
    weight 10 # 如果脚本运行成功,则升级权重+10
    # weight -10 # 如果脚本运行失败,则升级权重-10
}

(5)并将其添加到 vrrp_instance VI_1 中

track_script {
    check_nginx_alive   # 追踪 nginx 脚本
}

(6)修改后的 keepalived.conf 如下(主备节点上都可以加一下)

# 全局配置
global_defs {
   # 路由id:当前安装keepalived的节点主机标识符,保证全局唯一
   router_id keep_171
}

vrrp_script check_nginx_alive {
    script "/etc/keepalived/check_nginx_alive_or_not.sh"
    interval 2 # 每隔两秒运行上一行脚本
    weight 10 # 如果脚本运行成功,则升级权重+10
    # weight -10 # 如果脚本运行失败,则升级权重-10
}


# vrrp_instance vrrp实例(基于VRRP的服务器节点)
vrrp_instance VI_1 {
    # 表示状态是MASTER主机还是备用机BACKUP
    state MASTER
    # 该实例绑定的网卡
    interface ens33
    # 保证主备节点一致即可
    virtual_router_id 51
    # 权重,master权重一般高于backup,如果有多个,那就是选举,谁的权重高,谁就当选
    priority 100
    # 主备之间同步检查时间间隔,单位秒
    advert_int 2
    # 认证权限密码,防止非法节点进入
    authentication {
        auth_type PASS
        auth_pass 1111
    }

    track_script {
        check_nginx_alive   # 追踪 nginx 脚本
    }


    # 虚拟出来的ip,可以有多个(vip)
    virtual_ipaddress {
        192.168.1.161
    }
}

6. 实现双主热备

 (1)在 主节点服务器上的 /etc/keeplived/keepalived.conf 文件中,增加一个 vrrp_instance, 命名为 VI_2,内容如下:

vrrp_instance VI_2 {
    state BACKUP
    interface ens33
    virtual_router_id 52
    priority 80
    advert_int 2
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.1.162
    }
}

注意:修改的地方主要有5处: 

(2)同样在备用节点上也要增加一个 vrrp_instance VI_2,

vrrp_instance VI_2 {
    state MASTER
    interface ens33
    virtual_router_id 52
    priority 100
    advert_int 2
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.1.162
    }
}

之后两个服务器节点都要 重启 keepalived。

(3)双主热备配置之后的 keepalived.conf 内容

一个虚拟ip对应一个主备节点,两个虚拟ip对应双主热备。

主节点:

global_defs {
   router_id keep_171
}

vrrp_instance VI_1 {
    state MASTER
    interface ens33
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.1.161
    }
}

vrrp_instance VI_2 {
    state BACKUP
    interface ens33
    virtual_router_id 52
    priority 80
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.1.162
    }
}

备节点:

global_defs {
   router_id keep_172
}

vrrp_instance VI_1 {
    state BACKUP
    interface ens33
    virtual_router_id 51
    priority 80
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.1.161
    }
}

vrrp_instance VI_2 {
    state MASTER
    interface ens33
    virtual_router_id 52
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.1.162
    }
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

keepalived + Nginx 实现双机主备、双主热备(centOS 7.x 系统) 的相关文章

  • 如何告诉 CMake 将构建文件放在哪里?

    我想告诉 CMake 将文件和文件夹输出到不同的文件夹而不是当前文件夹 我在下面讨论的是 CMake 生成的文件 文件 CMakeCache txt 目录 CMakeFiles 文件 生成文件 目录 bin 文件 cmake install
  • 64位版本的adb和fastboot?

    我在 Debian 7 3 x64 已完全修补 上发现了以下错误 我很确定这是因为adb即使在其 SDK 工具的 64 位发行版中也是 32 位 which adb opt android sdk platform tools adb op
  • 使用多个 NIC 广播 UDP 数据包

    我正在 Linux 中为相机控制器构建嵌入式系统 非实时 我在让网络做我想做的事情时遇到问题 该系统有 3 个 NIC 1 个 100base T 和 2 个千兆端口 我将较慢的连接到相机 这就是它支持的全部 而较快的连接是与其他机器的点对
  • 超立方体错误。非法的最小或最大规格

    尝试从这里运行示例代码http tess4j sourceforge net codesample html http tess4j sourceforge net codesample html我收到一条错误消息 Error Illega
  • 如何在 Linux 上重新实现(或包装)系统调用函数?

    假设我想完全接管 open 系统调用 也许要包装实际的系统调用并执行一些日志记录 一种方法是使用 LD PRELOAD http scaryreasoner wordpress com 2007 11 17 using ld preload
  • 检测后台操作

    在C中 检测程序在 后台模式 下调用的方法是什么 我有一个程序想要以交互方式或在后台启动 我怎样才能检测到我不应该从标准输入读取并以 已停止 tty 输入 状态结束 我应该测试 stdin 是否已关闭 我怎样才能做到这一点 编辑 isatt
  • 在 Windows 下对 Unix 下创建的文件使用 fstream::seekg

    我有一个C 跨平台程序 在Linux下用g 编译 在PC下用Visual Studio编译 该程序将行写入文本文件 使用 lt lt 运算符和std endl 但也可以从生成的文本文件中读回数据 使用std getline 为了优化数据访问
  • 导入错误:没有名为“tensorrt”的模块

    我使用 Debian 安装在我的虚拟机上安装了 TensorRT 如果我运行 dpkg l grep TensorRT 我会得到预期的结果 ii graphsurgeon tf 5 0 2 1 cuda10 0 amd64 GraphSur
  • Visual Studio 2010 中的 pthread(POSIX 线程)

    我从互联网上找到了一个 Pthread 程序 我想在 Visual Studio 2010 中运行它 但我不知道如何在 Visual Studio 中使用 pthread 以下是我找到的程序 include
  • linux下X上的系统范围键盘钩子

    在 Linux X windows 上安装键盘挂钩以便在按下某些组合键时触发某些应用程序的最佳方法是什么 无论哪个窗口管理器正在运行 有没有办法做到这一点 这个想法是当按下某个键时调用一个应用程序 或带到前台 就像 Google 桌面上的
  • 使用 awk 处理多个文件

    我必须使用 awk 处理大量 txt 文件 每个文件 1600 万行 我必须阅读例如十个文件 File 1 en sample 1 200 en n sample 2 10 en sample 3 10 File 2 en sample 1
  • 在ubuntu中使用gcc生成特定频率的声音?

    如何在 C C 中生成特定频率的声音 我运行 Ubuntu 10 04 并使用 gcc 有一个void sound int frequency Windows 版 TurboC 上的功能 gcc 有等效的吗 下面是利用 PortAudio
  • 从 S3 存储桶下载 300 万个对象的最快方法

    我尝试过使用 Python boto 多处理 S3cmd 和 J3tset 但都在努力解决 有什么建议 也许是您一直在使用的现成脚本或我不知道的其他方式 EDIT eventlet boto 是一个有价值的解决方案 如下所述 在这里找到了一
  • 如何为自定义应用程序选择静态端口号?

    我们有一个自定义应用程序 需要在其自己的端口号上处理请求 我们真的不在乎这个数字是多少 尽管我们在决定后会坚持使用该端口 如何选择最不可能与用户系统上运行的其他应用程序或服务发生冲突的数字 我们应该遵循什么规则或标准吗 澄清 一旦我们选择了
  • 如何在 Linux 中创建可通过 Screen 应用程序连接的 pty

    我想创建 C C 应用程序 它在 dev xxx 中创建新的 虚拟 设备 并且能够与 屏幕 应用程序连接 例如 循环运行的程序会创建新的 dev ttyABC 然后我将使用 屏幕 dev ttyABC 当我向那里发送一些字符时 应用程序将其
  • 是什么决定了 getdents 返回目录条目的顺序?

    背景是我有一个现有的应用程序 其中列出了目录条目 strace 显示它只是调用 getdents 并按返回的顺序列出它们 我希望它们以与不带参数调用 ls 相同的顺序显示 是否可以通过某种方式更新目录数据来实现此目的 FS 是 ext4 如
  • 如何将域名附加到我的服务器? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我有一个小问题 查看了这里和其他论坛 但找不到解决方案 我的网站位于 my domain com 网站位于共享主机上 在我的域名注册中 我添加了当我为
  • __NR_gettid 和 SYS_gettid 之间的区别

    我只是在寻找在 Linux 中获取唯一线程 ID 的方法 我发现的方法是将两个参数中的任何一个作为参数进行系统调用 NR gettid OR SYS gettid 有人能解释一下它们之间有何不同吗 Nothing in
  • 无法通过 SSH 连接到 Google 计算引擎

    我在一个新项目中设置了一个新的 Google Compute Engine 实例 我启动实例并使用命令gcloud init连接到我的项目 然后我使用命令sudo gcloud compute ssh instance 1 它引导我完成 S
  • Docker:如何创建堆栈、多个映像或一个基础映像?

    I am new using Docker and I got the doubt of using one image base for my stack or I have to define each image depending

随机推荐

  • 每日一题——判断是不是平衡二叉树

    题目 输入一棵节点数为 n 二叉树 判断该二叉树是否是平衡二叉树 在这里 我们只需要考虑其平衡性 不需要考虑其是不是排序二叉树 平衡二叉树 Balanced Binary Tree 具有以下性质 它是一棵空树或它的左右两个子树的高度差的绝对
  • Error [ERR_REQUIRE_ESM] And Design Pro初始化报错

    Error ERR REQUIRE ESM And Design Pro初始化报错 今天创建项目 用And Design Pro初始化的时候报错 不能创建项目 如下图 D Code front gt pro create myapp D P
  • 通过鼠标滚轮实现缩放效果

    using System Collections using System Collections Generic using UnityEngine public class Scroll MonoBehaviour void Updat
  • iOS开发之网络监听(一)Reachability

    demo下载 Reachability对系统的网络状况类SCNetworkReachability进行的封装 持有全局的网络状况句柄reachabilityRef 简化了SCNetworkReachability的Api以及网络状态 使开发
  • Linux内核配置之Kconfig

    一 概述 Kconfig是按照特定的格式来书写的文件 menuconfig程序可以识别这种格式 然后从中提取出有效信息组成menuconfig中的菜单项 在修改内核配置或驱动移植时 需要在Kconfig文档中修改或添加一些内容 经典 博文
  • 如何使用github搭建一个属于自己的网址

    如何使用github搭建一个属于自己的网址 个人博客 前言 优点 1 现在大部分的个人网页都是通过阿里等平台租用一个域名 使用github pages可以免费拥有一个属于自己的域名 2 github中的每一个repository 库 都可以
  • C++ OpenCV光平面标定-线激光提取

    对于线激光中心的提取 主要有以下几种方法可参考 图源来自于Charms 传统激光条纹中心提取方法可参考该博主 对于上述方法中 目前强烈推荐细化法 灰度重心 其次不追求速度的话选择steger算法 该算法鲁棒性较好 精度高 两种方法都可实现亚
  • 《Android物联网应用程序开发》课程的一课一得

    在 Android物联网应用程序开发 这门课程的学习过程中 我收获了丰富的知识和技能 对于物联网应用程序的开发有了更深入的理解和实践经验 经过一学期的学习 我认为这门课程在以下几个方面给予了我很大的帮助和提升 首先 课程内容设计合理 覆盖了
  • 从零开始系统化学Java,大厂面试题汇总

    1 Java基础 Java基础务必要有一个非常牢固的根基 尤其是对于JVM和并发编程的掌握情况 属于进阶内容 但也是Java最为重要的基础内容 不论是面试还是工作 基础不好 写不出高质量 漂亮的代码 面试估计刚开始就会被面试官给拍死 基础不
  • easyui-datagrid记录checkbox选择状态

    需求 1 分页 即发送开始元素的索引 startNumber 和每页显示多少信息 pageSize 到后台 后台使用类似limit的函数查出数据后以json格式返回 2 记录checkbox的选择状态 第一页选择了A 翻到第二页 回到第一页
  • nginx启动报 ssl parameter requires ngx_http_ssl_module

    nginx启动报 ssl parameter requires ngx http ssl module 1 问题现象 服务器nginx 引入ssl配置时 报错 emerg the ssl parameter requires ngx htt
  • 微信小程序保存图片到相册

    目录 微信小程序实现将图片保存到手机相册 方案一 微信小程序实现将图片保存到手机相册 方案二 微信小程序之点击复制文本到剪贴板 微信小程序 判断是IOS还是安卓 微信小程序分享图片给微信好友 微信小程序实现将图片保存到手机相册 方案一 首先
  • Sharding-JDBC分布式事务总结(二)之@ShardingTransactionType()注解切换失效问题

    ShardingTransactionType注解失效以及解决办法 1 背景 使用依赖
  • Python+OpenCV教程12:腐蚀与膨胀

    转自 https www jianshu com p 05ef50ac89ac 主站 http ex2tron wang 原文 Python OpenCV教程12 腐蚀与膨胀 学习常用形态学操作 腐蚀膨胀 开运算和闭运算 图片等可到源码处下
  • Android程序员必会!你的技术真的到天花板了吗?成功定级腾讯T3-2

    什么是中年危机 根据权威数据显示 国内IT程序员鼎盛时期是在25 27岁左右 30岁对于程序员而言完全是一个38线 接着就是转业转岗的事情 这一点在业界也算是一个共识了 大学毕业步入IT行业普遍年龄也是在22岁左右 然而22 30岁之间也就
  • 第七届蓝桥杯大赛个人赛省赛(软件类)真题 C语言B组 3

    B组2题和A组的是重复的 so 跳过 题目 凑算式 B DEF A 10 C GHI 如果显示有问题 可以参见 图1 jpg 这个算式中A I代表1 9的数字 不同的字母代表不同的数字 比如 6 8 3 952 714 就是一种解法 5 3
  • vue build 打包遇到bug解决记录

    文章目录 vue cli service serve vue打包修改dist文件夹名字 vue build require is not defined 和 exports is not defind 错误 vue cli service
  • PDF派(网页)

    站内有几十个PDF在线工具 可无限次使用 并且是免费的 有很多是经常办公需要用的文件格式转换功能 所以小伙伴们再也不会被PDF格式所困扰 像PDF转word和图片转PDF应该是大家使用最频繁吧 这里我试用了一下 直接把图片导入 就可以进行转
  • 刷脸支付已经逐渐出现在我们的生活中

    随着科技AI智能的快速发展 刷脸时代已经到来 刷脸支付意味着在手机没电 信号不好 因为卡顿打不开支付宝额微信 甚至出门忘记带手机也能完成各种付款 随着人像3D处理技术的成熟 刷脸技术方方面面的覆盖交通 零食 休闲 餐饮 住宿等各个方面 将来
  • keepalived + Nginx 实现双机主备、双主热备(centOS 7.x 系统)

    1 Nginx安装教程可参考 Nginx安装教程 centOS 7 x 系统 2 keepalived 的安装教程可参考 keepalived 安装教程 centOS 7 x 3 双机主备 主节点配置 修改配置文件 keepalived c