• Keepalived+Nginx高可用集群


    主从模式

    在这里插入图片描述

    集群特点及其功能

    ① 高可用性与可扩展性(为满足需求动态加入节点)
      高可用指的是24小时不间断使用,可扩展性指的是能满足需求动态加入节点。

    ② 负载均衡与错误恢复
      负载均衡主要用于分流。而错误恢复指的是当一个任务在一个节点没有完成时因为某种原因执行失败,此时另一个服务节点就会接着完成此任务,等出错的节点恢复好后重新回到这个集群。

    ③ 漂移IP地址
      漂移IP地址又叫做VIP,也就是虚拟IP,这个IP不是服务器固定的IP,可能一会在这个节点,也可能出现在另一个节点。例如正常情况下VIP位于主节点上,当主节点出现故障后,漂移IP地址自动切换到备用节点,因此为了保证服务的不间断,在集群系统中对外提供的服务IP一定要是这个VIP,否则如果是节点本身对外提供服务的话,当该节点失效后服务切换到另一个节点,但是服务IP仍是故障IP地址。

    安装nginx

    这里提供一个centos7安装nginx的传送门
    链接: centos7安装nginx

    安装keepalived

    yum -y install keepalived
    
    • 1

    快速入门

    安装成功后,两台机子都需要安装nginx和keepalived,进入目录 /etc/keepalived 下找到keepalived.conf文件
    在这里插入图片描述打开后进行配置

    ======================================================

    主机

    ! 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 192.168.200.1 # 也可以改成本机
       smtp_connect_timeout 30
       router_id LVS_DEVEL
       
    }
    
    vrrp_script chk_http_port {
     script "/opt/nginx_check.sh" # 自己设置脚本放置路径
     interval 2
     weight 2
    }
    
    vrrp_instance VI_1 {
        state MASTER # 主机
        interface ens33
        virtual_router_id 51 # 主、备机的 virtual_router_id 必须相同
        priority 100
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass 1111
        }
        virtual_ipaddress {
            192.168.200.179/24 dev ens33 label ens33:1 # 虚拟ip
    
        }
    }
    
    • 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

    备用机

    ! 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 192.168.200.1 # 也可以改成本机
       smtp_connect_timeout 30
       router_id LVS_DEVEL
       
    }
    
    vrrp_script chk_http_port {
     script "/opt/nginx_check.sh" # 自己设置脚本放置路径
     interval 2
     weight 2
    }
    
    vrrp_instance VI_1 {
        state BACKUP # 备用机
        interface ens33
        virtual_router_id 51 # 主、备机的 virtual_router_id 必须相同
        priority 90 # 一定要比主机的优先级低
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass 1111
        }
        virtual_ipaddress {
            192.168.200.179/24 dev ens33 label ens33:1 # 虚拟ip
    
        }
    }
    
    • 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

    脚本

    #!/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
     killall keepalived
     fi
    fi
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    ps -C nginx --no-header|wc -l解释:如果值为0,即代表服务未启动;如果值为非0,即代表服务已启动
    killall keepalived解释:这个是以服务名称杀死进程
    对于整个脚本的解释:
    判断nginx 服务是否启动
    如果未启动,执行启动命令
    再次判断,如果启动失败,关掉keepalived,进入从节点

    ======================================================
    均关闭防火墙和selinux(这里均为临时关闭)

     systemctl stop firewalld
    
    • 1
    setenforce 0
    
    • 1

    开启keepalived服务

    systemctl start keepalived.service
    
    • 1

    开启nginx(如果是按上方安装教程,进入到下图文件夹里)
    在这里插入图片描述

    ./nginx
    
    • 1

    或者执行命令,将nginx添加到全局变量

    ln -s /usr/local/nginx/sbin/nginx /usr/local/bin/
    
    • 1

    使用命令启动即可

    nginx
    
    • 1

    ======================================================
    使用

    ip addr
    
    • 1

    在这里插入图片描述这是主机上的,备用机如下
    在这里插入图片描述现在关闭主机的keepalived服务

    systemctl stop keepalived.service
    
    • 1

    主机
    在这里插入图片描述备用机
    在这里插入图片描述

  • 相关阅读:
    XView 架构升级之路
    关于序列化协议,你需要知道的一些内容(1)
    【AI大模型】李彦宏从“卷模型”到“卷应用”的深度解析:卷用户场景卷能给用户解决什么问题
    POSIX 标准头文件及unistd.h头文件说明
    地产高质量发展时代:房企为何需要“利他思维”?
    QT+Opencv+MVS+paddleOCR开发环境配置(完整版)
    4.7拆解复杂问题-实现计算器
    软件测试面试题:对于有系统大量并发访问,你会如何做测试,有什么建议?
    How to use UMDH to test memory leak
    Kubernetes(k8s)上搭建一主两从的mysql8集群
  • 原文地址:https://blog.csdn.net/kanbujianwolue/article/details/126013473