中间件快速部署(Nginx,Keepalived)

Nginx 部署

安装必要的依赖包

bash 复制代码
# 安装编译工具和开发库
yum -y install gcc gcc-c++ automake autoconf libtool make cronolog git

下载并安装 PCRE(正则表达式库)

bash 复制代码
# 进入源码目录
cd /usr/local/src

# 下载 PCRE 库(用于 Nginx 的 URL 重写功能)
wget https://mirrors.aliyun.com/exim/pcre/pcre-8.36.tar.gz

# 解压并进入目录
tar -zxf pcre-8.36.tar.gz && cd pcre-8.36

# 编译安装三部曲:配置、编译、安装
./configure && make && make install

下载并安装 Zlib(压缩库)

bash 复制代码
# 返回源码目录
cd /usr/local/src

# 下载 Zlib 库(用于 Nginx 的 Gzip 压缩功能)
wget http://zlib.net/fossils/zlib-1.2.8.tar.gz

# 解压并进入目录
tar -zxf zlib-1.2.8.tar.gz && cd zlib-1.2.8

# 编译安装
./configure && make && make install

下载并安装 OpenSSL(加密库)

bash 复制代码
# 返回源码目录
cd /usr/local/src

# 下载 OpenSSL 库(用于 HTTPS 支持)
wget https://github.com/openssl/openssl/releases/download/OpenSSL_1_0_2n/openssl-1.0.2n.tar.gz

# 解压并进入目录
tar -zxf openssl-1.0.2n.tar.gz && cd openssl-1.0.2n/

# 编译安装
./config && make && make install

下载并编译 Nginx

bash 复制代码
# 返回源码目录
cd /usr/local/src

# 下载 Nginx 源码包
wget http://nginx.org/download/nginx-1.8.1.tar.gz

# 解压源码包
tar -zxf nginx-1.8.1.tar.gz

# 下载 Nginx 上游健康检查模块(用于监控后端服务器状态)
git clone https://github.com/yaoweibin/nginx_upstream_check_module.git

# 进入 Nginx 源码目录
cd nginx-1.8.1

# 应用健康检查模块的补丁
patch -p1 < ../nginx_upstream_check_module/check_1.7.2+.patch

# 配置编译选项,指定安装目录,启用 SSL 模块(HTTPS 支持),启用 Gzip 静态压缩,启用 Gzip 静态压缩,指定 PCRE 库路径,指定 Zlib 库路径,指定 OpenSSL 库路径,启用状态监控模块,启用真实 IP 模块,添加健康检查模块
./configure --prefix=/usr/local/nginx \
  --with-http_ssl_module \
  --with-http_gzip_static_module \
  --with-pcre=/usr/local/src/pcre-8.36 \
  --with-zlib=/usr/local/src/zlib-1.2.8 \
  --with-openssl=/usr/local/src/openssl-1.0.2n \
  --with-http_stub_status_module \
  --with-http_realip_module \
  --add-module=/usr/local/src/nginx_upstream_check_module

# 编译并安装
make && make install

创建系统服务

bash 复制代码
# 创建软链接,方便直接使用 nginx 命令
ln -sf /usr/local/nginx/sbin/nginx /usr/sbin/nginx

# 创建 Nginx 系统服务脚本
cat > /etc/init.d/nginx << 'EOF'
#!/bin/bash
#
# Nginx 服务管理脚本
# 运行级别 启动顺序 关闭顺序
# chkconfig: 35 85 15

set -e
# 设置系统路径,确保能找到所有必要的命令
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DESC="nginx daemon"
NAME=nginx
DAEMON=/usr/local/nginx/sbin/$NAME
SCRIPTNAME=/etc/init.d/$NAME

# 检查 Nginx 可执行文件是否存在且有执行权限
test -x $DAEMON || exit 0

# 定义启动函数
d_start(){
    $DAEMON || echo -n " Nginx 已经在运行了"
}

# 定义停止函数(优雅停止)
d_stop() {
    $DAEMON -s quit || echo -n " Nginx 没有在运行"
}

# 定义重载配置函数
d_reload() {
    $DAEMON -s reload || echo -n " 配置重载失败"
}

# 根据传入的参数执行相应操作
case "$1" in
start)
    echo -n "正在启动 $DESC: $NAME"
    d_start
    echo "."
    ;;
