keepalived+nginx双主热备(有问题私信)

news2024/12/24 10:22:07

keepalived+nginx双主热备

  • 前言
  • keepalived+nginx双主热备
    • keepalived+nginx双主热备部署
      • 安装nginx
      • 安装keepalived
        • 修改master节点的keepalived配置文件
      • 修改backup节点的keeepalived配置文件
      • 配置keepalived主备
      • 配置keepalived双主热备

前言

有关keepalived和nginx的一些工作原理,简介等相关信息这里就不过多赘述了,有不了不太清楚或者不太了解的朋友可以参考我之前的文章
keepalived相关内容
nginx相关内容01
nginx相关内容02

keepalived+nginx双主热备

在配置双主热备之前,最好先弄明白双机主备
环境说明

系统版本软件版本IP地址
centos7.9keepalived-2.2.7版本 nginx-1.20.1版本192.168.182.130(master)
centos7.9keepalived-2.2.7版本 nginx-1.20.1版本192.168.182.131(backup)

keepalived官网下载地址
nginx官网下载地址

keepalived+nginx双主热备部署

安装nginx

以下操做两台主机都做

[root@130 opt]# pwd
/opt
[root@130 opt]# ls
nginx-1.20.1.tar.gz

[root@130 opt]# tar zxf nginx-1.20.1.tar.gz
// 进入解压目录
[root@130 opt]# cd nginx-1.20.1/
[root@130 nginx-1.20.1]# ./configure --with-http_ssl_module  //开始编译
说明一下不加“--prefix=“ nginx会默认安装在/usr/local目录下

./configure: error: C compiler cc is not found  //第一个报错
[root@130 nginx-1.20.1]# yum -y install gcc  //解决

./configure: error: the HTTP rewrite module requires the PCRE library  //第二个报错
[root@130 nginx-1.20.1]# yum -y install pcre pcre-devel  //解决

./configure: error: SSL modules require the OpenSSL library.  //第三个报错
[root@130 nginx-1.20.1]# yum -y install openssl openssl-devel  //解决
[root@130 nginx-1.20.1]# make && make install  //执行完成之后遍安装完成

配置nginx环境,方便使用nginx的二进制命令

[root@130 ~]# echo 'export PATH=$PATH:/usr/local/nginx/sbin' > /etc/profile.d/nginx.sh
[root@130 ~]# source /etc/profile.d/nginx.sh
// 执行完上面的命令后就不需要到sbin目录下执行nginx的二进制命令了

使用systemctl控制nginx

[root@130 ~]# cat > /usr/lib/systemd/system/nginx.service  <<EOF
[Unit]
Description=Nginx server daemon
After=network.target sshd-keygen.service

[Service]
Type=forking
ExecStart=/usr/local/nginx/sbin/nginx
ExecStop=/usr/local/nginx/sbin/nginx -s quit
ExecReload=/bin/kill -HUP $MAINPID

[Install]
WantedBy=multi-user.target
EOF

[root@130 ~]# systemctl daemon-reload
[root@130 ~]# systemctl start nginx
[root@130 ~]# systemctl enable nginx.service

//此处为master节点nginx

// 此处为backup节点的nginx

安装keepalived

以下操作同样也需要在两台主机上执行

[root@130 opt]# tar zxf keepalived-2.2.7.tar.gz
[root@130 opt]# cd keepalived-2.2.7/
[root@130 keepalived-2.2.7]# ./configure --prefix=/usr/local/keepalived --sysconf=/etc  //咱们安装在/usr/local命令下,不加--sysconf=/etc可能会报错

//第一次编译会出现警告信息,但其实不影响,强迫症患者会不舒服
*** WARNING  this build will not support IPVS with IPv6. Please install libnl/libnl-3 dev libraries to support IPv6 with IPVS  

[root@130 keepalived-2.2.7]# yum -y install libnl libnl-devel  //解决
[root@130 keepalived-2.2.7]# make && make install  //进行安装

配置keepalived环境变量

[root@130 ~]# echo 'export PATH=$PATH:/usr/local/keepalived/sbin' > /etc/profile.d/keepalived.sh
[root@130 ~]# source /etc/profile.d/keepalived.sh

生成keeepalived配置文件

[root@130 keepalived]# pwd
/etc/keepalived
[root@130 keepalived]# cp keepalived.conf.sample keepalived.conf
修改master节点的keepalived配置文件
[root@130 keepalived]# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived

global_defs {
   router_id HA01  //此处的id要全局唯一
}

