让你的OpenStack支持多区域(Muilt-Region)特性

背景####

这几天公司第二个机房开始投入生产,作为新的开发测试环境,也毫不疑问采用的是OpenStack方案。由于OS本身支持Muilt-Region,研究了下,确实方便了很多。避免了有两个管理入口的问题,另外Dashboard支持多区域也方便进行统一的管理。不得不说OS确实很强大。

基础知识####

我们都知道Region是OpenStack里面用于隔离资源的一个重要概念。简单来说,一个Region对应一套完整的OpenStack环境,而Region和Region之间可以是跨机房的集群,也可以是一个大规模物理机集群分割后的集群。OpenStack在设计之初就是支持多Region的情况,由于Region之间资源(Mariadb,RabbitMQ等)的独立的,所以他们之间并不存在资源交互开销的情况。

那么关于OpenStack的资源隔离不光体现在Region上,Host AggregatesAvailability ZonesNova-Cells同样也有各自的作用,他们之间的关系就如下图(ps:图有点老,网络组件还是quantum)所示:


我们可以看到,Region1和Region2之间只共享了Keystone和Dashboard服务。

操作####

注: 便于后面操作,后面的Region我就简单的命名RegionOneRegionTwo

1. 部署两套OpenStack

过程略(不管采用rdo或者其他方式,首先部署两套OpenStack是最基本的前提)

我这里的环境如下:

| Region| IP |
| --- | --- | --- |
| RegionOne | 10.16.22.1 |
| RegionTwo | 10.1.17.28 |

2. keystone中添加服务的访问入口,即endpoint

这里有很多方式,有的是将keystone的endpoint表导出来,修改好后再导回数据库,有的是直接通过keystone添加endpoint。本文更倾向于后者。

