Chinaunix首页 | 论坛 | 博客
  • 博客访问: 10168424
  • 博文数量: 1669
  • 博客积分: 16831
  • 博客等级: 上将
  • 技术积分: 12594
  • 用 户 组: 普通用户
  • 注册时间: 2011-02-25 07:23
个人简介

柔中带刚,刚中带柔,淫荡中富含柔和,刚猛中荡漾风骚,无坚不摧,无孔不入!

文章分类

全部博文(1669)

文章存档

2023年(4)

2022年(1)

2021年(10)

2020年(24)

2019年(4)

2018年(19)

2017年(66)

2016年(60)

2015年(49)

2014年(201)

2013年(221)

2012年(638)

2011年(372)

分类: 云计算

2014-02-26 17:13:32

(一)在 Ubuntu 上安装和配置 OpenStack Nova

    OpenStack 是 Python 2.6 写的,CentOS 5.6 上默认的是 Python 2.4 的环境并且还有很多依赖关系不容易升级到 2.6,所以在 Ubuntu 上安装会简单一些,而且 Ubuntu 是 OpenStack 的官方首选系统,文档都是按 Ubuntu 写的,这里采用最新的 Ubuntu 11.04 Server 64bit 版本来安装和配置 OpenStack Nova。 
1.配置网络
在安装完基本的 Ubuntu 11.04 Server 系统后升级和更新整个系统,安装完 bridge-utils 包后重启系统:

$ sudo apt-get update

$ sudo apt-get upgrade

$ sudo apt-get install bridge-utils

$ sudo reboot

配置网桥: 

2.安装 NTP 服务

OpenStack Nova 需要 NTP 服务器来保持所有节点服务器(Cloud Compute)的时间同步,所以需要在前端控制服务器(Cloud Controller)上安装 NTP 服务器,然后在节点服务器上安装 NTP 客户端保持与前端的同步:

$ sudo apt-get install ntp

$ sudo vi /etc/ntp.conf

server 127.127.1.0

fudge 127.127.1.0 stratum 10

$ sudo /etc/init.d/ntp restart

 3.安装和配置 MySQL 数据库

OpenStack Nova 需要数据库的支持,这里选用 MySQL(当然也可以用其他的数据库,比如 PostgreSQL 等):

$ sudo apt-get install mysql-server


修改 MySQL 绑定地址,以便其他的节点服务器也能访问这个数据库:

$ sudo vi /etc/mysql/my.cnf

...

#bind-address           = 127.0.0.1

bind-address            = 0.0.0.0

...

 

$ sudo /etc/init.d/mysql restart

创建一个名为 nova 的数据库,并设置 root 从任何 IP 访问的权限和密码:

$ sudo mysql -uroot -ppassword -e 'CREATE DATABASE nova;'

$ sudo mysql -uroot -ppassword -e "GRANT ALL PRIVILEGES ON *.* TO \

'root'@'%' WITH GRANT OPTION;"

$ sudo mysql -uroot -ppassword -e "SET PASSWORD FOR \

'root'@'%' = PASSWORD('password');"

4.安装 Glance 镜像服务

Glance 是个镜像服务器,用来给 OpenStack Nova 提供操作系统镜像(image)服务,提供可选择的操作系统模版(镜像)。


$ sudo apt-get install glance


 5.安装 OpenStack Nova

OpenStack Nova 已经进入 Ubuntu 11.04 源,所以直接安装就可以了,不必源码安装:

$ sudo apt-get install rabbitmq-server nova-common nova-doc python-nova

nova-api nova-network nova-volume nova-objectstore nova-scheduler nova-compute

$ sudo apt-get install -y euca2ools

$ sudo apt-get install -y unzip

配置 Nova:

$ sudo vi /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

--verbose

--s3_host=172.16.39.111

--rabbit_host=192.168.0.1

--cc_host=192.168.0.1

--ec2_url=

--fixed_range=192.168.0.0/16

--network_size=8

--FAKE_subdomain=ec2

--routing_source_ip=192.168.0.1

--sql_connection=mysql://root:password@172.16.39.111/nova

--glance_host=192.168.0.1

--image_service=nova.image.glance.GlanceImageService

重启 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

6.使用 Nova

开始使用 Nova 前需要创建 nova 数据库表、创建网络、创建管理员帐号、创建云并联到刚才创建的管理员上: 

$ sudo nova-manage db sync

