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

keepalive和nginx高可用集群

keepalived 和 nginx 高可用集群搭建

主备模式

在这里插入图片描述

zyj86主机和zyj87主机安装nginx和keepalived

yum install nginx keepalived -y
systemctl enable --now nginx.service keepalived.service
主调度器配置

编辑zyj86主机(主)配置文件

vi /etc/keepalived/keepalived.conf
global_defs {
    notification_email {
        acassen@firewall.loc
        failover@firewall.loc
        sysadmin@firewall.loc
    }
    notification_email_from Alexandre.Cassen@firewall.loc
    smtp_server 192.168.3.86
    smtp_connect_timeout 30
    router_id zyj86 # 访问到主机,本机的hostname,需要修改
}
 
vrrp_script chk_nginx {
    script "/etc/keepalived/nginx_check.sh" # 检测脚本位置
    interval 2 #(检测脚本执行的间隔)
    weight 2 # 权重
}
 
vrrp_instance VI_1 {
    state MASTER # 备份服务器上将 MASTER 改为 BACKUP,需要修改
    interface ens160 #网卡名字,使用ifconfig查看,需要修改
    virtual_router_id 51 # 主、备机的 virtual_router_id 必须相同
    priority 100 # 主、备机取不同的优先级,主机值较大,备份机值较小,一般主100从90
    advert_int 1 # 每隔1秒发送心跳
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.3.188 #VRRP虚拟地址,也可以绑定多个虚拟ip
    }
    track_script {
        chk_nginx
    }

}

重启keepalived

systemctl restart keepalived.service 
从调度器配置

编辑zyj87主机(从)配置文件

vi /etc/keepalived/keepalived.conf
global_defs {
    notification_email {
        acassen@firewall.loc
        failover@firewall.loc
        sysadmin@firewall.loc
    }
    notification_email_from Alexandre.Cassen@firewall.loc
    smtp_server 192.168.3.87
    smtp_connect_timeout 30
    router_id zyj87 # 访问到主机,本机的hostname,需要修改
}
 
vrrp_script chk_nginx {
    script "/etc/keepalived/nginx_check.sh" # 检测脚本位置
    interval 2 #(检测脚本执行的间隔)
    weight 2 # 权重
}
 
vrrp_instance VI_1 {
    state BACKUP # 备份服务器上将 MASTER 改为 BACKUP,需要修改
    interface ens160 #网卡名字,使用ifconfig查看,需要修改
    virtual_router_id 51 # 主、备机的 virtual_router_id 必须相同
    priority 99 # 主、备机取不同的优先级,主机值较大,备份机值较小,一般主100从90
    advert_int 1 # 每隔1秒发送心跳
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.3.188 #VRRP虚拟地址,也可以绑定多个虚拟ip
    }
    track_script {
        chk_nginx
    }

}

重启keepalived

systemctl restart keepalived.service 

zyj86 zyj87主机编写Nginx状态检测脚本

vi /etc/keepalived/nginx_check.sh
#!/bin/bash
A=`ps -C nginx --no-header |wc -l`
if [ $A -eq 0 ];then
    # 这里需要替换成自己的nginx安装路径
    # 尝试重新启动nginx
    systemctl restart nginx
    # 睡眠2秒
    sleep 2
    if [ $A -eq 0 ];then
        #启动失败,将keepalived服务杀死。
        killall keepalived
    fi
fi

给脚本添加执行权限

chmod +x /etc/keepalived/nginx_check.sh

修改zyj86和zyj87主机的nginx配置文件

vi /etc/nginx/nginx.conf
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;

# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;

events {
    worker_connections 1024;
}

