openstack学习笔记及问题汇总

目标:快速搭建openstack kilo并了解其主要服务模块。

openstack从虚拟化服务模块来划分:

  1. 弹性计算(nova compute)
  2. 存贮(cinder、swift)
  3. 网络(neutron或nova network)

Trove数据库存贮应该仍是比较重大的一块未被归入,应该还未成熟,但对于一整套完整的云服务来讲,这一块是必不可少的。对于一个初学者来讲,因为openstack涉及到不一样的基础知识,特别是从开发人员的角度,可能比较少接触网络这块,那可能到neutron这里的网络虚拟化就须要花更多的时间。而在存贮这里,若是没有提早作磁盘上的规划分区,在搭建配置的过程每每要从新安装系统,从新作磁盘分区,不过若是你有足够的时间,多装几回也算是练手。html

基本概念

openstack每个模块安装后,都有对应的操做命令。dashboard则提供界面资源管理,界面看起来也更直观一些。openstack最主要的一个业务关系。node

  1. 项目
  2. 用户(及相关角色权限)
  3. 实例
  4. 存贮
  5. 镜像
  6. 网络

全部的资源都基于项目,初始化service项目,提供必要的服务接口资源。admin角色具备管理这些系统资源的权限,系统级资源主要有项目、用户、项目-用户关系、用户-角色关系、系统信息(cpu、内存、存贮、可分配的IP池)、公用的镜像及快照、网络安全模板、系统参数等。管理员能够新建一个项目,并分配给指定的用户,好比新建一个demo项目分配给demo这个用户,这样demo用户(也称租户)就能够在demo项目下,申请和建立独立的私有资源,好比实例、网络、网络安全、存贮、快照等。python

openstack学习之Single Machine搭建及关键点

All-In-One Single Machine

若是查看本地运行开发环境,能够搭建单机版,这是最小安装,网络和存贮都是最简版,不适于正式环境。下载完单机版的openstack后,先修改配置文件,先把/sample/local.conf拷贝一份到安装目录,而后再修改local.conf,主要是对网络的配置修改mysql

HOST_IP=192.168.1.224 //本机的IP地址
FLOATING_RANGE=192.168.1.224/27 //绑定的外网IP地址225-254
FLAT_INTERFACE=eno1 //eno1是你网卡的名称

配置完成后执行./stack.sh进行安装。若是你安装屡次,产生一些垃圾数据,有必要执行./clean.sh清理掉这些垃圾数据,再进行安装。linux

绑定Floating IP以及从外网SSH实例

在demo项目下,新开一个实例,这时在dashboard下,能够经过页面直接连接进去。默认状况下会有一个10网段开头的内网ip,你的工做网段192.168.1.*与这个租户内网是不通的,按上面的网络配置,能够绑定一个浮动ip,好比分配了192.168.1.225。这时在工做网段仍是没法ping或ssh192.168.1.225,须要在项目下设置你的安全组。设置ICMP任意接入、SSH接入22端口接入。再次ping或ssh就能够了。ios

openstack kilo学习之网络规划

nova network相对简单,只能组建一个扁平的网络结构,不支持二层网络隔离,只支持VLAN模式;neutron支持二层网络隔离,支持GRE或VXLAN模式,使用openvswitch技术,稳定性在kilo版里有待检验。sql

标准的nova network网络拓补图 imagemongodb

标准的neutron网络拓补图 image数据库

在学习过程当中,不可能搭建这么多实体的网络,一般咱们把存贮网络Strage network跟管理网络Manager network共用。在公司的内部环境也不可能真的拉一根外网,简单接在公司的网络上。 在nova network下网络结构简单不少,可是功能也相对较弱。swift

nova network网络进一步简化

controller node:一个网卡

compute node:两个网卡

若是觉的麻烦,甚于能够把管理网络的网段跟公司的网段是同一个也不要紧,这样连物理的路由设置也省了,只要分配两个公司网络的两个ip地址给controller node和compute node就能够。

neutron网络进一步简化

neutron的网络比nova network强不少,但也复杂不少,我在安装的过程当中,对于其不一样的网段要求,在交换机上作了专门的配置。

交换机的大体划分(24口交换机)

划出16口作管理网络(存贮网络共用)的网段,两个tunnel network也使用此口。

controller node:接到交换机的管理网络网段接口

network node:网卡一:接到交换机的管理网络网段接口,按要求设置网关;网卡二:接到交换机的管理网络网段接口,按要求不需设置网关;网卡三:接到交换机公司网络网段,不设置ip

compute node:网卡一:接到交换机的管理网络网段接口,按要求设置网关;网卡二:接到交换机的管理网络网段接口,按要求不需设置网关。

