在openstack云环境中部署keepalved主备集群时,会发现vip无法ping通,即使在相同网络也无法ping通,直接对云主机一张网卡配置两个IP进行测试也是同样的结果,
我想的是可能是keepalived创建的vip不被neutron认可,后来查询得到openstack的port所在的宿主机上iptables 对 MAC地址和IP进行了限制。是为了防止arp欺骗,我想总不能把宿主机iptables关了吧。生产环境决不能允许这等操作。
最终找到一个不错的方法(源头是参考一个国外博客Aaron’s Blog. )
方法是用的Havana版本的一新特性 “Allowed-Address-Pairs”,简单来说,就是在每个vm关联一个openstack创建ip,这样就解决了上面说的问题了;相当适合keepalived使用场景。
首先登陆openstack的horizon创建一个端口
这里我已经创建好了
创较好是这样的状态,接下来我们要进行cli命令行操作。可是笔者这里并不能远程直接对宿主机操作。接下来就是用到我们openstack的RC文件了
请看我另一条博文。openstack RC文件的使用
用 allwed_address_pairs 参数关联所创建的ip 192.168.111.44
--allowed-address-pair的用法:
neutron port-update --allowed-address-pair ip_address=[CIDR] [port_id]
在我们的环境中给两个keeplived执行操作:
neutron port-update --allowed-address-pair ip_address=192.168.111.44 c5a456dc-94fa-4f7d-a9a7-e9933afef632
neutron port-update --allowed-address-pair ip_address=192.168.111.44 aea3e3af-5bb0-4ad7-b1a0-0463d7290bd1
然后可以查看一下端口状态
neutron port-show c5a456dc-94fa-4f7d-a9a7-e9933afef632
可以看到allowed_address_pairs 属性 已经绑定 ,两个mac地址是一样的
到这一步为止,云主机内配置上面的 vip 就已经可以使用了。
接下来我们给vip绑定浮点ip
同样登陆openstack的horizon创建浮点ip
然后将分配的浮点ip进行绑定,选择事先创建好的vip就可以了
这个是绑定后的状态
并没有显示绑定到哪,不用管,这样vip就可以与外网通讯啦