vip 不通
虚拟机vip设置
1. 背景
有两种方式来实现负载均衡
- 以XXX负载均衡服务(LBAAS)的方式实现,即在平台上申请负载均衡即可使用
- 使用虚拟机来安装例如
keepalived
之类的VIP工具软件产生VIP,使用HAproxy、LVS或其他HA软件来实现负载均衡
如果使用第二种方式会存在以下问题:
- XXX平台上IP与mac地址是一一对应的,虚拟机产生的VIP如果没有在Openstack上记录的mac地址,则到这个VIP的包都会被丢弃
keepalived
实体之间是通过vrrp
协议(端口为112)来通信的,如果虚拟机的安全组未放行该协议则会导致脑裂/master挂掉之后backup不会转化成master
按照如下操作即可在XXX平台正常使用虚拟机产生的VIP
2. 创建vip port
source keystonerc_admin && neutron port-create --fixed-ip ip_address=${VIP_IP} ${NETID}
- 参数说明
- ${VIP_IP} 即想要的vip地址
- ${NETID} 即想要的vip地址所在网络id 可以通过
neutron net-list
查看
3. 更新端口信息
source keystonerc_admin && neutron port-update ${REALSERVER_PORT1_ID} --allowed-address-pairs type=dict list=true ip_address=${VIP_IP}
source keystonerc_admin && neutron port-update ${REALSERVER_PORT2_ID} --allowed-address-pairs type=dict list=true ip_address=${VIP_IP}
- 参数说明
- ${VIP_IP} 即想要的vip地址
- ${REALSERVER_PORT1_ID} 即vip后端第一台服务器的portid 可用
neutron port-list|grep ${REALSERVERIP1}
来查看,第一个字段即是 - ${REALSERVER_PORT2_ID} 与上面相同为第二台后端服务器的portid
注: 有多少个后端服务器则执行多少条上面格式的语句
4. 给vip绑定浮动ip(vlan网络模式无需操作)
source keystonerc_admin && neutron floatingip-create --floating-ip-address ${VIP_FLOATINGIP} --port-id ${VIP_ID} ${FLOATINGIP_NETID}
- 参数说明:
- ${VIP_FLOATINGIP} vip规划的浮动ip(这条命令新建的需要之前没有)
- ${VIP_ID} vip portid 可用
neutron port-list|grep ${VIP_ID}
来查看,第一个字段即是 - ${FLOATINGIP_NETID} 浮动ip网络 netid 可以通过
neutron net-list
查看
操作完以上步骤,如后端服务正常则可以通过vip访问
5. 验证
例如VIP后端有两个虚拟机,则如下测试(多于两个同理)
- 先分别访问两台虚拟机做了负载均衡的服务正常
- 访问vip地址的服务正常
- 停掉其中一台服务器上A的服务,访问VIP地址的服务正常
- 启动A上的服务,停止B上的服务,用VIP访问正常
- 停止A和B的服务,VIP的服务也无法访问
如上验证若均符合预期则VIP设置成功