http {
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile            on;
    tcp_nopush          on;
    tcp_nodelay         on;
    keepalive_timeout   65;
    types_hash_max_size 2048;

    include             /etc/nginx/mime.types;
    default_type        application/octet-stream;

    # Load modular configuration files from the /etc/nginx/conf.d directory.
    # See http://nginx.org/en/docs/ngx_core_module.html#include
    # for more information.
    include /etc/nginx/conf.d/*.conf;

    #访问主机列表
    upstream myserver {
        server 192.168.3.88  weight=1;
        server 192.168.3.89  weight=1;
    }

    server {
        listen       80 default_server;
        listen       [::]:80 default_server;
        server_name  _;

        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;

        location / {
            proxy_pass http://myserver;
        }

    }

}

重启nginx

systemctl restart nginx

后台服务器配置

yum install httpd -y

zyj88主机

echo 88 > /var/www/html/index.html

zyj89主机

echo 89 > /var/www/html/index.html

启动服务

systemctl enable --now httpd

访问测试:

在这里插入图片描述

当其中一台调度器宕机后依旧可以访问

互为主备模式

在这里插入图片描述

zyj86主机和zyj87主机安装nginx和keepalived

yum install nginx keepalived -y
systemctl enable --now nginx.service keepalived.service
第一台调度器配置

编辑zyj86主机配置文件

vi /etc/keepalived/keepalived.conf
global_defs {
    notification_email {
        acassen@firewall.loc
        failover@firewall.loc
        sysadmin@firewall.loc
    }
    notification_email_from Alexandre.Cassen@firewall.loc
    smtp_server 192.168.3.86
    smtp_connect_timeout 30
    router_id zyj86 # 访问到主机,本机的hostname,需要修改
}

vrrp_script chk_nginx {
    script "/etc/keepalived/nginx_check.sh" # 检测脚本位置
    interval 2 #(检测脚本执行的间隔)
    weight 2 # 权重
}

vrrp_instance VI_1 {
    state MASTER # 备份服务器上将 MASTER 改为 BACKUP,需要修改
    interface ens160 #网卡名字,使用ifconfig查看,需要修改
    virtual_router_id 51 # 主、备机的 virtual_router_id 必须相同
    priority 100 # 主、备机取不同的优先级,主机值较大,备份机值较小,一般主100从90
    advert_int 1 # 每隔1秒发送心跳
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.3.188 # VRRP虚拟地址,也可以绑定多个虚拟ip
    }
    track_script {
        chk_nginx
    }
}

vrrp_instance VI_2 {
    state BACKUP # 备份服务器上将 MASTER 改为 BACKUP,需要修改
    interface ens160 #网卡名字,使用ifconfig查看,需要修改
    virtual_router_id 52 # 主、备机的 virtual_router_id 必须相同
    priority 79 # 主、备机取不同的优先级,主机值较大,备份机值较小,一般主100从90
    advert_int 1 # 每隔1秒发送心跳
    authentication {
        auth_type PASS
        auth_pass 2222
    }
    virtual_ipaddress {
        192.168.3.199 #VRRP虚拟地址,也可以绑定多个虚拟ip
    }
    track_script {
        chk_nginx
    }
}

重启keepalived

systemctl restart keepalived.service 
第二台调度器配置

编辑zyj87主机配置文件

global_defs {
    notification_email {
        acassen@firewall.loc
        failover@firewall.loc
        sysadmin@firewall.loc
    }
    notification_email_from Alexandre.Cassen@firewall.loc
    smtp_server 192.168.3.86
    smtp_connect_timeout 30
    router_id zyj86 # 访问到主机,本机的hostname,需要修改
}

vrrp_script chk_nginx {
    script "/etc/keepalived/nginx_check.sh" # 检测脚本位置
    interval 2 #(检测脚本执行的间隔)
    weight 2 # 权重
}

vrrp_instance VI_1 {
    state BACKUP # 备份服务器上将 MASTER 改为 BACKUP,需要修改
    interface ens160 #网卡名字,使用ifconfig查看,需要修改
    virtual_router_id 51 # 主、备机的 virtual_router_id 必须相同
    priority 99 # 主、备机取不同的优先级,主机值较大,备份机值较小,一般主100从90
    advert_int 1 # 每隔1秒发送心跳
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.3.188 # VRRP虚拟地址,也可以绑定多个虚拟ip
    }
    track_script {
        chk_nginx
    }
}

vrrp_instance VI_2 {
    state MASTER # 备份服务器上将 MASTER 改为 BACKUP,需要修改
    interface ens160 #网卡名字,使用ifconfig查看,需要修改
    virtual_router_id 52 # 主、备机的 virtual_router_id 必须相同
    priority 80 # 主、备机取不同的优先级,主机值较大,备份机值较小,一般主100从90
    advert_int 1 # 每隔1秒发送心跳
    authentication {
        auth_type PASS
        auth_pass 2222
    }
    virtual_ipaddress {
        192.168.3.199 #VRRP虚拟地址,也可以绑定多个虚拟ip
    }
    track_script {
        chk_nginx
    }
}

重启keepalived

systemctl restart keepalived.service 

zyj86 zyj87主机编写Nginx状态检测脚本

vi /etc/keepalived/nginx_check.sh
#!/bin/bash
A=`ps -C nginx --no-header |wc -l`
if [ $A -eq 0 ];then
    # 这里需要替换成自己的nginx安装路径
    # 尝试重新启动nginx
    systemctl restart nginx
    # 睡眠2秒
    sleep 2
    if [ $A -eq 0 ];then
        #启动失败,将keepalived服务杀死。
        killall keepalived
    fi
fi

给脚本添加执行权限

chmod +x /etc/keepalived/nginx_check.sh

修改zyj86和zyj87主机的nginx配置文件

vi /etc/nginx/nginx.conf
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;

# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;

events {
    worker_connections 1024;
}

http {
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile            on;
    tcp_nopush          on;
    tcp_nodelay         on;
    keepalive_timeout   65;
    types_hash_max_size 2048;

    include             /etc/nginx/mime.types;
    default_type        application/octet-stream;

    # Load modular configuration files from the /etc/nginx/conf.d directory.
    # See http://nginx.org/en/docs/ngx_core_module.html#include
    # for more information.
    include /etc/nginx/conf.d/*.conf;

    #访问主机列表
    upstream myserver {
        server 192.168.3.88  weight=1;
        server 192.168.3.89  weight=1;
    }

    server {
        listen       80 default_server;
        listen       [::]:80 default_server;
        server_name  _;

        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;

        location / {
            proxy_pass http://myserver;
        }

    }

}

重启nginx

systemctl restart nginx

后台服务器配置

yum install httpd -y

zyj88主机

echo 88 > /var/www/html/index.html

zyj89主机

echo 89 > /var/www/html/index.html

启动服务

systemctl enable --now httpd

访问测试:
在这里插入图片描述
当其中一台调度器宕机后依旧可以访问


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

相关文章:

  • Linux基本
  • Linux中的信号有哪些?
  • SQL注入基础入门完整教学
  • sqlalchemy简单使用
  • 【MATLAB源码-第213期】基于matlab的16QAM调制解调系统软硬判决对比仿真,输出误码率曲线对比图。
  • AIPaperGPT写论文靠谱吗?
  • 高精度E4990A参数资料keysight是德e4990a阻抗分析仪
  • 【深度学习 计算机视觉】计算机视觉工程师所需的和有帮助的基本技能
  • 5. MyBatis 如何实现数据库类型和 Java 类型的转换的?
  • 深入解密 Elasticsearch 查询优化:巧用 Profile 工具/API 提升性能
  • PX4软/硬件(SITL/HITL)在环仿真
  • mysql_redo_log_buffer
  • 读取、写入、生成txt文本文档详解——C#学习笔记
  • Lua5.3 参考手册
  • mozjpeg
  • 【C语言】字符串函数详细讲解
  • vmware虚拟机开机进入 initramfs状态解决方法
  • 通用软件架构设计参考
  • SprinBoot+Vue旅游网站的设计与实现
  • python-新冠病毒