首页 > 系统相关 >生产环境部署Nginx服务器双机热备部署-keepalived(多种模式教程)

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

时间:2024-07-01 18:02:24浏览次数:21  
标签:loc 热备 部署 keepalived nginx vrrp 双机 节点 firewall

前言:今天演示下生产环境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 {
     [email protected]
     [email protected]
     [email protected]
   }
   notification_email_from [email protected]
   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 {
     [email protected]
     [email protected]
     [email protected]
   }
   notification_email_from [email protected]
   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 {
     [email protected]
     [email protected]
     [email protected]
   }
   notification_email_from [email protected]
   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 {
     [email protected]
     [email protected]
     [email protected]
   }
   notification_email_from [email protected]
   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快速开发平台_低代码开发平台_零代码开发平台_流程设计器_表单引擎_工作流引擎_软件架构

标签:loc,热备,部署,keepalived,nginx,vrrp,双机,节点,firewall
From: https://blog.csdn.net/dsgdauigfs/article/details/140101035

相关文章

  • hadoop集群部署【二】YARN & MapReduce 的部署
    提前注意:请注意路径是否和我的相同,放置的位置不同,请修改标红处 HDFS部署HDFS介绍及部署http://t.csdnimg.cn/Q3H3Y部署说明HadoopHDFS分布式文件系统,我们会启动:NameNode进程作为管理节点DataNode进程作为工作节点SecondaryNamenode作为辅助同理,HadoopYARN分布式资源......
  • 餐厅在线点餐小程序源码系统可外卖配送 带完整的安装代码包以及搭建部署教程
    系统概述在当今数字化时代,餐厅在线点餐小程序已成为餐饮行业的重要工具。它不仅为消费者提供了便捷的点餐体验,也为餐厅提高了运营效率和服务质量。小编给大家分享一款餐厅在线点餐小程序源码系统,该系统不仅支持在线点餐,还具备外卖配送功能,同时提供完整的安装代码包以及搭建部......
  • 不单独部署注册中心,又要具备注册中心的功能,咋不让我上天?
    开心一刻暗恋公司的一个女同事,聊了快一年了,一直没勇气表白上个月突然找我借5000块钱,我直接转给她了我:这钱干嘛用的?她:给男朋友买个手机我强颜欢笑说:你真贴心几天后我收到一个快递,打开一看是部手机!!!我压抑着内心的激动,放下手头的工作,立马微信上问她怎么回事她说:手机她男朋......
  • CentOS7.9部署Redis
    简介本章节主要讲的是在Linux系统CentOS7.9上去完成Redis软件的安装步骤1.下载Redis安装包2.解压Redis压缩包3.yum安装gcc依赖4.跳转到Redis解压目录下5.编译安装6.启动Redis实施1.下载Redis安装包wgethttp://download.redis.io/releases/redis-4.0.6.t......
  • nginx+keepealived 部署高可用
    nginx用docker部署1、安装docker2、拉取nginx镜像:dockerpullnginx3、启动nginx:dockerrun-d-p80:80--namenginxnginx:latest4、新建相关目录和文件夹(用来挂载容器内的文件):·mkdir-p/opt/nginx/{logs,conf,conf.d}·touch/opt/nginx/logs/{access.log,err......
  • 如何在Windows11下部署Linux子系统中安装GCC编译器
    GCC编译器安装:1:gcc出现命令找不到2.直接按照提示来安装。会发现链接找不到服务器原因是因为默认的服务器在国外,无法直接进行访问,需要切换成国内的服务器3.切换软件源——换成国内的服务器注意:软件源要与版本号一致!演示所用均为22.04版本号,可根据版本号找对应的软件......
  • (幼儿向)如何在本地部署大模型
    首先给有一台可以联网的电脑,配置高有配置高的玩法配置低有配置低的玩法,本帖就来阐述一下穷哥们的玩法打开浏览器搜索ollama(网址)ollama.com,下载他 (建议魔法上网,这样会更快些)下载完之后,根据电脑配置选择适合自己的大模型建议配置低的都选7b以下的模型。具体搜索下载大模型......
  • 基于Java+SSM+Vue的医院住院管理系统设计与实现(源码+lw+部署文档+讲解等)
    文章目录前言详细视频演示项目运行截图技术框架后端采用SpringBoot框架前端框架Vue可行性分析系统测试系统测试的目的系统功能测试数据库表设计代码参考数据库脚本为什么选择我?获取源码前言......
  • 自动化部署ansible
    ANSIBLE自动化部署安装ANSIBLE########yum源安装###############[[email protected]]#vimCentOS-Base.repo#加入epel源[epel]name=gnbaseurl=https://mirrors.aliyun.com/epel/$releasever/x86_64https://mirrors.cloud.tencent.com/epel/$releasever/x86_6......
  • 图解 Jenkins Pipeline 的前端自动化部署,用上后真香!
    图解JenkinsPipeline的前端自动化部署,用上后真香!原创 悟空聊架构 悟空聊架构 2024-06-2720:57 广东 听全文你好,我是悟空。本文目录如下:一、Jenkins前端部署思路1.1整体架构图1.2部署步骤二、Pipeline和自由风格对比三、Pipeline核心脚本......