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设置成功

posted @ 2019-07-08 16:54  那个谁866  阅读(423)  评论(0编辑  收藏  举报