`
truemylife
  • 浏览: 228058 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

openstack学习笔记及问题汇总

阅读更多

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

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

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

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

基本概念

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

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

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

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

All-In-One Single Machine

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

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清理掉这些垃圾数据,再进行安装。

绑定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就可以了。

openstack kilo学习之网络规划

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

标准的nova network网络拓补图 image

标准的neutron网络拓补图 image

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

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高可靠性

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics