如何给两台机器集群设置VIP(虚拟IP)
前言
最近在搭建PostgreSQL集群时,因为设置VIP的这个问题,跌入了很多坑,遇见了很多问题。在网上查找了一些资料,又结合自己的实践,决定自己总结写一篇关于设置集群VIP的博客。
一、环境准备
1.集群 IP部署
172.16.30.181是主节点,172.16.30.182是备节点,VIP是172.16.30.183
我是在openstack上搭建的集群,建议大家将需要用到的IP都固定到端口上,不要绑定浮动的IP,以免会出现网络跳动,导致IP配置失败。
二、配置VIP
1.安装 keepalived
两台机器上都要进行安装
yum install -y keepalived
有时候需要先卸载再安装。卸载命令:yum -y remove keepalived
2.配置文件 keepalived.conf
vim /etc/keepalived/keepalived.conf
- master上修改配置内容
vrrp_instance VI_1 { state MASTER interface eth0 # VIP绑定网卡 virtual_router_id 51 priority 101 advert_int 1 authentication { auth_type PASS # VRRP验证类型,PASS、AH两种 auth_pass 1111 # VRRP验证密码,在同一个vrrp_instance下,主、从必须使用相同的密码才能正常通信 } virtual_ipaddress { 172.16.30.183 ##虚拟IP地址(VIP) } unicast_src_ip 172.16.30.181 ##(本地IP地址) unicast_peer { 172.16.30.182 ##(对端IP地址)此地址一定不能忘记 } }
- slave上修改配置内容
vrrp_instance VI_1 { state BACKUP interface eth0 # VIP绑定网卡 virtual_router_id 51 priority 100 advert_int 1 authentication { auth_type PASS # VRRP验证类型,PASS、AH两种 auth_pass 1111 # VRRP验证密码,在同一个vrrp_instance下,主、从必须使用相同的密码才能正常通信 } virtual_ipaddress { 172.16.30.183 ##虚拟IP地址(VIP) } unicast_src_ip 172.16.30.182 ##(本地IP地址) unicast_peer { 172.16.30.181 ##(对端IP地址)此地址一定不能忘记 } }
参数解释:
state 服务状态;MASTER(工作状态)BACKUP(备用状态)
priority 优先级;取值范围:0~254;MASTER > BACKUP
(只要保证主节点的priority大于备节点就可以)
virtual_ipaddress表示虚拟ip的地址,主、备节点必须一致,可以定义多个VIP
注意要在配置文件里加入以下配置:
unicast_src_ip 172.16.30.xxx ##(本地IP地址) unicast_peer { 172.16.30.xxx ##(对端IP地址) }
如果不加入以上配置,可能在两台机器上可以同时看到VIP,这样就失去了我们设置集群VIP的意义。
出现这种问题是因为路由交换层禁用了ARP的广播限制,造成Keepalive主备协议无法通过广播的方式进行通信,造成主备两台服务器都强占HAVIP地址,出现同时两台服务器都有VIP地址的情况出现,必须通过配置来指定IP的两台服务器间进行通讯。
3.启动 keepalived 服务
systemctl start keepalived.service #启动服务 systemctl enable keepalived.service #开机自启动服务
- master上的IP地址信息
ip addr show eth0
- slave上的IP地址信息
可以看到这时候,VIP绑定在了主节点上。
当主机点上的keepalived 服务停止时,VIP又绑定在备节点上了。