首页 > 系统相关 >Nginx + Keepalived 高可用之主从配置

Nginx + Keepalived 高可用之主从配置

时间:2023-05-30 14:08:32浏览次数:55  
标签:service nginx Keepalived keepalived Nginx 服务器 安装 主从


Nginx + Keepalived 高可用之主从配置_linux

在架构设计中,可以利用 nginx 的反向代理和负载均衡实现后端应用的高可用性,同时还需要考虑Nginx的单点故障,真正做到架构高可用性。

主要考虑以下两点:

  • Nginx 服务因为意外现象挂掉
  • 服务器宕机导致 Nginx 不可用

目前主流的解决方案就是 keepalived + nginx 实现 nginx 的故障转移,同时做好监控报警。在自动故障转移的同时能通知到相关的应用负责人检查相关应用,排查隐患,彻底解决问题。

模拟环境:虚拟机 192.168.56.9  与 192.168.56.10

192.168.56.9:安装 nginx 主 + keepalived 主 + Tomcat 主

192.168.56.10:安装 nginx 备 + keepalived 备 + Tomcat 备

虚拟IP(VIP):192.168.56.120

Nginx 服务和 Tomcat 应用是已经配置好的环境,这里就不介绍相关的配置。具体可以查考以下两篇博文:

0x01:Keepalived 介绍及部署

Keepalived 的功能很强大,主要检测服务器的状态,如果有一台 web 服务器宕机,或者工作出现故障,Keepalived 将检测到,并将有故障的服务器从系统中剔除,同时使用其他服务器代替该服务器的工作,当服务器工作正常后Keepalived 自动将服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的服务器。

CentOS 系统安装 Keepalived 主要有两种安装方式:

  • yum 命令安装
  • 源码安装

yum 命令安装

yum install -y  keepalived

该方式安装的 keepalived 版本为 1.3.5

Nginx + Keepalived 高可用之主从配置_linux_02

使用 yum 安装方式安装不了最新版本的 Keepalived,可以使用以下命令卸载 Keepalived 

yum remove keepalived

源码安装

1. 下载源码

官网地址

https://www.keepalived.org/

Nginx + Keepalived 高可用之主从配置_java_03

使用如下命令下载

wget https://www.keepalived.org/software/keepalived-2.2.2.tar.gz

2. 解压 Keepalived

tar -zxvf keepalived-2.2.2.tar.gz -C /usr/local

3. 进入 Keepalived 解压目录

cd keepalived-2.2.2/

4. 编译

./configure

如在编译过程中出现错误,可以先执行以下命令安装 Keepalived  所需的依赖

yum install -y gcc openssl-devel popt-devel ipvsadm

编译成功的结果如下

Nginx + Keepalived 高可用之主从配置_linux_04

5. 安装

make && make install

6. 将 Keepalived 安装成 Linux 系统服务

mkdir /etc/keepalived

cp /root/keepalived-2.2.2/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/

cp /root/keepalived-2.2.2/keepalived/etc/init.d/keepalived /etc/init.d/

cp /root/keepalived-2.2.2/keepalived/etc/sysconfig/keepalived /etc/sysconfig/

ln -s /usr/local/sbin/keepalived /usr/bin/

ln -s /usr/local/sbin/keepalived /sbin/

Keepalived 常用命令

# 设置开机自动启动
systemctl enable keepalived.service
# 取消开机自动启动
systemctl disable keepalived.service 
# 启动
systemctl start keepalived.service
# 停止
systemctl stop keepalived.service
# 重启
service keepalived restart
# 状态
service keepalived status

0x02:主 Keepalive 配置

主 Keepalived 配置文件

! Configuration File for keepalived

