Angie 集群设置#
本指南描述了创建容错 Angie 集群的过程,
包含自动配置同步和虚拟 IP 地址故障转移。 第一步是通过配置用户账户
和确保服务器之间的安全访问
来准备所有集群节点。 在所有节点上创建一个用户
(例如, 如有必要,设置密码: 备注 在某些操作系统中(例如 Alt Linux),
您应该将用户添加到 在 Astra Linux 中启用 MAC 时要使用 配置无密码 sudo: 在主节点上,创建 SSH 密钥并将其复制到备份节点: 警告 在复制 SSH 密钥之前,确保
设置基于密钥的访问后,将值设为 备注 为了 Angie 配置的交叉同步,将用户密钥
复制到所有节点: 准备节点后,您需要安装主要的集群组件:
Angie PRO 和配置同步包。 根据您系统的 包说明 在所有节点上配置仓库。 备注 在干净系统上安装 在所有节点上,使用您的操作系统包管理器安装包: 下一步是设置集群节点之间配置文件的自动同步。 备注 同步原理: 通过 仅在 Angie 服务运行时进行。 手动执行(命令 单向工作:从主节点到备份节点。 在节点上创建 根据操作系统,启动守护进程: 编辑 备注 对于交叉同步,
在所有节点上填写 在 Angie 配置中添加健康检查块
( 启动 Angie: 启动同步: 备注 脚本将自动检查配置,与所有
节点执行同步,并应用配置。 为了在集群节点之间实现自动故障转移,使用 Keepalived —
一个用于管理虚拟 IP 地址(VIP)的服务。 备注 如果未安装 要将进程绑定到非本地 IP 地址,
允许系统执行相应操作: 更多详情:
https://www.kernel.org/doc/Documentation/networking/ip-sysctl.txt#ip_nonlocal_bind 假设 VIP 如果 Angie 监听此 VIP( 在主节点上( 在备份节点上: 备注 在 启动服务: 让我们详细检查 Keepalived 配置的主要元素,
以了解集群操作原理。 配置包括两个部分: 主要元素: 备注 如果原主节点恢复,
它将重新获得 MASTER 角色(更高优先级)。
要禁用故障回切,请使用 完成配置后,需要测试集群操作
并确保节点间的正确切换。 检查 VIP 状态: 测试容错性: 在主节点上停止 Angie: 检查 VIP 转移到备份节点: 再次在主节点上启动 Angie: 之后,VIP 应该返回到主节点。准备集群节点进行同步#
配置用户和访问权限#
user
)并赋予 sudo
权限:$ sudo adduser user
$ sudo passwd user
wheel
组:$ sudo usermod -a -G wheel user
rsync
,请设置
正确的完整性级别:$ sudo pdpl-user -i 63 user
$ echo "user ALL=(ALL:ALL) NOPASSWD:ALL" | sudo tee -a /etc/sudoers
$ su - user
$ ssh-keygen -t rsa
$ ssh-copy-id user@node2_hostname
/etc/ssh/sshd_config
文件中有以下选项:PasswordAuthentication yes
no
以提高
安全性。$ scp -p .ssh/id_rsa* user@node2_hostname:.ssh/
安装 Angie PRO 和 angie-ha-sync#
安装 angie-ha-sync#
angie-ha-sync
包时,
angie
包也会作为依赖项被安装。$ sudo {apk|apt|pkg|yum|zypper} {add|install} angie-ha-sync
配置配置同步#
rsync
执行同步。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 配置健康检查#
/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';
}
$ sudo angie -t && sudo service angie start
$ sudo angiehasync -Sd
配置 Keepalived#
keepalived
包 — 请安装它:$ sudo {apk|apt|pkg|yum|zypper} {add|install} keepalived
$ sudo sysctl -w net.ipv4.ip_nonlocal_bind=1
10.21.11.230
分配给主节点(10.21.8.26
)
或备份节点(10.21.8.27
)。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
— 当前节点的 IPunicast_peer
— 相邻节点的 IPvirtual_ipaddress
— 虚拟 IP(VIP)interface
— 网络接口$ sudo keepalived -t && sudo service keepalived start
Keepalived 配置详解#
global_defs
— 全局设置vrrp_instance
— VRRP 参数(VIP 切换)enable_script_security
— 允许执行健康检查脚本vrrp_script
— Angie 健康检查脚本state MASTER
— 初始节点状态priority
— 优先级(MASTER 角色分配给最高优先级)advert_int
— VRRP 通告间隔unicast_src_ip
— 当前节点的 IPunicast_peer
— 邻居的 IPvirtual_ipaddress
— VIP 地址track_script
— 通过健康检查脚本进行可用性监控nopreempt
参数:vrrp_instance angie {
... nopreempt
}
测试集群操作#
$ ip addr show enp0s2 | grep "10.21.11.230"
$ sudo service angie stop
$ ip addr show enp0s2 | grep "10.21.11.230"
$ sudo service angie start