只是想看看OpenStack在大规模部署时,MQ怎么扩展,没有测试,不保证能work。
openais是一个组通讯框架,corosync实际上也是从这个项目分裂出来的一个分支,qpid用它来做集群。
sudo service openais start
sudo setenforce 0
openais可以用于多播,组播和单播(mcastaddr, mcastport, bindnetaddr)
1)要保证处于集群中的qpid具有相同的cluster name, 可在/etc/qpidd.conf中添加:
cluster-name="cluster1"
2)用户名和组,
在RHEL6中,在/etc/corosync/uidgid.d/qpidd文件中指定:
uidgid {
uid: qpidd
gid: qpidd
}
在RHEL5中,用户名是qpidd, 而组名叫ais
newgrp ais
3)保证openais组通讯框架的组播端口5405能过iptables防火墙。
4)启动qpidd时添加--cluster-name参数。
qpidd --data-dir /usr/local/qpid/data/ --log-enable info+ --log-to-file /usr/local/qpid/qpidd.log -d --auth 0 -p 5673 --cluster-name 'cluster1'
5) qpid_hosts=node1:5672,node2:5672
20140402添加:
1, 记得有一个版本的qpid-python客户端有个bug, 如果客户端因某种原因不能和qpid server建立连接的话, 服务端会将这个topic删除掉
2, ' resource-limit-exceeded: Maximum depth exceeded ' -> default-queue-limit=0
3, qpid和rabbit对memory, cpu等resource应该都有threshold的flow control, 如果resource不够会block掉一些request, 对外表现便是timeout, 如:
--flow-stop-size integer Turn on sender flow control when the number of queued bytes exceeds this value.
--flow-resume-size integer Turn off sender flow control when the number of queued bytes drops below this value.
--flow-stop-count integer Turn on sender flow control when the number of queued messages exceeds this value.
--flow-resume-count Turn off sender flow control when the number of queued messages drops below this value.
4, qpid比较脆弱,进程容易die, 如果发生此种情况, 可以尝试着添加:qpid_topology_version=2, 可参见: https://github.com/openstack/oslo.messaging/blob/1.3.0a9/oslo/messaging/_drivers/impl_qpid.py#L72
5, 持久化qpid消息 , amqp_durable_queues=true, 需安装qpid-cpp-server-store
6, 不使用qpid cluster, 使用qpid distributed router, 相当于不再在qpid broker之间做session复制了, 而改提供使用proton实现的一个连接层(distributed router)用于在它和qpid broker之间类似于cookie传来传去避免session复制, 这样客户端只和连接层打交道即可。见:http://qpid.2158936.n2.nabble.com/Introducing-Qpid-Dispatch-Router-td7598222.html
调优:
sysctl -w net.core.somaxconn=512
ulimit -n 65536
cat /etc/security/limits.conf
* soft nofile 65536
* hard nofile 65536
cat qpidd.conf
max-connections=1000
connection-backlog=10
worker-threads=20
Reference:
http://qpid.apache.org/books/0.7/AMQP-Messaging-Broker-CPP-Book/html/ch01s08.html
http://openstack.redhat.com/Highly_Available_Qpid_for_OpenStack
http://openstack.redhat.com/RDO_HighlyAvailable_and_LoadBalanced_Control_Services