《openstack配置以及镜像制作(整理)精品资料.doc》由会员分享,可在线阅读,更多相关《openstack配置以及镜像制作(整理)精品资料.doc(30页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、在Ubuntu上安装和配置OpenStack NovaOpenStack Nova 需要 NTP 服务器来保持所有节点服务器(Cloud Compute)的时间同步,所以需要在前端控制服务器(Cloud Controller)上安装 NTP 服务器,然后在节点服务器上安装 NTP 客户端保持与前端的同步:OpenStack 是由 Rackspace 和 NASA 共同开发的云计算平台,帮助服务商和企业内部实现类似于 Amazon EC2 和 S3 的云基础架构服务(Infrastructure as a Service, IaaS)。OpenStack 包含两个主要模块:Nova 和 Swif
2、t,前者是 NASA 开发的虚拟服务器部署和业务计算模块;后者是 Rackspack 开发的分布式云存储模块,两者可以一起用,也可以分开单独用。OpenStack 是开源项目,除了有 Rackspace 和 NASA 的大力支持外,后面还有包括 Dell、Citrix、 Cisco、 Canonical 这些重量级公司的贡献和支持,发展速度非常快,有取代另一个业界领先开源云平台 Eucalyptus 的态势。OpenStack 是 Python 2.6 写的,CentOS 5.6 上默认的是 Python 2.4 的环境并且还有很多依赖关系不容易升级到 2.6,所以在 Ubuntu 上安装会简
3、单一些,而且 Ubuntu 是 OpenStack 的官方首选系统,文档都是按 Ubuntu 写的,所以这里采用最新的 Ubuntu 11.10 Server 64bit 版本来安装和配置 OpenStack Nova. 配置网络在安装完基本的 Ubuntu 11.10 Server 系统后升级和更新整个系统,安装完 bridge-utils 包后重启系统:$ sudo apt-get update$ sudo apt-get upgrade$ sudo apt-get install bridge-utils$ sudo reboot配置网络:$ sudo vi /etc/network/i
4、nterfacesauto loiface lo inet loopbackauto eth0iface eth0 inet staticaddress 192.168.1.100netmask 255.255.255.0gateway 192.168.1.1安装 NTP 服务OpenStack Nova 需要 NTP 服务器来保持所有节点服务器(Cloud Compute)的时间同步,所以需要在前端控制服务器(Cloud Controller)上安装 NTP 服务器,然后在节点服务器上安装 NTP 客户端保持与前端的同步:$ sudo apt-get install -y ntp打开NTP的
5、配置文件 vi /etc/ntp.conf,添加如下(其他的server可以注释掉)server server 127.0.0.1fudge 127.0.0.1 stratum 10本地地址可以作为备份,当网络不通时可以利用本地时钟进行同步,也可只用本地时钟重启NTP是配置生效$ sudo /etc/init.d/ntp restart安装和配置 MySQL 数据库OpenStack Nova 需要数据库的支持,这里选用 MySQL(当然也可以用其他的数据库,比如 PostgreSQL 等):$ sudo apt-get install mysql-server修改 MySQL 绑定地址,以便
6、其他的节点服务器也能访问这个数据库:$ sudo vi /etc/mysql/f#bind-address = 127.0.0.1bind-address = 0.0.0.0$ sudo /etc/init.d/mysql restart安装 Glance 镜像服务Glance 是个镜像服务器,用来给 OpenStack Nova 提供操作系统镜像(image)服务,提供可选择的操作系统模版(镜像)。$ sudo apt-get install glanceMySQL创建数据库glance:$ sudo mysql -uroot p -e CREATE DATABASE glance;创建用户
7、 glancedbadmin:$ sudo mysql -uroot -p -e CREATE USER glancedbadmin;把数据库glance的所有特权赋给glancedbadmin用户$ sudo mysql -uroot -p -e GRANT ALL PRIVILEGES ON glance.* TOglancedbadmin% ;为用户glancedbadmin创建密码为glancedbadmin$ sudo mysql -uroot -p -e SET PASSWORD FOR glancedbadmin% =PASSWORD(glancedbadmin);编辑 /etc
8、/glance/glance-registry.conf 文件,修改sql_connection = 一行为:sql_connection = mysql:/glancedbadmin:glancedbadmin192.168.1.100/glance重启glance-registry 使修改后的/etc/glance/glance-registry.conf生效$ sudo restart glance-registry安装 OpenStack NovaOpenStack Nova 已经进入 Ubuntu 11.10 源,所以直接安装就可以了,不必源码安装:安装消息队列服务器 RabbitM
9、Q和nova的各个组件.$ sudo apt-get install -y rabbitmq-server nova-common nova-doc python-nova nova-api nova-network nova-volume nova-objectstore nova-scheduler nova-compute安装 euca2ools命令行工具包$ sudo apt-get install -y euca2ools安装解压缩工具unzip.$ sudo apt-get install -y unzipMySQL创建数据库 nova$ sudo mysql -uroot p -
10、e CREATE DATABASE nova;创建用户 novadbadmin$ sudo mysql -uroot -p -e CREATE USER novadbadmin;把数据库nova的所有特权赋给novadbadmin用户$ sudo mysql -uroot -p -e GRANT ALL PRIVILEGES ON nova.* TOnovadbadmin% ;为用户novadbadmin创建密码为novadbadmin$ sudo mysql -uroot -p -e SET PASSWORD FOR novadbadmin% =PASSWORD(novadbadmin);N
11、ova 配置编辑/etc/nova/nova.conf-dhcpbridge_flagfile=/etc/nova/nova.conf-dhcpbridge=/usr/bin/nova-dhcpbridge-logdir=/var/log/nova-state_path=/var/lib/nova-lock_path=/var/lock/nova-force_dhcp_release=True-use_deprecated_auth-verbose-s3_host=192.168.1.100-rabbit_host=192.168.1.100-cc_host=192.168.1.100-nov
12、a_url=http:/192.168.1.100:8774/v1.1-ec2_url=http:/192.168.1.100:8773/services/Cloud-fixed_range=192.168.1.0/24-network_size=8-routing_source_ip=192.168.1.100-sql_connection=mysql:/novadbadmin:novadbadmin192.168.1.100/nova-glance_host=192.168.1.100-glance_api_servers=192.168.1.100:9292-image_service=
13、nova.image.glance.GlanceImageService-vlan_interface=br100-public_interface=eth0 -flat_interface=eth0修改/etc/nova 目录的所有权,允许修改/etc/nova/nova.conf文件$ sudo chown -R root:nova /etc/nova$ sudo chmod 644 /etc/nova/nova.conf重启nova的相关服务.$ sudo restart libvirt-bin; $ sudo restart nova-network; $ sudo restart n
14、ovacompute;$ sudo restart nova-api; $ sudo restart nova-objectstore; $ sudo restart nova-scheduler; $ sudo restart nova-volume; $ sudo restart glance-api; $ sudo restart glance-registry每次一个个启动服务比较麻烦,可以编写一个脚本取名为start.sh(自定义)#! /bin/bashsudo /etc/init.d/libvirt-bin restart;sudo /etc/init.d/nova-networ
15、k restart;sudo /etc/init.d/nova-compute restart;sudo /etc/init.d/nova-api restart;sudo /etc/init.d/nova-objectstore restart;sudo /etc/init.d/nova-scheduler restart;sudo /etc/init.d/nova-volume restart;sudo /etc/init.d/glance-api restart;sudo /etc/init.d/glance-registry restart;将start.sh修改为可执行文件$sudo
16、 chmod 777 /home/bery/start.sh使用 Nova开始使用 Nova 前需要创建 nova 数据库表、创建网络、创建管理员帐号、创建云并联到刚才创建的管理员上:$ sudo nova-manage db sync$ sudo nova-manage network create private 192.168.1.0/24 1 255$ sudo nova-manage floating create ip_range=192.168.1.0/24为nova数据库创建一个有管理员权限的用户bery$ sudo nova-manage user admin bery创建一
17、个名为proj的项目$ sudo nova-manage project create proj bery重启nova的相关服务$ sudo restart libvirt-bin; $ sudo restart nova-network;$ sudo restart nova-compute;$ sudo restart nova-api;$ sudo restart nova-objectstore;$ sudo restart nova-scheduler;$ sudo restart nova-volume;$ sudo restart glance-api; $ sudo resta
18、rt glance-registry因为多个管理员可以创建多个不同的云,所以某个云的管理员需要特定的权限才能访问和管理自己的 Nova 云,创建权限信息,并解压到自己的目录里,需要注意的是每次使用 nova 管理云的时候都需要读取 novarc 里面的配置信息:创建一个目录用于下载和存放nova证书以及zip压缩文件$ mkdir /home/vpsee/creds生成用于访问和管理nova云的证书$ sudo nova-manage project zipfile proj bery /home/bery/creds/novacreds.zip利用euca2ools管理云平台需要novacr
19、eds.zip中的内容。如果有多个节点,还需要把novacreds.zip文件拷贝到其他节点浏览文件夹中创建和提取的文件,并改变其所有权$ cd /home/bery/creds$ unzip novacreds.zip$ sudo chown bery:bery /home/bery/creds/ -R从novacreds.zip中解压出来的文件有cacert.pem, cert.pem, novarc, pk.pemnovarc包含了几个环境变量,包括nova的证书,设置之后才可以使用euca2ools命令, 比如euca-describe-images, eucadescribe-ins
20、tances 等等。 这些变量可以通过source novarc 文件来设置。euca-*是不可以使用默认的novarc EC2_ACCESS_KEY格式的,解决这个问题:$sudo nova-manage user exports bery输出内容类似于export EC2_ACCESS_KEY=c043916c-9a0c-4f91-ad6c-4b30908b6c77export EC2_SECRET_KEY=d0ac688e-02f3-48f3-b758-96d886461ace打开novarc文件,替换一下两行export EC2_ACCESS_KEY=bery:projexport N
21、OVA_API_KEY=bery为:export EC2_ACCESS_KEY= c043916c-9a0c-4f91-ad6c-4b30908b6c77:projexport NOVA_API_KEY= c043916c-9a0c-4f91-ad6c-4b30908b6c77$ source /home/bery/creds/novarc每次用 nova 的时候都要用到 novarc 里面的环境变量,每次 source novarc 很麻烦,所以最好加到 .bashrc 里面:$ cat /home/bery/creds/novarc /home/bery/.bashrc$ source /
22、home/bery/.bashrc再次重启 nova 相关的所有服务:$ sudo restart libvirt-bin;$ sudo restart nova-network;$ sudo restart nova-compute; $ sudo restart nova-api;$ sudo restart nova-objectstore; $ sudo restart nova-scheduler;$ sudo restart nova-volume; $ sudo restart glance-api; $ sudo restart glance-registry如果一切正常的话,
23、应该可以打印出如下的类似信息:$ euca-describe-availability-zones verboseAVAILABILITYZONE nova availableAVAILABILITYZONE |- server1AVAILABILITYZONE | |- nova-scheduler enabled :-) 2012-04-22 10:32:31AVAILABILITYZONE | |- nova-network enabled :-) 2012-04-22 10:32:32AVAILABILITYZONE | |- nova-compute enabled :-) 2012
24、-04-22 10:32:32制作系统模板启动实例之前需要先上传一个系统模版,我们称之为镜像(image),我们可以自己手动制作镜像,也可以直接使用官方的 Ubuntu 10.10 版本镜像,下载已经做好的镜像文件并上传到镜像服务器(这里镜像服务器和前端服务器在同一台物理服务器上):$wget $ uec-publish-tarball ubuntu1010-UEC-localuser-image.tar.gz ubuntu1010-bucket x86_64列出云里现有的可以加载的镜像,并以某个镜像(比如编号为 ami-00000003)为模版启动一个实例(操作系统):$ euca-desc
25、ribe-imagesIMAGE aki-00000001 ubuntu1010-bucket/vmlinuz-2.6.32-28-server.manifest.xml available public x86_64 kernelIMAGE ari-00000002 ubuntu1010-bucket/initrd.img-2.6.32-28-server.manifest.xmavailable public x86_64 ramdiskIMAGE ami-00000003 ubuntu1010-bucket/maverick-server-uec-amd64.img.manifest.x
26、ml available public x86_64 machine aki-00000001 ari-00000002启动一个实例$ euca-add-keypair mykey mykey.priv$ euca-run-instances -k mykey -t m1.tiny ami-00000003使用euca-describe-instances查看实例状态$ euca-describe-instances RESERVATION r-gc6cgxh0 proj default INSTANCE i-00000009 ami-00000003 192.168.1.3 192.168.
27、1.3 running mykey (proj,server1) 0 m1.tiny 2012-04-24T03:39:26Z nova aki-00000001 ari-00000002如果运行后状态为pending,可以等待一会,如果正常会变成running状态检查一下实例是否成功启动和运行:$ virsh listId Name State-1 instance-00000001 running这里我们手动制作一个系统镜像,由于命令行模式相对复杂,我们在图形界面下利用kvm只做了一个img镜像(服务器版操作系统可以安装ubuntu-desktop和virtual machine mana
28、ger实现图形化界面)。创建一个大小8G的“硬盘”(raw格式)$ kvm-img create -f raw ubuntu.img 8G,大小可以根据系统大小调整,默认位置为当前用户目录,先创建盘的目的是方便找到盘的位置,然后就可以利用kvm安装,选择当前创建的盘为安装盘即可,需要注意的是在分区阶段把8GB硬盘全部分成一个ext4 root分区,不要创建多个分区也不要创建swap分区。 系统安装完成后更新系统和安装相应服务$ apt-get update$ apt-get upgrade$ apt-get install -y openssh-server cloud-init70-pers
29、istent-net.rules 会自动添加其他的网络接口,需要删除这个文件避免自动添加除了 eth0 以外的接口。删除后系统基本就准备好了,关闭虚拟机:$ sudo rm -rf /etc/udev/rules.d/70-persistent-net.rules$ shutdown -h now现在来转换镜像格式因为Openstack只接受ext4文件系统格式的镜像,所以需要把上面创建的raw镜像转换成ext4镜像。下面的步骤用来找出镜像文件里面的分区起点是从哪里开始的:$ sudo losetup -f ubuntu.img$ sudo losetup a/dev/loop0: fb00:
30、24117291 (/home/localadmin/ubuntu.img)$ sudo fdisk -l /dev/loop0Disk /dev/loop0: 10.7 GB, 10737418240 bytes255 heads, 63 sectors/track, 1305 cylinders, total 20971520 sectorsUnits = sectors of 1 * 512 = 512 bytesSector size (logical/physical): 512 bytes / 512 bytesI/O size (minimum/optimal): 512 byt
31、es / 512 bytesDisk identifier: 0x000502e6Device Boot Start End Blocks Id System/dev/loop0p1 * 2048 20969471 10483712 83 Linux上面最后一行显示分区是从扇区(sector)2048开始的,每个扇区是512个字节,所以是从 2048 x 512 = 1048576个字节开始的。记住这个1048576,下面会用到。卸载 loop 后重新从1048576字节开始挂载:$ sudo losetup -d /dev/loop0$ sudo losetup -f -o 1048576
32、ubuntu.img$ sudo losetup a/dev/loop0: fb00:24117291 (/home/localadmin/ubuntu.img), offset 1048576把这整个分区拷贝到一个新文件就是一个我们要的 ext4 文件系统镜像:$ sudo dd if=/dev/loop0 of=ubuntutemplate.img20969472+0 records in20969472+0 records out10736369664 bytes (11 GB) copied, 107.455 s, 99.9 MB/s用完 loop 后记得卸载:$ sudo loset
33、up -d /dev/loop0挂载(mount)刚创建的 ext4 文件系统镜像,并修改分区加载表(/etc/fstab),注释或删除以前的,加上 UUID=uec-rootfs 一行:$ sudo mount -o loop ubuntutemplate.img /mnt$ sudo vi /mnt/etc/fstab#UUID=1dc3a59e-faab-41ee-b232-3300163676bf / ext4 errors=remount-ro 0 1UUID=uec-rootfs / ext4 defaults 0 0把内核(vmlinuz)和内存盘(initrd)文件拷贝出来以便
34、后面和虚拟机镜像一起发布到OpenStack 云里。使用完虚拟机镜像后记得卸载(unmount):$ sudo cp /mnt/boot/initrd.img-3.0.0-17-server /home/localadmin/$ sudo cp /mnt/boot/vmlinuz-3.0.0-17-server /home/localadmin/$ sudo umount /mnt把刚才的虚拟机镜像 ubuntutemplate.img 的文件系统标志改成 uec-rootfs:$ sudo tune2fs -L uec-rootfs ubuntutemplate.img上传镜像的方式有很多种
35、,可以先打包再上传,相对方便 $ sudo tar czvf ubuntu-server.img.tar.gz initrd.img-3.0.0-17-server vmlinuz-3.0.0-17-server ubuntutemplate.img打包完成后用户目录下便有ubuntu-server.img.tar.gz文件,和官方提供的文件类似上传制作的镜像$ uec-publish-tarball ubuntu-server.image.tar.gz ubuntu-server-bucket x86_64列出云里现有的可以加载的镜像,并以某个镜像(比如编号为 ami-00000003)为模
36、版启动一个实例(操作系统):可以使用$ euca-describe-images查看上传的系统镜像IMAGE ami-00000003 ubuntu-server-bucket/ubuntutemplate.img.manifest.xml available private x86_64 machine aki-00000001 ari-00000002 instance-storeIMAGE ari-00000002 ubuntu-server-bucket/initrd.img-3.0.0-17-server.manifest.xml available private x86_64 r
37、amdisk instance-storeIMAGE aki-00000001 ubuntu-server-bucket/vmlinuz-3.0.0-17-server.manifest.xml available private x86_64 kernel instance-store附录资料:不需要的可以自行删除bat文件的基本应用bat是dos下的批处理文件 .cmd是nt内核命令行环境的另一种批处理文件 从更广义的角度来看,unix的shell脚本以及其它操作系统甚至应用程序中由外壳进行解释执行的文本,都具有与批处理文件十分相似的作用,而且同样是由专用解释器以行为单位解释执行,这种文本
38、形式更通用的称谓是脚本语言。所以从某个程度分析,batch, unix shell, awk, basic, perl 等脚本语言都是一样的,只不过应用的范围和解释的平台各有不同而已。甚至有些应用程序仍然沿用批处理这一称呼,而其内容和扩展名与dos的批处理却又完全不同。 = 首先批处理文件是一个文本文件,这个文件的每一行都是一条DOS命令(大部分时候就好象我们在DOS提示符下执行的命令行一样),你可以使用DOS下的Edit或者Windows的记事本(notepad)等任何文本文件编辑工具创建和修改批处理文件。 = 注 = 批处理文件中完全可以使用非dos命令,甚至可以使用不具有可执行特性的普通
39、数据性文件,这缘于windows系统这个新型解释平台的涉入,使得批处理的应用越来越边缘化。所以我们讨论的批处理应该限定在dos环境或者命令行环境中,否则很多观念和设定都需要做比较大的变动。 = 其次,批处理文件是一种简单的程序,可以通过条件语句(if)和流程控制语句(goto)来控制命令运行的流程,在批处理中也可以使用循环语句(for)来循环执行一条命令。当然,批处理文件的编程能力与C语言等编程语句比起来是十分有限的,也是十分不规范的。批处理的程序语句就是一条条的DOS命令(包括内部命令和外部命令),而批处理的能力主要取决于你所使用的命令。 = 注 = 批处理文件(batch file)也可以
40、称之为批处理程序(batch program),这一点与编译型语言有所不同,就c语言来说,扩展名为c或者cpp的文件可以称之为c语言文件或者c语言源代码,但只有编译连接后的exe文件才可以称之为c语言程序。因为批处理文件本身既具有文本的可读性,又具有程序的可执行性,这些称谓的界限是比较模糊的。 = 第三,每个编写好的批处理文件都相当于一个DOS的外部命令,你可以把它所在的目录放到你的DOS搜索路径(path)中来使得它可以在任意位置运行。一个良好的习惯是在硬盘上建立一个bat或者batch目录(例如C:BATCH),然后将所有你编写的批处理文件放到该目录中,这样只要在path中设置上c:bat
41、ch,你就可以在任意位置运行所有你编写的批处理程序。 = 注 = 纯以dos系统而言,可执行程序大约可以细分为五类,依照执行优先级由高到低排列分别是:DOSKEY宏命令(预先驻留内存),COMMAND.COM中的内部命令(根据内存的环境随时进驻内存),以com为扩展名的可执行程序(由 直接载入内存),以exe位扩展名的可执行程序(由 重定位后载入内存),以bat位扩展名的批处理程序(由 解释分析,根据其内容按优先级顺序调用第2,3,4,5种可执行程序,分析一行,执行一行,文件本身不载入内存) = 第四,在DOS和Win9x/Me系统下,C:盘根目录下的AUTOEXEC.BAT批处理文件是自动运
42、行批处理文件,每次系统启动时会自动运行该文件,你可以将系统每次启动时都要运行的命令放入该文件中,例如设置搜索路径,调入鼠标驱动和磁盘缓存,设置系统环境变量等。下面是一个运行于Windows 98下的autoexec.bat的示例: ECHO OFF PATH C:WINDOWS;C:WINDOWSCOMMAND;C:UCDOS;C:DOSTools; C:SYSTOOLS;C:WINTOOLS;C:BATCH LH SMARTDRV.EXE /X LH DOSKEY.COM /insert LH CTMOUSE.EXE SET TEMP=D:TEMP SET TMP=D:TEMP = 注 =
43、AUTOEXEC.BAT为DOS系统的自动运行批处理文件,由COMMAND.COM启动时解释执行; 而在Win9x环境中,不仅增加支持了 DOSSTART.BAT, WINSTART.BAT 等许多其它自动运行的批处理文件,对AUTOEXEC.BAT 也增加了 .DOS .W40 .BAK .OLD .PWS 等许多变体以适应复杂的环境和多变的需求。 = willsort 编注 = 以下关于命令的分类,有很多值得推敲的地方。常用命令中的本不是命令,而dir、copy等也很常用的命令却没有列入, 而特殊命令中所有命令对我来说都是常用命令。建议将批处理所引用的命令分为内部命令、外部命令、第三方程序
44、三类。而内部命令和外部命令中别有一类是专用于或常用于批处理中的命令可称之为批处理命令。 以下摘录MS-DOS 6.22 帮助文档中关于批处理命令的文字,当然,其中有些概念和定义已经有些落后了。 批处理命令 批处理文件或批处理程序是一个包含若干MS-DOS命令的正文文件,扩展名为.BAT。当在命令提示符下敲入批处理程序的名称时,MS-DOS成组执行此批处理程序中的命令。 任何在命令提示符下可使用的命令都可用在批处理程序中。此外,下面MS-DOS命令是专门在批处理程序中使用的。 = 常用命令 echo、call、pause、rem(小技巧:用:代替rem)是批处理文件最常用的几个命令,我们就从他们
45、开始学起。 = 注 = 首先, 不是一个命令, 而是DOS 批处理的一个特殊标记符, 仅用于屏蔽命令行回显. 下面是DOS命令行或批处理中可能会见到的一些特殊标记符: CR(0D) 命令行结束符 Escape(1B) ANSI转义字符引导符 Space(20) 常用的参数界定符 Tab(09) ; = 不常用的参数界定符 + COPY命令文件连接符 * ? 文件通配符 字符串界定符 | 命令管道符 文件重定向符 命令行回显屏蔽符 / 参数开关引导符 : 批处理标签引导符 % 批处理变量引导符 其次, : 确实可以起到rem 的注释作用, 而且更简洁有效; 但有两点需要注意: 第一, 除了 : 之外, 任何以 :开头的字符行, 在批处理中都被视作标号, 而直接忽略其后的所有内容, 只是为了与正常的标号相区别, 建