网络环境

openstack网络尤其重要,理解各节点组件作用,在正确稳定的网络结构下,可以避免很多不必要的问题。整体结构如图所示 网络拓扑 该文章中采centOS7的网卡命名,集成网卡名为eno1、插入的两张PCI网卡分别为enp2s10和enp2s12。

一定要采用命令行下编辑配置文件的方式来进行网络配置,使用GUI可能会导致配置文件的混乱,要是已经弄乱了的话,后面会有解决方案。

网络概述

  • 10.0.0.0/24 该网段称作management,用作3台物理机间的数据通信。 需要一个网关(这里使用路由器)接入互联网。
  • 10.0.1.0/24 该网段称作tunnel,用作运行在compute上的实例与network间的数据通信,与controller无关。
  • 外网 只在network上有,不指定IP地址且BOOTPROTO为none,在安装好网络组件之前这块网卡并没有用。 创建网络环境时会将一段IP地址分配到这里,以池的形式提供NAT以及虚拟机的IP地址绑定。

使用配置文件修改网络设置

centOS7 网络配置文件位于

etc/sysconfig/network-scripts

目录下对应3块网卡的配置文件分别为ifcfg-eno1, ifcfg-enp2s10, ifcfg-enp2s12。

环境中所有IP均为静态指定,所以BOOTPROTO=static。network的第三块网卡除外,要设置为 BOOTPROTO=none。

编辑完成后重启网络

systemctl restart network

路由器设置

CentOS下无法直接进入路由器设置界面,需要一台windows接入LAN口输入192.168.1.1进入路由器设置。 路由器网段改为10.0.0.0,子网掩码255.255.255.0,路由器地址10.0.0.1,路由器重启后进入指定3台机器eno1的MAC地址和IP地址

  1. controller 10.0.0.11
  2. network 10.0.0.21
  3. compute1 10.0.0.31
  4. compute2(可选) 10.0.0.32(以此类推)

注意,如果你之前在其他连入LAN口的电脑上配置了地址10.0.0.1,会导致无法进入路由器设置页面,记得修改它以避免冲突。

修改hosts

每个节点都需要修改hosts文件,指定各节点的通信地址。配置文件在

> /etc/host

#controller 10.0.0.11 controller

#network 10.0.0.21 network

#compute1 10.0.0.31 compute1

#compute2 10.0.0.32 compute2

controller

  • ifcfg-eno1

    BOOTPROTO=static IPADDR=10.0.0.11 NETMASK=255.255.255.0 GATEWAY=10.0.0.1

    DNS = 8.8.8.8

    DNS1 = 8.8.4.4

network

  • ifcfg-eno1

    BOOTPROTO=static IPADDR=10.0.0.21 NETMASK=255.255.255.0 GATEWAY=10.0.0.1

    DNS = 8.8.8.8

    DNS1 = 8.8.4.4

  • ifcfg-enp2s10

    BOOTPROTO=static IPADDR=10.0.1.21 NETMASK=255.255.255.0

  • ifcfg-enp2s12

    BOOTPROTO=none

compute1

  • ifcfg-eno1

    BOOTPROTO=static IPADDR=10.0.0.31 NETMASK=255.255.255.0 GATEWAY=10.0.0.1

    DNS = 8.8.8.8

    DNS1 = 8.8.4.4

  • ifcfg-enp2s10

    BOOTPROTO=static IPADDR=10.0.1.31 NETMASK=255.255.255.0

验证

  • 所有主机都能ping通外网
  • 所有主机之间使用hosts文件中的名字都能相互ping通
  • compute和network可以ping通对方tunnel地址

Network Time Protocal (NTP)

问题解决

  • 控制节点上要填一个地址,用于统一时间,许多都不能用,在验证的时候显示.INIT.

    这里给出国家授时中心的域名

    cn.pool.ntp.org 1.cn.pool.ntp.org

  • 防火墙可能会导致NTP的通信异常,可以关闭并禁用防火墙

    systemctl stop firewalld
    systemctl disable firewalld
    

注意事项

  • 其他节点都以controller作为时间标准。以后安装过程中遇到问题可以先验证NTP是否运行正常,有时网络问题会导致组件功能不正常。

OpenStack packages

这里的按照官方文档安装没有问题

SQL database

注意事项

  • 记得要执行Mysql的安装过程

    mysql_secure_installation
    

    少了这一步可能会导致在之后调用程序方法的时候报服务器500错误

  • 数据库出现问题是可以删掉重新安装的,数据会存放在另一个地方,将程序重装后数据还在。

Message queue

注意事项

  • 消息队列是保证物理机之间消息通信的基础,组件出现问题的时候可以查看消息队列的日志观察是否有问题。 有的时候无法正确解析地址会导致消息队列不通使程序出现问题。 消息队列的问题不会报错,查看日志文档(存放在/var/log/rabbitmq下)会发现ERROR,根据提示解决问题即可。