$ sudo nova-manage network create 192.168.0.0/24 1 255

$ sudo nova-manage floating create 10.10.10.2 10.10.10.224/27

$ sudo nova-manage user admin vpsee

$ sudo nova-manage project create mycloud vpsee

因为多个管理员可以创建多个不同的云,所以某个云的管理员需要特定的权限才能访问和管理自己的 Nova 云,创建权限信息,并解压到自己的目录里,需要注意的是每次使用 nova 管理云的时候都需要读取 novarc 里面的配置信息:

$ mkdir /home/vpsee/creds

$ sudo nova-manage project zipfile mycloud vpsee /home/vpsee/creds/novacreds.zip

$ cd /home/vpsee/creds

$ unzip novacreds.zip

$ sudo chown -R vpsee:vpsee /home/vpsee/creds/ 

$ source /home/vpsee/creds/novarc

每次用 nova 的时候都要用到 novarc 里面的环境变量,每次 source novarc 很麻烦,所以最好加到 .bashrc 里面:

$ cat  /home/vpsee/creds/novarc >> /home/vpsee/.bashrc

$ source /home/vpsee/.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

如果一切正常的话,应该可以打印出如下的类似信息:

$ euca-describe-availability-zones verbose

AVAILABILITYZONE      nova         available

AVAILABILITYZONE      |- node00

AVAILABILITYZONE      | |- nova-scheduler  enabled :-) 2011-05-22 10:32:31

AVAILABILITYZONE      | |- nova-network      enabled :-) 2011-05-22 10:32:32

AVAILABILITYZONE      | |- nova-compute     enabled :-) 2011-05-22 10:32:24

7.启动第一个实例

启动实例之前需要先上传一个系统模版,我们称之为镜像(image),这里直接使用一个已经做好的 Ubuntu 10.10 版本镜像,下载已经做好的镜像文件并上传到镜像服务器(这里镜像服务器和前端服务器在同一台物理服务器上): 

$ wget http://c0179148.cdn1.cloudfiles.rackspacecloud.com/ubuntu1010-UEC-localuser-image.tar.gz

$ uec-publish-tarball ubuntu1010-UEC-localuser-image.tar.gz ubuntu1010-bucket x86_64

列出云里现有的可以加载的镜像,并以某个镜像(比如编号为 ami-00000003)为模版启动一个实例(操作系统):

$ euca-describe-images

IMAGE  aki-00000001  ubuntu1010-bucket/vmlinuz-2.6.32-28-server.manifest.xml           available  public                 x86_64     kernel

IMAGE  ari-00000002   ubuntu1010-bucket/initrd.img-2.6.32-28-server.manifest.xmavailable public                 x86_64     ramdisk

IMAGE  ami-00000003 ubuntu1010-bucket/maverick-server-uec-amd64.img.manifest.xml              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

检查一下实例是否成功启动和运行:

$ virsh list

 Id Name                 State

----------------------------------

  1 instance-00000001    running

 8.访问实例

启动实例后怎么访问呢?和访问 VPS 一样,需要 IP 地址然后 ssh 访问,还记得上面的网络配置么,新创建的系统将按照 192.168.0.x 的形式分配 IP,所以 192.168.0.3 就是刚刚 euca-run-instances 创建的实例的 IP 地址: 

$ ssh ubuntu@192.168.0.3

 

(二)在 CentOS 上安装和配置 OpenStack Nova

    因为 Python 的版本问题,在 CentOS 5.6 上安装 OpenStack 不是件容易的事情,因为 OpenStack 是 Python 2.6 写的,CentOS 5.6 上默认的是 Python 2.4 的环境,一些关键工具(比如 yum 等)和依赖关系都需要 2.4,不容易直接升级到 2.6,所以要在 CentOS 上安装 OpenStack 的话简单的办法是直接用 CentOS 6.0(默认是 Python 2.6)。

1.安装和配置基本系统

在安装完基本的 CentOS 6.0 系统后(最小化安装)升级和更新整个系统,然后关闭 SELINUX 后重启,为了简单方便最好也关闭 iptables:

# yum update

# yum upgrade

 

# vi /etc/sysconfig/selinux

SELINUX=disabled

 

# chkconfig iptables off

# service iptables stop

 

# shutdown -r now

 2.安装 OpenStack Nova

下载和安装 OpenStack 源:

# wget

# rpm -ivh openstack-repo-2011.3-0.3.noarch.rpm