openstack kilo操做之系统磁盘规划

按kilo的安装顺序 cinder和swift是比较靠后的,每每会在安装的时候,觉的磁盘的划分不尽合理,这时候候有可能由于数据方面的缘由,有可能很差调整分区的大小,弄很差得重装系统以调整磁盘分区。所以有必要事先了解一下openstack应用对存贮的应用和划分。

cinder磁盘规划

cinder服务跟逻辑卷概念很接近,但他的硬件资源是安装时候配置的,最好分配给cinder服务的资源是干净的分区,好比说sda1这个分区,通常是装系统自己的,理论上也是能够用来作cinder服用资源,但这样就比较混乱。若是有条件,挂多块磁盘,能够有一块系统盘,其余的磁盘用于cinder服务。若是只有一个磁盘,最好预先作好分区,好比sda1分区用于系统自己,sda2计划专门用于cinder分区。按安装规划为其建立物理卷、卷组。

Swift磁盘规划

swift的磁盘规划与cinder相似,最好提早规划并划分专门的分区供swift服务使用。

数据库存贮规划

文件存贮若是使用swift,那么数据库存贮放哪里,一般计算节点自带的磁盘并不大,通常建议经过cinder再挂载更多的存贮空间来存放数据库,而且这样的存贮空间能够随着业务的增加再弹性的扩增。可是若是你想要简单的申请一个存贮比较大的实例,这时就有必要把sda1的分区设置的大一些,计算节点的资源默认只从sda1里读取磁盘分区大小,但通常建议使用cinder来实现像数据库存贮扩展。固然若是你也能够直接安装Trove试试,目前还不是很稳定。

openstack kilo安装注意点

从U盘安装CentOS7的问题

CentOS7作成U盘驱动盘后,默认的卷标是CENTOS,在安装过程出现错误提示/dev/root没法找到,此时须要在进入安装centos界面选项时,按e进入安装项的编辑状态,把其中的LABEL改为LABEL=CENTOS后,按ctrl+x进入安装便可。

RAID0二次安装时没法发现磁盘问题

进CMOS删除RAID0设置,再次进行设置便可,不一样的主板设置会略有不一样。

ntpd服务没法自动重起

openstack要求ntp同步,可是在机器重起后,ntp服务设置成enable也不会自启动。这是由于目前rhel7默认起动的是chronyd时间同步,必须disable掉chronyd服务。 systemctl enable ntpd.service systemctl disable chronyd.service

新增节点时先关闭防火墙

systemctl disable firewalld.service 以后系统会安装openstack-selinux安全子系统

数据库安装mysql

默认mysql的数据目录/var/lib/mysql,不利于数据存贮的扩展,所以在安装时能够把datadir目录设置到非系统分区,以centos7为例,会默认建立卷组,建议把数据存贮在某个逻辑卷下,方便扩展。

数据库没法链接问题

/etc/my.cnf.d/mariadb_openstack.cnf bind-address //此参数用于链接地址的限制设置,把此项注释掉或配置不限制你当前的ip便可

nova endpoints警告信息

警告信息以下: WARNING: nova has no endpoint in! Available endpoints for this service 能够不用理会,若是要消除警告信息在bash中加入 export OS_REGION_NAME=RegionOne[对应以前安装的配置也都是RegionOne],再次执行nova endpoints带警告的纪录消失。

'ascii' codec can't decode错误

在启动实例时提示出错信息以下

错误: 'ascii' codec can't decode byte 0xe5 in position 0: ordinal not in range(128)

有时候这个问题能够经过修改 /etc/nova/nova.conf

virt_type=qemu

可是这样修改会使instance变的很慢,并且在其上面的应用出错,最后整个instance可能没法启动。所以这样的修改是不合理的,只有当执行

egrep -c '(vmx|svm)' /proc/cpuinfo

返回值是0时,才设置virt_type=qemu,其余状况都使用kvm。那使用kvm怎么会返回'ascii' codec can't decode错误呢?答案是主板没有设置支持虚拟化,不一样的主板进cmos后找到cpu相关设置项设置支持虚拟化问题获得解决。以ThinkServer TS540为例,进入Bios->CPU Setup,选项Intel(R) Virtualization Technology默认是Disabled改在Enabled,保存后启动系统,问题解决。

dashbaord session过时后再没法登陆

/etc/openstack-dashboard/local.settings 加上一行 AUTH_USER_MODEL='openstack_auth.User'

neutron controller节点配置注意点

ovs-vsctl add-port br-ex eno3 这里的eno3对应的网卡设备名为ifcfg-eno3,但这里书写不要指定全设备名,不然会出错。