endpoint是OpenStack各服务暴露出来的urls访问点,列表中的每个URL都对应一个服务实例的访问地址,并且具有public、private和admin这三种权限。public url可以被全局访问(如http://compute.example.com),private url只能被局域网访问(如http://compute.example.local),admin url被从常规的访问中分离

  • OpenStack的Endpoint如下:
# openstack endpoint list --long
+----------------------------------+------------+---------------+--------------+-----------------------------------------+-----------------------------------------+-----------------------------------------+
| ID                               | Region     | Service Name  | Service Type | PublicURL                               | AdminURL                                | InternalURL                             |
+----------------------------------+------------+---------------+--------------+-----------------------------------------+-----------------------------------------+-----------------------------------------+
| 3c2ae0faa6e7469b8f87f0864fb2e0db | RegionOne | neutron       | network      | http://10.16.22.1:9696                  | http://10.16.22.1:9696                  | http://10.16.22.1:9696                  |
| 5e324a380bc74f7d8304614380cb40bc | RegionOne | cinderv2      | volumev2     | http://10.16.22.1:8776/v2/%(tenant_id)s | http://10.16.22.1:8776/v2/%(tenant_id)s | http://10.16.22.1:8776/v2/%(tenant_id)s |
| fdf523eaa3d849868558a21b89da87dc | RegionOne | cinderv3      | volumev3     | http://127.0.0.1:8776/v3/%(tenant_id)s  | http://127.0.0.1:8776/v3/%(tenant_id)s  | http://127.0.0.1:8776/v3/%(tenant_id)s  |
| 385edda6cb784cb59268f3ce2d4a6ad6 | RegionOne | Image Service | image        | http://10.16.22.1:9292                  | http://10.16.22.1:9292                  | http://10.16.22.1:9292                  |
| 0ba108eff1ec405e98466ffd377e5c14 | RegionOne | keystone      | identity     | http://10.16.22.1:5000/v2.0             | http://10.16.22.1:35357/v2.0            | http://10.16.22.1:5000/v2.0             |
| c7d47189e23242828112b41424135247 | RegionOne | novav3        | computev3    | http://10.16.22.1:8774/v3               | http://10.16.22.1:8774/v3               | http://10.16.22.1:8774/v3               |
| 8dcdaa6a13ba4d7ea05b38b68e9e091e | RegionOne | nova          | compute      | http://10.16.22.1:8774/v2/%(tenant_id)s | http://10.16.22.1:8774/v2/%(tenant_id)s | http://10.16.22.1:8774/v2/%(tenant_id)s |
| f0ab9b8f224b4247890a71e4f6309556 | RegionOne | cinder        | volume       | http://10.16.22.1:8776/v1/%(tenant_id)s | http://10.16.22.1:8776/v1/%(tenant_id)s | http://10.16.22.1:8776/v1/%(tenant_id)s |
+----------------------------------+------------+---------------+--------------+-----------------------------------------+-----------------------------------------+-----------------------------------------+
  • 获取Service UUID
# openstack service list  --long
+----------------------------------+---------------+-----------+------------------------------+
| ID                               | Name          | Type      | Description                  |
+----------------------------------+---------------+-----------+------------------------------+
| 328bb434d3874cffba408b0688fc9155 | cinderv3      | volumev3  | Cinder Service v3            |
| 340beb8756e7426093e1d757749acff8 | neutron       | network   | Neutron Networking Service   |
| 46126c94f8194bafb593305b9be564b2 | cinderv2      | volumev2  | Cinder Service v2            |
| 504d5d3cb66c4a5a99d2882831b9f575 | novav3        | computev3 | Openstack Compute Service v3 |
| 8e5e7f4461d2477fbd4035b0ecf8fb2c | nova          | compute   | Openstack Compute Service    |
| 98db82338cb942b58234002c05596a9f | Image Service | image     | OpenStack Image Service      |
| b161adf71661471eb42fa2499e468eab | keystone      | identity  | OpenStack Identity Service   |
| eda9475fe28648fcac60e6429f6af1ca | cinder        | volume    | Cinder Service               |
+----------------------------------+---------------+-----------+------------------------------+
  • 加入第二个Region很简单,只需要根据上面这个endpoint逐一添加第二个Region的endpoint即可。
# openstack endpoint create
usage: openstack endpoint create [-h]
                                 [-f {html,json,json,shell,table,value,yaml,yaml}]
                                 [-c COLUMN] [--max-width <integer>]
                                 [--noindent] [--prefix PREFIX] --publicurl
                                 <url> [--adminurl <url>]
                                 [--internalurl <url>] [--region <region-id>]
                                 <service>
openstack endpoint create: error: too few arguments

keystone

# openstack endpoint create --publicurl "http://10.16.22.1:5000/v2.0" --adminurl "http://10.16.22.1:35357/v2.0" --internalurl "http://10.16.22.1:5000/v2.0" --region RegionTwo b161adf71661471eb42fa2499e468eab

Image Service

# openstack endpoint create --publicurl "http://10.1.17.28:9292" --adminurl "http://10.1.17.28:9292" --internalurl "http://10.1.17.28:9292" --region RegionTwo 98db82338cb942b58234002c05596a9f

cinder

# openstack endpoint create --publicurl "http://10.1.17.28:8776/v1/%(tenant_id)s" --adminurl "http://10.1.17.28:8776/v1/%(tenant_id)s" --internalurl "http://10.1.17.28:8776/v1/%(tenant_id)s" --region RegionTwo eda9475fe28648fcac60e6429f6af1ca

cinderv2

# openstack endpoint create --publicurl "http://10.1.17.28:8776/v2/%(tenant_id)s" --adminurl "http://10.1.17.28:8776/v2/%(tenant_id)s" --internalurl "http://10.1.17.28:8776/v2/%(tenant_id)s" --region RegionTwo 46126c94f8194bafb593305b9be564b2

cinderv3

# openstack endpoint create --publicurl "http://127.0.0.1:8776/v3/%(tenant_id)s" --adminurl "http://127.0.0.1:8776/v3/%(tenant_id)s" --internalurl "http://127.0.0.1:8776/v3/%(tenant_id)s"  --region RegionTwo 328bb434d3874cffba408b0688fc9155

neutron

# openstack endpoint create --publicurl "http://10.1.17.28:9696" --adminurl "http://10.1.17.28:9696" --internalurl "http://10.1.17.28:9696" --region RegionTwo 340beb8756e7426093e1d757749acff8

nova

# openstack endpoint create --publicurl "http://10.1.17.28:8774/v2/%(tenant_id)s" --adminurl "http://10.1.17.28:8774/v2/%(tenant_id)s" --internalurl "http://10.1.17.28:8774/v2/%(tenant_id)s" --region RegionTwo 8e5e7f4461d2477fbd4035b0ecf8fb2c

novav3

# openstack endpoint create --publicurl "http://10.1.17.28:8774/v3"  --adminurl "http://10.1.17.28:8774/v3" --internalurl "http://10.1.17.28:8774/v3" --region RegionTwo 504d5d3cb66c4a5a99d2882831b9f575

  • 最终结果
# openstack endpoint list --long
+----------------------------------+-----------+---------------+--------------+-----------------------------------------+-----------------------------------------+-----------------------------------------+
| ID                               | Region    | Service Name  | Service Type | PublicURL                               | AdminURL                                | InternalURL                             |
+----------------------------------+-----------+---------------+--------------+-----------------------------------------+-----------------------------------------+-----------------------------------------+
| 3c2ae0faa6e7469b8f87f0864fb2e0db | RegionOne | neutron       | network      | http://10.16.22.1:9696                  | http://10.16.22.1:9696                  | http://10.16.22.1:9696                  |
| 9546c80aa6a2496da03c55dfdebb0193 | RegionTwo | novav3        | computev3    | http://10.1.17.28:8774/v3               | http://10.1.17.28:8774/v3               | http://10.1.17.28:8774/v3               |
| 5e324a380bc74f7d8304614380cb40bc | RegionOne | cinderv2      | volumev2     | http://10.16.22.1:8776/v2/%(tenant_id)s | http://10.16.22.1:8776/v2/%(tenant_id)s | http://10.16.22.1:8776/v2/%(tenant_id)s |
| f14eceb4900e46c0b5b3c30314201f46 | RegionTwo | Image Service | image        | http://10.1.17.28:9292                  | http://10.1.17.28:9292                  | http://10.1.17.28:9292                  |
| db41d86bf1e74697ae80ef28155ee988 | RegionTwo | cinder        | volume       | http://10.1.17.28:8776/v1/%(tenant_id)s | http://10.1.17.28:8776/v1/%(tenant_id)s | http://10.1.17.28:8776/v1/%(tenant_id)s |
| f129e23f71744f4aae868c57dc372825 | RegionTwo | cinderv3      | volumev3     | http://127.0.0.1:8776/v3/%(tenant_id)s  | http://127.0.0.1:8776/v3/%(tenant_id)s  | http://127.0.0.1:8776/v3/%(tenant_id)s  |
| fdf523eaa3d849868558a21b89da87dc | RegionOne | cinderv3      | volumev3     | http://127.0.0.1:8776/v3/%(tenant_id)s  | http://127.0.0.1:8776/v3/%(tenant_id)s  | http://127.0.0.1:8776/v3/%(tenant_id)s  |
| 385edda6cb784cb59268f3ce2d4a6ad6 | RegionOne | Image Service | image        | http://10.16.22.1:9292                  | http://10.16.22.1:9292                  | http://10.16.22.1:9292                  |
| 0ba108eff1ec405e98466ffd377e5c14 | RegionOne | keystone      | identity     | http://10.16.22.1:5000/v2.0             | http://10.16.22.1:35357/v2.0            | http://10.16.22.1:5000/v2.0             |
| f5319cc6ddef49e0aa6cef7d3fccfa63 | RegionTwo | neutron       | network      | http://10.1.17.28:9696                  | http://10.1.17.28:9696                  | http://10.1.17.28:9696                  |
| c7d47189e23242828112b41424135247 | RegionOne | novav3        | computev3    | http://10.16.22.1:8774/v3               | http://10.16.22.1:8774/v3               | http://10.16.22.1:8774/v3               |
| 887486e1ecf94507a04a54ad8f38f5e4 | RegionTwo | nova          | compute      | http://10.1.17.28:8774/v2/%(tenant_id)s | http://10.1.17.28:8774/v2/%(tenant_id)s | http://10.1.17.28:8774/v2/%(tenant_id)s |
| 8dcdaa6a13ba4d7ea05b38b68e9e091e | RegionOne | nova          | compute      | http://10.16.22.1:8774/v2/%(tenant_id)s | http://10.16.22.1:8774/v2/%(tenant_id)s | http://10.16.22.1:8774/v2/%(tenant_id)s |
| 90fedd6cc9ce4080a83278829a48fcf7 | RegionTwo | cinderv2      | volumev2     | http://10.1.17.28:8776/v2/%(tenant_id)s | http://10.1.17.28:8776/v2/%(tenant_id)s | http://10.1.17.28:8776/v2/%(tenant_id)s |
| f0ab9b8f224b4247890a71e4f6309556 | RegionOne | cinder        | volume       | http://10.16.22.1:8776/v1/%(tenant_id)s | http://10.16.22.1:8776/v1/%(tenant_id)s | http://10.16.22.1:8776/v1/%(tenant_id)s |
| 300d32b823cb4879bd9ccb415cec0532 | RegionTwo | keystone      | identity     | http://10.16.22.1:5000/v2.0             | http://10.16.22.1:35357/v2.0            | http://10.16.22.1:5000/v2.0             |
+----------------------------------+-----------+---------------+--------------+-----------------------------------------+-----------------------------------------+-----------------------------------------+

3. 修改RegionTwo的配置文件

具体修改项我就不一一列举了,我这里列下注意点:

  • RegionTwo集群上所有Service的identity认证全部指向10.16.22.1服务器;

  • RegionTwo集群上所有Service配置文件中的admin_password与RegionOne保持一致;(ps:在这里我强烈建议采用rdo用同一个anwser-file去部署两套OpenStack环境,这样可以避免很多麻烦)

  • RegionTwo集群上所有Service配置文件中的region_name配置项修改为region_name=RegionTwo;

4. Dashboard

如果以上过程顺利,恭喜你,你的OpenStack现在也支持多区域了。

如果你嫌弃RegionOne和RegionTwo命名太Low,你最好在部署实施之前规划好Region的命名。当然,现在也不是不能改,顶多就是在重复下本文以上操作而已。

扩展以及不足####

  1. 环境Keystone主要还是放在一个控制节点上,始终还是存在单节点故障。生产环境可以考虑将openstack-keystone服务单独提出来,后端mysql和memcached可以采用集群的方式,保证稳定性。

  2. 有OpenStack的配额管理是实现在各Service里面,所以在实际使用当中,在RegionOne里面编辑好的租户配额在RegionTwo里面并不生效。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,236评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,867评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,715评论 0 340
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,899评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,895评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,733评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,085评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,722评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,025评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,696评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,816评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,447评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,057评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,009评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,254评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,204评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,561评论 2 343

推荐阅读更多精彩内容