Nginx+Keepalived 实现 Nginx 高可用离线安装教程

下文假定 192.168.1.100、192.168.1.101 为两台 keepalived+Nginx 服务器,192.168.1.102 为虚拟 IP(即 VIP)。

Nginx+Keepalived 实现 Nginx 高可用离线安装教程

在架构设计中,可以利用 Nginx 反向代理和负载均衡实现后端应用的高可用性,同时我们还需要考虑 Nginx 的单点故障。因此可改成多 Nginx 服务,每台 Nginx 服务器上用 keepalived 监测 Nginx 是否正常,不正常会重新启动 Nginx,启动不成功会自己杀掉自己由另一台 keepalived 服务器接管,真正做到架构高可用性。

其实并非两台机器 100、101 都绑定了 VIP,两台 keepalived 配置有主备优先级配置,优先级高的会拿到 VIP,例如 100 拿到 VIP 后,那访问 102 就是实际访问的是 100 上的 Nginx,当把 100 上 Keepalived 进程关闭,101 会得到 VIP,这是访问 VIP 就是访问 101 上的 Nginx 了。

安装 keepalived 依赖的包

若在步骤二编译安装 keepalived 时候提示缺 libnl/libnl3 dev,需上传依赖至文件夹 /opt/rpm:libnl-1.1.4-3.el7.x86_64.rpm、libnl-devel-1.1.4-3.el7.x86_64.rpm

x86_64 下载:https://mirrors.aliyun.com/centos/7/os/x86_64/Packages/

cd /opt/rpm
rpm -ivh *.rpm --nodeps --force

执行上述命令进行安装依赖。

对于安装过程中出现的 undefined reference to OPENSSL_init_ssl 报错需升级 openssl 依赖

上传新版本依赖 openssl-devel-1.0.2k-19.el7.x86_64.rpm 至服务器,并执行安装:

rpm -Uvh openssl-devel-1.0.2k-19.el7.x86_64.rpm #安装新版本依赖
rpm -qa|grep openssl #查看依赖,确认已安装新版依赖

亦可使用 rpm - e 卸载旧依赖再用 rpm -ivh 安装新版依赖。

编译安装 keepalived

将 keepalived 的安装包 上传到 /usr/local/software 目录下

cd /usr/local/software
tar -zxvf keepalived-2.2.0.tar.gz
cd keepalived-2.2.0
./configure --prefix=/usr/local/keepalived
make && make install

将 keepalived 安装成 Linux 系统服务

安装完成之后, 需要做一些工作复制默认配置文件到 默认路径

mkdir /etc/keepalived
cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
cd /usr/local/software/keepalived-2.2.0
cp ./keepalived/etc/init.d/keepalived /etc/init.d/
chmod 755 /etc/init.d/keepalived

编写 nginx 检测脚本

新建脚本文件

vi /etc/keepalived/nginx_check.sh

内容如下:

#!/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

赋予执行权限

chmod +x /etc/keepalived/nginx_check.sh

修改 keepalived 的 Master 配置文件

vi /etc/keepalived/keepalived.conf

内容如下:

# 全局配置,配置收件人  
global_defs {
   notification_email {           ## 通知机制,收件人  
     10000@qq.com  
   }  
   notification_email_from keepalived@domain.com #### 发件人  
   smtp_server 192.168.1.100                     ## 发件服务器  
   smtp_connect_timeout 30                       ## 服务器连接超时时间  
   router_id LVS_DEVEL                           ## 路由器标志  
}  
# 集群资源监控,组合 track_script 进行  
vrrp_script check_haproxy {
    script "/etc/keepalived/nginx_check.sh"  #检测 nginx 状态的脚本路径
    interval 2  #检测时间间隔
    weight -20  #条件成立 权重减 20
}  
vrrp_instance HAPROXY_HA {
    # 设置当前主机为主节点,如果是备用节点,则设置为 BACKUP 
    state MASTER  
    # 指定 HA 监测网络接口,可以用 ifconfig 查看来决定设置哪一个  
    interface eth0  
    # 虚拟路由标识,同一个 VRRP 实例要使用同一个标识,主备机  
    virtual_router_id 80  
    # 因为当前环境中 VRRP 组播有问题,改为使用单播发送 VRRP 报文  如果 VRRP 组播没问题,以下这块的内容可以注释掉。
    # 这个地方需要关注,之前未做此设置,结果主备节点互相不能发现,因此主备节点都升级成了 MASTER,并且绑定了 VIP  
    # 主节点时,内容为:  
    #unicast_src_ip 192.168.1.100 
    # unicast_peer {
    # 192.168.1.101 
    #}  
    # 设置优先级,确保主节点的优先级高过备用节点
    priority 100  
    # 用于设定主备节点间同步检查时间间隔  
    advert_int 2  
    # 设置高可用集群中不抢占功能,在主机 down 后,从机接管,当主机重新恢复后,设置此功能,备机将继续提供服务,从而避免因切换导致的隐患  
    #nopreempt  
    # 设置主备节点间的通信验证类型及密码,同一个 VRRP 实例中需一致  
    authentication {
        auth_type PASS  
        auth_pass 1234  
    }  
    # 集群资源监控,组合 vrrp_script 进行  
    track_script {check_haproxy}  
    # 设置虚拟 IP 地址,当 keepalived 状态切换为 MASTER 时,此 IP 会自动添加到系统中  
    # 当状态切换到 BACKUP 时,此 IP 会自动从系统中删除  
    # 可以通过命令 ip add 查看切换后的状态  
    virtual_ipaddress {192.168.1.102  #虚拟 ip 配置完之后就用它访问}  
}

修改 keepalived 的 BACKUP 配置文件

# 全局配置,配置收件人  
global_defs {
   notification_email {             ## 通知机制,收件人  
     10000@qq.com  
   }  
   notification_email_from keepalived@domain.com #### 发件人  
   smtp_server 192.168.1.100                     ## 发件服务器  
   smtp_connect_timeout 30                       ## 服务器连接超时时间  
   router_id LVS_DEVEL                           ## 路由器标志  
}  
# 集群资源监控,组合 track_script 进行  
vrrp_script check_haproxy {
    script "/etc/keepalived/nginx_check.sh"  #检测 nginx 状态的脚本路径
    interval 2  #检测时间间隔
    weight -20  #条件成立 权重减 20
}
vrrp_instance HAPROXY_HA {
    # 设置当前主机为主节点,如果是备用节点,则设置为 BACKUP 
    state BACKUP  
    # 指定 HA 监测网络接口,可以用 ifconfig 查看来决定设置哪一个  
    interface eth0 
    # 虚拟路由标识,同一个 VRRP 实例要使用同一个标识,主备机  
    virtual_router_id 80  
    # 因为当前环境中 VRRP 组播有问题,改为使用单播发送 VRRP 报文  如果 VRRP 组播没问题,以下这块的内容可以注释掉。
    # 这个地方需要关注,之前未做此设置,结果主备节点互相不能发现,因此主备节点都升级成了 MASTER,并且绑定了 VIP  
    # 主节点时,内容为:  
    #unicast_src_ip 192.168.1.101  
    # unicast_peer {
    # 192.168.1.100 
    #}  
    # 设置优先级,确保主节点的优先级高过备用节点
    priority 90  
    # 用于设定主备节点间同步检查时间间隔  
    advert_int 2  
    # 设置高可用集群中不抢占功能,在主机 down 后,从机接管,当主机重新恢复后,设置此功能,备机将继续提供服务,从而避免因切换导致的隐患  
    nopreempt
    # 设置主备节点间的通信验证类型及密码,同一个 VRRP 实例中需一致  
    authentication {
        auth_type PASS  
        auth_pass 1234  
    }  
    # 集群资源监控,组合 vrrp_script 进行  
    track_script {check_haproxy}  
    # 设置虚拟 IP 地址,当 keepalived 状态切换为 MASTER 时,此 IP 会自动添加到系统中  
    # 当状态切换到 BACKUP 时,此 IP 会自动从系统中删除  
    # 可以通过命令 ip add 查看切换后的状态  
    virtual_ipaddress {192.168.1.102  #虚拟 ip 配置完之后就用它访问}  
}

测试高可用

第一步:启动 nginx 和 keepalived 服务

启动 nginx:

# 启动
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
/usr/local/nginx/sbin/nginx
#停止
/usr/local/nginx/sbin/nginx -s stop
killall nginx
#重载
/usr/local/nginx/sbin/nginx -s reload

启动 keepalived:

# 启动
systemctl start keepalived
#停止
systemctl stop keepalived
killall keepalived
#重启
systemctl restart keepalived

启动之后, 使用ip addr(centos6 之前版本使用 ifconfig) 其中一台服务器会出现虚拟 ip 绑定到网卡

第二步:通过虚拟 ip 访问服务

通过虚拟 ip 访问服务, 会跳转到 nginx 的服务上。

第三步:杀掉一台服务器上的 keepalived 再次访问服务

注意:杀掉 nginx 是不行的, 因为上面的脚本 是检测到 nginx 宕机 会重启 nginx 的,例如这里杀死 192.168.1.101 上的 keepalived 进程。

第四步:再次访问服务

会发现虚拟 ip 从 192.168.1.101 上取消了, 重新绑定到 192.168.1.100 上了。

查看日志

tail -f /var/log/messages

查询安装位置

find / -name svnserve
whereis svnserve
目录
  • 安装 keepalived 依赖的包
  • 编译安装 keepalived
  • 将 keepalived 安装成 Linux 系统服务
  • 编写 nginx 检测脚本
  • 修改 keepalived 的 Master 配置文件
  • 修改 keepalived 的 BACKUP 配置文件
  • 测试高可用
    • 第一步:启动 nginx 和 keepalived 服务
    • 第二步:通过虚拟 ip 访问服务
    • 第三步:杀掉一台服务器上的 keepalived 再次访问服务
    • 第四步:再次访问服务
    • 查看日志
  • 目录
  • 安装 keepalived 依赖的包
  • 编译安装 keepalived
  • 将 keepalived 安装成 Linux 系统服务
  • 编写 nginx 检测脚本
  • 修改 keepalived 的 Master 配置文件
  • 修改 keepalived 的 BACKUP 配置文件
  • 测试高可用
    • 第一步:启动 nginx 和 keepalived 服务
    • 第二步:通过虚拟 ip 访问服务
    • 第三步:杀掉一台服务器上的 keepalived 再次访问服务
    • 第四步:再次访问服务
    • 查看日志
  • 手机扫描二维码访问

    本文标题:《Nginx+Keepalived 实现 Nginx 高可用离线安装教程》作者:极四维博客
    原文链接:https://cway.top/post/939.html
    特别注明外均为原创,转载请注明。

    分享到微信

    扫描二维码

    可在微信查看或分享至朋友圈。

    相关文章

    发表评论:

    ◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

    «    2024年10月    »
    123456
    78910111213
    14151617181920
    21222324252627
    28293031

    搜索

    控制面板

    您好,欢迎到访网站!
      查看权限

    最新留言

    文章归档

    • 订阅本站的 RSS 2.0 新闻聚合