stop)
    echo -n "正在停止 $DESC: $NAME"
    d_stop
    echo "."
    ;;
reload)
    echo -n "正在重新加载 $DESC 配置..."
    d_reload
    echo "配置重载完成。"
    ;;
restart)
    echo -n "正在重启 $DESC: $NAME"
    d_stop
    sleep 2
    d_start
    echo "."
    ;;
*)
    # 如果参数不对,显示使用方法
    echo "使用方法: $SCRIPTNAME {start|stop|restart|reload}" >&2
    exit 3
    ;;
esac
exit 0
EOF

启动 Nginx 并设置开机自启

bash 复制代码
# 进入服务脚本目录
cd /etc/init.d/

# 给服务脚本添加执行权限
chmod u+x nginx

# 启动 Nginx 服务
/etc/init.d/nginx start

# 检查 Nginx 是否正常启动(查看 80 端口是否在监听)
netstat -ano|grep 80

# 将 Nginx 添加到系统服务管理
chkconfig --add nginx

# 设置 Nginx 在运行级别 2、3、4、5 开机自启
chkconfig --level 2345 nginx on

配置日志轮转(防止日志文件过大)

bash 复制代码
# 创建 Nginx 日志轮转配置
cat > /etc/logrotate.d/nginx << 'EOF'
# Nginx 日志轮转配置
/usr/local/nginx/logs/*.log {
    create 0644 root root
    daily
    rotate 2
    missingok
    copytruncate
    ifempty
    compress
    noolddir
    dateext
    dateformat .%Y%m%d
}
EOF

验证安装

bash 复制代码
# 检查 Nginx 进程
ps aux | grep nginx

# 检查 Nginx 版本
nginx -v

# 访问测试
curl http://localhost

常用管理命令

bash 复制代码
# 启动 Nginx
service nginx start

# 停止 Nginx
service nginx stop

# 重启 Nginx
service nginx restart

# 重新加载配置(不中断服务)
service nginx reload

# 检查 Nginx 状态
service nginx status

# 测试配置文件语法
nginx -t

Keepalived 部署指南

安装必要的依赖

bash 复制代码
# 安装编译工具和开发库
yum install -y curl gcc openssl-devel libnl3-devel net-snmp-devel

# 安装网络工具(用于后续的监控和调试)
yum install -y nmap

下载并编译安装 Keepalived

bash 复制代码
# 进入源码目录
cd /usr/local/src

# 下载 Keepalived 源码包
wget http://www.keepalived.org/software/keepalived-1.2.19.tar.gz

# 解压源码包
tar -zxvf keepalived-1.2.19.tar.gz

# 进入解压后的目录
cd keepalived-1.2.19

# 配置编译选项(指定安装目录)
./configure --prefix=/usr/local/keepalived

# 编译并安装
make && make install

配置系统服务

bash 复制代码
# 复制服务管理脚本到系统目录
cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/

# 复制服务配置文件
cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/

# 复制可执行文件到系统路径
cp /usr/local/keepalived/sbin/keepalived /bin/keepalived

# 创建配置目录
mkdir /etc/keepalived

# 复制默认配置文件
cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/

# 给服务脚本添加执行权限
chmod a+x /etc/init.d/keepalived

# 设置开机自启(在运行级别 2、3、4、5 启动)
chkconfig --level 2345 keepalived on

创建 Nginx 健康检查脚本

bash 复制代码
# 创建健康检查脚本目录
mkdir -p /usr/local/keepalived

# 创建健康检查脚本
cat > /usr/local/keepalived/check_nginx.sh << 'EOF'
#!/bin/bash
# Nginx 健康检查脚本

# 统计 Nginx 进程数量
counter=$(ps -C nginx --no-heading|wc -l)

# 如果没有 Nginx 进程在运行
if [ "${counter}" = "0" ]; then
    # 尝试启动 Nginx
    /etc/init.d/nginx start
    # 等待 2 秒让 Nginx 启动
    sleep 2
    # 再次检查 Nginx 进程
    counter=$(ps -C nginx --no-heading|wc -l)
    # 如果还是没启动成功
    if [ "${counter}" = "0" ]; then
        # 停止 Keepalived,触发故障转移
        systemctl stop keepalived
    fi
fi
EOF

# 给脚本添加执行权限
chmod +x /usr/local/keepalived/check_nginx.sh

配置 Keepalived - 主节点配置

bash 复制代码
# 创建主节点配置文件
cat > /etc/keepalived/keepalived.conf << 'EOF'
!Configuration File for keepalived

# 全局配置段
global_defs {
    router_id Nginx_Master_Node
}

# 定义健康检查脚本
vrrp_script chk_nginx {
    script "/usr/local/keepalived/check_nginx.sh"
    interval 2
    weight -5
    fall 3
    rise 2
}

# VRRP 实例配置(虚拟路由器)
vrrp_instance VI_1 {
    state MASTER
    interface ens160
    virtual_router_id 80
    priority 100
    nopreempt
    advert_int 1
    
    # 认证配置(同一组节点必须相同)
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    
    # 虚拟 IP 地址配置(浮动 IP)
    virtual_ipaddress {
        192.168.1.80/24
    }
    
    # 跟踪脚本配置(监控 Nginx 状态)
    track_script {
        chk_nginx
    }
}
EOF

配置 Keepalived - 备节点配置

bash 复制代码
# 创建备节点配置文件
cat > /etc/keepalived/keepalived.conf << 'EOF'
!Configuration File for keepalived

# 全局配置段
global_defs {
    router_id Nginx_Backup_Node
}

# 定义健康检查脚本(与主节点相同)
vrrp_script chk_nginx {
    script "/usr/local/keepalived/check_nginx.sh"
    interval 2
    weight -5
    fall 3
    rise 2
}

# VRRP 实例配置
vrrp_instance VI_1 {
    state BACKUP
    interface ens160
    virtual_router_id 80
    priority 99
    nopreempt
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.1.80/24
    }
    track_script {
        chk_nginx
    }
}
EOF

启动和验证 Keepalived

bash 复制代码
# 重新加载系统服务配置
systemctl daemon-reload

# 重新加载 Keepalived 配置
systemctl reload keepalived

# 重启 Keepalived 服务
systemctl restart keepalived

# 检查 Keepalived 运行状态
systemctl status keepalived

# 查看日志,确认没有错误
journalctl -u keepalived -f

验证虚拟 IP 配置

bash 复制代码
# 查看网卡信息,确认虚拟 IP 是否绑定
ip addr show ens160

# 或者使用老命令
ifconfig ens160

# 检查 Keepalived 进程
ps aux | grep keepalived

# 测试虚拟 IP 是否可达
ping 192.168.1.80

故障转移测试

bash 复制代码
# 停止 Keepalived 来模拟节点故障
systemctl stop keepalived

# 在备节点上检查是否获得了虚拟 IP
ip addr show ens160

常用管理命令

bash 复制代码
# 启动 Keepalived
systemctl start keepalived

# 停止 Keepalived
systemctl stop keepalived

# 重启 Keepalived
systemctl restart keepalived

# 重新加载配置
systemctl reload keepalived

# 查看状态
systemctl status keepalived

# 查看日志
journalctl -u keepalived

# 实时查看日志
journalctl -u keepalived -f

重要提醒

  1. 网卡名称 :根据实际情况修改 interface ens160 为实际网卡名称
  2. 路由 ID :确保同一组 Keepalived 节点的 virtual_router_id 相同
  3. 认证密码:同一组节点的认证密码必须相同
相关推荐
hanyi_qwe2 小时前
文本三剑客--awk
linux·运维·服务器
Caven772 小时前
【Linux 技巧】如何在登录时自动激活 Conda Base 环境
linux·运维·conda
凌寒113 小时前
Linux(Debian)安装、卸载 MySQL
linux·运维·mysql·debian
云飞云共享云桌面3 小时前
如何降低非标自动化工厂的研发软件采购成本
运维·服务器·网络·数据库·性能优化·自动化
七七墨染3 小时前
DotMemory系列:5. 如何实现自动化抓取和应用自托管
运维·c#·自动化
泰克教育官方账号3 小时前
泰涨知识 | 什么是自动化巡检?
运维·服务器·数据库
怀旧,4 小时前
【Linux系统编程】7. 进程的概念(上)
linux·运维·服务器
人工智能训练5 小时前
Windows中如何将Docker安装在E盘并将Docker的镜像和容器存储在E盘的安装目录下
linux·运维·前端·人工智能·windows·docker·容器
知难行难5 小时前
macOS配置Apocrita及ssh访问及获取GPU权限
运维·macos·ssh