热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

OpenStack安装配置实践

OpenStack是一套用来管理虚拟机的平台软件。它不是一个单一的软件,而是集成了很多个组件用来协同合作。简单的来说,譬如有十台服务器,在VMware的情况下,我们在每台服务器上安装esx或者esxi,然后装一台vcenter,在vcenter的管理界面里把十台服务器的esx通

OpenStack是一套用来管理虚拟机的平台软件。它不是一个单一的软件,而是集成了很多个组件用来协同合作。简单的来说,譬如有十台服务器,在VMware的情况下,我们在每台服务器上安装esx或者esxi,然后装一台vcenter,在vcenter的管理界面里把十台服务器的esx通过域名或者ip加入,就能在vcenter里面统一管理。类似的,红帽也有virsh这种管理虚拟机的程序。

相关阅读:在Ubuntu上安装和配置OpenStack Nova

在这里我不介绍其他的云平台的管理软件,只是介绍如何从技术角度来使用OpenStack。如果要作为生产环境的话,你还需要考虑更多,譬如架构,网络拓扑,存储的方式,节点的分布等等。

在本篇文章里,我将介绍采用ec2兼容认证的方式 。所有组件安装在一台controller上。

关键字定义

控制端:类似vcenter的管理系统。

节点:类似安装了esx的服务器。

nova组件:安装在节点上,让节点能按照控制端的命令来操作节点上的虚拟机或者存储。

glance组件:用来管理镜像。

环境准备

ubuntu 11.10,服务器双网卡

步骤

安装完基本的操作系统后 

$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo apt-get install bridge-utils  #安装网桥软件

配置网络接口

在这里我的架构是eth0连接了外网,即我可以访问的网口。eth1做了网桥,和节点之间通过一个交换机连接。这样的好处是,内部节点和控制器的流量都走br100的交换机,而不会影响虚拟机上的应用使用的网络。

$ sudo vi /etc/network/interfaces
auto eth0
iface eth0 inet static
address 192.168.200.21
netmask 255.255.255.0
network 192.168.200.0
broadcast 192.168.200.255
gateway 192.168.200.10
auto br100
iface br100 inet static
bridge_ports eth1
bridge_stp off
bridge_maxwait 0
bridge_fd 0
address 10.200.200.2
netmask 255.255.255.0
$ sudo /etc/init.d/networking restart

初期准备工作做好,接下来就是要安装关于nova,glance等组件

$ sudo apt-get install -y rabbitmq-server #安装MQ消息M件
$ sudo apt-get install -y python-greenlet python-mysqldb #安装Python dependencies

接下来安装各个nova组件及依赖

$ sudo apt-get install nova-volume nova-vncproxy nova-api nova-ajax-console-proxy
$ sudo apt-get install nova-doc nova-scheduler nova-objectstore
$ sudo apt-get install nova-network nova-compute
$ sudo apt-get install glance

安装euca2ools和unzip

$ sudo apt-get install -y euca2ools unzip

接下来我们安装数据库,这e我选择了MySQL,其实个人觉得PostgreSQL更好。

$ sudo su -
# MYSQL_PASS=nova 设定mysql的密码和nova数据库的密码
# cat < >mysql-server-5.1 mysql-server/root_password password $MYSQL_PASS
>mysql-server-5.1 mysql-server/root_password_again password $MYSQL_PASS
>mysql-server-5.1 mysql-server/start_on_boot boolean true
>MYSQL_PRESEED
# apt-get install -y mysql-server
# exit 退出root环境
$ sudo sed -i 's/127.0.0.1/0.0.0.0/g' /etc/mysql/my.cnf 修改my.cnf配置文件
$ sudo service mysql restart
$ MYSQL_PASS=nova 在普通用户环境下把密码再次设置一下变量
$ NOVA_PASS=notnova 这是nova数据库的密码
$ sudo mysql -uroot -p$MYSQL_PASS -e 'CREATE DATABASE nova;' 创建一个名字为nova的数据库,这e建议新手使用nova的名字,如果这e换别的名字,那麽在nova的配置文件e面也需要更改
$ sudo mysql -uroot -p$MYSQL_PASS -e "GRANT ALL PRIVILEGES ON *.* TO 'nova'@'%' WITH GRANT OPTION;"
$ sudo mysql -uroot -p$MYSQL_PASS -e "SET PASSWORD FOR 'nova'@'%' = PASSWORD('$NOVA_PASS');"

