我有两台机器(A 和 B,A 是主)为虚拟 IP 运行 VRPP(来自 keepalived)。
如果 A 失败并恢复(无论出于何种原因),我如何防止 A 再次成为 Master?
我这样做是为了让我们有一个单一的故障转移到第二个盒子,恢复正常需要手动干预。
我已经在两台 Debian 机器上设置了 keepalived 以实现高可用性,但是我遇到了可以分配给我的vrrp_instance. 我将如何配置和故障超过 20 个虚拟 IP?
这是非常简单的设置:
LB01: 10.200.85.1
LB02: 10.200.85.2
Virtual IPs: 10.200.85.100 - 10.200.85.200
Run Code Online (Sandbox Code Playgroud)
每台机器还在虚拟 IP 上运行 Apache(后来的 Nginx)绑定,用于 SSL 客户端证书终止和代理到后端网络服务器。我需要这么多 VIP 的原因是无法在 HTTPS 上使用 VirtualHost。
这是我的 keepalived.conf:
vrrp_script chk_apache2 {
script "killall -0 apache2"
interval 2
weight 2
}
vrrp_instance VI_1 {
interface eth0
state MASTER
virtual_router_id 51
priority 101
virtual_ipaddress {
10.200.85.100
.
. all the way to
.
10.200.85.200
}
Run Code Online (Sandbox Code Playgroud)
BACKUP 机器上有一个相同的配置,它工作正常,但只能达到第 20 个 IP。
我找到了一个HOWTO讨论这个问题。基本上,他们建议只有一个 VIP 并“通过”这个 …
所以我在两台服务器上运行keepalived,但无法将其故障转移到另一台服务器。
下面我有我的其中一台服务器的配置。两者之间唯一的区别是优先级数字主为 110,后为 109。
但是当我用 /etc/init.d/process stop keepalived 停止我的进程时,它不会进行故障转移。我只是得到 VRRP_Script(chk_script) 失败,没有别的。没有故障转移或什么都没有。
vrrp_script chk_script {
script "/usr/local/bin/failover.sh"
interval 2
weight 2
}
vrrp_instance HAInstance {
state BACKUP
interface eth0
virtual_router_id 8
priority 109
advert_int 1
nopreempt
vrrp_unicast_bind 10.10.10.8
vrrp_unicast_peer 10.10.10.9
virtual_ipaddress {
10.10.10.10/16 dev eth0
}
notify /usr/local/bin/keepalivednotify.sh
track_script {
chk_script weight 20
}
}
Run Code Online (Sandbox Code Playgroud)
这是我下面的 chk_script。当我将 killall -0 进程作为我的脚本时,也会发生同样的问题。
!/bin/bash
SERVICE='process'
STATUS=$(ps ax | grep -v grep | grep $SERVICE)
if [ "$STATUS" != "" ]
then
exit 0
else …Run Code Online (Sandbox Code Playgroud) 有没有办法让keepalived定期发送免费的ARP?
我们有以下情况:
因此,我们认为我们可以通过定期 GARP 来避免这种情况。这是一个好方法吗,有没有办法在keepalived中做到这一点?
还有其他建议可以避免此类问题吗?
保活配置:
global_defs {
notification_email {
email@address.com
}
notification_email_from SERVER_1
smtp_server smtp.server.local
smtp_connect_timeout 30
router_id SERVER_1
}
vrrp_instance V1 {
state BACKUP
nopreempt
interface eth0
lvs_sync_daemon_interface eth0
virtual_router_id 150
priority 120
advert_int 1
persistence_timeout 0
smtp_alert
authentication {
auth_type PASS
auth_pass xxx
}
virtual_ipaddress {
10.xxx.xxx.xxx …Run Code Online (Sandbox Code Playgroud) 我是这种负载平衡方案的新手,我的任务是弄清楚如何使这种负载平衡起作用。
我的环境:
Centos 6.4 64 Bit
Webserver: Lighttpd
All running in ESXI
virtual IP: 192.168.1.6
LB1: 192.168.1.4
LB2: 192.168.1.5
Webserver 1: 192.168.1.12
Webserver 2: 192.168.1.13
Gateway: 192.168.1.1
Run Code Online (Sandbox Code Playgroud)
尝试在使用 HAproxy 和 keepalived 生产之前在实验室中运行测试。这是我的 keepalived 设置:
!keepalived的配置文件
global_defs {
notification_email {
myemail@gmail.com
}
notification_email_from keepalived@domain.local
smtp_server 192.168.1.4
smtp_connect_timeout 30
router_id 192.168.1.1
}
vrrp_script chk_haproxy {
script "killall -0 haproxy"
interval 1 # check every second
weight 2 # add 2 points of prio if OK
}
vrrp_instance VI_1 {
state MASTER
interface …Run Code Online (Sandbox Code Playgroud) 有没有办法在服务器实例中使用命令行查看当前状态(主/备份)?
干杯
我正在使用 keepalived 在两个虚拟机之间切换浮动 IP。
/etc/keepalived/keepalived.conf 在 VM 1 上:
vrrp_instance VI_1 {
state MASTER
interface ens160
virtual_router_id 101
priority 150
advert_int 1
authentication {
auth_type PASS
auth_pass secret
}
virtual_ipaddress {
1.2.3.4
}
}
Run Code Online (Sandbox Code Playgroud)
/etc/keepalived/keepalived.conf 在 VM 2 上:
vrrp_instance VI_1 {
state MASTER
interface ens160
virtual_router_id 101
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass secret
}
virtual_ipaddress {
1.2.3.4
}
}
Run Code Online (Sandbox Code Playgroud)
这基本上可以正常工作,但有一个例外:每次 systemd 更新(它运行的是 Ubuntu 18.04)时,它都会重新加载它的网络组件,从而导致丢弃浮动 IP,因为它没有在系统中配置。由于两个keepalived实例仍然可以互相ping通,他们都没有看到任何错误,也没有人对此做出反应,导致浮动IP保持不变。
我发现您可以使用这样的简单脚本检查 IP:
vrrp_script chk_proxyip {
script "/sbin/ip addr |/bin/grep 1.2.3.4" …Run Code Online (Sandbox Code Playgroud) 我想将 nopreempt 选项与 keepalived vrrp 设置一起使用,以便在主节点出现故障并再次返回网络时将备份节点作为主节点运行。
我在两台服务器中都设置了 nopreempt 选项并将状态设置为两台服务器的备份,但由于高优先级 nopreempt 不起作用。
请指导解决?
Master Machine:
! Configuration File for keepalived
vrrp_instance VI_1 {
state BACKUP
nopreempt
interface eth0
virtual_router_id 1
priority 250
advert_int 1
virtual_ipaddress {
192.168.1.2/24
}
}
Backup Machine :
! Configuration File for keepalived
vrrp_instance VI_1 {
state BACKUP
nopreempt
interface eth0
virtual_router_id 1
priority 200
advert_int 1
virtual_ipaddress {
192.168.1.2/24
}
Run Code Online (Sandbox Code Playgroud)
}
问候,本
抱歉,如果之前有人问过这个问题,但我似乎找不到太多关于它的信息。
我们将使用 HAProxy 来平衡我们的 MariaDB Galera 集群。我在这方面看到的所有文章/教程都使用 Keepalived(或类似的东西)进行主动/被动 HAProxy 设置。
有什么好的理由为什么你不应该有一个主动/主动设置?
每个 HAProxy 节点都可以有一个固定的 IP,并且都有一个浮动的 IP。在正常情况下,请求在两个 HAProxy 节点之间共享,如果一个节点宕机,另一个将使用它的浮动 IP 并处理两个 IP 下的请求。当另一个恢复时,它会再次获取其浮动 IP 和负载份额。
我很感激你对此的意见。
卢克
我有两个系统,两个都是虚拟机。配置为使用桥接网络。我正在尝试使用 keepalived 来管理 VIP 的所有权 - 10.190.1.230。我尝试了从源代码构建的两个版本的 keepalived-1.2.2 和 keepalived-1.2.1。
ServerA - RHEL5.2 x64 - 10.190.1.228 - PRIORITY 50
ServerB - RHEL6 x64 - 10.190.1.229 - PRIORITY 101
VIP - 10.190.1.230
Run Code Online (Sandbox Code Playgroud)
我的问题似乎是在 ServerB 上 keepalived 没有发送多播广告。它正在看到多播广告。来自服务器A:
[root@ServerB~]# tcpdump -vv -c 3 -i eth0 vrrp
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
10:18:10.760577 IP (tos 0x0, ttl 255, id 856, offset 0, flags [none], proto VRRP (112), length 40)
10.190.1.228 > 224.0.0.18: VRRPv2, Advertisement, vrid 151, …Run Code Online (Sandbox Code Playgroud)