主要参考了openstack官方HA的文档
http://docs.openstack.org/high-availability-guide/content/index.html
服务器2台
在1台服务器上安装RDO 另一台安装centos6.5
首先采用active/active模式
安装rabbitMQ
安装epel源
rpm -ivh http://mirrors.sohu.com/fedora-epel/6/x86_64/epel-release-6-8.noarch.rpm
参考http://www.rabbitmq.com/install-rpm.html
安装erlang yum install erlang
下载rabbitMQ
wget http://www.rabbitmq.com/releases/rabbitmq-server/v3.3.2/rabbitmq-server-3.3.2-1.noarch.rpm
安装rabbitmq
rpm --importhttp://www.rabbitmq.com/rabbitmq-signing-key-public.asc
yum install rabbitmq-server-3.3.2-1.noarch.rpm
节点1:192.168.1.83 HAtest1
节点2:192.168.1.84 HAtest2
修改/etc/hosts文件,加入节点描述
192.168.1.83 HAtest1
192.168.1.84 HAtest2
测试开启rabbitmq
service rabbitmq-server start
或者rabbitmq-server start 执行完这个,好像不会退出,使用ctrl+z退出
rdo默认采用qpid,已经安装qpid可能会提示5672端口被占用无法开启,把qpid关闭就好了
关闭qpid开机启动 打开rabbitmq开机启动
chkconfig qpidd off
chkconfig rabbitmq-server on
拷贝erlang cookie到各个节点
scp/var/lib/rabbitmq/.erlang.cookie root@HAtest2:/var/lib/rabbitmq/.erlang.cookie
使用 -detached 参数运行各节点
# rabbitmqctl stop # rabbitmq-server -detached |
将node2 与 node1 组成集群:
[[email protected]]# rabbitmqctl stop
Stoppingand halting node rabbit@HAtest2 ...
...done.
[[email protected]]# rabbitmq-server -detached
Warning:PID file not written; -detached was passed.
[[email protected]]# rabbitmqctl stop_app
Stoppingnode rabbit@HAtest2 ...
...done.
[[email protected]]# rabbitmqctl join_cluster rabbit@HAtest1
Clusteringnode rabbit@HAtest2 with rabbit@HAtest1 ...
...done.
[[email protected]]# rabbitmqctl start_app
Startingnode rabbit@HAtest2 ...
...done.
如果要使用内存节点,则可以使用
node2 #rabbitmqctl join_cluster --ram rabbit@node1 加入集群
遇到
Error:mnesia_unexpectedly_running
需要stop_app 修改完后再start
更多命令可以直接help查询
设置镜像队列策略
rabbitmqctl set_policy HA '^(?!amq\.).*' '{"ha-mode": "all"}' |
将所有队列设置为镜像队列,即队列会被复制到各个节点,各个节点状态保持一直。
到此,RabbitMQ 高可用集群就已经搭建好了,下面要配置openstack参数。
首先是对rabbitmq的配置,删除默认用户
rabbitmqctl delete_user guest
然后新建用户
rabbitmqctl add_user openstack_rabbit_useropenstack_rabbit_password
rabbitmqctl set_permissions -p / openstack_rabbit_user".*" ".*" ".*"
rabbitmqctl list_users
rabbitmqctl list_user_permissions openstack_rabbit_user
配置openstack
参考文档
http://docs.openstack.org/trunk/config-reference/content/configuring-rpc.html
修改每个组件的配置文件
为了保证不出意外,先把qpid相关的全部注释掉(后面发现不注释好像也不会有问题)
nova.conf
rpc_backend=nova.openstack.common.rpc.impl_kombu
rabbit_ha_queues=True
rabbit_hosts=HAtest1:5672,HAtest2:5672
rabbit_port=5672
rabbit_retry_interval=1
rabbit_retry_backoff=2
rabbit_max_retries=0
rabbit_durable_queues=false
rabbit_userid=mytest
rabbit_password=mytest
neutron.conf
rpc_backend=neutron.openstack.common.rpc.impl_kombu
rabbit_userid=mytest
rabbit_password=mytest
rabbit_ha_queues=True
rabbit_hosts=HAtest1:5672,HAtest2:5672
cinder.conf
rpc_backend=cinder.openstack.common.rpc.impl_kombu
rabbit_ha_queues=True
rabbit_hosts=HAtest1:5672,HAtest2:5672
rabbit_port=5672
rabbit_retry_interval=1
rabbit_retry_backoff=2
rabbit_max_retries=0
rabbit_durable_queues=false
rabbit_userid=mytest
rabbit_password=mytest
ceilometer.conf
rpc_backend=ceilometer.openstack.common.rpc.impl_kombu
rabbit_ha_queues=True
rabbit_hosts=HAtest1:5672,HAtest2:5672
rabbit_port=5672
rabbit_retry_interval=1
rabbit_retry_backoff=2
rabbit_max_retries=0
rabbit_durable_queues=false
rabbit_userid=mytest
rabbit_password=mytest
glance-api.conf
notifier_strategy=rabbit
glance-api.conf
rabbit_ha_queues=True
rabbit_hosts=HAtest1:5672,HAtest2:5672
rabbit_port=5672
rabbit_retry_interval=1
rabbit_retry_backoff=2
rabbit_max_retries=0
rabbit_durable_queues=false
rabbit_userid=mytest
rabbit_password=mytest
配置完成后,重启所有服务
openstack-servicerestart
结果重启完后认证失败,想到是数据库的问题 果然使用默认的用户名密码数据库访问不了 应该是设置了hosts的问题(未验证)
解决办法是先修改个组件mysql的用户名为root
重启各组件 正常
验证rabbitmq集群在openstack是否起到作用
在节点1关闭rabbitmq
虚拟机创建成功
再关闭节点2 rabbitmq
虚拟机无法创建
说明rabbitmq cluster起到了作用
开启任意节点的rabbitmq后,虚拟机成功创建。
还有加入采用haproxy的方法(未验证)
参考文档:http://openstack.redhat.com/RabbitMQ
http://docwiki.cisco.com/wiki/OpenStack_Havana_Release:_High-Availability_Manual_Deployment_Guide#Load_Balancer_Node_Installation