Nginx+Keepalived高可用部署

一、安装nginx

官方下载 https://nginx.org/download/nginx-1.20.2.tar.gz

1.关闭防火墙,将安装nginx所需软件包传到/opt目录下

systemctl stop firewalld systemctl disable firewalld

setenforce 0

nginx-1.20.2.tar.gz

2.安装依赖包

#nginx的配置及运行需要pcre、zlib等软件包的支持,因此需要安装这些软件的开发包,以便提供相应的库和头文件。

yum install -y gcc gcc-c++ make pcre pcre-devel zlib zlib-devel openssl openssl-devel

3.创建运行用户、组

(Nginx 服务程序默认以 nobody 身份运行,建议为其创建专门的用户账号,以便更准确地控制其访问权限)

useradd -M -s /sbin/nologin nginx

4.编译安装Nginx

cd /opt tar zxvf nginx-1.20.2.tar.gz -C /opt/

cd nginx-1.20.2/

./configure \

--prefix=/usr/local/nginx \ #指定nginx的安装路径

--user=nginx \ #指定用户名 --group=nginx \ #指定组名

--with-http_stub_status_module

--with-http_ssl_module #启用 http_stub_status_module 模块以支持状态统计 操作

cd nginx-1.20.2/

./configure \

--prefix=/usr/local/nginx \

--user=nginx \

--group=nginx \

--with-http_stub_status_module \

--with-http_ssl_module

make && make install

ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/ #让系统识别nginx的操作命令

5.检查、启动、重启、停止 nginx服务

nginx -t #检查配置文件是否配置正确

#启动

nginx

6.添加 Nginx 系统服务

vim /lib/systemd/system/nginx.service

[Unit]

Description=nginx

After=network.target

[Service]

Type=forking

PIDFile=/usr/local/nginx/logs/nginx.pid

ExecStart=/usr/local/nginx/sbin/nginx

ExecReload=/bin/kill -s HUP $MAINPID

ExecStop=/bin/kill -s QUIT $MAINPID

PrivateTmp=true

[Install]

二、安装 Keepalived

同样在两台服务器上执行:

bash

# 安装 Keepalived
yum install -y keepalived

# 启动 Keepalived 并设置开机自启
systemctl start keepalived
systemctl enable keepalived

三、配置 Keepalived

1. 主服务器配置(192.168.1.100)

编辑 /etc/keepalived/keepalived.conf 文件:

conf

! Configuration File for keepalived

global_defs {
   router_id LVS_MASTER  # 标识本节点的字符串,主备不同
}

# 检测 Nginx 服务是否存活的脚本
vrrp_script check_nginx {
    script "/etc/keepalived/check_nginx.sh"  # 脚本路径
    interval 2  # 检测间隔(秒)
    weight -20  # 检测失败时权重减少量
}

vrrp_instance VI_1 {
    state MASTER  # 主服务器为 MASTER,备服务器为 BACKUP
    interface eth0  # 绑定的网卡接口,根据实际情况修改
    virtual_router_id 51  # 虚拟路由 ID,主备必须相同
    priority 100  # 优先级,主服务器高于备服务器
    advert_int 1  # 心跳间隔(秒)

    # 认证信息,主备必须相同
    authentication {
        auth_type PASS
        auth_pass 1111
    }

    # 虚拟 IP 地址
    virtual_ipaddress {
        192.168.1.102
    }

    # 调用 Nginx 检测脚本
    track_script {
        check_nginx
    }
}
2. 备服务器配置(192.168.1.101)

编辑 /etc/keepalived/keepalived.conf 文件:

conf

! Configuration File for keepalived

global_defs {
   router_id LVS_BACKUP
}

vrrp_script check_nginx {
    script "/etc/keepalived/check_nginx.sh"
    interval 2
    weight -20
}

vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 51
    priority 90  # 优先级低于主服务器
    advert_int 1

    authentication {
        auth_type PASS
        auth_pass 1111
    }

    virtual_ipaddress {
        192.168.1.102
    }

    track_script {
        check_nginx
    }
}

四、创建 Nginx 检测脚本

在两台服务器上都创建 /etc/keepalived/check_nginx.sh 文件:

bash

#!/bin/bash
# 检查 Nginx 进程是否存在
if [ $(ps -C nginx --no-header | wc -l) -eq 0 ]; then
    # 如果 Nginx 未运行,则尝试启动
    systemctl start nginx
    # 等待 3 秒后再次检查
    sleep 3
    # 如果仍未启动,则停止 Keepalived,让备机接管
    if [ $(ps -C nginx --no-header | wc -l) -eq 0 ]; then
        systemctl stop keepalived
    fi
fi

添加执行权限:

chmod +x /etc/keepalived/check_nginx.sh

 五、重启服务

在两台服务器上重启 Keepalived 使配置生效:

bash

systemctl restart keepalived

六、验证高可用

  1. 查看虚拟 IP 绑定情况:

    bash

    ip addr show eth0  # 替换为实际网卡
    

    正常情况下,虚拟 IP 应绑定在主服务器上。

  2. 测试故障切换:

    • 停止主服务器的 Nginx 或 Keepalived
    • 在备服务器上检查虚拟 IP 是否自动绑定
    • 恢复主服务器服务,虚拟 IP 应自动切回

七、注意事项

  1. 确保两台服务器的时间同步
  2. 关闭或配置防火墙,允许 VRRP 协议(端口 112)
  3. 生产环境中建议对 Nginx 进行更完善的健康检查
  4. 可以通过 journalctl -u keepalived 查看 Keepalived 日志

通过以上配置,就实现了 Nginx 服务的高可用架构,当主服务器出现故障时,备服务器会自动接管虚拟 IP 提供服务,从而保证服务的连续性。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值