OpenStack高可用 -- Qpid集群,未测试( by quqi99 )

                                   OpenStack高可用 -- Qpid集群,未测试( by quqi99 )

作者:张华  发表于:2013-07-20
版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本版权声明

http://blog.csdn.net/quqi99 )

只是想看看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



你可能感兴趣的:(OpenStack高可用 -- Qpid集群,未测试( by quqi99 ))