OpenStack Nova 需要在控制结点(Cloud Controller)和计算结点(Cloud Compute)上都安装和启用 libvirtd:

# yum install libvirt

# chkconfig libvirtd on

# service libvirtd start

如果服务器用来做 Cloud Controller 结点需要安装(OpenStack Nova 云里至少要有一台服务器作为控制结点):


# yum install euca2ools openstack-nova-node-full unzip


如果服务器只是做 Cloud Compute 结点则需要在每个计算结点上都安装(理论上 OpenStack Nova 云里可以有无数个计算结点):


# yum install openstack-nova-node-compute


 3.配置 MySQL 数据库

OpenStack Nova 需要数据库的支持,这里用的是 MySQL:

# service mysqld start

# chkconfig mysqld on

# service rabbitmq-server start

# chkconfig rabbitmq-server on

修改 MySQL 绑定地址,以便其他的节点服务器也能访问这个数据库:

# vi /etc/my.cnf

...

#bind-address           = 127.0.0.1

bind-address            = 0.0.0.0

...

 

# service mysql restart

 创建一个名为 nova 的数据库,并设置 root 从任何 IP 访问的权限和密码:

# mysql -uroot -ppassword -e 'CREATE DATABASE nova;'

# mysql -uroot -ppassword -e "GRANT ALL PRIVILEGES ON *.* TO \

'root'@'%' WITH GRANT OPTION;"

# mysql -uroot -ppassword -e "SET PASSWORD FOR \

'root'@'%' = PASSWORD('password');"

 配置 Nova:

$ sudo vi /etc/nova/nova.conf

--verbose=false

--ec2_url=

--s3_host=172.16.39.111

--cc_host=172.16.39.111

--rabbit_host=172.16.39.111

--sql_connection=mysql://nova:nova@172.16.39.111/nova

--glance_api_servers=172.16.39.111:9292

--use_s3=true

--libvirt_type=kvm

--use_syslog=false

--node_availability_zone=nova

--logdir=/var/log/nova

--logging_context_format_string=%(asctime)s %(name)s: %(levelname)s [%(request_id)s %(user)s %(project)s] %(message)s

--logging_default_format_string=%(asctime)s %(name)s: %(message)s

--logging_debug_format_suffix=

--use_cow_images=true

--auth_driver=nova.auth.dbdriver.DbDriver

--network_manager=nova.network.manager.VlanManager

--scheduler_driver=nova.scheduler.zone.ZoneScheduler

--image_service=nova.image.glance.GlanceImageService

--use_ipv6=false

--ca_path=/var/lib/nova/CA

--keys_path=/var/lib/nova/keys

--images_path=/var/lib/nova/images

--buckets_path=/var/lib/nova/buckets

--instances_path=/var/lib/nova/instances

--networks_path=/var/lib/nova/networks

--dhcpbridge_flagfile=/etc/nova/nova.conf

--dhcpbridge=/usr/bin/nova-dhcpbridge

--injected_network_template=/usr/share/nova/interfaces/

--libvirt_xml_template=/usr/share/nova/libvirt.xml.template

--vpn_client_template=/usr/share/nova/client.ovpn.template

--credentials_template=/usr/share/nova/novarc.template

--state_path=/var/lib/nova

--lock_path=/var/lib/nova/tmp

--vnc_enabled=true

--vncproxy_url=

--vncserver_host=0.0.0.0

--vnc_token_ttl=300

 每次重启一堆服务很麻烦,写个脚本方便重启 nova 所有服务:

# vi nova-restart-all.sh

#!/bin/bash

for n in api compute network objectstore scheduler vncproxy; do service openstack-nova-$n restart; done

service openstack-glance-api restart

service openstack-glance-registry restart

 

# chmod +x nova-restart-all.sh

 

# ./nova-restart-all.sh

4.使用 Nova

接下来的步骤和“(一)在 Ubuntu 上安装和配置 OpenStack Nova” 差不多,这里就不再赘述: 

# nova-manage db sync

# nova-manage network create 192.168.0.0/24 1 255

# nova-manage floating create 10.10.10.2 10.10.10.224/27

# nova-manage user admin vpsee

# nova-manage project create mycloud vpsee

 导出权限信息:

# mkdir /home/vpsee/creds

# nova-manage project zipfile mycloud vpsee /home/vpsee/creds/novacreds.zip

 

