一、前言

单位新进了十几台服务器,建了一个高标准的一体化机房,状似刘姥姥进大观园的我,从机房规划到企业私有云搭建一一重头学来,除了机房泥墙其他基本都涉猎到了。

从企业私有云这个名字就能看出这是多么复杂的一个东西。牵涉到服务器、交换机、防火墙、网络规划、云系统搭建。个个都是厉害的角,用张国荣的话说:“咱什么时候也都成角?”。成角不成角不说,经过十几天的折腾,今天才把OpenStack安装成功,期间经历了酷似炼狱的种种阶段。现简单记录整个安装过程以及踩过的坑,供自己查阅或后来人参考。

二、企业私有云(OpenStack)

想必接触过这块的人都不陌生,到了现在这个年代,你要说你没听说过各种云你简直就是火星来的,从阿里云到微软的Azure到亚马逊云等等。他们的共同特点就是普通用户你不再需要购买实体服务器,只需要从云提供商购买相应的CPU、内存、硬盘、网络就可以有一台自己的服务器。

对于企业而言,建立私有云也是有必要的,可以充分发挥服务器的性能等等优势暂且不提。我个人认为最理想的情况就是企业的每个人都不再需要实体机(当然远程连接的机器还是需要的),每个人根据自己的业务需求,从私有云中划分出相应的配置安装需要的操作系统来进行自己的工作。大家无需再被数据备份等烦扰,也可以轻易的实现远程办公。

这就是OpenStack所实现的功能。其官网对其介绍如下:

OpenStack software controls large pools of compute, storage, and networking resources throughout a datacenter, managed through a dashboard or via the OpenStack API. OpenStack works with popular enterprise and open source technologies making it ideal for heterogeneous infrastructure.

大概是说OpenStack能够简单的管理(分配)大量计算机(整个数据中心)的计算能力(CPU)、存储能力(硬盘、磁盘阵列)、内存。

那么我们只要在整个数据中心搭建起来OpenStack也就实现了搭建企业私有云。看上去很容易吧。孔子曰:“言知之易,行之难。”。万事同理,再简单的事情当你操作的时候都会有各种情况发生,何况是这么复杂的OpenStack。加上之前有多次安装Hadoop集群的惨痛经验,所以在开始之前就做足了心里准备。还好,目前基本初装成功,简单记述之。

三、安装过程

首先在这里要感谢CLOUDMAN,其关于OpenStack安装及使用的一系列博客,给予我们很大的帮助,有兴趣的可以直接拜读,感谢他的无私分享。

3.1 安装操作系统

在这里我选择的是Ubuntu,刚开始想着14.04稳定,就装了14.04。谁知道怎么装OpenStack都报错,后来查看官网才发现16.04比较匹配,又折腾到16.04。查看官方文档确实是很重要的一步。

安装完系统后还需要进行以下操作:

  1. 网卡设置固定IP
  2. 将ubuntu的apt源修改为阿里
  3. 设置hosts

这些我在前面的博客中都有介绍,也可以自行Google之。

3.2 安装OpenStack

1、添加stack用户

  1. sudo useradd -s /bin/bash -d /opt/stack -m stack
  2. echo "stack ALL=(ALL) NOPASSWD: ALL" | sudo tee /etc/sudoers.d/stack

2、下载devstack

最重要的就是选择版本,刚开始选择默认分支安装了一个all-in-one模式,一次成功。于是就朝着CLOUNDMAN介绍的controller和compute节点的方式迈进,结果一直报错。今日试了一下ocata版,折腾了几下之后成功。

  1. git clone https://git.openstack.org/openstack-dev/devstack -b stable/ocata

3、创建local.conf

在刚刚clone后的devstack文件中新建local.conf文件,其配置如下:

主节点(controller)配置

  1. [[local|localrc]]
  2. MULTI_HOST=true
  3. HOST_IP=10.0.0.101 # management & api network
  4. LOGFILE=/opt/stack/logs/stack.sh.log
  5. # Credentials
  6. ADMIN_PASSWORD=admin
  7. MYSQL_PASSWORD=$ADMIN_PASSWORD
  8. RABBIT_PASSWORD=$ADMIN_PASSWORD
  9. SERVICE_PASSWORD=$ADMIN_PASSWORD
  10. SERVICE_TOKEN=abcdefghijklmnopqrstuvwxyz
  11. # enable neutron-ml2-vlan
  12. disable_service n-net
  13. enable_service q-svc,q-agt,q-dhcp,q-l3,q-meta,neutron,q-lbaas,q-fwaas,q-vpn,placement-api
  14. Q_AGENT=linuxbridge
  15. ENABLE_TENANT_VLANS=True
  16. TENANT_VLAN_RANGE=3001:4000
  17. PHYSICAL_NETWORK=default
  18. LOG_COLOR=False
  19. LOGDIR=$DEST/logs
  20. SCREEN_LOGDIR=$LOGDIR/screen
  21. # use TryStack git mirror
  22. GIT_BASE=http://git.trystack.cn
  23. NOVNC_REPO=http://git.trystack.cn/kanaka/noVNC.git
  24. SPICE_REPO=http://git.trystack.cn/git/spice/spice-html5.git