至此,nova,glance的安装部分完成,接下来是配置。

nova配置

$ sudo vi /etc/nova/nova.conf
--dhcpbridge_flagfile=/etc/nova/nova.conf
--dhcpbridge=/usr/bin/nova-dhcpbridge
--logdir=/var/log/nova
--state_path=/data/openstack/nova 这e的/data/openstack/nova是我新建的一个卷和目录,确保你有这个,并且要属于nova用户,或者你也可以使用他的默认设置
--instances_path=/data/openstack/nova/instances 修改了默认存放instances的地方
--lock_path=/var/lock/nova
--force_dhcp_release=True
--use_deprecated_auth
--iscsi_helper=tgtadm
--verbose
--scheduler_driver=nova.scheduler.simple.SimpleScheduler
--network_manager=nova.network.manager.FlatDHCPManager
--my_ip=10.200.200.2 这是我的内网ip地址
--public_inter>
--sql_cOnnection=mysql://nova:notnova@localhost/nova 刚才建立的数据库
--libvirt_type=kvm
--api_paste_cOnfig=/etc/nova/api-paste.ini
--image_service=nova.image.glance.GlanceImageService
--ec2_dmz_host=192.168.200.21
--ec2_url=http://192.168.200.21:8773/services/Cloud
--rabbit_host=localhost
--glance_api_servers=10.200.200.2:9292
--flat_network_bridge=br100
--flat_inter>
--flat_network_dhcp_start=10.200.200.51 指定从instances分配从51开始,但貌似这个选项不起作用
--fixed_range=10.200.200.0/24 这个选项指定instances的网段
--flat_injected=False
--multi_host=1 使用multi_host,即以后可以在节点上也使用nova-network
--libvirt_use_virtio_for_bridges 使用virtio做instances的网卡模式

然后是glance的:

$ sudo vi /etc/glance/glance-api.conf

修改filesystem_store_datadir参数,来指定你需要存放images的目录,当然属主也要改成glance用户。

$ sudo vi /etc/glance/glance-registry.conf

这个文件可以选修改sql_connection参数来指定你的数据库。

如果你要修改,使用mysql里面的数据库,请确保在mysqle面建立了一个相对应的数据库

sql_connection = mysql://nova:notnova@localhost/glance

这是我的配置,我在mysql建立了一个glance的数据库

$ sudo chown -R root:nova /etc/nova

改变一下/etc/nova的属主

$ sudo chmod 640 /etc/nova/nova.conf

重启各个服务

$ 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 glance-registry
$ sudo restart glance-api

注意:我们这e没有起nova-volume,是因为虽然我们安装了volume,但是volume需要单独的一个vg来使用,我们现在还没配置volume,所以起不来。

这e可能network服务和compute没法起来,先暂时不要去管。

接下去,我们做配置nova的运行环境了

$ sudo nova-manage db sync
nova-manage user admin 

在这e我们可以创建一个用户,如

$ sudo nova-manage user admin test

创建成功屏幕上会返回下面这样的输出:

export EC2_ACCESS_KEY=d6aa7747-4324-4abc-9604-4f7d6a2f8f3f
export EC2_SECRET_KEY=2b204b75-da2d-47b8-ba7a-611d71f0ecbf
nova-manage project create  

创建一个项目,属于刚才我们建的那个用户 如:

$ sudo nova-manage project create test-proj test
nova-manage network create --help

创建一个实例的网络,如:

$ sudo nova-manage network create --label=test-net --fixed_range_v4=10.200.200.0/24 --num_network=1 --network_size=256

再次启动刚才失败的服务

$ sudo start nova-network
$ sudo start nova-compute
$ sudo start nova-scheduler

怎么样,成功了吧。