instance没法上外网

查看/etc/resolve.conf 把nameserver配置成稳定的dns服务ip

没法链接上instance控制界面

修改controller节点/etc/nova/nova.conf

novncproxy_host=0.0.0.0
novncproxy_port=6080
novncproxy_base_url=http://controller:6080/vnc_auto.html

重起nova相关的service、 systemctl start openstack-nova-api.service openstack-nova-cert.service openstack-nova-consoleauth.service openstack-nova-scheduler.service openstack-nova-conductor.service openstack-nova-novncproxy.service 没法重起

重起单个openstack-nova-api.service也出错 ERROR nova OSError: [Errno 13] Permission denied: '/usr/lib/python2.7/site-packages/keys' mkdir -p /usr/lib/python2.7/site-packages/keys chmod -R 777 /usr/lib/python2.7/site-packages/keys 能正常启动openstack-nova-api.service 可是又发现openstatck-nova-cert.service没有正常起来,查看出错 OSError: [Errno 13] Permission denied: '/usr/lib/python2.7/site-packages/CA' mkdir -p /usr/lib/python2.7/site-packages/CA chmod -R 777 /usr/lib/python2.7/site-packages/CA 再次重起相关业务,能正常起来。而且控制台能链接上了,问题获得解决。

正确理解swift的DEVICENAME

看如下加资源的语法 swift-ring-builder account.builder add r1z1-STORAGE_NODE_MANAGEMENT_INTERFACE_IP_ADDRESS:6002/DEVICE_NAME DEVICE_WEIGHT

STORAGE_NODE_MANAGEMENT_INTERFACE_IP_ADDRESS指管理IP地址 DEVICE_NAME 这里的DEVICE_NAME是指分区号仍是指文件目录呢? 通过屡次失败的测试后,肯定这里的DEVICE_NAME是指向rsyncd.conf里path=/srv/node下的挂载点 若是想把/srv/node/sda6这个挂载点拿来作object storage资源 用df,确承认以查看到如下挂载点信息 /dev/mapper/centos-swift 470580736 32928 470547808 1% /srv/node/sda6

这里的DEVICE_NAME就是指sda6

swift配置同步及权限问题

在配置swift-ring-builder时,必定要注意把当前目录定位到/etc/swift/ 1)要注意新增节点时,必定要把*.ring.gz从新覆盖到全部节点下的文件 2)要注意新增节点时,必定要把controller节点的/etc/swift/swift.conf覆盖到新节点 3) 要注意全部的节点/var/cache/swift、/etc/swift的权限,chown -R swift:swift /etc/swift/ /var/cache/swift 4) 正确理解和配置DEVICE_NAME 以上4点都作到的话,基本上能解决各类权限问题

Telemetry安装问题

  • mongodb 启动问题 controller安装mongodb过程当中 启动mongod异常,-f mongod.conf参数并不起做用

修改/usr/lib/systemd/system/mongod.service

、#User=mongodb 注释掉,默认为root

修改ExecStart直接使用参数

ExecStart=/usr/bin/mongod --dbpath=/home/mongodata/ --logpath=/var/log/mongodb/mongodb.log --logappend --fork --nojournal
  • telemetry_secret的产生

telemetry的telemetry_secret不一样与auth_token,需另行产生一个 openssl rand -hex 10

  • 测试时The service catalog is empty错误 source admin-openrc.sh ceilometer meter-list会出现错误The service catalog is empty. 解决办法: cp admin-openrc.sh ceilometer-openrc.sh vi ceilometer-openrc.sh 作如下修改,三个修改点
unset OS_PROJECT_DOMAIN_ID //修改点
unset OS_USER_DOMAIN_ID  //修改点
export OS_PROJECT_NAME=admin
export OS_TENANT_NAME=admin
export OS_USERNAME=admin
export OS_PASSWORD=waencloud
export OS_AUTH_URL=http://controller:35357 //修改点
export OS_IMAGE_API_VERSION=2
export OS_REGION_NAME=RegionOne
export OS_VOLUME_API_VERSION=2

source ceilometer-openrc.sh ceilometer meter-list 能正确显示结果

拼写必定要正确

openstack安装很冗长,kilo的安装文档质量仍是不错的,可是在安装过程当中不免打字拼写出错,可能就会致使一些奇怪的问题,所以拼写务必正确。

glance新增更多镜像

参考这里https://www.rdoproject.org/Image_resources 提供了federa、centos、windowserver相关镜像. 咱们关心的仍是root的初始密码问题

centos镜像的root密码