计算节点(compute)配置

  1. [[local|localrc]]
  2. MULTI_HOST=true
  3. HOST_IP=10.0.0.102 # management & api network
  4. # Credentials
  5. ADMIN_PASSWORD=admin
  6. MYSQL_PASSWORD=$ADMIN_PASSWORD
  7. RABBIT_PASSWORD=$ADMIN_PASSWORD
  8. SERVICE_PASSWORD=$ADMIN_PASSWORD
  9. SERVICE_TOKEN=abcdefghijklmnopqrstuvwxyz
  10. # Service information
  11. SERVICE_HOST=10.0.0.101
  12. MYSQL_HOST=$SERVICE_HOST
  13. RABBIT_HOST=$SERVICE_HOST
  14. GLANCE_HOSTPORT=$SERVICE_HOST:9292
  15. Q_HOST=$SERVICE_HOST
  16. KEYSTONE_AUTH_HOST=$SERVICE_HOST
  17. KEYSTONE_SERVICE_HOST=$SERVICE_HOST
  18. CEILOMETER_BACKEND=mongodb
  19. DATABASE_TYPE=mysql
  20. ENABLED_SERVICES=n-cpu,q-agt,neutron
  21. Q_AGENT=linuxbridge
  22. ENABLE_TENANT_VLANS=True
  23. TENANT_VLAN_RANGE=3001:4000
  24. PHYSICAL_NETWORK=default
  25. enable_service placement-api
  26. # vnc config
  27. NOVA_VNC_ENABLED=True
  28. NOVNCPROXY_URL="http://$SERVICE_HOST:6080/vnc_auto.html"
  29. VNCSERVER_LISTEN=$HOST_IP
  30. VNCSERVER_PROXYCLIENT_ADDRESS=$VNCSERVER_LISTEN
  31. LOG_COLOR=False
  32. LOGDIR=$DEST/logs
  33. SCREEN_LOGDIR=$LOGDIR/screen
  34. # use TryStack git mirror
  35. GIT_BASE=http://git.trystack.cn
  36. NOVNC_REPO=http://git.trystack.cn/kanaka/noVNC.git
  37. SPICE_REPO=http://git.trystack.cn/git/spice/spice-html5.git

此处需要注意的是,经过实际测试其中的HOST_IP和SERVICE_HOST必须输入实际IP地址,不能输入hostname,否则安装不能成功。并且控制节点和计算节点的密码要一致,否则无法启动。

当然你也可以根据自己的云部署需求,选择其他部署方式。

4、修改pip源

注意stack用户和root用户的源都需要修改。分别在/root目录下和/opt/stack目录下新建.pip文件夹,并在此文件夹中创建pip.conf文件,写入以下内容:


  1. [global]
  2. trusted-host=pypi.douban.com
  3. index-url = https://pypi.douban.com/simple

5、执行安装命令

  1. ./stack.sh

由于网速(主要是国外网速,这个占失败的主因,没办法,大家都懂)以及一些未知因素等问题,幸运的话会成功,安装时间也会很长,慢慢等待。下面介绍一些失败的情况及应对的方案。

3.3 填各种坑

1、generate-subunit: command not found

这个问题比较常见,按顺序执行以下命令:

  1. sudo apt-get install python-pip
  2. sudo pip install --upgrade pip
  3. sudo pip install -U os-testr

2、generate-subunit ******* fail

这个问题更常见,一般在结束的上面几行会告诉你失败的原因,可以分析失败原因,当然如果你看不明白,可以直接按以下步骤,重试安装。

  1. 关闭ssh连接,新建连接。(当然重启服务器更好)
  2. 执行./unstack.sh
  3. 执行./clean.sh
  4. 执行./stack.sh重新安装

3、计算节点nova无法启动:compute service on compute node not starting

从ocata版开始需要在计算节点的local.conf中添加下述信息:

  1. enable_service placement-api

4、多次尝试安装均失败

如果你多次安装都失败,建议你直接重装操作系统,这样比分析原因来的要快。而且一旦安装失败,系统的纯洁性已经被破坏了,所以建议直接重装系统,重装一遍系统大概也就20分钟。

四、总结与展望

安装成功OpenStack只是在私有云道路上迈出的万里长征第一步,后面还有许许多多的东西需要涉足。这里只是个开端,与各位共勉。

