最近公司的几个关键业务跑在openstack中的虚拟机中,想把几个虚拟机做成负载均衡和高可用集群。
对于负载均衡,G版本已经集成了haproxy插件,对haproxy的配置做了一层封装,可以很方便的通过quantum去创建一个负载均衡池,为相同或者不同宿主机上的虚拟机提供负载均衡的能力。
在这个模式下,haproxy是运行在宿主机上的。
遗憾的是,目前还不能通过openstack做到haproxy的高可用。
想要做高可用,只能在虚拟机中去飘VIP了
但是创建了虚拟机之后,在这个虚拟机实例中只能使用指定的IP。
这就导致想在虚拟机中部署高可用去飘VIP是不可行的。
可以理解,在公有云环境下,是不可能让用户在虚拟机中随意去配置额外地址的。
但我们是私有云环境,这个规则对私有云环境下很是麻烦。
之前一直以为是iptables规则导致的。于是去看了一遍宿主机中的iptables规则
|
分析一下这些openstack自动生成的规则,可以看到input,forword和output链默认都是accept状态。分析每条链对数据包的跳转和过滤,如果在虚拟机中配置新的地址,是不会被过滤的。
经过一番折腾,最终发现限制IP的原因是ebtables在起作用