• nginx主备+keepalived实现nginx服务的高可用


    keepalived 实现高可用

    前言:
    互联网行业的三高

    1. 高可用
    2. 高性能
    3. 高并发
           所以基于第一点,高可用。nginx作为高性能的,反向代理服务器。如果只有一个节点就无法做到高可用,假如就一个节点。
           如果这个时候因为一些特殊情况,这个节点挂了。导致我们后端和前台提供的服务用户不可用。这个时候无论我们后端架构和前端架构做的在优秀也于事无补,因为用户根本访问不到。
           所以基本上部署两个节点,主节点和备用节点。这个时候问题就来了。就算部署了两个节点,前端访问的时候,总不可能让前端调用两个地址把!所以基于这一点,使用keepalived的 vrrp 协议进行设置 虚拟ip。然后前端只需要知道这个虚拟ip即可,具体使用的是哪个nginx,完全由keepalived决定。

    环境准备

    1. 两台2核心2G的虚拟机 ,系统 centos 8
      1. master 主节点虚拟机
      2. slave 备用节点虚拟机
    2. ip
      1. master 192.168.96.124
      2. slave 192.168.96.122
      3. vip 192.168.96.250 // 虚拟ip,用于访问nginx 使用
    3. 软件环境
      1. nginx
      2. keepalived

    安装nginx

    1. 修改yum 镜像源

      vim /etc/yum.repos.d/nginx.repo

      
      
      # nginx.repo(删除原理的镜像源,把下面的复制进去)
      
      [nginx]
      name=nginx
      baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
      gpgcheck=0
      enabled=1
      
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
    2. 更新镜像源

      yum update
      
      • 1

    安装nginx-master

    install

    yum install nginx -y
    
    • 1

    启动

    systemctl start nginx
    
    • 1

    image-20221001153613519

    安装nginx-Slave

    install

    yum install nginx -y
    
    • 1

    启动

    systemctl start nginx
    
    • 1

    image-20221001153629318

    默认配置文件位置:(主,备配置文件一致,都是在下面这个位置)

    1. 可执行文件:/usr/sbin/nginx
    2. 配置文件nginx.conf:/etc/nginx
    3. 用户自定义配置文件:/etc/nginx/conf.d
    4. 默认主页:/usr/share/nginx/html

    安装keepalived

    Master(主)

    install

    yum -y install keepalived
    
    • 1

    启动

    systemctl start keepalived
    
    • 1

    image-20221001153816101

    config(修改配置)

    1. keepalived.conf(默认抢占式)

      1 查询网卡名称
      ip addr
      2 vim /etc/keepalived/keepalived.conf
      
      3 添加nginx 状态检查脚本
       vrrp_script chk_http_ port {
          script "/usr/local/src/nginx_check.sh"   #检测脚本,这个脚本在下面第二步进行创建
          interval 1   # (检测脚本执行的间隔)1s
          weight -21  #权重,如果这个脚本检测为真,服务器权重+2
      }
      
      4 修改 varrp_instance_VI_1的内容,为下面内容
      vrrp_instance VI_1 {
          state MASTER # 主节点MASTER
          interface ens33 # ip addr 查询到的网卡信息
          virtual_router_id 51
          priority 100 # 权重信息默认
          advert_int 1
          authentication {
              auth_type PASS
              auth_pass 1111
          }
          virtual_ipaddress {
              192.168.96.250 # 设置虚拟ip
          }
          # 监听nginx 脚本
         track_script {
            chk_http_ port
          }
      }
      
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
      • 19
      • 20
      • 21
      • 22
      • 23
      • 24
      • 25
      • 26
      • 27
      • 28
      • 29
      • 30
      • 31
    2. 检查nginx状态配置

      1 cd /usr/local/src  //切换到src目录下,执行下面vim 创建脚本
        vim nginx_check.sh
      # 复制如下内容到 nginx_check.sh 里面
      A=`ps -C nginx --no-header |wc -l`
      
      if [ $A -eq 0 ];then
            # 当nginx 关闭,就立刻关闭 keepalived,用于转移虚拟ip到备用机上。
          if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
      
            systemctl stop keepalived
      
          fi
      
      fi
      
      2 更改 nginx_check.sh 执行权限 
       chmod +x nginx_check.sh
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17

      重启keepalived

      systemctl restart keepalived
      
      
      • 1
      • 2

    Slave(备)

    install

    yum -y install keepalived
    
    • 1

    启动

    systemctl start keepalived
    
    • 1

    image-20221001153816101

    config(修改配置)

    1. keepalived.conf(默认抢占式)

      
      1 询网卡名称
      ip addr
      2vim /etc/keepalived/keepalived.conf
      3 添加nginx 状态检查脚本
       vrrp_script chk_http_ port {
          script "/usr/local/src/nginx_check.sh"   #检测脚本,这个脚本和master 一样。参考下面步骤 5 把文件复制到当前机器
          interval 1   # (检测脚本执行的间隔)1s
          weight -21  #权重,如果这个脚本检测为真,服务器权重+2
      }
      
      4 修改 varrp_instance_VI_1的内容,为下面内容
      vrrp_instance VI_1 {
          state BACKUP # 备节点 BACKUP
          interface ens33 # ip addr 查询到的网卡信息
          virtual_router_id 51
          priority 90 # 降低权重
          advert_int 1
          authentication {
              auth_type PASS
              auth_pass 1111
          }
          virtual_ipaddress {
              192.168.96.250 # 设置虚拟ip
          }
          # 监听nginx 脚本
         track_script {
            chk_http_ port
          }
      }
      5 从新登录mast机器上,切到如下目录
      cd /usr/local/src/
      执行如下命令,进行把当前目录下的检查nginx 状态脚本复制到备用机器上
      scp ./nginx_check.sh root@192.168.96.124:/usr/local/src/
      6 改 nginx_check.sh 执行权限 
       chmod +x nginx_check.sh
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
      • 19
      • 20
      • 21
      • 22
      • 23
      • 24
      • 25
      • 26
      • 27
      • 28
      • 29
      • 30
      • 31
      • 32
      • 33
      • 34
      • 35
      • 36

      重启keepalived

      systemctl restart keepalived
      
      • 1

    效果

    正常访问虚拟ip

    image-20221001161222163

    Master 宕机访问

    关闭maser nginx

    systemctl stop nginx
    
    • 1

    image-20221001161331979

    自动切换到备用机上

    image-20221001161351197

    Master 恢复,访问再次被抢回(这就是抢占式)

    1. 启动nginx

      systemctl start nginx
      
      • 1

      image-20221001161713980

    2. 启动keepalived

      systemctl start keepalived
      
      • 1

    image-20221001161749988

    再次访问nginx-已经切回master节点

    image-20221001161834515

    感谢阅读~本次关于nginx+keepalived(抢占式)实现服务高可用,总结到此结束。

  • 相关阅读:
    Java SE 学习笔记(十四)—— IO流(3)
    计及源荷不确定性的综合能源生产单元运行调度与容量配置随机优化模型MATLAB
    MySQL子查询
    【面试专题】2022 年 30 大 JDBC 面试问题和答案
    FL Studio21.0中文版本FL水果娘发布更新
    2022/11/12 题目练习
    mac搭建redis集群
    Codeforces刷题记录(tag: combinatorics 873 ~ 1073)
    LeetCode2.两数相加
    如何保卫您的网站:解决DDoS攻击与CC攻击
  • 原文地址:https://blog.csdn.net/kangshihang1998/article/details/127135220