# cd /home/vpsee/creds

# unzip novacreds.zip

# chown -R vpsee:vpsee /home/vpsee/creds/

 

# source /home/vpsee/creds/novarc

再次重启 nova 相关的所有服务:


# ./nova-restart-all.sh


如果一切正常的话,应该可以看到下面的类似信息,这样 OpenStack Nova 就成功安装了:

# euca-describe-availability-zones verbose

AVAILABILITYZONE      nova         available

AVAILABILITYZONE      |- node00

AVAILABILITYZONE      | |- nova-network      enabled :-) 2011-08-16 19:28:13

AVAILABILITYZONE      | |- nova-compute     enabled :-) 2011-08-16 19:28:22

AVAILABILITYZONE      | |- nova-scheduler  enabled :-) 2011-08-16 19:28:14

之后就可以启动实例了。

 

(三)为 OpenStack Nova 制作 Ubuntu 镜像

    进一步介绍如何在 OpenStack Nova 环境里制作虚拟机模板(镜像)以及创建虚拟机运行实例(以 Ubuntu 为例子)。为了和我们平时说的 “VMware/Xen/KVM/VirtualBox 虚拟机” 区分开,在这里把在 OpenStack Nova、OpenNebula 这样的云计算平台上运行的虚拟机称为 “云虚拟机”。简单说在 OpenStack Nova 平台上运行一个 ubuntu 虚拟机的流程是:先制作一个 ubuntu 虚拟机镜像(模板),然后再以这个镜像为模板来创建 ubuntu 虚拟机(实例)。

1.安装 Ubuntu 镜像
首先下载要安装的 ubuntu 版本:

$ wget

创建一个 10GB 大小的 “硬盘”(raw 格式):

$ kvm-img create -f raw ubuntu.img 10G

Formatting 'ubuntu.img', fmt=raw size=10737418240

使用刚才下载的 ubuntu “安装盘” 和刚创建的 “硬盘” 引导启动系统,为了简单起见,VPSee 在这里使用 kvm 虚拟技术,避开 xen 繁琐的配置。-vnc 参数代表打开 vnc 访问,以便可以用其他机器远程登录到这个引导界面进行安装操作:

$ sudo kvm -m 512 -cdrom ubuntu-10.04.2-server-amd64.iso \

-drive file=ubuntu.img -boot d -nographic -vnc :0

用 vncviewer 登录引导界面后按照屏幕的提示完成 ubuntu 的安装工作(和在自己电脑上安装 ubuntu 过程一样)。需要注意的是在分区阶段把 10GB 硬盘全部划分成一个 ext4 root 分区,不要创建多个分区也不要创建 swap 区:

$ vncviewer 172.16.39.111:5900

安装完后退出(必要时 kill 掉 kvm 进程),按照下面命令启动刚刚安装好的虚拟机镜像 ubuntu.img,如果出现 failed to find romfile “pxe-rtf8139.bin” 的错误提示可以通过安装 kvm-pxe 解决:

$ sudo kvm -m 512 -drive file=ubuntu.img -boot c -nographic -vnc :0

kvm: pci_add_option_rom: failed to find romfile "pxe-rtl8139.bin"

 

$ sudo apt-get install kvm-pxe

再次用 vnc 登录虚拟机镜像,安装一些必要工具(因为这个镜像将会是模板,所以最好保持最简最小化,不要乱装东西)

$ vncviewer 172.16.39.111:5900

 

$ sudo update

$ sudo upgrade

$ sudo apt-get install openssh-server cloud-init

70-persistent-net.rules 会自动添加其他的网络接口,需要删除这个文件避免自动添加除了 eth0 以外的接口。删除后系统基本就准备好了,关闭虚拟机:

$ sudo rm -rf /etc/udev/rules.d/70-persistent-net.rules

 

$ sudo shutdown -h now

2.调整 Ubuntu 镜像

因为 OpenStack 只接受 ext4 文件系统格式的镜像,所以需要把上面创建的 raw 镜像(kvm-img create -f raw)转换成 ext4 镜像。下面的步骤用来找出镜像文件里面的分区起点是从哪里开始的: 

$ sudo losetup -f ubuntu.img

$ sudo losetup -a

/dev/loop0: [fb00]:24117291 (/home/vpsee/ubuntu.img)

 

$ sudo fdisk -cul /dev/loop0

 

Disk /dev/loop0: 10.7 GB, 10737418240 bytes