另外,在起每个服务的时候,最好看一下日志,譬如sudo tail -f /var/log/nova/nova-network来确定有没有报错,也可以用ps aux | grep [n]ova-network来确认服务有没有开启。如果起服务失败,你确认好原因,修改好以后,需要用sudo start而不是sudo restart来起

好了。这样计算的环境就部署好了。我们可以用命令来看一下状态:

$ sudo nova-manage service list
$ sudo nova-manage network list

如此这般。

接下来创建证书,以方便我们使用euca工具

$ cd
$ mkdir creds
$ sudo nova-manage project zipfile test-proj test creds/novacreds.zip
$ unzip creds/novacreds.zip -d creds/
$ source creds/novarc

注意每次你重新登录shell的时候,需要source一下这个认证文件才能使用euca;当然你也可以把novarc的内容>>到你的用户profile文件或者bashrc

OK,完成,我们可以用工具来看一下

$ euca-describe-availability-zones verbose
VAILABILITYZONE nova available
AVAILABILITYZONE |- nova-test
AVAILABILITYZONE | |- nova-network enabled :-) 2011-10-17 04:45:44
AVAILABILITYZONE | |- nova-compute enabled :-) 2011-10-17 04:45:45
AVAILABILITYZONE | |- nova-scheduler enabled :-) 2011-10-17 04:45:45

至此,成功启用了服务。当你发现服务不能正常使用时,用ps aux | grep nova检查一下服务有没有开启,并需要详细观察/var/log/nova/目录下的各个服务的日志文件,这样才能获得更进一步的信息。

接下来我们可以用kvm来创建一个image镜像

$ sudo apt-get install kvm-pxe

安装一下这个,否则运行kvm的时候会有个警告

$ kvm-img create -f raw server.img 5G
$ sudo kvm -m 1024 -cdrom rhel5.iso -drive   file=server.img,if=virtio,index=0 -boot d -net nic -net user -nographic -vnc :0

这里我们使用RHEL 5的iso,运行完这个命令,可以用vnc连接。

在你的本机连接服务器:ssvncviewer 192.168.200.21 :0

打开vnc你就可以看到安装界面。

安装完以后,把下面一段写入rhel镜像的/etc/rc.local的开头:

depmod -a
modprobe acpiphp
# simple attempt to get the user ssh key using the meta-data service
mkdir -p /root/.ssh
echo >> /root/.ssh/authorized_keys
curl -m 10 -s http://169.254.169.254/latest/meta-data/public-keys/0/openssh-key | grep 'ssh-rsa' >> /root/.ssh/authorized_keys
echo "AUTHORIZED_KEYS:"
echo "************************"
cat /root/.ssh/authorized_keys
echo "************************"

保存退出,这样image就做好了。

使用glance上传镜像

$ glance --verbose add name="rhel5" disk_format=raw is_public=true < server.img

同时你应该观察/var/log/glance/registry和api的log。成功之后,用

$ glance index

看看镜像列表。

启动你的实例

$ euca-describe-images

查看你现在可用的image,输出类似下面这样:

IMAGE ami-00000003 server.img

记住这里ami-000000003这个image号。

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

启动ami-00000003镜像的实例。-t指明了实例的类型,类型规定了cpu,内存,磁盘大小等信息。

观察/var/log/nova/nova-api.log nova-scheduler.log,nova-compute,nova-network.log的输出信息,同时你也可以使用vnc连接serverip:0来看实例的console。

用命令$ euca-describe-instances来查看你目前的实例情况。第一次启动实例会比较慢,因为需要把image从glance拷贝到nova下的实例目录。

由于nova目前发展的很快,diablo的release版本功能可以完成日常的一些需求。但是开发版本的nova可以更好的结合keystone,novaclient,dashboard等一些其他的项目,使得OpenStack更加健全。有兴趣的朋友,可以在生产环境使用repo的安装方式,在测试环境测试开发版本。我本人由于在生产环境中使用了git方式安装的开发版本,因此后续更加完善的整合,我都将以开发版本的形式出现。当然使用开发版本的话,会有更多的烦恼,但也同样有更多的乐趣和动手的实践,能更进一步了解其工作的原理机制。

