生产环境部署Nginx服务器双机热备部署-keepalived(多种模式教程)

news2024/11/18 4:35:50

前言:今天演示下生产环境keepalived的部署方式,安装模式有很多,比如说主备模型和双主模型,主备分:抢占模式 和 非抢占模式。这里我会一一展开说具体怎么配置一、双节点均部署Nginx:

第一步:上传安装包到/usr/local/

第二步:安装编译依赖(使用普通用户需要家sudo)

yum install gcc gcc-c++
yum install zlib zlib-devel
yum install pcre pcre-devel
yum install openssl libssl-dev

第三步:解压,编译安装:

解压命令: sudo tar -zxvf nginx-1.24.0.tar.gz 
进入nginx路径:cd nginx-1.24.0	
编译安装:
命令:
sudo ./configure --prefix=/etc/nginx --sbin-path=/usr/bin/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --with-http_ssl_module
# --with-http_ssl_module这个参数为了启用 SSL 支持。
命令:sudo make install

第四步:启动nginx命令:sudo nginx

第五步:停止nginx命令:sudo nginx -s stop

第六步:配置nginx开机启动

sudo vim /etc/rc.d/rc.local
添加执行语句/usr/bin/nginx
退出保存
开机启动文件授权
sudo chmod +x /etc/rc.d/rc.local

第六步:重载nginx

nginx -s reload

Nginx安全加固配置:在nginx.conf配置文件里加上TLSv1.2 TLSv1.3; 和隐藏版本号的部分。

# 在server { }块里配置启用TLSv1.2和TLSv1.3的参数 
    ssl_protocols TLSv1.2 TLSv1.3;  
# 在http { }块里配置隐藏Nginx服务器版本信息的参数
    server_tokens off; 

二、双节点部署keepalived主备模式

第一步:上传安装包到/mpjava/

第二步:安装gcc等编译需要的软件库。(要求网络能连接外网进行更新,如果已安装,可跳过此步骤)

命令:yum -y install libnl libnl-devel 
命令:yum -y install gcc gcc-c++
命令:yum -y install  openssl 
命令:yum -y install openssl-devel
命令:yum -y install libnl3-devel

第三步:解压,并编译安装

命令:tar -zxf keepalived-2.2.4.tar.gz
命令:cd keepalived-2.2.4
命令:./configure --prefix=/usr/local/keepalived
命令:make && make install

第四步:复制配置文件

命令:mkdir  -p  /etc/keepalived
命令:cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/ #主配置文件
命令:cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
命令:ln -s /usr/local/keepalived/sbin/keepalived /sbin/

第五步:设置开机启动命令:chkconfig keepalived on

第六步:启动keepalived

命令:systemctl start keepalived
命令:ps -ef | grep keepalived

问题:发现未能正常启动

查看日志命令:
systemctl status keepalived.service -l:查看 keepalived 服务的状态及相关日志信息
journalctl -u keepalived.service -f:实时查看 keepalived 服务的日志输出
tail -22f /var/log/messages | grep Keepalived:通过查看系统日志/var/log/messages中与 Keepalived 相关的内容来获取日志信息

原因:通过查询系统日志发现keepalived配置文件默认网卡名和当前服务器网卡名不一致。

解决:需要修改/etc/keepalived/keepalived.conf的网卡名,与服务器同步即可。重启keepalived:systemctl start keepalived

第七步:新建nginx检测脚本nginxcheck.sh,并存放在指定目录,本例使用:/mpjava/nginxcheck.sh

命令:vim /mpjava/nginxcheck.sh
添加以下内容:
#/bin/sh

nginxPidNum=`ps -C nginx --no-header |wc -l`
if [[ $nginxPidNum -eq 0 ]];
then
    killall keepalived
fi
注:需要设置nginxcheck.sh有执行权限,chmod 777 /mpjava/nginxcheck.sh

第八步:按下例分别修改主、备服务器/etc/keepalived/keepalived.conf

声明:这里的ip为虚假ip,只是举例说明

主节点:

! Configuration File for keepalived

global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 10.0.0.1                  #配置当前网关
   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 chk_nginx {
    script "/mpjava/nginxcheck.sh"       #脚本位置
    interval 2                           #检测时间间隔
    weight 2                             #权重2
}