vrrp_instance VI_1 {
    state MASTER  //因为130为master所以状态为master
    interface ens33  //此处根据你的网卡名称变化而变化
    virtual_router_id 51  //虚拟路由id,在同一组中此处保持一致,也就是主备节点都需要一样
    priority 100  //优先级
    advert_int 1  //主备间心跳检测间隔为1秒
    authentication {  //认证授权的账号和密码
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {  //此处为虚拟VIP地址
        192.168.182.100
    }
}

使用systemctl控制keepalived

[root@130 keepalived]# vim /usr/lib/systemd/system/keepalived.service //修改service文件
[Unit]
Description=keepalived
After=network-online.target syslog.target 

[Service]
Type=forking
PIDFile=/run/keepalived.pid
KillMode=process
EnvironmentFile=-/etc/sysconfig/keepalived
ExecStart=/usr/local/keepalived/sbin/keepalived  $KEEPALIVED_OPTIONS
ExecReload=/bin/kill -HUP $MAINPID

[Install]
WantedBy=multi-user.target

[root@130 keepalived]# systemctl daemon-reload
[root@130 keepalived]# systemctl start keepalived
[root@130 keepalived]# systemctl enable keepalived.service

修改backup节点的keeepalived配置文件

[root@131 ~]# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived

global_defs {
   router_id HA02
}

vrrp_instance VI_1 {
    state BACKUP  //备用节点改为backup
    interface ens33
    virtual_router_id 51
    priority 90  //备用节点的优先级要小于主节点
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.182.100
    }
}

使用systemctl控制keepalived

[root@131 ~]# vim /usr/lib/systemd/system/keepalived.service
[Unit]
Description=keepalived
After=network-online.target syslog.target 

[Service]
Type=forking
PIDFile=/run/keepalived.pid
KillMode=process
EnvironmentFile=-/etc/sysconfig/keepalived
ExecStart=/usr/local/keepalived/sbin/keepalived  $KEEPALIVED_OPTIONS
ExecReload=/bin/kill -HUP $MAINPID

[Install]
WantedBy=multi-user.target

[root@131 ~]# systemctl daemon-reload
[root@131 ~]# systemctl start keepalived
[root@131 ~]# systemctl enable keepalived

配置keepalived主备

注意:VIP为192.168.182.100

我们知道此实验的目的是为让nginx能7×24小时的工作,保证用户能正常访问,所以接下来需要编写脚本让keepalived来监听并自动运行此脚本

下面的操作均在master上进行

[root@130 keepalived]# pwd
/etc/keepalived
[root@130 keepalived]# touch check-nginx.sh
[root@130 keepalived]# chmod +x check-nginx.sh
[root@130 keepalived]# vim check-nginx.sh
#!/bin/bash
process=`ps -C nginx | grep -vc PID`  //获取nginx的进程数
if [ $process -eq 0 ];then  //等于0就说明nginx挂了,先尝试启动nginx,然后等待3秒
    systemctl start nginx
    sleep 3
elif [ $process -eq 0 ];then  //如果nginx启动不了,说明出现问题了,所以需要将服务转到备用节点上
    systemctl stop keepalived
fi

// 将上面的脚本加入到keepalived的配置文件中

! Configuration File for keepalived

global_defs {
   router_id HA01
}

vrrp_script nginx-check {
     script "/etc/keepalived/check-nginx.sh"  //此处写咱们脚本的绝对路径
     interval 2  //每隔两秒执行此脚本
     weight 10  //执行脚本成功此节点的优先级+10;若写成weight -10,则反之。
}

vrrp_instance VI_1 {
    state MASTER
    interface ens33
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    track_script {
        nginx-check  //追踪咱们上面的脚本
}
    virtual_ipaddress {
        192.168.182.100
    }
}

[root@130 keepalived]# systemctl restart keepalived.service

若关闭master上的nginx,keeepalived检测到之后会在3秒内启动nginx,这里我就不做演示了。

从下图可以看到访问VIP时为master上的nginx

下面我们模拟故障情况,假设nginx挂点了,然后我们关闭keepalived,看是否能跳转到backup上

[root@130 keepalived]# systemctl stop keepalived.service //关闭

// 跳转成功

下面的操作在backup上进行

[root@131 keepalived]# pwd
/etc/keepalived
[root@131 keepalived]# touch check_nginx.sh
[root@131 keepalived]# chmod +x check_nginx.sh
[root@131 keepalived]# cat check_nginx.sh 
#!/bin/bash
process=`ps -C nginx --no-header | wc -l`
if [ $process -eq 0 ];then
    systemctl start nginx
    sleep 3
elif [ $process -eq 0 ];then
   systemctl stop keepalived.service
fi

[root@131 keepalived]# vim keepalived.conf
! Configuration File for keepalived

global_defs {
   router_id HA02
}

 vrrp_script check_nginx {
      script "/etc/keepalived/check_nginx.sh"
      weight 10
      interval 2
}

vrrp_instance VI_1 {
    state BACKUP
    interface ens33
    virtual_router_id 51
    priority 90
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    
    track_script {
        check_nginx
}
    virtual_ipaddress {
        192.168.182.100
    }
}