global_defs {

  notification_email {
     [email protected]
     [email protected]
     [email protected]
   }
   notification_email_from [email protected]
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id nginx01  # router_id  唯一标识符
   vrrp_skip_check_adv_addr
   vrrp_stricti
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

vrrp_script check_nginx {  
    script "/etc/keepalived/nginx_check.sh"   #nginx服务检查脚本
    interval 1
    weight -2
}

vrrp_instance VI_1 {
    state MASTER
    interface enp0s3 #指定VIP需要绑定的物理网卡,这里默认是eht0但是我的是enp0s3,如果报错了就改成自己物理网卡名字 
    virtual_router_id 52  #默认为51  配置完发现主备切换有问题 更改为52 发现好了  原因未知
    priority 150     #主备的优先级priority 
    advert_int 1     #检查时间1秒
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    track_script  {
    check_nginx
    }

    virtual_ipaddress {
        192.168.56.120/24   #vip地址 
    }
}

nginx_check.sh 脚本

#!/bin/bash

A=`ps -C nginx --no-header | wc -l`
if [ $A -eq 0 ];then
    /usr/local/nginx/sbin/nginx
    sleep 2
    if [ `ps -C nginx --no-header | wc -l` -eq 0 ];then
        pkill keepalived
    fi
fi

添加权限

chmod 755 nginx_check.sh

启动 Keepalived 

systemctl start keepalived.service

检查是否启动成功

Nginx + Keepalived 高可用之主从配置_centos_05

查看 IP 地址变[ 启动前 ]

Nginx + Keepalived 高可用之主从配置_java_06

查看 IP 地址变[ 启动后 ]

Nginx + Keepalived 高可用之主从配置_java_07

0x03:备 Keepalived 配置

同样按照步骤 0x01 安装 keepalived,然后按照如下步骤配置。

备 Keepalived 配置文件

! Configuration File for keepalived

global_defs {
   router_id NodeB
}

vrrp_script chk_nginx {
    script "/etc/keepalived/nginx_check.sh"
    interval 2
    weight 20
}

vrrp_instance VI_1 {
    state BACKUP
    interface enp0s4
    virtual_router_id 51
    priority 90
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1314
    }
    track_script {
        chk_nginx
    }
    virtual_ipaddress {
        192.168.56.120/24
    }
}

nginx_check.sh 脚本

#!/bin/bash

A=`ps -C nginx --no-header | wc -l`
if [ $A -eq 0 ];then
    /usr/local/nginx/sbin/nginx
    sleep 2
    if [ `ps -C nginx --no-header | wc -l` -eq 0 ];then
        pkill keepalived
    fi
fi

添加权限

chmod 755 nginx_check.sh

nginx_check.sh 脚本说明:

脚本逻辑为检测进程如果没有 nginx 就尝试启动一次,然后 sleep 两秒,再检测,如果还没有上进程就结束 keepalived 进程。这样 VIP 就会移动到备份节点。如果 yum 安装的 nginx,可以直接使用 nginx 命令可以启动 nginx,如果是源码安装,或者需要配置下环境变量或者更改下启动命令和绝对路径,并测试是否能正常启动 nginx。

启动 Keepalived 

systemctl start keepalived.service

检查是否启动成功

Nginx + Keepalived 高可用之主从配置_docker_08

查看 IP 地址变[ 启动前 ]

Nginx + Keepalived 高可用之主从配置_nginx_09

查看 IP 地址变[ 启动后 ]

Nginx + Keepalived 高可用之主从配置_centos_10

另外,如果 keepalived 启动不成功,可以在keepalived日志文件 /var/log/messages 查看是否存在配置文件的错误。

0x04:验证

防火墙开启vrrp

keepalived 是基于 vrrp 做到虚拟 ip 漂移的,这里不开启的话,主备均会认为对方挂掉了,会造成主备都能获取到虚拟ip ( vip )

firewall-cmd --add-rich-rule='rule protocol value="vrrp" accept' --permanent
firewall-cmd --reload

首先在主备服务器分别执行 service keepalived start 开启 keepalived

  • 通过 ip addr 命令分别查看主备两台机器,只有主服务器可以看到 vip
  • 在主服务器执行 service keepalived stop 停止 keepalived
  • 通过 ip addr 命令查看备服务的 ip, 会发现可以看到 vip
  • 在主服务器执行 service keepalived start ,再次启动 keepalived
  • 通过 ip addr 命令分别查看主备两台机器,只有主服务器可以看到 vip

标签:service,nginx,Keepalived,keepalived,Nginx,服务器,安装,主从
From: https://blog.51cto.com/u_13538361/6378038