vrrp_instance VI_1 {
    state BACKUP                   #主节点如果写BACKUP,和配置下面的nopreempt参数就为 非抢占模式;如果写MASTER,删除nopreempt参数,则为 抢占模式
    nopreempt                      #非抢占模式参数  
    interface enp4s3
    virtual_router_id 69           #不能使用同网段已使用的ip地址;同一个VRRP实例中每个节点的虚拟路由ID必须相同
    priority 100                   #不管是否开启抢占模式,主节点的优先级必须高于 从节点
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }

track_script {                           #以脚本为监控chk_http_port是前面填写的
        chk_nginx
    }

    virtual_ipaddress {
        10.0.0.10                        #vip
    }
}

从节点:

! Configuration File for keepalived

global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 10.0.0.1                   #配置当前网关
   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 chk_nginx {
    script "/mpjava/nginxcheck.sh"         #脚本位置
    interval 2                             #检测时间间隔
    weight 2                               #权重2
}

vrrp_instance VI_1 {
    state BACKUP                           #不管是抢占模式否,从节点设置为backup
    nopreempt                              #非抢占模式参数,如果不开启该模式,需要删除  
    interface eth0
    virtual_router_id 69                   #不能使用同网段已使用的ip地址;同一个VRRP实例中每个节点的虚拟路由ID必须相同
    priority 99
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }

track_script {                             #以脚本为监控chk_http_port是前面填写的
        chk_nginx
    }

    virtual_ipaddress {
        10.0.0.10                          #VIP
    }
}`

第九步:验证

由于涉及公司内网ip,验证结果不方便展示,我这里口述方法:

抢占模式:启动两个节点的nginx和keepalived,当主节点的keepalived关了后,VIP会漂移到从节点上,当主节点启动后,此时VIP会漂移回主节点;

非抢占模式:启动两个节点的nginx和keepalived,当主节点的keepalived关了后,VIP会漂移到从节点上,此时再将主节点启动后,VIP不会漂移回主节点;
(以上验证方法用命令ip a实时查看网卡的VIP地址的漂移节奏)

高可用集群中的不抢占功能。在一个HA集群中,如果主节点死机了,备用节点会进行接管,主节点再次正常启动后一般会自动接管服务。对于实时性和稳定性要求不高的业务系统来说,这种来回切换的操作还是可以接受的。而对于稳定性和实时性要求很高的业务系统来说,不建议来回切换,毕竟服务的切换存在一定的风险和不稳定性

三、Keepalived主主模式

第一步:按下例分别修改主、主服务器/etc/keepalived/keepalived.conf

声明:这里的ip为虚假ip,只是举例说明

主节点1:

! Configuration File for keepalived

global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 10.0.0.1                   #配置当前网关
   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 chk_nginx {
    script "/mpjava/nginxcheck.sh"        #脚本位置
    interval 2                            #检测时间间隔
    weight 2                              #权重2
}

vrrp_instance VI_1 {
    state MASTER                          #主节点为MASTER
    interface enp4s3
    virtual_router_id 69                  #不能使用同网段已使用的ip地址;同一个VRRP实例中每个节点的虚拟路由ID必须相同
    priority 100                          #MASTER节点必须高于BACKUP节点
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }

track_script {                           #以脚本为监控chk_http_port是前面填写的
        chk_nginx
    }

    virtual_ipaddress {
        10.0.0.8                         #vip1
    }
}

vrrp_instance VI_2 {
    state BACKUP                        #该节点设置为backup
    interface eth0
    virtual_router_id 70                # 同一个VRRP实例中每个节点的虚拟路由ID必须相同
    priority 90                         # MASTER节点必须高于BACKUP节点
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        10.0.0.9                        #vip2
    }
}

主节点2:

! Configuration File for keepalived

global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 10.0.0.1                  #配置当前网关
   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 chk_nginx {
    script "/mpjava/nginxcheck.sh"        #脚本位置
    interval 2                            #检测时间间隔
    weight 2                              #权重2
}

vrrp_instance VI_1 {
    state BACKUP                          #不管是抢占模式否,从节点设置为backup
    nopreempt                             #非抢占模式参数,如果不开启该模式,需要删除  
    interface eth0
    virtual_router_id 69                  #不能使用同网段已使用的ip地址;同一个VRRP实例中每个节点的虚拟路由ID必须相同
    priority 99                           #MASTER节点必须高于BACKUP节点
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }

track_script {                            #以脚本为监控chk_http_port是前面填写的
        chk_nginx
    }

    virtual_ipaddress {
        10.0.0.8                          #vip1
    }
}`