255 heads, 63 sectors/track, 1305 cylinders, total 20971520 sectors

Units = sectors of 1 * 512 = 512 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk identifier: 0x000502e6

 

      Device 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 ubuntu.img

$ sudo losetup -a

/dev/loop0: [fb00]:24117291 (/home/vpsee/ubuntu.img), offset 1048576

把这整个分区拷贝到一个新文件就是一个我们要的 ext4 文件系统镜像:

$ sudo dd if=/dev/loop0 of=ubuntutemplate.img

20969472+0 records in

20969472+0 records out

10736369664 bytes (11 GB) copied, 107.455 s, 99.9 MB/s

用完 loop 后记得卸载:

$ sudo losetup -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 1

UUID=uec-rootfs                           / ext4 defaults          0 0

把内核(vmlinuz)和内存盘(initrd)文件拷贝出来以便后面和虚拟机镜像一起发布到OpenStack 云里。使用完虚拟机镜像后记得卸载(unmount):

$ sudo cp /mnt/boot/vmlinuz-2.6.32-28-server /home/vpsee/

$ sudo cp /mnt/boot/initrd.img-2.6.32-28-server /home/vpsee/

 

$ sudo umount /mnt

把刚才的虚拟机镜像 ubuntutemplate.img 的文件系统标志改成 ‘uec-rootfs’:

$ sudo tune2fs -L uec-rootfs ubuntutemplate.img

tune2fs 1.41.14 (22-Dec-2010)

3.发布 Ubuntu 镜像

好了,ubuntu 镜像已经做好了,现在可以发布到云里了,需要3个东西,虚拟机的内核文件、虚拟机的内存盘文件和虚拟机镜像文件

$ uec-publish-image -t image --kernel-file vmlinuz-2.6.32-28-server \

--ramdisk-file initrd.img-2.6.32-28-server amd64 ubuntutemplate.img mybucket

ami-00000006      mybucket/ubuntutemplate.img.manifest.xml

等待一段时间后出现 ami-00000006 mybucket/ubuntutemplate.img.manifest.xml 表示我们刚制作的 ubuntu 镜像已经正式发布到云里,以后就可以以这个镜像为模板来快速生成虚拟机实例(instance)。可以通过 euca-describe-images 来查看:

$ euca-describe-images

 

IMAGE  aki-00000001  mybucket/vmlinuz-2.6.32-28-server.manifest.xml          availablpublic           x86_64     kernel

IMAGE  ari-00000002 mybucket/initrd.img-2.6.32-28-server.manifest.xml                 available  public                 x86_64     ramdisk

IMAGE  ami-00000003 mybucket/ubuntutemplate.img.manifest.xml          untarring

4.第一个 Ubuntu 虚拟机实例

有了 ubuntu 镜像(模板)以后我们就可以以这个 “镜像” 为模板来为云计算用户创建 n 个 ubuntu 虚拟机(操作系统)实例,不过在运行实例之前需要 key:

$ euca-add-keypair mykey > mykey.priv

$ chmod 600 mykey.priv

 

$ euca-describe-keypairs

KEYPAIR       mykey      76:7d:93:88:a0:e5:3e:5d:4b:62:cd:85:c5:23:7a:05

 

$ euca-run-instances -k mykey -t m1.tiny ami-00000003

RESERVATION     r-n0lpdme5      mycloud   default

INSTANCE    i-00000001       ami-00000003                    scheduling       mykey (mycloud)

 上面使用 euca-run-instances 创建一个实例后可以用 nova-manage 命令看到:

$ sudo nova-manage vm list

instance   node            type       state      launched            image        kernel       ramdisk       project    user       zone       index

i-00000001 node01           launching  None                3            1            2

 可以看看现在的云里面 IP 分配情况:

$ sudo nova-manage network list

network                netmask             start address          DNS

192.168.3.0/25           255.255.255.128      192.168.3.3            None

刚才用 euca-run-instances 启动的一个 ubuntu 虚拟机实例的 IP 就是从 192.168.3.3 开始的,所以 ssh 登录这个 IP 就登上了我们的第一个云虚拟机:)

$ ssh 192.168.3.3

vpsee@i-00000001:~$

 

阅读(2070) | 评论(0) | 转发(0) |
0

上一篇:PVID和VID彻底研究

下一篇:OpenStack简介

给主人留下些什么吧!~~