我有两台服务器(A-主服务器和B-备份服务器),它们都有一个虚拟IP。
我需要将虚拟 IP 分配给服务器 B,以防服务器 A 发生故障。为此,我正在尝试配置 keepalived。
服务器 A 的虚拟 IP 配置在 eth0:1 上,服务器 B 的虚拟 IP 当前设置为 eth0:1 中的其他 IP 地址
我不确定如何配置 keealived。我是否必须为两台服务器分配相同的虚拟 IP 并启动 keepalived 或仅在服务器 A 中设置虚拟 IP
答案1
首先,大约 15 年前,当网络接口只能承载一个 IP 地址时,别名接口(如 eth0:1)曾经非常重要。十多年来,您可以将多个 IP 地址添加到同一个网络接口,而无需使用接口别名:
/sbin/ip address add 192.0.2.123/32 dev eth0
/sbin/ip address add 192.0.2.124/32 dev eth0
/sbin/ip address add 192.0.2.125/32 dev eth0
/sbin/ip address list
/sbin/ip address del 192.0.2.124/32 dev eth0
/sbin/ip address list dev eth0
所以,如果您考虑每个接口只有一个 IP 地址的想法:忘掉它吧,没有必要这样做,而且 keepalived 也不会遵循这个想法。
本质上,您将手动为每台服务器分配单独的 IP,并配置 keepalived 来负责在某个服务器接口上添加或删除额外的虚拟 IP 列表。
vrrp_instance VRRP_1 {
state BACKUP
interface eth0
virtual_router_id 101
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass sometext
}
virtual_ipaddress {
192.0.2.123
}
}
这将使得两台主机上的 Keepalived 定期宣布(使用其手动配置的 IP)它已准备好托管特定的虚拟 IP 列表(最多 20 个);该宣布还包含优先级(8 位)和身份验证令牌(最多 8 个字符)。
如果您的某个主机在几秒钟内没有看到使用相同身份验证、相同最大 20 个 IP 列表且优先级不高于其自己的相同 virtual_router_id 的公告,它会将这些额外的 IP 添加到主机的接口,否则它会将它们从主机的接口中删除。
如果您的主机使用相同的优先级:宣布的 IP 地址也用于决定谁应托管该虚拟 IP 地址。
如果您使用与网络上其他任何人相同的 virtual_router_id,但使用不同的 IP 列表或不同的身份验证令牌,keepalived 也会发出警告(并忽略任何其他公告)。
keepalived 的“MASTER”和“BACKUP”状态仅用于启动时的初始化假设:以“MASTER”状态启动的系统不会等待任何其他公告到达并立即开始添加额外的 IP 地址,而 BACKUP 节点将等待一些潜在的公告传递后再决定是否(不)添加额外的 IP 地址。
请确保您的备份节点没有宣布比主节点优先级更高的 IP 地址;否则,您的主节点将在启动 keepalived 后立即接管 IP 地址,几秒钟后,您的备份节点将接管该 IP 地址。
我个人的偏好是不关心“MASTER”,将所有节点配置为“BACKUP”,并让 VRRP 决定需要做什么,而无需触发器接管。