当前位置: 首页 > article >正文

nginx高可用集群搭建

本文介绍nginx高可用集群的搭建。利用keepalived实时检查nginx进程是否存活、keepalived的虚拟ip技术,达到故障转移的目的。终端用户通过访问虚拟ip,感知不到实际发生的故障。架构图如下:
在这里插入图片描述

0、环境

  • Ubuntu:22.04.2 lts
  • nginx: 1.18.0
  • keepalived:2.2.4
  • 虚拟机:vmware

1、规划

分别新建两个虚拟机,虚拟机的ip和端口规划如下:

序号ipport虚拟ip默认
A192.169.99.10080192.168.99.180
B1921.68.99.12080192.168.99.180

注意:虚拟ip就是我们后期统一的访问地址。

2、结点A安装nginx

sudo apt install nginx

等待安装完成,再启动:

sudo systemctl start nginx

虚拟机验证是否安装成功:

curl http://localhost/

宿主机浏览器验证,http://192.168.99.100/,效果如下:
在这里插入图片描述

宿主机如果访问成功,说明虚拟机1上的nginx搭建成功。

2.1、修改nginx首页

为了便于测试,我们修改一下首页。打开nginx.conf(位于/etc/nginx),找到server 80的配置段,如果找不到80的配置段,仔细看看include配置。通过一系列的跟踪,我这里nginx首页的位置在: /var/www/html/index.nginx-debian.html
打开这个文件,最后加一句,能让我们看出区别就行。
在这里插入图片描述

3、结点B安装nginx

结点B安装nginx和A相同,此处不在赘述。记得安装完成后,通过宿主机浏览器访问一下对应的地址,有成功提示,则说明安装成功。

4、结点A安装keepalived

sudo apt install keepalived

等待安装完成。

4.1、配置

cd /etc/keepalived
# 看一下有没有keepalived.conf文件,没有就新建。

sudo vim keepalived.conf 

keepalived.conf文件配置如下:

# Configuration File for keepalived
global_defs {
   router_id keepalived_01  # 名字自己起
}

vrrp_script chk_nginx {
   # 具体的脚本,后面有具体内容,功能就是检查nginx进程是否存在,不存在就启动
   script "/etc/keepalived/nginx_check.sh"
   interval 2 # 2s执行一次 
   weight -20 # 失败一次 则优先级 -20
}

vrrp_instance VI_1 {
    state MASTER     # 主机
    interface ens33  # 网卡名字,不知道就ifconfig看一下
    virtual_router_id 41  # 保证唯一,并且与备机一致
    priority 100
    advert_int 1
    authentication {
        auth_type PASS   # 验证类型, 与备机一致
        auth_pass 1234   # 密码, 与备机一致
    }
    virtual_ipaddress {
        192.168.99.180   # 虚拟地址,主、备机入口,必须一致
    }
    # 指定脚本
	 track_script {
      chk_nginx
    }

nginx_check.sh的脚本代码:

#!/bin/bash
status=$(ps -C nginx --no-heading|wc -l)
if [ "${status}" = "0" ]; then
    # 尝试启动一次
    systemctl start nginx
    # 再次检查ngixn 进程
    status2=$(ps -C nginx --no-heading|wc -l)
    if [ "${status2}" = "0"  ]; then
        # 关闭 keepalived 
        systemctl stop keepalived
    fi
fi

4.2、启动keepalived

sudo systemctl start keepalived

5、结点B安装keepalived

结点B和A安装和配置完全一样,此处不再赘述。

6、测试

访问虚拟ip,http://localhost:80/, 效果如下:
在这里插入图片描述
关闭A机的nginx,刷新浏览器,发现效果如上图。原因是,我们的脚本里检查nginx进程是否存在,不存在就重启。我们直接关闭A主机,再次刷新浏览器,效果如下:
在这里插入图片描述
达到了我们故障转移的目的。
OK,就这样了,有问题给我留言,我们共同进步。


http://www.kler.cn/a/466053.html

相关文章:

  • 云备份项目--服务端编写
  • k620老显卡,装cuda.等。
  • Mysql数据实时同步到Es上
  • 如何进一步提高Oracle lgwr的写性能?
  • 【linux基础I/O(1)】文件描述符的本质重定向的本质
  • 声音是如何产生的
  • primevue的<Menu>组件
  • MYSQL------sql基础
  • 单元测试、系统测试和集成测试知识
  • 家政预约小程序07参与活动
  • 堆排序基础与实践:如何在Java中实现堆排序
  • VMware去虚拟化
  • halcon中图像处理及图像滤波
  • ElementUI中的el-select显示的不是对应label值
  • 【react】Redux的设计思想与工作原理
  • LeetCode1507 转变日期格式
  • c++不够用知识补充-using namespace
  • 经纬度噪点与误差处理的优化
  • Beamer-LaTeX学习(教程批注版)【1】
  • 【计算机网络】课程 作业一 搭建连续覆盖的办公网络
  • Conda 安装 Jupyter Notebook
  • 深入解析Reactive Programming框架在微服务中的最新应用
  • 鸿蒙NEXT开发中使用星闪服务
  • 线性代数考研笔记
  • 汽车燃油软件标定测试
  • 机器学习算法深度解析:以支持向量机(SVM)为例及实战应用