安装 CloudStack
环境准备
一个完整的 CloudStack 环境包括两部分:
- 管理服务器(Management Server)
- 虚拟机管理器 (Hypervisor)
附:通常对 CloudStack 的 hypervisor 也有另外的称呼,例如主机(host),代理(agent)等。本文统一为 hypervisor。
在本文的安装步骤中,所要配置的为一个简单网络,即所有被管理的虚拟机都位于一个网段。相应的硬件如下:
表 2.软硬件环境
Management Server | Hypervisor | |
---|---|---|
IP | 192.168.1.4 | 192.168.1.5 |
Host Name | cloud-server.squirrel.org | cloud-agent.squirrel.org |
CPU | i3 | i3 |
Memory | 6G | 6G |
Hard Disk | 500G | 200G |
OS | CentOS 6.2 64-bit | CentOS 6.2 64-bit |
本次安装中 CloudStack 的版本为:Red Hat EnterpriseLinux/CentOS 6.2
Hypervisor 为 KVM。
管理服务器需要更多的存储空间是因为 NFS 也建在该机上。更多的详细安装需求可以参阅 CloudStack 官网的指南。这里需要着重列出的问题为:
Q1:官网的安装要求中哪些软硬件因素容易导致 CloudStack 的安装失败?
- Hypervisor 所在的主机,要求 CPU 和主板支持硬件虚拟化(本人的机器是 DELL 台式机,需要在主板的 BIOS 中设置 Intel-VT 为 enable)。
- 操作系统必须是 64 位的,推荐 centos 6.2(当前最新的 CloudStack 3 支持 6.2)。如果使用 5.5 或者 6.0 版本,一定要选择匹配的 CloudStack 安装包。Ubuntu 目前只有运行在 10.04 平台上的发行版,且该 release 不是最新的 CloudStack。此处强烈建议新用户给 Managment Server 和 Hypervisor 所在的两台主机选择一样的操作系统(推荐 centos/RedHat)和一样版本的 CloudStack 软件,同时注意 OS 一定是要被官方 release 宣称支持,这样能避免走不少弯路。例如确实也存在有人能成功在 Ubuntu 12.04 或 centos 6.3(官方 2012 年 9 月尚未宣称支持)上部署 CloudStack,但付出精力较大。
- Hypervisor 的主机不能有任何正在运行的虚拟机,否则在后续的 add host 操作中会遇到失败。最佳的建议是 hypervisor 主机上的操作系统为全新安装,且没有部署任何其余虚拟机。
- 无论是管理服务器还是 hypervisor 所在主机,都需要以 root 登录进行 CloudStack 安装。
- Management Server 和 Hypervisor 主机必须是有独立静态 IP 的主机。否则后续安装因为 IP 地址变化会导致 service 状态异常。
CentOS 安装后的默认网络配置为 DHCP,需修改为手工分配 IP,这步操作要在 cloud-server 和 cloud-agent 两台机器都进行:
点击桌面右上角的网络图标,编辑网络:
图 3
Method 原来为“DHCP”,改成设置为“Manual”,然后输入静态 IP 地址、掩码、网关、DNS 服务器信息。
图 4
安装 Management Server
- 以 root 身份登录 cloud-server.squirrel.org。
- 运行“hostname – fqdn”,检查其返回的格式必须是包括域名的全称(例如 cloud-server.squirrel.org)。Hostname 最好是在安装 centos 时即设置好,否则需要在 /etc/hosts 和 /etc/sysconfig/network 两处文件中同时修改才可以永久生效。
- 设置 SELinux。在 /etc/selinux/config 中修改“SELINUX=enforcing”为“SELINUX=permissive ”,并在 shell 中运行“setenforce permissive ”令其立即生效。
- 进入下载并解压好的 CloudStack 安装目录 ( 我这里是 /home/squirrel/mybox/cloud/CloudStack-oss-3.0.2-1-rhel6.2),运行命令“./install.sh”,选择“M”安装 Management Server 软件。
- 运行下面命令启动 NFS 和 rpcbind 服务,并设置为开机运行:
# service rpcbind start # service nfs start # chkconfig nfs on # chkconfig rpcbind on
- 再次运行命令“./install.sh”,选择“D”安装数据库 mysql。
- 编辑 /etc/my.cnf,在 [mysqld] 下面加入内容:
innodb_rollback_on_timeout=1 innodb_lock_wait_timeout=600 max_connections=350 log-bin=mysql-bin binlog-format = 'ROW'
- 重启数据库后,设置 root 用户密码。
# service mysqld restart # mysql -u root mysql> SET PASSWORD = PASSWORD('<password>'); mysql> exit
- 运行 CloudStack 脚本让其自动配置数据库:
#cloud-setup-databases cloud:<dbpassword>@localhost --deploy-as=root:<password>
即表示以 root 用户身份来生成数据库,该数据库属于新建的 cloud 用户(密码 dbpassword 可以留空)。
- 最后,下面的命令将完成对操作系统 iptables、sudoers 的设置(CloudStack 本身有安全性方面的要求,不是无限暴露给网络,同时又需要一些管理权限来运行自身服务,因此要做这两项的设置),并启动管理服务器:
#cloud-setup-management
使用“
service cloud-management status”查看运行状态。
Q2:第 2 步中运行“hostname – fqdn”命令时,要保证机器是联网状态,才能返回正确的主机名称。
Q3:如果后续打算把 hypervisor 也安装在 management server 的同一台主机上,需要在 /etc/sysconfig/network-scripts/ifcfg-<yourPhysicalDeviceName> 中配置出对应的信息。
同时,如果该 hypervisor 为 KVM,需要修改 /etc/sudoers ,加入如下行:
Defaults:cloud !requiretty
配置 NFS
前面讲过,CloudStack 需要两类存储(primary storage 和 secondary storage)来支持它的 cluster 和 host,本节中由 NFS 来提供这两个存储,因此前述步骤中要启动 NFS 服务。同时为了方便起见,NFS Server 也由 cloud-server.squirrel.org 充当。
- 以 root 身份登录 cloud-server.squirrel.org。
- 创建两个目录,分别作为一级和二级存储:
# mkdir -p /export/primary # mkdir -p /export/secondary
- 编辑文件 /etc/exports ,加入:
/export *(rw,async,no_root_squash)
然后导出 /export 目录:
# exportfs -a
- 编辑 /etc/sysconfig/nfs 文件,取消如下行的注释符号(或者在文件末尾直接添加下列行):
LOCKD_TCPPORT=32803 LOCKD_UDPPORT=32769 MOUNTD_PORT=892 RQUOTAD_PORT=875 STATD_PORT=662 STATD_OUTGOING_PORT=2020
- 编辑防火墙设置文件 /etc/sysconfig/iptables,在 input 部分最上面加入如下的规则:
-A INPUT -m state --state NEW -p udp --dport 111 -j ACCEPT -A INPUT -m state --state NEW -p tcp --dport 111 -j ACCEPT -A INPUT -m state --state NEW -p tcp --dport 2049 -j ACCEPT -A INPUT -m state --state NEW -p tcp --dport 32803 -j ACCEPT -A INPUT -m state --state NEW -p udp --dport 32769 -j ACCEPT -A INPUT -m state --state NEW -p tcp --dport 892 -j ACCEPT -A INPUT -m state --state NEW -p udp --dport 892 -j ACCEPT -A INPUT -m state --state NEW -p tcp --dport 875 -j ACCEPT -A INPUT -m state --state NEW -p udp --dport 875 -j ACCEPT -A INPUT -m state --state NEW -p tcp --dport 662 -j ACCEPT -A INPUT -m state --state NEW -p udp --dport 662 -j ACCEPT
- 重启防火墙,并保存修改:
# service iptables restart # service iptables save
- 在管理服务器(cloud-server.squirrel.org)和 hypervisor 主机(cloud-agent.squirrel.org)上,修改文件 /etc/idmapd.conf,加入如下内容:
Domain = squirrel.org
- 重启管理服务器的主机,然后测试并挂载 NFS。在 cloud-agent.squirrel.org 机器建立目录 /primarymount,运行如下命令并确认其是否成功:
mount -t nfs 192.168.1.4:/export/primary /primarymount
Q4:在 KVM hypervisor 机器运行 showmount 命令时,如果采用的是 hostname,例如“showmount -e cloud-server.squirrel.org”,并且失败,报错“clnt_create: RPC: Program not registered”,那么可以尝试用 IP 代替:“showmount -e 192.168.1.4”。或者编辑本机的 /etc/hosts,加入对方 server 的 IP- 主机名映射(但这样失去了灵活性):
192.168.1.4 cloud-server.squirrel.org
Q5:第 5 步中新加入规则在防火墙配置文件中的次序对 NFS share 成功很重要,一定要加入 INPUT 区的最开始部分,即系统中原有的 input 项必须在新加入行的后面,否则可能在运行 showmount -e 192.168.1.4 时会出现
clnt_create: RPC: Port mapper failure - Unable to receive: errno 113 (No route to host) 的错误。
Q6:出现错误 mount.nfs: access denied by server while mounting 192.168.1.4:/export/primary 的处理?
有时当运行“showmount -e cloud-server.squirrel.org”有“clnt_create: RPC: Port mapper failure - Unable to receive: errno 111 (Connection refused)”错误提示,然后 mount nfs 失败,会出现标题上的错误信息,这可能跟 NFS 的建立方式有关,有时也跟防火墙有关。需要检查 log:
tail -200 /var/log/messages
refused mount request from 192.168.1.5 for /export/primary (/export): illegal port 1024
那么考虑尝试如下方法:
vi /etc/exports
在原来的那一行上修改如下:
/export *(rw,async,insecure,no_root_squash)
然后:
exportfs -rv
service nfs restart
在 cloud-agent.squirrel.org 上重新运行命令:
mount -t nfs 192.168.1.4:/export/primary /primarymount
没有提示,应该成功了,可以确认:
mount |grep primary
OK !
准备系统虚拟机模板
系统虚拟机模板(System VM Template)保存在二级存储上,是用于创建云平台上的系统虚拟机的。
- 以 root 身份登录 cloud-server.squirrel.org。
- 这里下载的是 KVM 模板,运行如下命令安装:
# /usr/lib64/cloud/agent/scripts/storage/secondary/cloud-install-sys-tmplt -m /export/secondary -u http://download.cloud.com/templates/acton/acton-systemvm-02062012.qcow2.bz2 -h kvm -F
依赖于网络速度,这个过程所需时间在几分钟到数小时(笔者的下载速度显示在 2M~3M/s,三分钟左右完成全部下载和安装)。
Q7:这里有两点需要注意:
- 磁盘分区必须够大。
- 虚拟机模板的下载安装这步不可省略,否则后面在控制台添加二级存储时会失败。
系统虚拟机不同于普通的 hypervisor host 上的虚拟机,它是 CloudStack 自带的用于完成自身系统相关的一些任务的 vm。它有两种:
- 二级存储虚拟机(Secondary Storage VM):下载上传模板、下载镜像,第一次创建虚拟机时从二级存储拷贝模板到一级存储并且自动创建快照等。
- 控制台代理虚拟机(Console Proxy VM):用于在 web 界面上展示控制台。
需要注意的是,系统虚机为 Debian 32 位操作系统,CloudStack 管理员可以用 SSH 登录。同时,能在主机的 /var/lib/libvirt/images 查看到它们,如图 5:
图 5.查看已经安装的 VMs
安装 KVM Hypervisor
- 以 root 身份登录 hypervisor 主机 cloud-agent.squirrel.org。
- 确保 hostname 是完整带域名的,修改方法同管理服务器步骤 1。
- 运行“yum erase qemu-kvm”删除 OS 自带的 qemu-kvm。
- 进入下载并解压好的 CloudStack 安装目录,运行命令“./install.sh”,选择“A”安装 agent。
- 安装完毕后,运行下面命令启动 nfs 和 rpcbind 服务,并设置为开机运行:
# service rpcbind start # service nfs start # chkconfig nfs on # chkconfig rpcbind on |
Q8:如何处理因为没有 enable VT 而导致 CloudStack Agent 启动不成功?
注意检查 log:/var/log/cloud/agent/。如果是因为 BIOS 的 VT 没有打开而引起的启动失败,则需要在打开 VT 支持后重新安装 agent。运行命令:
# service cloud-agent status 若显示: cloud-agent (pid 4188) is running... |
则说明已经成功运行了。
安装 NTP,时间同步
- 运行“yum install ntp”安装 NTP 服务。
- 编辑配置文件 /etc/ntp.conf,加入如下服务器:
server 0.xenserver.pool.ntp.org server 1.xenserver.pool.ntp.org server 2.xenserver.pool.ntp.org server 3.xenserver.pool.ntp.org
- 重启 NTP 并设置为开机自动运行:
# service ntpd restart # chkconfig ntpd on
在 Management Console 中配置虚拟化资源
当上面的管理服务器与 hypervisor 安装好后,可以登录进 CloudStack 的 UI console 进行资源的配置与部署。
和几个竞争对手——例如 Eucalyptus 从一开始就对 AWS 的兼容,OpenStack 对松耦合组件的系统结构设计——相比,CloudStack 的特点之一就是有最友好的用户界面,即控制管理台。
首先打开浏览器,登录 URL:
http://192.168.1.4:8080/client
用户名 / 密码:admin/password
选择“Continue with basic installation”,接着修改 CloudStack 管理员密码。
图 6.添加 zone
图 7.添加 pod
图 8.添加客户机网络
图 9.添加 cluster
图 10.添加 host
图 11.添加一级存储
图 12.添加二级存储
最后点击“Launch”启动 CloudStack 云平台,开始初始化。
图 13.初始化中
直到出现成功信息。这样一个简单的云环境就搭建完毕,我们随后可以在这个控制台执行计算资源的管理任务了。下面两图为控制台显示界面。
图 14.Overview
图 15.Infrastructure
Q9:有时因为各种原因,例如在控制台错误的配置了一些数据,需要重新初始化时,可以删除 CloudStack 的数据库,步骤如下:
在命令行下:
mysql –u root <password> mysql> drop database cloud; drop database cloud_usage; #cloud-setup-databases cloud:<dbpassword>@localhost --deploy-as=root:<password> #cloud-setup-management |
然后重复本节的操作。
附:CloudStack 的 Web Console 界面是可以定制化的。