vrrp_instance VI_2 {
    state MASTER                         #该节点设置为MASTER
    interface eth0
    virtual_router_id 70                 #同一个VRRP实例中每个节点的虚拟路由ID必须相同
    priority 100                         #MASTER节点的优先级必须高于BACKUP节点
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        10.0.0.9                         #vip2


    }
}

第二步:验证

由于涉及公司内网ip,验证结果不方便展示,我这里口述方法:

启动两个主节点的nginx和keepalived,将nginx中配置的域名解析到这两个VIP地址上,浏览器访问正常。此时关闭其中一个主节点的keepalived,VIP会漂移到另外一台主节点服务器上。
(以上验证方法用命令ip a实时查看网卡的VIP地址的漂移节奏)

在keepalived的主备模式中,当主节点正常的时候,备节点永远处于闲置状态,不会接受web请求,这样就会浪费一半的资源。根据自身业务和资源等综合来选择模式。

文章转载自:Linux运维技术栈

原文链接:https://www.cnblogs.com/zhoutuo/p/18276183

体验地址:引迈 - JNPF快速开发平台_低代码开发平台_零代码开发平台_流程设计器_表单引擎_工作流引擎_软件架构

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

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

相关文章

烟台网站建设前需要了解哪些

在进行烟台网站建设之前,需要了解以下几个重要的方面: 1. 目标和定位:在建设网站之前,需要明确网站的目标和定位。是为了展示公司业务,还是为了销售产品,或者是为了提供信息和服务等。根据不同的目标和定位…

JAVA:常用的算法指南

请关注微信公众号:拾荒的小海螺 博客地址:http://lsk-ww.cn/ 1、简述 在软件开发过程中,算法扮演着关键的角色。它们用于解决各种问题,从数据处理到搜索、排序等。本文将介绍几种常见的算法及其 Java 实现,包括排序算…

防爆巡检终端在石化工厂安全保障中的应用

防爆巡检终端在石化工厂安全保障中的应用是广泛而关键的,其设计旨在确保在易燃易爆环境中进行安全、有效的巡检工作。以下是防爆巡检终端在石化工厂安全保障中的详细应用描述: 1. 环境监测与预警 防爆巡检终端配备了各种传感器,能够实时监测…

分享一个用于深入分析【大模型LLM】工作原理的工具

背景 LLM Transparency Tool 是一个用于深入分析和理解大型语言模型(LLM)工作原理的工具,旨在增加这些复杂系统的透明度。它提供了一个交互式界面,用户可以通过它观察、分析模型对特定输入(prompts)的反应…

【MySQL基础篇】函数及约束

1、函数 函数是指一段可以直接被另一段程序程序调用的程序或代码。 函数 - 字符串函数 MySQL中内置了很多字符串函数,常用的几个如下: 函数功能CONCAT(S1,S2,...,Sn)字符串拼接,将S1,S2,...,Sn拼接成一个字符串LOWER(str)将字符串str全部…

DDD学习笔记四

领域模型的构建 基础领域模型的基本组成有名称、属性、关联、职责、事件和异常 发掘领域概念3种策略: 1)学习已有系统,重用已有模型 2)使用分类标签。分类标签来源于领域,需要我们研究一些资料并做一些提炼。从采用5W…

解决 prettier/prettier 和 indent 冲突问题和一点简单思考

用过 prettier 的都知道,经常会遇到 prettier 与 eslint 的某些规则冲突的情况。在之前的一篇文章中,我简单地描述过怎么搭建起应用 eslint/prettier 的基本配置,也提到了怎么解决 prettier 与 eslint 的一些冲突问题。 其中有这么一段话&am…

C语言 | Leetcode C语言题解之第202题快乐数

题目: 题解: //计算的过程函数,我没重点讲,很简单看一下代码就好了 int getSum(int n) {int sum 0;while (n) {sum (n % 10) * (n % 10);n / 10;}return sum; }bool isHappy(int n){int sum getSum(n);int hash[820] {0};whi…

寒武纪实现高维向量的softmax进阶优化和库函数对比

关于寒武纪编程可以参考本人之前的文章添加链接描述,添加链接描述,添加链接描述 实验证明,axis=0和axis=-1的时候,手写softmax速度可以和库函数媲美,甚至于更甚一筹。 src/softmax.mlu #include <bang.h> #include

OPCUA相关概念和KepServer OPCUA连接PLC

文章背景 项目中需要使用OPC UA 来读取PLC的点位。本文简单介绍了OPC UA和使用KepServer软件连接PLC并读点。OPC相关概念 OPC之前&#xff0c;软件开发需要写大量驱动程序去连接设备&#xff0c;设备上的一个硬件改变&#xff0c;应用程序都有可能需要重写&#xff0c;不同设备…

