Angie 集群设置#

本指南描述了创建容错 Angie 集群的过程, 包含自动配置同步和虚拟 IP 地址故障转移。

准备集群节点进行同步#

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

配置用户和访问权限#

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

$ sudo adduser user

如有必要,设置密码:

$ sudo passwd user

备注

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

$ sudo usermod -a -G wheel user

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

$ sudo pdpl-user -i 63 user

配置无密码 sudo:

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

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

$ su - user
$ ssh-keygen -t rsa
$ ssh-copy-id user@node2_hostname

警告

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

PasswordAuthentication yes

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

备注

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

$ scp -p .ssh/id_rsa* user@node2_hostname:.ssh/

安装 Angie PRO 和 angie-ha-sync#

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

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

安装 angie-ha-sync#

备注

在干净系统上安装 angie-ha-sync 包时, angie 包也会作为依赖项被安装。

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

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

配置配置同步#

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

备注

同步原理:

  • 通过 rsync 执行同步。

  • 仅在 Angie 服务运行时进行。

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

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

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

配置 rsync#

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

[angie] # Angie 配置目录
    path = /etc/angie
# 同步用户
    uid = user
# 用户组
    gid = user
# 允许连接的 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 应该返回到主节点。