写在前面

  • openstack作为一个开源项目,每隔一段时间都会发布一个版本而且有两种部署方式,在不同平台上有不同的安装方式。 这里介绍的为kilo版本采用neutron布局,在centOS7下,3台物理机上部署安装。 在官方网站提供了详尽的部署文档(英文版),应该以该文档为主,这里记录一些问题的补充说明作为辅助。
  • 根据个人经验,总体上对openstack有个概念性的了解,明白组件功能所在对部署时问题的解决有很大帮助,否则面对问题会有些无从下手。 请花些时间耐心阅读组件功能介绍。
  • 有些问题源于配置文件的错误,可能是在复制过程中无意发生差错,这种问题在查找过程中不太容易发现。 若出现解决不掉的问题可以考虑将问题组件的配置文件备份后删除,然后重新安装该组件,再次配置问题可能就不复存在了。
  • 注意验证工作,不要轻易跳过验证不通过的部分,除非你对该部分的原理相当了解,能弄明白验证不通过的原因所在。 否则请认真进行每一步验证工作,这样在问题出现时才有相当于检查点的存在。 不至于找不到问题所在而彻底重新安装。

节点功能

节点指一台计算机,若采用neutron布局,则最少需要3台计算机。 包括一台计算节点(controller)需要1张网卡,一台网络节点(network)需要3张网卡,一台计算节点(compute1)需要两张网卡。 若需要加入存储节点请参照官网配置。

controller

该节点相当于项目经理,大部分的组件都需要安装在该节点上,任务的分配也都在这里进行,但该节点并不承担虚拟机的运行负载,也不承担网络负载。数据库只运行在该节点上,Dashboard也部署在这台机器的Apache上,所以如果想要外网访问Dashboard就需要给它额外一张网卡并提供公网地址。

network

该节点承担所有实例(运行在openstack上的虚拟机)的网络访问职责,注意这里只负责实例的网络访问,和物理机无关。每个物理机通过自己的网线上网。除基本环境外只需要安装网络组件。

compute

所有的实例都运行在该节点上,虚拟机所占用的资源均为该节点的硬件资源,可在环境中添加多个compute节点。

block storage (可选)

简单来说相当于硬盘,以块存储序列化后的内容,添加该节点后需要额外网卡进行存储通信。

object storage (可选)

简单来说相当于内存,以对象的形式存储数据,添加该节点后需要额外网卡进行存储通信。

组件功能

组件指安装在各节点上的软件,在不同节点上需要的组件有所不同,安装时注意选择。

Identity Service 身份验证服务 (Keystone)

  • 功能:
    1. 记录用户以及其权限
    2. 提供了每个用户的可用服务列表

Image Service 镜像服务 (Glance)

  • 功能: 提供对包括制作在内的镜像管理。

Compute Service 计算服务 (Nova)

  • 功能: 作为IaaS最主要的组成部分,计算服务负责云操作系统的运行。

Networking Service 网络服务 (Neutron)

  • 功能: 提供所有虚拟机的网络功能,包括基础网络设施的搭建以及网络访问控制。

DashBoard 图形化管理界面 (Horizon)

  • 功能: 通过浏览器打开网页操作Openstack,否则只能记住大量API通过控制台控制。

整体流程图

整体内容的文字叙述比较难懂,给一张思维导图放在前面,请将后续表述与图中内容做对应以了解流程,针对各处操作未做太详尽描述,相信各位查阅资料能够解决问题,有问题的朋友可以联系我。 GTD流程

Emacs相关模式介绍

  • org-mode 关于该模式,网络上相关介绍非常之多,大概说来就是一个Mark-Down语法来编辑内容,并且通过Emacs内置功能可以极其方便的对内容格式进行组织操作,在阅读网上相关例程后参考上文中快捷键介绍,相信你可以很快熟悉该模式。
  • capture-mode 在Emacs的以前版本,还有一个叫remember-mode的东西,两者功能非常相近,若是使用最新版本的Emacs,可以不管remember-mode,直接使用capture-mode进行内容的抓取。 该模式支持模版化操作,使用快捷键呼出capture-mode之后,将通过快捷键选择你预先设定好的模板,并随后输入内容保存到指定位置。
  • agenda-mode agenda作为Emacs的一种模式,并不是用于编辑,而是用于审阅。 在配置文件中可以对agenda所包含的文件进行关联。在设置完成后,agenda将会对所包含的文件内容进行整理,以日历、列表、标签等形式将所有的TODO内容整体呈现到你面前,并可对其直接进行操作而不用手动打开某个文件进行修改。

gtd

  • 什么是GTD GTD的核心很简单,就是要清空大脑,按照事先设定好的路线一步步将工作做完。关于这方面的书籍有很多,最出名的莫过于《Getting things done 尽管去做——无压工作的艺术》。 作为我的个人管理方式,主要就是收集->整理->组织->行动->回顾 这五步进行循环,首先把需要做的事情都记录在案,然后将整体内容进行分化不同类别,再针对每一个任务进行细化,接下来一步步去执行,最后将结果进行回顾。 个人管理也是一门学问,想要深入了解恐怕需要认真阅读以下相关书籍,这里不再详述
  • GTD与Emacs 我想关于GTD,每个人都有自己不同的理解,更是有适合自己的一套工作流,而诸多关于利用Emacs进行GTD的博客文章介绍的并非十分详实,这里我想把我个人的流程分享出来。我作为初学者仅仅是刚掌握了一些理论,在很多细节问题上仍然需要不断的完善和改进,在这过程中我会不断维护此文章。 GTD本身是不需要工具的,一个本子一支笔就可以清空大脑开始工作了, 而Emacs提供的是更快捷的操作方式和高效率的组织回顾手段,市面上的GTD类软件也非常之多,很多人直接败在了Emacs相对较高的入门门槛上,我在这里将把我学习使用的过程以自顶向下的方式表述,我想,在文章最后你就应该可以放手去做了。

所需文件

  • inbox.org 作为第一步的落脚点,周围所有杂事将在这里驻足
    1. 使用Capture-mode将目前所能想到的事情进行收集,保存到inbox.org中
    2. 在每天早上对inbox进行填充,分解,清理,把插入的内容分配到project.org以及task.org两个文件中去
    3. 工作中遇到突发事件,两分钟以内能解决的就马上办,否则Capture到inbox中
  • task.org 一次性或短期任务将从inbox中细化至此
    1. 早上对当天任务的预先规划,包括打上相关标签、设定子任务(使用checkbox)等
    2. 在工作过程中逐步将子任务打勾完成,将TODO状态转移至其他状态
    3. 晚上将task内容迁移到finish.org中
  • project.org 长远计划或项目计划
    1. 从inbox中抽象出project的内容,并做大致规划,不一定成为TODO项,但经常检阅
    2. 随着项目推进,可以对项目完成度进行审核,计时
  • finished.org task内容归宿,按照tag进行划分
    1. capture-mode添加datetree模板,每日添加记录,进行总结
    2. task内容移入每日记录下并打标签

配置项

  • emacs.d
        ;;TODO项状态切换
        (setq org-todo-keywords
                  '((sequence "TODO(t!)" "NEXT(n)" "WAITTING(w)" "SOMEDAY(s)" "|" "DONE(d@/!)" "ABORT(a@/!)")
                         ))
        ;;关联agenda-mode的文件
        (setq org-agenda-files(list "~/Documents/gtd/inbox.org"
            "~/Documents/gtd/project.org"
            "~/Documents/gtd/task.org"
            "~/Documents/gtd/finished.org"
        ))
        ;;绑定快捷键
        (define-key global-map "\C-cc" 'org-capture)
        (define-key global-map "\C-ca" 'org-agenda)
        ;;capture的template
        (setq org-capture-templates
                    `(("t" "Todo" entry (file+headline "~/Documents/gtd/inbox.org" "Tasks")
                                "* TODO %?\n%U  %i" :prepend t)
                        ("j" "Journal" entry (file+datetree "~/Documents/gtd/finished.org" "Journals")
                                "* %?\n %T  %i")
                      ("n" "Note" entry (file+headline "~/Documents/gtd/notes.org" "Notes")
                                        "* %U %?\n\n  %i" :prepend t :empty-lines 1
                     )))
        ;;org-mode下跨文件移动标题设置
        '(org-refile-targets (quote (("~/Document/gtd/inbox.org":maxlevel . 1) ("~/Document/gtd/task.org" : level .2))))
        ;;定义快速打开task.org文件的方法并绑定以快捷键
        (defun gtd()
          (interactive)
          (find-file "~/Documents/gtd/task.org"))
        (global-set-key "\C-cz" 'gtd)

流程叙述

  • 可规划任务:
    1. 早晨开始工作前进行内容整理,清空inbox,将任务分配至task,project中,并视情况标记deadline和优先级
    2. 一天的工作中以agenda作为里程碑,逐步干掉所有任务(包括task以及project)
    3. 晚上通过capture建立finished中对应日期树,写总结并将完成的任务打标记移入finished中
  • 临时事件:
    1. 预估事件处理事件,2分钟内立即着手解决
    2. 超过两分钟的事件capture到inbox中,待下一番茄钟进行规划
    3. 未能及时处理或特殊情况的事件待第二天早上整理清空inbox

心得

整套流程并不复杂,可能看起来略显繁琐,很多人一定觉得这样折腾并没有价值。我作为刚开始采用GTD的方式的学生,其实觉得一旦着手这样做之后,不断修改状态或checkout子任务带来的成就感会促使你效率的提升。事先的安排更会清空大脑,做事效率有所提高。 并且,此流程仅仅是我的习惯,针对不同的工作性质,应该更为私人定制一些。希望读到本文的人能花些时间去尝试一下这种个人管理的方法,面对这一个个的TODO变为DONE,感觉是充实的,会更有干劲去面对接下来的工作,愿本分享能够帮到更多的人。