节点1:192.168.50.164
节点2:192.168.50.165
VIP :192.168.50.166
使用 Keepalived + MySQL自带Replicatioin 配置好HA,基本OK。
发现一个问题,除了备节点之外其他节点都能正常使用 VIP::
$ mysql -uroot -p123456 -h192.168.50.166
上面命令在备节点上无法使用,ping 50.166 可以ping通,ssh 也可以,但就是不能使用mysql。
报不能连接错 ERROR 2003 (HY000): Can't connect to MySQL server on '192.168.50.166' (110)
tcpdump 根本抓不到包,或者说根本不发包。
若连接50.164和50.165都是OK的,另开启 keepalived 的主节点也可使用。
当然只要备节点停了 keepalived 服务就可以连,但既然是备节点怎么可能停这个服务。
请问 keepalived 就是这么工作的吗?具体什么原因呢,有没有解决方法。
网上没能找到相关问题,可能没人会在集群内部连vip。
附1. arp 正常,166和164物理地址是一样的::
root@vm1:~# ip a
...
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 52:54:00:1c:02:d2 brd ff:ff:ff:ff:ff:ff
inet
192.168.50.164/24 brd 192.168.50.255 scope global eth0
valid_lft forever preferred_lft forever
inet
192.168.50.166/32 scope global eth0
valid_lft forever preferred_lft forever
root@vm2:~# arp
Address HWtype HWaddress Flags Mask Iface
192.168.50.1 ether 5c:dd:70:83:31:23 C eth0
192.168.50.164 ether 52:54:00:1c:02:d2 C eth0
192.168.50.166 ether 52:54:00:1c:02:d2 C eth0
附2. keepalived.conf 配置文件::
global_defs {
}
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 51
priority 100
advert_int 1
nopreempt
authentication {
auth_type PASS
auth_pass 123456
}
virtual_ipaddress {
192.168.50.166
}
}
virtual_server 192.168.50.166 3306 {
delay_loop 2
lb_algo wrr
lb_kind DR
nat_mask 255.255.255.0
persistence_timeout 60
protocol TCP
real_server 192.168.50.164 3306 {
weight 1
notify_down /usr/local/keepalived/mysql.sh
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
connect_port 3306
}
}
}