目錄
Openstack-Mitaka 高可用之 概述
Openstack-Mitaka 高可用之 環境初始化
Openstack-Mitaka 高可用之 Mariadb-Galera集群部署
Openstack-Mitaka 高可用之 Rabbitmq-server 集群部署
Openstack-Mitaka 高可用之 memcache
Openstack-Mitaka 高可用之 Pacemaker+corosync+pcs高可用集群
Openstack-Mitaka 高可用之 認證服務(keystone)
OpenStack-Mitaka 高可用之 鏡像服務(glance)
Openstack-Mitaka 高可用之 計算服務(Nova)
Openstack-Mitaka 高可用之 網絡服務(Neutron)
Openstack-Mitaka 高可用之 Dashboard
Openstack-Mitaka 高可用之 啟動一個實例
Openstack-Mitaka 高可用之 測試
環境介紹
openstack內部是遵循AMQP(高級消息隊列協議)的基礎上采用消息隊列進行通信。 nova對請求應答進行異步調用,當請求接收后立即出發一個回調。由於使用了異步通信,不會有用戶的動作被長置於等待狀態。異步使整個系統變得更加高效。
集群搭建
以下操作三個節點都需要執行:
安裝rabbitmq
# yum install rabbitmq-server -y
配置監聽地址(每個controller節點都需要配置本地監聽地址):
[root@controller1 ~]# vim /etc/rabbitmq/rabbitmq-env.conf # 在RHEL7.2系統上默認是不存在該文件的 RABBITMQ_NODE_IP_ADDRESS=192.168.0.11 RABBITMQ_NODE_PORT=5672
只啟動第一個節點:
[root@controller1 ~]# systemctl start rabbitmq-server
拷貝.erlang.cookie文件到controller2 controller3,注意該文件的權限是400
[root@controller1 ~]# scp /var/lib/rabbitmq/.erlang.cookie controller2:/var/lib/rabbitmq/ .erlang.cookie 100% 20 0.0KB/s 00:00 [root@controller1 ~]# scp /var/lib/rabbitmq/.erlang.cookie controller3:/var/lib/rabbitmq/ .erlang.cookie 100% 20 0.0KB/s 00:00 [root@controller1 ~]# ll /var/lib/rabbitmq/.erlang.cookie -r-------- 1 rabbitmq rabbitmq 20 Nov 30 00:00 /var/lib/rabbitmq/.erlang.cookie [root@controller2 ~]# chown -R rabbitmq:rabbitmq /var/lib/rabbitmq/.erlang.cookie [root@controller3 ~]# chown -R rabbitmq:rabbitmq /var/lib/rabbitmq/.erlang.cookie
啟動controller2、controller3 rabbitmq服務
# systemctl start rabbitmq-server
將controller2、controller3 與controller1組成集群
Controller2:
[root@controller2 ~]# rabbitmqctl stop_app Stopping node rabbit@controller2 ... [root@controller2 ~]# rabbitmqctl join_cluster rabbit@controller1 Clustering node rabbit@controller2 with rabbit@controller1 ... [root@controller2 ~]# rabbitmqctl start_app Starting node rabbit@controller2 ...
Controller3:
[root@controller3 ~]# rabbitmqctl stop_app Stopping node rabbit@controller3 ... [root@controller3 ~]# rabbitmqctl join_cluster rabbit@controller1 Clustering node rabbit@controller3 with rabbit@controller1 ... [root@controller3 ~]# rabbitmqctl start_app Starting node rabbit@controller3 …
在任意節點執行 rabbitmqctl cluster_status 查看集群
[root@controller1 ~]# rabbitmqctl cluster_status Cluster status of node rabbit@controller1 ... [{nodes,[{disc,[rabbit@controller1,rabbit@controller2,rabbit@controller3]}]}, {running_nodes,[rabbit@controller3,rabbit@controller2,rabbit@controller1]}, {cluster_name,<<"rabbit@controller1">>}, {partitions,[]}, {alarms,[{rabbit@controller3,[]}, {rabbit@controller2,[]}, {rabbit@controller1,[]}]}]
設置鏡像隊列
在任意一個節點上執行:
[root@controller1 rabbitmq]# rabbitmqctl set_policy ha-all '^(?!amq\.).*' '{"ha-mode": "all"}' Setting policy "ha-all" for pattern "^(?!amq\\.).*" to "{\"ha-mode\": \"all\"}" with priority "0" ... ...done.
將所有隊列設置為鏡像隊列,即隊列會被復制到各個節點,各個節點狀態保持一致。
在rabbitmq中創建openstack用戶
[root@controller1 rabbitmq]# rabbitmqctl add_user openstack openstack Creating user "openstack" ... ...done. [root@controller1 rabbitmq]# rabbitmqctl set_permissions openstack ".*" ".*" ".*" Setting permissions for user "openstack" in vhost "/" ... ...done.
到此,rabbitmq高可用搭建完畢。
在配置Mariadb-galera和rabbitmq監聽地址的時候,rabbitmq配置監聽地址尤其要注意,配置如下:
[root@controller1 ~]# chown rabbitmq:rabbitmq /etc/rabbitmq/rabbitmq-env.conf [root@controller1 ~]# systemctl restart rabbitmq-server [root@controller1 ~]# netstat -ntplu | egrep 5672 tcp 0 0 192.168.0.11:5672 0.0.0.0:* LISTEN 29644/beam.smp tcp 0 0 0.0.0.0:25672 0.0.0.0:* LISTEN 29644/beam.smp
rabbitmq-env.conf 說明:
RABBITMQ_NODE_IP_ADDRESS= //IP地址,空串bind所有地址,指定地址bind指定網絡接口
RABBITMQ_NODE_PORT= //TCP端口號,默認是5672
RABBITMQ_NODENAME= //節點名稱。默認是rabbit
RABBITMQ_CONFIG_FILE= //配置文件路徑 ,即rabbitmq.config文件路徑
RABBITMQ_MNESIA_BASE= //mnesia所在路徑
RABBITMQ_LOG_BASE= //日志所在路徑
RABBITMQ_PLUGINS_DIR= //插件所在路徑