Openstack(企业私有云)万里长征第一步——安装的更多相关文章

  1. OpenStack 企业私有云的若干需求(3):多租户和租户间隔离(multi-tenancy and isolation)

    本系列会介绍OpenStack 企业私有云的几个需求: 自动扩展(Auto-scaling)支持 多租户和租户隔离 (multi-tenancy and tenancy isolation) 混合云( ...

  2. OpenStack 企业私有云的若干需求(6):大规模扩展性支持

    本系列会介绍OpenStack 企业私有云的几个需求: 自动扩展(Auto-scaling)支持 多租户和租户隔离 (multi-tenancy and tenancy isolation) 混合云( ...

  3. OpenStack 企业私有云的若干需求(7):电信行业解决方案 NFV

    自动扩展(Auto-scaling)支持 多租户和租户隔离 (multi-tenancy and tenancy isolation) 混合云(Hybrid cloud)支持 主流硬件支持.云快速交付 ...

  4. OpenStack 企业私有云的若干需求(4):混合云支持 (Hybrid Cloud Support)

    本系列会介绍OpenStack 企业私有云的几个需求: 自动扩展(Auto-scaling)支持 多租户和租户隔离 (multi-tenancy and tenancy isolation) 混合云( ...

  5. OpenStack 企业私有云的若干需求(2):自动扩展(Auto-scaling) 支持

    本系列会介绍OpenStack 企业私有云的几个需求: 自动扩展(Auto-scaling)支持 多租户和租户隔离 (multi-tenancy and tenancy isolation) 混合云( ...

  6. OpenStack 企业私有云的若干需求(5):主流硬件支持、云快速交付 和 SLA 保证

    本系列会介绍OpenStack 企业私有云的几个需求: 自动扩展(Auto-scaling)支持 多租户和租户隔离 (multi-tenancy and tenancy isolation) 混合云( ...

  7. OpenStack 企业私有云的若干需求(1):Nova 虚机支持 GPU

    本系列会介绍OpenStack 企业私有云的几个需求: 自动扩展(Auto-scaling)支持 多租户和租户隔离 (multi-tenancy and tenancy isolation) 混合云( ...

  8. OpenStack 企业私有云的若干需求(9): 云管理平台 CMP

    本系列会介绍OpenStack 企业私有云的几个需求: 自动扩展(Auto-scaling)支持 多租户和租户隔离 (multi-tenancy and tenancy isolation) 混合云( ...

  9. OpenStack 企业私有云的若干需求(10):OpenStack 的前景和钱景

    本系列会介绍OpenStack 企业私有云的几个需求: 自动扩展(Auto-scaling)支持 多租户和租户隔离 (multi-tenancy and tenancy isolation) 混合云( ...

  10. OpenStack企业私有云新需求(1):Nova 虚机支持 GPU

    作者:Sammy Liu 刘世民 本系列会介绍OpenStack 企业私有云的几个需求: GPU 支持 自动扩展(Auto-scaling)支持 混合云(Hybrid cloud)支持 物理机(Bar ...

随机推荐

  1. B/S(Web)实时通讯解决方案

    B/S的实时通讯实现起来比较麻烦,因为http协议是无状态的,导致一些实时消息通知和聊天等功能比较难以实现,本文主要简述几种自己之前常用的几种方式. 1.传统的HTTP协议是无状态的 传统的HTTP协 ...

  2. 使用TagHelper完成分页步骤

    使用TagHelper完成分页步骤 转载 2016-08-23 11:37:33 1 创建一个MyPageOpion类,用来存储分页信息,比如当前页,栏目总数,页面大小,跳转地址(RouteUrl)等 ...

  3. String 类的实现(1)浅拷贝存在的问题

    浅拷贝 : 也称位拷贝 , 编译器只是直接将指针的值拷贝过来, 结果多个对象共用 同 一块内 存, 当一个对象将这块内 存释放掉之后, 另 一些对象不知道该块空间 已经还给了 系 统, 以 为还有效, ...

  4. webpack2.x基础属性讲解(一)

      webpack作为构建工具平时作为前端作为优化.模块编程.和分片打包的重要组成部分,大家可能并不陌生,如果没有时刻的去关注文档,那么大家可能不太清楚webpack已经默默然的升级到2.x了,对比1 ...

  5. scrollWidth,offsetWidth,clientWidth,width;scrollHeight,offsetHeight,clientHeight,height;offsetTop,scrollTop,top;offsetLeft,scrollLeft,left还有谁

    题中的那么多属性让人头都大了,他们到底是什么意思?不同浏览器的实现是一样的吗?以下所有结论来自chrome版本 53.0.2785.89 (64-bit)和firefox版本52.0.2,操作系统ub ...

  6. ubuntu 12.04 x86_64:java.lang.UnsatisfiedLinkError: Could not load SWT library. Reasons

    sy@sy-Aspire-:~$ .0_155965261/configuration/.log !SESSION -- ::39.595 ------------------------------ ...

  7. css form表单样式清除

    开发项目中表单常用的清楚样式: 1.改变placeholder默认字体颜色 ::-webkit-input-placeholder{color: #333;} :-moz-placeholder{co ...

  8. memcached分布式缓存

    1.memcached分布式简介 memcached虽然称为“分布式”缓存服务器,但服务器端并没有“分布式”功能.Memcache集群主机不能够相互通信传输数据,它的“分布式”是基于客户端的程序逻辑算 ...

  9. finally块执行时间

    finally块在代码中什么时候被执行? 在Java语言的异常处理中,finally块的作用十九为了保证无论出现什么情况,finally块里面的代码一定会被执行.由于程序执行return就以为这结束对 ...

  10. 跟着刚哥梳理java知识点——多线程(十六)

    创建多线程第一种方式:① 继承:继承Thread.② 重写:重写Thread类的run()方法③ 创建:创建一个子类的对象④ 调用:调用线程的start()方法,启动此线程,调用run()方法 cla ...