Facebook助力中东地区博弈游戏广告营销新视界

Facebook助力中东地区博弈游戏广告营销新视界 中东地区&#xff0c;作为世界上充满活力和潜力的游戏市场之一&#xff0c;近年来&#xff0c;Slots游戏在该地区的热度持续攀升。众多游戏开发商和广告主纷纷寻求有效的推广方式&#xff0c;以吸引更多的潜在用户。在这个过程中&…

在自定义数据集上对 YOLOv10 模型进行微调以检测肾结石

对 YOLOv10 模型进行微调以增强肾结石检测,可将诊断时间从每份报告 15-25 分钟显著缩短至每秒处理约 150 份报告。这项研究面向医学研究人员、医疗保健专业人士和 AI 公司,通过以数据为中心的技术,无需改变模型架构,即可获得94.1 的 mAP50 。 NMS 免费培训:它真的有效吗?…

11083 旅游背包(优先做)

这个问题可以使用动态规划来解决。我们可以定义一个三维数组dp&#xff0c;其中dp[i][j][k]表示前i种物品&#xff0c;总体积不超过j&#xff0c;总重量不超过k的最大价值。 我们可以使用四重循环来填充这个数组。外层循环遍历所有的物品&#xff0c;第二层循环遍历所有可能的…

C++视觉开发 一.OpenCV环境配置

一.OpenCV安装环境配置 1.OpenCV安装 &#xff08;1&#xff09;下载 官方下载链接&#xff1a;http://opencv.org/releases 这边选择需要的版本&#xff0c;我是在windows下的4.9.0。&#xff08;科学上网下载很快&#xff0c;否则可能会有点慢&#xff09; (2)安装 双击下…

卢森堡-海外媒体发稿:新闻媒体宣发报道超给力

卢森堡高卢期刊gauljournal 卢森堡高卢期刊gauljournal自成立以来&#xff0c;一直致力于报道真实、客观的新闻&#xff0c;为读者提供最全面、准确的信息。多年来&#xff0c;该期刊在海内外媒体宣发方面取得了极大的成就&#xff0c;其报道在国际媒体上的曝光率非常高&#…

20240701每日后端------------java启动JVM参数配置说明Parameters -D, -X, -XX

主题 JVM有很多参数&#xff0c;当我们通过命令行启动Java程序时&#xff08;例如&#xff0c; java -jar app.jar&#xff09; 我们经常指定各种参数选项。很多人对为什么有时我们使用 -D &#xff0c;有时我们使用 -X &#xff0c;偶尔我们使用 -XX 感到困惑。 名词解释 …

短剧挂载推广教程,短剧项目怎么分销推广?如何入驻平台当推广达人?达人推广的方式是怎么样的

目录 一、短剧怎么做&#xff1f; 二、在哪找资源挂?怎么挂? 1、在哪找资源挂? 2、怎么挂? 三、有哪些短剧看剧平台或者分销平台? 1&#xff1a;短剧看剧小程序怎么入驻当达人? 2&#xff1a;短剧cps分销小程序怎么入驻当达人? 一、短剧怎么做&#xff1f; 想要当…

Linux常用工具使用方式

目录 常用工具&#xff1a; 安装包管理工具&#xff1a; 查找含有关键字的软件包 安装软件 安装文件传输工具 安装编辑器 C语言编译器 C编译器 安装调试器 安装项目版本管理工具 cmake 卸载软件 安装jsoncpp 安装boost库 安装mariadb 安装tree&#xff08;让目录…

多语言跨境商城系统怎么选择

随着全球化的推进和电子商务的蓬勃发展&#xff0c;跨境电商已经成为了一个不可忽视的商机。不同国家和地区的语言和文化差异给跨境电商带来了一定的挑战。为了顺利运营跨境电商平台&#xff0c;选择一款适合的多语言跨境商城系统至关重要。但在众多系统中选择合适的一款&#…

探讨DC/AC电源模块为绿色能源应用提供可靠的转换解决方案

BOSHIDA 探讨DC/AC电源模块为绿色能源应用提供可靠的转换解决方案 DC/AC电源模块是一种能够将直流电源转换为交流电源的装置。随着绿色能源的不断发展和应用&#xff0c;DC/AC电源模块在可再生能源、电动车辆、太阳能发电等领域中扮演着重要的角色。本文将着重探讨DC/AC电源模…