配置keepalived双主热备

  • 看咱们上面的主备配置都是master在提供服务只有当master宕机时backup才会接管进行工作,所以这就会导致有一台主机就会处于闲置状态
  • 双主就是两台主机都提供服务,当master上nginx宕机后,keepalived也会停掉,这时master上的VIP时便跳转到backup,而当backup节点挂掉时backup便会将请求转到master上,看下面的示例演示

在master节点上配置

[root@130 keepalived]# vim keepalived.conf  //在配置文件最后一行添加下面内容
vrrp_instance VI_2 {  //因为这是第二组,又因为这里需要全局唯一所以不能与上面的 VI_1一致
    state BACKUP  //因为双主的话,master和backup都是对方的master,上面第一组时master是backup的主,所以现在master应该为backu的备
    interface ens33
    virtual_router_id 52  //此处同一节点需保持一致,所以要修改为52
    priority 80
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
virtual_ipaddress {
    192.168.182.101  //因为是新的一组主备,所以需要再添加一个VIP
    }
}

[root@130 keepalived]# systemctl restart keepalived.service
[root@131 keepalived]# pwd
/etc/keepalived
[root@131 keepalived]# vim keepalived.conf  //也是在配置文件的最后一行添加下面内容
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.182.101
    }
}

[root@131 keepalived]# systemctl restart keepalived.service

//访问第二组的VIP能正常访问nginx02

//这里我们关闭master节点上的keepalived

[root@130 keepalived]# systemctl stop keepalived.service

//这里发现第一组的VIP100也可以访问到nginx02,反之若backup上的keepalived挂掉,能访问到nginx01,至此双主热备成功。

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

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

相关文章

YOLOv8融合改进 更换检测头同时改进C2f模块

一、Detect_DyHead检测头和C2f-EMSC,C2f-EMSCP模块 详细介绍和代码在往期的博客里: Detect_DyHead: (YOLOv8改进检测头Detect为Detect_Dyhead-CSDN博客) C2f-EMSC和C2f-EMSCP: (YOLOv8改进之多尺度转换模块C2f-EMSC和C2f-EMSCP-CSDN博客) 二、算法实现 1、将检测…

山西电力市场日前价格预测【2024-01-29】

日前价格预测 预测说明&#xff1a; 如上图所示&#xff0c;预测明日&#xff08;2024-01-29&#xff09;山西电力市场全天平均日前电价为279.99元/MWh。其中&#xff0c;最高日前电价为397.38元/MWh&#xff0c;预计出现在07:45。最低日前电价为0.00元/MWh&#xff0c;预计出…

无际线复选框

效果演示 实现了一个网格布局&#xff0c;其中每个网格是一个复选框&#xff0c;可以选择是否显示。每个复选框都有一个漂浮的天花板&#xff0c;表示它是一个房间的天花板。每个房间的天花板都有一个不同的形状和颜色&#xff0c;分别对应不同的房间。整个页面的背景是一个由两…

2024/1/27 备战蓝桥杯 1-1

目录 求和 0求和 - 蓝桥云课 (lanqiao.cn) 成绩分析 0成绩分析 - 蓝桥云课 (lanqiao.cn) 合法日期 0合法日期 - 蓝桥云课 (lanqiao.cn) 时间加法 0时间加法 - 蓝桥云课 (lanqiao.cn) 扫雷 0扫雷 - 蓝桥云课 (lanqiao.cn) 大写 0大写 - 蓝桥云课 (lanqiao.cn) 标题…

js实现动漫拼图1.0版

文章目录 1 实现效果视频2 功能实现思路3代码实现 1 实现效果视频 拼图1.0 2 功能实现思路 布局忽略&#xff08;小白学前端&#xff0c;不献丑了&#xff09; 左侧拼图格 左侧4*4的拼图小格子 利用表格实现&#xff0c;规划好td的大小&#xff0c;给每个格子加上背景图片&…

Gin 框架之jwt 介绍与基本使用

文章目录 一.JWT 介绍二.JWT认证与session认证的区别2.1 基于session认证流程图2.2 基于jwt认证流程图 三. JWT 的构成3.1 header : 头部3.2 payload : 负载3.2.1 标准中注册的声明 (建议但不强制使用)3.2.2 公共的声明3.2.3 私有的声明3.2.4 定义一个payload 3.3 signatrue : …

使用Python和ffmpeg旋转WebM视频并保存为MP4文件

简介: 在本篇博客中&#xff0c;我们将介绍如何使用Python编写一个程序&#xff0c;结合wxPython和ffmpeg模块&#xff0c;来旋转WebM视频文件并将其保存为MP4格式。我们将使用wxPython提供的文件选择对话框来选择输入和输出文件&#xff0c;并使用ffmpeg库来进行视频旋转操作。…

206. 反转链表(力扣LeetCode)

