Angie 集群设置#

本指南介绍了创建具有自动配置同步和虚拟 IP 地址故障转移的容错 Angie 集群的过程。

准备集群节点以进行同步#

第一步是通过配置用户账户并确保服务器之间的安全访问来准备所有集群节点。

配置用户和访问权限#

在所有节点上创建一个用户(例如,:samp:angie-ha-sync)并赋予 sudo 权限:

$ sudo adduser angie-ha-sync

如有必要,设置密码:

$ sudo passwd angie-ha-sync

备注

在某些操作系统中(例如 Alt Linux), 您应该将用户添加到 wheel 组:

$ sudo usermod -a -G wheel angie-ha-sync

在 Astra Linux 中启用 MAC 时要使用 rsync,请设置 正确的完整性级别:

$ sudo pdpl-user -i 63 angie-ha-sync

配置无密码 sudo:

$ echo "angie-ha-sync ALL=(ALL:ALL) NOPASSWD:ALL" | sudo tee -a /etc/sudoers

在主节点上,创建 SSH 密钥并将其复制到备份节点:

$ su - angie-ha-sync
$ ssh-keygen -t rsa
$ ssh-copy-id angie-ha-sync@node2_hostname

警告

在复制 SSH 密钥之前,请确保 /etc/ssh/sshd_config 文件中有以下选项:

PasswordAuthentication yes

设置基于密钥的访问后,将该值设置为 no 以提高 安全性。

备注

对于 Angie 配置的交叉同步,请将用户密钥 复制到所有节点:

$ scp -p ~angie-ha-sync/.ssh/id_rsa angie-ha-sync@node2_hostname:.ssh/

安装 Angie 和 angie-ha-sync#

准备好节点后,您需要安装主要的集群组件: Angie 和配置同步包。

根据您的系统包的说明在所有节点上配置仓库:

安装 angie-ha-sync#

配置同步模块在以下包中可用:

  • Angie:angie-ha-sync

  • Angie PRO:angie-pro-ha-sync

备注

在干净的系统上安装此包时, 相应的 angieangie-pro 包 也将作为依赖项安装。

在所有节点上,使用您的操作系统包管理器安装该包,例如:

$ sudo {apk|apt|pkg|yum|zypper} {add|install} angie-pro-ha-sync

配置配置同步#

下一步是设置集群节点之间配置文件的自动同步。

备注

同步原则:

  • 通过 rsync 执行同步。

  • 仅在 Angie 服务运行时发生。

  • 手动执行(命令 angiehasync -Sd)。

  • 单向工作:从主节点到备份节点。

  • rsync 以守护进程模式运行。

配置 rsync#

在节点上创建 rsync 配置(/etc/rsyncd.conf):

[angie] # Angie 配置目录
    path = /etc/angie
# 用于同步的用户
    uid = angie-ha-sync
# 用户组
    gid = angie-ha-sync
# 允许连接的 IP 或子网
    hosts allow = 10.21.8.0/24
# 拒绝所有其他
    hosts deny = *

根据操作系统,启动守护进程:

$ sudo service rsyncd start # 或 $ sudo service rsync start

备注

对于某些系统,有现成的说明:

配置同步文件#

编辑 /etc/angiehasync/angiehasync.conf:

M_NODE="<node1_hostname>"            # 此节点的主机名或 IP
TARGET_HOSTS="<node2_hostname>"      # 用于同步的主机/IP 列表(空格分隔)。
                                     # 在备份节点上可以省略。
SSH_USER="user"                      # 用于同步的用户(具有管理员权限)
SSH_ID="/home/$SSH_USER/.ssh/id_rsa" # 私钥路径

备注

对于交叉同步, 在所有节点上填写 TARGET_HOSTS 列表; 但是,不要在列表中包含当前正在配置的节点。

配置 Angie 的健康检查#

在 Angie 配置中添加健康检查块 (/etc/angie/angie.conf):

server {

    listen unix:/tmp/angie_hcheck.sock; # 用于检查的 Unix 套接字
    access_log off;
    error_log /dev/null;
    default_type text/plain;
    return 200 'ok\n';
}

启动 Angie:

$ sudo angie -t && sudo service angie start

启动同步:

$ sudo angiehasync -Sd

备注

该脚本将自动检查配置,与所有节点执行同步,并应用它。

配置 Keepalived#

为了在集群节点之间实现自动故障转移,使用 Keepalived — 一个用于管理虚拟 IP 地址(VIP)的服务。

备注

如果未安装 keepalived 包 — 请安装它:

$ sudo {apk|apt|pkg|yum|zypper} {add|install} keepalived

要将进程绑定到非本地 IP 地址, 允许系统执行相应的操作:

$ sudo sysctl -w net.ipv4.ip_nonlocal_bind=1

更多详情: https://www.kernel.org/doc/Documentation/networking/ip-sysctl.txt#ip_nonlocal_bind

假设 VIP 10.21.11.230 分配给主节点(10.21.8.26) 或备份节点(10.21.8.27)。

如果 Angie 监听此 VIP(listen 10.21.11.230:80;) 但地址尚未分配, 没有 ip_nonlocal_bind 参数,Angie 将无法启动。

Keepalived 配置#

在主节点上(/etc/keepalived/keepalived.conf):

global_defs {
    enable_script_security
}

vrrp_script angie_check {
    script "/usr/bin/curl -s --connect-timeout 5 -A 'angie_hcheck_script'
    --no-buffer -XGET --unix-socket /tmp/angie_hcheck.sock http://hcheck/"
    interval 5 user angie
}

vrrp_instance angie {
    state MASTER interface enp0s2 virtual_router_id 254 priority 100
    advert_int 2 unicast_src_ip 10.21.8.26

    unicast_peer {
        10.21.8.27
    }

    virtual_ipaddress {
        10.21.11.230
    } track_script {
        angie_check
    }
}

在备份节点上:

global_defs {
    enable_script_security
}

vrrp_script angie_check {
    script "/usr/bin/curl -s --connect-timeout 5 -A 'angie_hcheck_script'
    --no-buffer -XGET --unix-socket /tmp/angie_hcheck.sock http://hcheck/"
    interval 5 user angie
}

vrrp_instance angie {
    state MASTER interface enp0s2 virtual_router_id 254 priority 99
    advert_int 2 unicast_src_ip 10.21.8.27

    unicast_peer {
        10.21.8.26
    }

    virtual_ipaddress {
        10.21.11.230
    } track_script {
        angie_check
    }
}

备注

vrrp_instance angie 部分中,设置以下值:

  • unicast_src_ip — 当前节点的 IP

  • unicast_peer — 相邻节点的 IP

  • virtual_ipaddress — 虚拟 IP(VIP)

  • interface — 网络接口

启动服务:

$ sudo keepalived -t && sudo service keepalived start

Keepalived 配置详解#

让我们详细研究 Keepalived 配置的主要元素, 以了解集群的运行原理。

配置包含两个部分:

  • global_defs — 全局设置

  • vrrp_instance — VRRP 参数(VIP 切换)

主要元素:

  • enable_script_security — 允许执行健康检查脚本

  • vrrp_script — Angie 健康检查脚本

  • state MASTER — 初始节点状态

  • priority — 优先级(MASTER 角色分配给优先级最高的节点)

  • advert_int — VRRP 通告间隔

  • unicast_src_ip — 当前节点 IP

  • unicast_peer — 邻居节点 IP

  • virtual_ipaddress — VIP 地址

  • track_script — 通过健康检查脚本进行可用性监控

备注

如果原主节点恢复, 它将重新获得 MASTER 角色(因为优先级更高)。 要禁用故障恢复,请使用 nopreempt 参数:

vrrp_instance angie {
    ... nopreempt
}

测试集群运行#

完成配置后,需要测试集群运行情况 并确保节点之间正确切换。

检查 VIP 状态:

$ ip addr show enp0s2 | grep "10.21.11.230"

测试容错能力:

在主节点上停止 Angie:

$ sudo service angie stop

检查 VIP 是否转移到备份节点:

$ ip addr show enp0s2 | grep "10.21.11.230"

再次在主节点上启动 Angie:

$ sudo service angie start

此后,VIP 应该返回到主节点。