相关文章

  • [Docker] Docker安装Nginx
    0序言略1安装步骤Step1下载镜像搜素、下载镜像https://hub.docker.com/_/nginx?tab=tags这里选择官方镜像1.22.0版本dockersearchnginxdockerpullnginx:1.22.0查看下载的镜像dockerimagesStep2在宿主机创建挂载目录用于存放默认页面、日志、配置......
  • NGINX 加载动态模块
    NGINX1.9.11开始增加加载动态模块支持,从此不再需要替换nginx文件即可增加第三方扩展。目前官方只有几个模块支持动态加载,第三方模块需要升级支持才可编译成模块。#./configure--help|grepdynamic--with-http_xslt_module=dynamicenabledynamicngx_http_xslt_modul......
  • tomcat+https /mysql+ssl /nginx+https
    本文简要介绍CA和证书的基础知识,并演示openssl-1.0.2d的安装,CA证书生成、用户证书申请、使用CA签发用户证书等内容。实验环境操作系统:Windowsopenssl版本:openssl-1.0.2d(官网获取)1基础知识1.1PKI为解决Internet的安全问题,世界各国对其进行了多年的研究,初步形成了一套完整的......
  • 安装 Nginx 修改默认端口
    用远程工具连接我们上次购买的机器,这里我要介绍一个知识点,博主使用的工具是MobaXterm,这个工具有一个多操作的功能,在下图的位置可以开启多操作,然后连接你的服务器机子即可:首先我们将机子里面的依赖源都更新一下,在去安装Nginx,在控制台输入如下命令进行更新:apt-getupdate安......
  • mysql主从切换—一主两从架构
    文档课题:mysql主从切换.数据库:mysql8.0.27系统:rhel7.3安装包:mysql-8.0.27-linux-glibc2.12-x86_64.tar.xz系统架构:一主两从环境介绍:1、应用场景生产环境中,当主库A发生故障时,需要将从库B切换成主库,如下模拟主库Master宕机,slave01升级为Master,slave02保持不变,并实现slave01和......
  • Nginx/PHP文件上传限制说明
    0、背景说明通过PHP程序上述文件时,是否有限制取决多个因素,注意这里表述的是“是否有限制”,这里的限制不光是常认为的大小的限制,还有上传时间的限制。另外除了PHP服务本身之外,一般也和PHP上层的代理集群有关系,常见的代理集群是Nginx/Openrestry1、关于代理集群限制上传代理集......
  • Django与Postgres、Gunicorn和Nginx 容器化
    本文详细介绍了如何配置Django以在Docker上运行Postgres。对于生产环境,我们将添加Nginx和Gunicorn。我们还将了解如何通过Nginx提供Django静态和媒体文件。建立项目创建一个新的项目目录,然后开始Django项目:$mkdirdjango-on-docker&&cddjango-on-docker$mkdir......
  • [nginx]lua控制响应头
    前言适用场景:添加CDN缓存时间、操作set-cookie、标记业务数据类型等。获取响应头指令:ngx.resp.get_headers语法:headers=ngx.resp.get_headers(max_headers?,raw?)环境:set_by_lua*、rewrite_by_lua*、access_by_lua*、content_by_lua*、header_filter_by_lua*、body_filter......
  • MySQL主从复制验证性配置操作
    前置条件:VMwareWorkstationPro、CentOS7两台同网段虚机dw2(ip:192.168.203.202),dw3(ip:192.168.203.203)1.数据库安装和初始化yuminstall-ymariadbmariadb-servermariadb-develvim/etc/my.cnf#打开mysql-bin功能[mysqld]server-id=2log-bin=mysql-bin#启动marid......
  • Nginx 如何预防网络爬虫?
    网络爬虫是一种自动获取网页信息并进行处理的程序。爬虫通过访问指定的URL地址,对返回的HTML或其他类型响应数据进行解析、提取所需的数据或信息,并存储到本地或其他指定位置。通常可以用于搜索引擎的抓取、数据挖掘、信息聚合等领域。为了预防网络爬虫,Nginx可以采取以下措施......