glance image-create --name "CentOS-7-x86_64" --file /tmp/images/CentOS-7-x86_64-GenericCloud-1503.qcow2 --disk-format qcow2 --container-format bare --visibility public --progress

在dasboard里启动实例时设置启动后执行如下脚本

、#cloud-config
chpasswd:
 list: |
   root:stackops
   centos:stackops
 expire: False
ssh_pwauth: True

ubunt镜像的root密码

、#cloud-config
password: mypassword
chpasswd: { expire: False }
ssh_pwauth: True

fedor镜像的用户及密码

、#cloud-config
password: fedora
chpasswd: { expire: False }
用户是fedora,不是root

windows镜像的密码

下载windows的镜像后是一个euladownload.gz文件

使用如下命令把镜像加入到glance gunzip -cd euladownload.gz | glance image-create --property hypervisor_type=qemu --name "Windows Server 2012 R2 Std Eval" --container-format bare --visibility public --disk-format qcow2 文件大概有6G多,过程有些慢,须要耐心等候 从openstack启动windows,使用.middle,大概须要8分钟,首次会要求重置密码

若是是boot命令方式,则可把以上数据脚本放在某个文件里,而后使用—-user-data参数指向这个文件

起来后,会让你输入密码,按上面输入stackops,而后会让你修改为新密码。

openstack使用及测试

资源信息

不论是swift仍是cinder都没有整体有多少磁盘资源的提示,这也能理解,由于swift是以挂载点为资源接入点,具备不肯定性。cinder里有个磁盘上限参数设置, 但这个上限设置并不检测你实际的磁盘空间资源,好比默认是1000G,实际上你已没有磁盘空间了,他仍是会显示1000G。 另外instance所对应的磁盘空间,但只认/root挂载点的设备大小 nova hypervisor只认/root挂载点的磁盘大小, nova hypervisor-stats查看其大小,通常若是只有一块磁盘,好比/root挂载点50G,/home挂载点200G 这时计算节点只统计到最多50G的本地存贮,不过我偿试建了一个实例,磁盘大小为100G,实例自己能够建立成功。 但在使用过程当中还有待进一步验证。此时咱们再看 nova hypervisor-stats会看到怪异的统计信息 local_gb 为50G //总共有50G的空间 local_gb_used 为100G //已用100G

dashboard使用问题

  • 没法删除实例 在dashboard界面上能够看到instanceid,而后进入controller节点用命令操做 nova reset-state intanceid nova delete intanceid

    若是还搞不定,进入数据库 use nova; update instances set deleted_at = updated_at, deleted = id, power_state = 0, vm_state = "deleted", terminated_at = updated_at, root_device_name = NULL, task_state = NULL where deleted = 0; update instance_info_caches set deleted_at = updated_at, deleted = id where deleted = 0; update fixed_ips set instance_id = NULL, allocated = 0, virtual_interface_id = NULL where deleted = 0;

dashboard相关资源操做

dashboard并无想象的强状,有些操做数据关联大,操做必定要按数据关联的次序进行,不然常常会操做报错,报错也很不到位。好比添加子网络,路由等。删除时要按数据的关联倒着删除,不能够一步到位就删除网络。有些操做仍是会被容许,好比删除整个项目成功,但实际上并无删除关联数据,这样在dashboard上,有时就会看到一些垃圾数据。

虚拟子网

在neutron下,能够建不一样的路由和子网,请注意不要让子网段冲突,若是冲突可能会形成申请instance不成功等一些奇怪问题。

云主机类型id

新建云主机时,id的取值最好是按顺序取整数值,自生成的uuid,在引用时可能会出错。

自恢复测试

  • 若是断电重启后,如何保持instance恢复状态 修改/etc/nova/nova.conf
resume_guests_state_on_host_boot=True

默认为false,须要手动去启动instance

  • 关闭计算结点服务测试 结点上已开出的instance仍正常运行,新开的instance不会分配到此结点,资源统计也再也不统计此结点。

  • 撤掉计算结点操做 先闭节点服务,这时在dashboard上还会看到此计算节点处于down状态,点疏散主机,能够把上面的实例疏散到其余主机上。也能够用迁移到指定的其余节点(能够带上磁盘及块一同迁移)。

  • 宕机处理 试着把实例所在的物理机关掉,此时就没法再连上实例了,dashboard控制台会一直处于加载中,而虚拟机管理器则显示此计算节点中止服务。计算结点,宕机后的手动恢复可参考http://longgeek.com/2012/10/31/openstack-compute-node-is-down-running-in-the-previous-instance/

openstack high availability

生产环境须要保证openstack高可靠性