作者简介:livemoon(gtalk: mwjpiero@gmail.com),小小SA,关注mac,BSD,openstack,开源技术,webos。座右铭:非淡泊o以明志,非oo以致h。

更新:看到有读者询问在哪里可以看到实际的应用,这方面可参考本文的续篇《以公司实际应用讲解OpenStack到底是什么(入门篇)》。至于iso下载,则不在本文中提供了,请各位自备~


推荐阅读
  • 我的读书清单(持续更新)201705311.《一千零一夜》2006(四五年级)2.《中华上下五千年》2008(初一)3.《鲁滨孙漂流记》2008(初二)4.《钢铁是怎样炼成的》20 ... [详细]
  • 本文详细介绍了如何在ARM架构的目标设备上部署SSH服务端,包括必要的软件包下载、交叉编译过程以及最终的服务配置与测试。适合嵌入式开发人员和系统集成工程师参考。 ... [详细]
  • Bootstrap Paginator 分页插件详解与应用
    本文深入探讨了Bootstrap Paginator这款流行的JavaScript分页插件,提供了详细的使用指南和示例代码,旨在帮助开发者更好地理解和利用该工具进行高效的数据展示。 ... [详细]
  • 在 Ubuntu 22.04 LTS 上部署 Jira 敏捷项目管理工具
    Jira 敏捷项目管理工具专为软件开发团队设计,旨在以高效、有序的方式管理项目、问题和任务。该工具提供了灵活且可定制的工作流程,能够根据项目需求进行调整。本文将详细介绍如何在 Ubuntu 22.04 LTS 上安装和配置 Jira。 ... [详细]
  • 本文详细介绍了在 Ubuntu 系统上安装和配置 MySQL、Tomcat 和 JDK 的步骤。通过本文,您将了解如何顺利安装这些组件,并确保它们能够正常协同工作。 ... [详细]
  • MySQL Administrator: 监控与管理工具
    本文介绍了 MySQL Administrator 的主要功能,包括图形化监控 MySQL 服务器的实时状态、连接健康度、内存健康度以及如何创建自定义的健康图表。此外,还详细解释了状态变量和系统变量的管理。 ... [详细]
  • Web动态服务器Python基本实现
    Web动态服务器Python基本实现 ... [详细]
  • 从CodeIgniter中提取图像处理组件
    本指南旨在帮助开发者在未使用CodeIgniter框架的情况下,如何独立使用其强大的图像处理功能,包括图像尺寸调整、创建缩略图、裁剪、旋转及添加水印等。 ... [详细]
  • 深入理解:AJAX学习指南
    本文详细探讨了AJAX的基本概念、工作原理及其在现代Web开发中的应用,旨在为初学者提供全面的学习资料。 ... [详细]
  • 本文介绍如何使用JavaScript中的for循环来创建一个九九乘法表,适合初学者学习循环结构的应用。 ... [详细]
  • 本文详细探讨了在Web开发中常见的UTF-8编码问题及其解决方案,包括HTML页面、PHP脚本、MySQL数据库以及JavaScript和Flash应用中的乱码问题。 ... [详细]
  • HTML前端开发:UINavigationController与页面间数据传递详解
    本文详细介绍了如何在HTML前端开发中利用UINavigationController进行页面管理和数据传递,适合初学者和有一定基础的开发者学习。 ... [详细]
  • PHP面试题精选及答案解析
    本文精选了新浪PHP笔试题及最新的PHP面试题,并提供了详细的答案解析,帮助求职者更好地准备PHP相关的面试。 ... [详细]
  • 在编程实践中,正确管理和释放资源是非常重要的。本文将探讨 Python 中的 'with' 关键字及其背后的上下文管理器机制,以及它们如何帮助我们更安全、高效地管理资源。 ... [详细]
  • 提升工作效率:掌握15个键盘快捷键
    在日常工作中,熟练掌握计算机操作技巧能够显著提升工作效率。本文将介绍15个常用的键盘快捷键,帮助用户更加高效地完成工作任务。 ... [详细]
author-avatar
康话口儿_536
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有