欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

openstack学习笔记及问题汇总 openstacknovaneutron虚拟化swift 

程序员文章站 2022-05-31 22:43:49
...

目标:快速搭建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网络拓补图 openstack学习笔记及问题汇总
            
    
    
        openstacknovaneutron虚拟化swift 

标准的neutron网络拓补图 openstack学习笔记及问题汇总
            
    
    
        openstacknovaneutron虚拟化swift 

在学习过程中,不可能搭建这么多实体的网络,通常我们把存贮网络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高可靠性