本文搭建的OpenStack是多节点双网卡模式,节点类型包括控制节点和计算节点,没有网络节点。这里搭建的是控制节点,因为服务比较多,因此安装步骤比计算节点复杂一些。
这里不详细介绍每一步,因为我也是按照别人的文档来搭建的,个人觉得这个过程里最重要的就是文档,被坑过才有这多么痛的领悟。因此这里主要是po出参考的链接参考教程,希望给看到的初学者一点帮助,减少不必要的时间浪费。
提醒:注意版本,这个文档针对OpenStack icehouse Centos6.5,也是只有控制节点和计算节点的类型。此外虚拟机请记得按需要保存快照,便于回滚。
参考链接:https://github.com/emagana/OpenStack-Icehouse-Install-Guide/blob/master/OpenStack-Icehouse-Installation.rst#configure-networking-on-controller-node
有几处需要注意的地方:
(1)教程在/etc/yum.repos.d/rdo.repo里给的baseurl=http://repos.fedorapeople.org/repos/openstack/openstack-icehouse/epel-6已经失效了,打开也是错的,可以改成https://repos.fedorapeople.org/repos/openstack/EOL/openstack-icehouse/epel-6/ 这个链接通过网页打开可以看到里面很多.rpm文件。
(2)配置Neutron的时候,在vi /etc/sysctl.conf后执行sysctl -P 报错
error: "net.bridge.bridge-nf-call-ip6tables" is an unknown key
error: "net.bridge.bridge-nf-call-iptables" is an unknown key
error: "net.bridge.bridge-nf-call-arptables" is an unknown key
解决办法比较简单:
modprobe bridge
lsmod|grep bridge
(3)最后登录的页面是http://controller/dashboard,而非http://controller/horizon(会得到404)。
(4)因为初学,担心复杂的过程中出错,基本全都通过复制粘贴,这很不安全,因为所有这样做搭建出来的用户名和密码都一样,实用的话还是注意一些吧。此外,我注意到有些教程给的OS_SERVICE_TOKEN是随机获取的一个序列值TOKEN,而这个教程给的就是ADMIN,太过简单了。
(5)步骤里很多涉及到改配置文件的操作,有些是新创建文件,有些是在原有文件上修改,注意有些变量直接是被注释,没有被设置,因此只需要复制粘贴教程就行,而有些已经设置了,需要替换,可能要挨个检查,但文档里都是写的Edit,总之需要细心谨慎。
(6)glance设置里有处source creds,没有创建过creds文件,这里直接跳过就行。
(7)注意命令返回结果,如果出错的话尽快解决,有一些像是出错但是没有明确说error的搜一搜或者跳过吧。
小记
折腾了很久,遇到了很多问题,其中最多的是一个类似
(OperationalError) (1045, “Access denied for user ‘keystone’@'openstack1′ (using password: YES)”)
的问题,返回的错误可能不是这个,但是去查日志最后都是这个原因。也查了一些资料,原因是因为mysql没有给controller访问这个数据库的权限,但是很明显在每次创建数据库的时候我们都附加了类似如下的语句,分别给本机和其他主机访问的权限。
mysql> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' IDENTIFIED BY 'KEYSTONE_DBPASS';
mysql> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' IDENTIFIED BY 'KEYSTONE_DBPASS';
有一个看上去还算靠谱的方法,先是设置/etc/my.conf bind_address=0.0.0.0,还将/etc/hosts里的controller复制到了127.0.0.1的主机名后面。当时通过了一次,但是后续还是遇到了上面的问题。
最后的解决办法就是找了个新教程(给的这个),这里面bind_address=controller并没有改变,但是我注意到这里面所有的口令都不是用环境变量代替的,而是实实在在的口令"password",但我不清楚这是不是根本原因。
总的来说,觉得浪费这么多时间的原因在于不懂这些步骤的含义,比如说不知道各种xxxxx_DEPASS的值是什么,出错的时候显示的是”YES“,简直一窍不通,真的弄懂还是需要很多基础的,大家共勉。