keepalived + nginx 实现网站高可用性(HA)

keepalive

  • 一、keepalive简介
  • 二、实现步骤
    • [1. 环境准备](#1. 环境准备)
    • [2. 安装 Keepalived](#2. 安装 Keepalived)
    • [3. 配置 Keepalived 双机主备集群架构](#3. 配置 Keepalived 双机主备集群架构)
    • [4. 配置 Nginx](#4. 配置 Nginx)
    • [5. 启动Keepalived](#5. 启动Keepalived)
    • [6. 测试高可用性](#6. 测试高可用性)
    • [7. 配置keepalived 双主热备集群架构](#7. 配置keepalived 双主热备集群架构)
  • 三、虚拟ip

一、keepalive简介

  • 目前互联网主流的实现WEB网站及数据库服务高可用软件包括:keepalivedheartbeat等。
    Heartbeat是比较早期的实现高可用软件,而keepalived是目前轻量级的管理方便、易用的高可用软件解决方案,得到互联网公司IT人的青睐。

  • Keepalived是一个类似于工作在layer 3, 4 & 7交换机制的软件,Keepalived软件有两种功能,分别是健康检查、VRRP冗余协议,keepalived是模块化设计,不同模块负责不同的功能。

  • Keepalived的作用是检测服务器的状态,如果有一台web服务器、Mysql服务器宕机,或工作出现故障,Keepalived将检测到后,会将有故障的web服务器或者Mysql服务器从系统中剔除,当服务器工作正常后Keepalived自动将web、Mysql服务器加入到服务器群中。


keepalived + nginx 实现双机主备高可用:

在使用 Nginx 实现双机主备高可用(HA)架构时,结合 Keepalive,可以有效地提高系统的可靠性和可用性。以下是实现这一架构的基本步骤和要点:

架构概述

  1. 主备节点:有两台 Nginx 服务器,一台作为主节点,另一台作为备节点。当主节点出现故障时,流量会自动切换到备节点。

  2. Keepalived:通过 Keepalived 机制维持主备节点之间的心跳检测,确保在主节点故障时能够及时切换。

二、实现步骤

1. 环境准备

确保两台 Nginx 服务器已经安装并配置好,并且网络可以互通。

2. 安装 Keepalived

在两台服务器上安装 Keepalived,Keepalived 是一种用于实现高可用性的工具,能够通过 VRRP 协议管理主备节点的 IP 地址。

1、下载链接: https://www.keepalived.org/download.html

2、上传后,进行解压

bash 复制代码
tar -zxvf keepalived-2.0.20.tar.gz

3、先进入Keepalived目录,然后输入配置命令进行配置(--prefix:指明Keepalived的安装位置,--sysconf:指明Keepalived配置文件存放位置,必须放在/etc下面,为了后续Keepalived启动关闭不报错)

bash 复制代码
cd keepalived-2.0.20
bash 复制代码
./configure --prefix=/usr/local/keepalived --sysconf=/etc

如果出现了下面的错误,运行

bash 复制代码
yum -y install libnl libnl-devel
yum -y install openssl-devel

4、编译和安装

bash 复制代码
make && make install

3. 配置 Keepalived 双机主备集群架构

在主节点和备节点上配置 Keepalived。

1、建立check_nginx脚本

如上配置还需要建立check_nginx脚本,用于检查本地Nginx是否存活,如果不存活,则kill keepalived实现切换。其中check_nginx.sh脚本内容如下

shell 复制代码
#!/bin/bash
killall -0 /usr/local/nginx/sbin/nginx
if [[ $? -ne 0 ]]; then
    service keepalived stop
    exit 1
else
    exit 0
fi

2、主节点配置(/etc/keepalived/keepalived.conf):

shell 复制代码
global_defs {
   #路由id:当前安装keepalived节点主机的标识符,全局唯一
   router_id keep_129
}

vrrp_script check_nginx_alive {
   script "/etc/keepalived/check_nginx.sh"
   #每隔2秒运行上一行的脚本
   interval 2
   #权重
   weight 2
}

vrrp_instance VI_1 {
    # 表示的状态,当前的129服务器为nginx的主节点,MASTER/BACKUP
    state MASTER
    # 当前实例绑定的网卡
    interface ens33
    # 保证主备节点一致
    virtual_router_id 51
    # 优先级/权重,谁的优先级高,在MASTER挂掉以后,就能成为MASTER
    priority 100
    # 主备之间同步检查的时间间隔,默认1s
    advert_int 1
    # 认证授权的密码,防止非法节点的进入
    authentication {
        auth_type PASS
        auth_pass 123456
    }
    track_script {
      # 追踪 nginx脚本
      check_nginx_alive
    }
    virtual_ipaddress {
        192.168.121.120
    }
}

3、备节点配置(/etc/keepalived/keepalived.conf):

shell 复制代码
global_defs {
   #路由id:当前安装keepalived节点主机的标识符,全局唯一
   router_id keep_128
}

vrrp_instance VI_1 {
    # 表示的状态,当前的128服务器为nginx的主节点,MASTER/BACKUP
    state BACKUP
    # 当前实例绑定的网卡
    interface ens33
    # 保证主备节点一致
    virtual_router_id 51
    # 优先级/权重,谁的优先级高,在MASTER挂掉以后,就能成为MASTER
    priority 80
    # 主备之间同步检查的时间间隔,默认1s
    advert_int 1
    # 认证授权的密码,防止非法节点的进入
    authentication {
        auth_type PASS
        auth_pass 123456
    }
    virtual_ipaddress {
        192.168.121.120
    }
}

4. 配置 Nginx

在两台 Nginx 上配置相同的站点,以确保在主节点故障时备节点可以无缝接管。

示例 Nginx 配置(/etc/nginx/nginx.conf):

nginx 复制代码
http {
    upstream backend {
        server 127.0.0.1:8080;  # 假设应用运行在本地的8080端口
    }

    server {
        listen 80;
        server_name example.com;

        location / {
            proxy_pass http://backend;
        }
    }
}

访问原ip


5. 启动Keepalived

bash 复制代码
cd /usr/local/keepalived/sbin/
# 启动命令
./keepalived

6. 测试高可用性

  • 确保主节点正常工作,访问虚拟 IP 地址(192.168.121.120)。
  • 停止主节点上的 Nginx 或 Keepalived,检查流量是否自动切换到备节点。
  • 重新启动主节点,确认其恢复后是否接管虚拟 IP 地址。

访问虚拟ip 192.168.121.120

7. 配置keepalived 双主热备集群架构

Nginx+keepalived主备模式,始终存在一台服务器处于空闲状态,如何更好的把两台服务器利用起来呢,可以借助Nginx+keepalived双主架构来实现,如图23-2所示,将架构改成双主架构,也即同时两台对外两个VIP地址,同时接收用户的请求。

1、192.168.2.128的keepalived.conf配置文件代码:

shell 复制代码
global_defs {
   #路由id:当前安装keepalived节点主机的标识符,全局唯一
   router_id keep_128
}

vrrp_instance VI_1 {
    # 表示的状态,当前的128服务器为nginx的主节点,MASTER/BACKUP
    state MASTER
    # 当前实例绑定的网卡
    interface ens33
    # 保证主备节点一致
    virtual_router_id 51
    # 优先级/权重,谁的优先级高,在MASTER挂掉以后,就能成为MASTER
    priority 100
    # 主备之间同步检查的时间间隔,默认1s
    advert_int 1
    # 认证授权的密码,防止非法节点的进入
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.2.120
    }
}

vrrp_instance VI_2 {
    # 表示的状态,当前的128服务器为nginx的主节点,MASTER/BACKUP
    state BACKUP
    # 当前实例绑定的网卡
    interface ens33
    # 保证主备节点一致
    virtual_router_id 52
    # 优先级/权重,谁的优先级高,在MASTER挂掉以后,就能成为MASTER
    priority 80
    # 主备之间同步检查的时间间隔,默认1s
    advert_int 1
    # 认证授权的密码,防止非法节点的进入
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.2.121
    }
}

2、192.168.2.129的keepalived.conf配置文件代码:

shell 复制代码
! Configuration File for keepalived

global_defs {
   #路由id:当前安装keepalived节点主机的标识符,全局唯一
   router_id keep_129
}

vrrp_instance VI_1 {
    # 表示的状态,当前的129服务器为nginx的主节点,MASTER/BACKUP
    state BACKUP
    # 当前实例绑定的网卡
    interface ens33
    # 保证主备节点一致
    virtual_router_id 51
    # 优先级/权重,谁的优先级高,在MASTER挂掉以后,就能成为MASTER
    priority 80
    # 主备之间同步检查的时间间隔,默认1s
    advert_int 1
    # 认证授权的密码,防止非法节点的进入
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.2.120
    }
}

vrrp_instance VI_2 {
    # 表示的状态,当前的129服务器为nginx的主节点,MASTER/BACKUP
    state MASTER
    # 当前实例绑定的网卡
    interface ens33
    # 保证主备节点一致
    virtual_router_id 52
    # 优先级/权重,谁的优先级高,在MASTER挂掉以后,就能成为MASTER
    priority 100
    # 主备之间同步检查的时间间隔,默认1s
    advert_int 1
    # 认证授权的密码,防止非法节点的进入
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.2.121
    }
}

注意点:

  1. Keepalived主配置文件必须设置不同的VRRP名称,同时优先级和VIP设置也各不相同;
  2. Nginx网站总访问量为两台Nginx服务器之和,可以写脚本自动统计访问量;
  3. 两台Nginx为Master,存在两个VIP地址,用户从外网访问VIP,需配置域名映射到两个VIP上方
  4. 通过外网DNS映射不同VIP的方法也称为DNS负载均衡模式;

三、虚拟ip

虚拟 IP 和真实 IP 之间的区别主要在于它们的用途和管理方式:

真实 IP

  • 定义:真实 IP 是指分配给设备的唯一的、可在互联网或局域网中直接访问的 IP 地址。
  • 特性
    • 每个真实 IP 地址在网络中都是唯一的。
    • 真实 IP 可以直接与设备通信,比如访问某台服务器。
    • 真实 IP 地址通常由互联网服务提供商(ISP)分配。

虚拟 IP

  • 定义:虚拟 IP 是一个逻辑 IP 地址,它并不直接分配给某个特定的设备,而是可以在多个设备之间共享。
  • 特性
    • 虚拟 IP 常用于高可用性和负载均衡,允许多个服务器通过一个共同的 IP 地址对外提供服务。
    • 虚拟 IP 可以在不同的物理服务器之间动态切换,以实现故障转移。
    • 虚拟 IP 通常与网络协议(如 VRRP、CARP)结合使用,管理虚拟 IP 的分配和切换。

应用场景

  • 真实 IP:适用于需要被直接访问的服务器或设备,如网页服务器、数据库服务器等。
  • 虚拟 IP:常用于负载均衡器、集群环境和高可用性设置,确保即使某台服务器故障,服务仍然可用。

总结

真实 IP 是指设备的实际地址,而虚拟 IP 是用于在多个设备之间实现共享和故障转移的逻辑地址。


虚拟 IP 地址并不是可以随便设定的,设定虚拟 IP 时需要遵循一些原则和规定:

  1. IP 地址范围
  • 虚拟 IP 应该在你的网络地址范围内,避免与已有的真实 IP 地址冲突。
  1. 网络配置
  • 在设置虚拟 IP 时,需要确保网络设备(如路由器、交换机、负载均衡器)支持虚拟 IP 的配置。
  1. 使用协议
  • 配置虚拟 IP 通常需要使用特定的网络协议(如 VRRP、CARP 等)来管理和切换虚拟 IP 的所有权。
  1. 环境一致性
  • 在多台服务器上使用虚拟 IP 时,确保它们在同一个子网内,并且配置相同的网络参数,以确保正常通信。
  1. 避免冲突
  • 虚拟 IP 必须确保在整个网络中唯一,避免与其他设备或服务的 IP 地址发生冲突。

结论

虽然技术上可以在网络中设置虚拟 IP,但实际操作时需要遵循上述原则,以确保网络的正常运行和稳定性。如果不小心设置了不合适的虚拟 IP,可能会导致网络问题。

相关推荐
朝九晚五ฺ20 分钟前
【Linux探索学习】第十五弹——环境变量:深入解析操作系统中的进程环境变量
linux·运维·学习
施努卡机器视觉1 小时前
电解车间铜业机器人剥片技术是现代铜冶炼过程中自动化和智能化的重要体现
运维·机器人·自动化
徐浪老师1 小时前
深入实践 Shell 脚本编程:高效自动化操作指南
运维·chrome·自动化
King's King1 小时前
自动化立体仓库:详解
运维·自动化
东隆科技1 小时前
晶圆测试中自动化上下料的重要性与应用
运维·自动化
酷酷学!!!1 小时前
Linux基础指令(汇总)
linux·运维·服务器
枫叶丹42 小时前
【在Linux世界中追寻伟大的One Piece】手写序列化与反序列化
linux·运维·网络
SchneeDuan2 小时前
建造者模式
运维·服务器·建造者模式
韦德斯2 小时前
嵌入式Linux的RTC读写操作应用
linux·运维·c语言·arm开发·实时音视频
哎呦喂-ll3 小时前
Linux进阶:常用操作
linux·运维·服务器