文章目录 206. 反转链表题目描述双指针递归 206. 反转链表 题目描述 给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5] 输出&#xff1a;[5,4,3,2,1] 示例 2&#xff1a; 输入&am…

第八篇【传奇开心果系列】beeware的toga开发移动应用示例:实现消消乐安卓手机小游戏

传奇开心果博文系列 系列博文目录beeware的toga开发移动应用示例系列博文目录一、项目目标二、安装依赖三、初步实现四、扩展思路五、实现游戏逻辑示例代码六、实现界面设计示例代码七、实现增加关卡和难度示例代码八、实现存档和排行榜示例代码九、实现添加特殊方块和道具示例…

(五)流程控制switchcase

文章目录 switch case用法全配套break示例演示 不全配套break不怎么常规的写法常规的写法示例1演示1示例2演示2 经典成绩分类案例代码演示 switch case 相对于ifelse的嵌套&#xff0c;switch case 有点像并列的感觉 用法 switch (一定要放整数类型&#xff0c;int 型变量、c…

ubuntu 22 安装 node,npm,vue

1:安装 nodejs sudo apt update curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash - sudo apt update && sudo apt install -y nodejs node -v 2:安装npm sudo npm install n -g npm -v 3:安装vite npm install vite -g 4:运行vue 把项目拷贝到…

「 典型安全漏洞系列 」06.路径遍历(Path Traversal)详解

引言&#xff1a;什么是路径遍历&#xff1f;如何进行路径遍历攻击并规避常见防御&#xff1f;如何防止路径遍历漏洞。 1. 简介 路径遍历&#xff08;Path Traversal&#xff09;是一种安全漏洞&#xff0c;也被称为目录遍历或目录穿越、文件路径遍历。它发生在应用程序未正确…

Tomcat10安装报错Unknown module: java.rmi specified to --add-opens

错误原因需要根据自己的tomcat的版本查看 需要根据自己的tomcat找到对应安装的java版本(查看版本网址)https://tomcat.apache.org/whichversion.html 将电脑当中的环境变量JRE_HOME变量删除即可&#xff08;具体如下图&#xff09;

LeetCode 热题 100 | 矩阵

目录 1 73. 矩阵置零 2 54. 螺旋矩阵 3 48. 旋转图像 4 240. 搜索二维矩阵 II 菜鸟做题第二周&#xff0c;语言是 C 1 73. 矩阵置零 解题思路&#xff1a; 遍历矩阵&#xff0c;寻找等于 0 的元素&#xff0c;记录对应的行和列将被记录的行的元素全部置 0将被记录的…

redis-4 搭建redis集群

1.为什么需要redis集群&#xff1f; Redis 集群提供了高可用性、横向扩展和数据分片等功能&#xff0c;使得 Redis 能够应对大规模的数据存储和高并发访问的需求。以下是一些需要使用 Redis 集群的常见情况&#xff1a; 高可用性&#xff1a;通过在多个节点之间进行数据复制和…

网络编程1

什么是网络编程 ⽹络编程&#xff0c;指⽹络上的主机&#xff0c;通过不同的进程&#xff0c;以编程的⽅式实现⽹络通信&#xff08;或称为⽹络数据传输&#xff09;。 当然&#xff0c;我们只要满⾜进程不同就⾏&#xff1b;所以即便是同⼀个主机&#xff0c;只要是不同进程…

【服务器Midjourney】创建部署Midjourney网站

目录 🌺【前言】 🌺【准备】 🌺【宝塔搭建MJ】 🌼1. 给服务器添加端口 🌼2. 使用Xshell连接服务器 🌼3. 安装docker 🌼4. 安装Midjourney程序 🌼5. 绑定域名+申请SSL证书 🌼6. 更新网站

数据结构.双链表循环链表

一、1.双链表的初始化 void InitLNode(LinkList& L)//双链表的初始化 {L (LNode*)malloc(sizeof(LNode));L->prior NULL;L->next NULL;} 2.双链表的插入 void DInsert(LNode* p,LNode*s)//在p结点后面插入s结点 {s->next p->next;s->next->prior s;…

支持向量机(SVM)详解

支持向量机&#xff08;support vector machines&#xff0c;SVM&#xff09;是一种二分类模型。它的基本模型是定义在特征空间上的间隔最大的线性分类器&#xff0c;间隔最大使它有别于感知机。 1、线性可分支持向量机与硬间隔最大化 1.1、线性可分支持向量机 考虑一个二分…

数据结构篇-03:堆实现优先级队列

本文着重在于讲解用 “堆实现优先级队列” 以及优先级队列的应用&#xff0c;在本文所举的例子中&#xff0c;可能使用优先级队列来解并不是最优解法&#xff0c;但是正如我所说的&#xff1a;本文着重在于讲解“堆实现优先级队列” 堆实现优先级队列 堆的主要应用有两个&…