1. 理论基础

1.1 云计算的出现

基本上,云计算只是一种把 IT 资源当作服务来提供的手段。几乎所有 IT 资源都可以作为云服务来提供:应用程序、计算能力、存储容量、联网、编程工具,以至于通信服务和协作工具。
云计算最早为 Google、Amazon 等其他扩建基础设施的大型互联网服务提供商所采用。于是产生一种架构:大规模扩展、水平分布的系统资源,抽象为虚拟 IT 服务,并作为持续配置、合用的资源进行管理。
就最终用户而言,云计算意味着没有硬件购置成本、没有需要管理的软件许可证或升级、不需要雇佣新的员工或咨询人员、不需要租赁设施、没有任何种类的基建投资,而且还没有隐性成本。只是一种用仪表测量出来的、根据使用情况支付的订购费或固定的订购费。只是用您所需的量,而且只按使用量付费。
 

云计算体系结构图如下: 

这里写图片描述
1.2 把基础设施当做服务(IaaS)

把基础设施当作服务 (IaaS) 处于最低层级,而且是一种作为标准化服务在网上提供基本存储和计算能力的手段。服务器、存储系统、交换机、路由器和其他系统协作 (例如,通过虚拟化技术) 处理特定类型的工作负载 — 从批处理到峰值负载期间的服务器/存储扩大。
 

最著名的商业示例是 Amazon Web 服务 (AWS),其 EC2 和 S3 服务分别提供基本计算和存储服务。国内代表阿里云、腾讯云、百度云、金山云等。

1.3 IaaS平台的虚拟化技术的好处

利用率更高 — 在虚拟化之前,企业数据中心的服务器和存储利用率一般平均不到 50% (事实上,通常利用率为 10% 到 15%)。通过虚拟化,可以把工作负载封装一并转移到空闲或使用不足的系统,这就意味着可以整合现有系统,因而可以延迟或避免购买更多服务器容量。
资源整合 — 虚拟化使得整合多个 IT 资源成为可能。除服务器和存储整合之外,虚拟化提供一个整合系统架构、应用程序基础设施、数据和数据库、接口、网络、桌面系统甚至业务流程,因而可以节约成本和提高效率。
节省电能/成本 — 运行企业级数据中心所需的电能不再无限制地使用,而成本呈螺旋式上升趋势。在服务器硬件上每花一美元,就会在电费上增加一美元 (包括服务器运行和散热方面的成本)。利用虚拟化进行整合使得降低总能耗和节约大量资金成为可能。
节约空间 — 服务器膨胀仍然是多数企业数据中心面临的一个严重问题,可扩大数据中心并不总是一个良好的选择,因为每增大一平方米空间,就会平均增加很多成本。虚拟化通过把多个虚拟系统整合到较少物理系统上,可以缓解空间压力。
灾难恢复 (Disaster recovery) /业务连续 (Business Continuity) — 虚拟化可提高总体服务级利用率,并提供灾难恢复解决方案新选项。
 

1.4 Cloudstack 介绍

CloudStack是一个开源的具有高可用性及扩展性的云计算平台CloudStack 是一个开源的云操作系统,它可以帮助用户利用自己的硬件提供类似于Amazon EC2那样的公共云服务。CloudStack可以通过组织和协调用户的虚拟化资源,构建一个和谐的环境。 
Cloudstack支持管理大部分主流的hypervisors,如KVM,XenServer,VMware,Oracle VM,Xen等。 

这里写图片描述
 
Cloudstack 部署图如下: 

这里写图片描述
 
Zone:Zone 对应于现实中的一个数据中心,它是 CloudStack 中最大的一个单元。 
即从包含关系上来说,一个 zone 包含多个 pod,一个 pod 包含多个 cluster,一个 cluster 包含多个 host。 
提供点(Pods): 
一个提供点通常代表一个机架,机柜里面的主机在同一个子网,每个区域中必须包含一个或多个提供点,提供点中包含主机和主存储服务器, CloudStack 的内部管理通信配置一个预留 IP 地址范围。预留的 IP 范围对云中的每个区域来说必须唯一。 
集群(Clusters): 
Cluster 是多个主机组成的一个集群。 
同一个cluster中的主机有相同的硬件,相同的 Hypervisor,和共用同样的存储。同一个 cluster 中的虚拟机,可以实现无中断服务地从一个主机迁移到另外一个上。 
集群由一个或多个宿主机和一个或多个主要存储服务器构成。集群的大小取决于下层虚拟机软件。大多数情况下基本无建议。当使用VMware时,每个VMware集群都被vCenter 服务器管理。管理员必须在本产品中登记vCenter。每个zone下可以有多个vCenter服务器。每个vCenter服务器可能管理多个VMware集群 
主机(Hosts): 
Host 就是运行的虚拟机(VM)主机。 
宿主机就是个独立的计算机。宿主机运行来宾虚拟机并提供其相应的计算资源。每个宿主机都装有虚拟机软件来运行来宾虚拟机。比如一个开启了kvm支持的服务器,一个思杰XenServer服务器,或者一个ESXi服务器都可以作为宿主机。 
宿主机在CloudStack部署中属于最小的组织单元。宿主机包含于集群中,集群又属于提供点,而区域中包含提供点(就是在逻辑概念上zone>pod>cluster>host),新增的宿主机可以随时添加以提供更多资源给来宾虚拟机,CloudStack自动探测宿主机的cpu数量和内存资源。宿主机对终端用户不可见。终端用户不能决定他们的虚拟机被分配到哪台宿主机。 
CloudStack 中存在两种存储: 
Primary storage:一级存储与 cluster 关联,它为该 cluster 中的主机的全部虚拟机提供磁盘卷。一个 cluster 至少有一个一级存储,且在部署时位置要临近主机以提供高性能。 
Secondary storage:二级存储与 zone 关联,它存储模板文件,ISO 镜像和磁盘卷快照。

2. 部署安装

2.1 cloudstack 安装前的准备

 电脑一台,内存>=4G
 安装VirtualBox 或VMWARE Workstation虚拟机软件。
 安装好2台CentOS-6-x86_64(6.6 以上)的虚拟机。
 基本系统:1VCPU+1024M内存+20硬盘+50G硬盘(两块盘), 2VCPU+2048M内存+20硬盘+50G硬盘(两块盘),
 网络选择:网络地址转换(NAT)。
 软件包选择:Basic Server。
 关闭iptables和SELinux。
 

2.2 系统配置安装

2.2.1 网络配置

默认情况下新安装的机器并未启用网络,您需要根据实际环境进行配置。由于网络中不存在DHCP服务器,您需要手工配置网络接口。为了实现快速简化安装的目标,这里假定主机上只有eth0一个网络接口。 
使用root用户登录本地控制台。检查文件 /etc/sysconfig/network-scripts/ifcfg-eth0,默认情况,其内容如下所示:

DEVICE="eth0"
HWADDR="52:54:00:B9:A6:C0"
NM_CONTROLLED="yes"
ONBOOT="no"
 

但是根据以上配置您无法连接到网络,对于Cloudstack也同样不适合;您需修改配置文件,指定IP地址,网络掩码等信息

DEVICE=eth0
HWADDR=52:54:00:B9:A6:C0
NM_CONTROLLED=no
ONBOOT=yes
BOOTPROTO=none
IPADDR=172.16.10.2
NETMASK=255.255.255.0
GATEWAY=172.16.10.1
DNS1=8.8.8.8
DNS2=8.8.4.4
 

2.2.2 修改主机名

需要修改两处:一处是/etc/sysconfig/network,另一处是/etc/hosts,只修改任一处会导致系统启动异常。 
/etc/sysconfig/network 
用vi编辑器,里面有一行 HOSTNAME=localhost.localdomain (如果是默认的话),修改 localhost.localdomain 为你的主机名。 
/etc/hosts 
打开该文件,会有一行127.0.0.1 localhost.localdomain localhost 。其中 127.0.0.1 是本地环路地址, localhost.localdomain 是主机名(hostname),也就是你待修改的。localhost 是主机名的别名(alias)。将第二项修改为你的主机名,第三项可选。 
将上面两个文件修改完后,并不能立刻生效。如果要立刻生效的话,可以用 hostname your-hostname 作临时修改,它只是临时地修改主机名,系统重启后会恢复原样的。但修改上面两个文件是永久的,重启系统会得到新的主机名。 
最后,重启后查看主机名 hostname –fqdn 
通过hostname –fqdn命令重新检查主机名,并确认返回了正确的FQDN

2.2.3 添加hosts文件实现集群主机之间相互能够解析

修改每台机器的 /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.10.101 master1
 

2.2.4 关闭selinux

关闭selinux
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/sysconfig/selinux 或者
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
也可以用vi 直接编辑修改
 

2.2.5 安装epel 源

 cloudstack  yum源有部分包依赖 epel 源
 yum -y install epel-release 
 

2.2.6 安装 cloudstack 源

添加CloudStack软件仓库,创建/etc/yum.repos.d/cloudstack.repo文件,并添加如下信息。

[cloudstack]
name=cloudstack
baseurl=http://cloudstack.apt-get.eu/centos/6/4.8/
enabled=1
gpgcheck=0
 

或者把安装包下载到本地 

这里写图片描述
2.2.7 安装NTP

为了同步云平台中主机的时间,需要配置NTP,但NTP默认没有安装。因此需要先安装NTP,然后进行配置。通过以下命令进行安装:

 yum -y install ntp1

实际上默认配置项即可满足的需求,仅需启用NTP并设置为开机启动,如下所示:

chkconfig ntpd on
service ntpd start
 

2.2.8 NFS

本文档将配置的环境使用NFS做为主存储和辅助存储,需配置两个NFS共享目录,在此之前需先安装nfs-utils:

yum -y install nfs-utils1

接下来需配置NFS提供两个不同的挂载点。通过编辑/etc/exports文件即可简单实现。确保这个文件中包含下面内容:

/export/secondary *(rw,async,no_root_squash,no_subtree_check)
/export/primary *(rw,async,no_root_squash,no_subtree_check)
#两台主机分别挂载123

注意配置文件中指定了系统中两个并不存在的目录,下面需要创建这些目录并设置合适的权限,对应的命令如下所示:

mkdir -p /export/primary
mkdir /export/secondary

格式化 /dev/sdb 
Master 节点 挂载给 /export/secondary
Agent  节点 挂载给  /export/primary
在 /etc/fstab  文件中加入
Master 节点
/dev/sdb  /export/secondary  xfs defaults 0 0
Agent  节点
/dev/sdb  /export/primary  xfs defaults 0 0

方法二: 
执行 命令

Master 节点
echo "/dev/sdb  /export/secondary  ext4 defaults 0 0"  >> /etc/fstab
Agent  节点
echo "/dev/sdb  /export/primary  ext4 defaults 0 0"  >> /etc/fstab
mount -a

CentOS 6.x 版本默认使用NFSv4设置为以下内容: 
在/etc/sysconfig/nfs文件中取消如下选项的注释:

LOCKD_TCPPORT=32803
LOCKD_UDPPORT=32769
MOUNTD_PORT=892
RQUOTAD_PORT=875
STATD_PORT=662
STATD_OUTGOING_PORT=2020
 

接下来还需配置防火墙策略,允许NFS客户端访问。编辑文件/etc/sysconfig/iptables(可以直接关闭防火墙)

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

通过以下命令重新启动iptables服务:

service iptables restart1

最后需要配置NFS服务为开机自启动,执行如下命令:

service rpcbind start
service nfs start
chkconfig rpcbind on
chkconfig nfs on
 

2.3 管理服务器安装

接下来进行CloudStack管理节点和相关工具的安装。

2.3.1 安装管理端

现在将要开始安装管理服务器。执行以下命令:

yum -y install cloudstack-management cloudstack-common1

2.3.2 数据库安装和配置

首先安装MySQL,并对它进行配置,以确保CloudStack运行正常。 
运行如下命令安装:

yum -y install mysql-server1

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'
 

正确配置MySQL后,启动它并配置为开机自启动:

service mysqld start
chkconfig mysqld on
 

设置mysql 密码及范围权限 

mysqladmin -uroot password 123456
mysql -uroot  -p123456 -e "GRANT ALL PRIVILEGES ON *.* TO root@'%' IDENTIFIED BY '123456'";
 

2.3.3 系统初始化

在程序执行完毕后,需初始化数据库,通过如下命令和选项完成:

cloudstack-setup-databases cloud:123456@localhost --deploy-as=root:1234561

当该过程结束后,您应该可以看到类似信息:”CloudStack has successfully initialized the database.”。 
数据库创建后,最后一步是配置管理服务器,执行如下命令:

cloudstack-setup-management1

2.3.4 上传系统模板

CloudStack通过一系列系统虚拟机提供功能,如访问虚拟机控制台,如提供各类网络服务,以及管理辅助存储的中的各类资源。该步骤会获取系统虚拟机模板,用于云平台引导后系统虚拟机的部署。 
然后需要下载系统虚拟机模板,并把这些模板部署于刚才创建的辅助存储中;管理服务器包含一个脚本可以正确的操作这些系统虚拟机模板:

/usr/share/cloudstack-common/scripts/storage/secondary/cloud-install-sys-tmplt -m /export/secondary/ -f /opt/systemvm64template-2016-05-18-4.7.1-kvm.qcow2.bz2 -h kvm -F
#注意将模板文件改成自己的文件名称12

2.3.5 访问用户界面

要访问CloudStack的WEB界面,仅需在浏览器访问 http://XXX.XXX.XXX:8080/client ,使用默认用户’admin’和密码’password’来登录。第一次登录可以看到欢迎界面。 

这里写图片描述
2.4 安装agent节点及配置

2.4.1 先决条件

本文档描述的环境使用管理服务器同时作为计算节点,这意味着很多先决步骤已经在搭建管理服务器时完成;但为了清晰起见,仍然列出相关步骤:


网络配置 
主机名 
SELinux 
NTP 配置
ClouStack软件库


你不需要在管理节点上执行这些操作,当然,如果您需要添加额外的主机以上步骤仍然需要执行。

2.4.2 Agent 安装

安装KVM代理仅仅需要一条简单的命令,但之后我们需要进行一些配置。

yum -y install cloudstack-agent cloudstack-common1

2.4.3 虚拟化配置

配置KVM 
KVM中我们有两部分需要进行配置, libvirt和QEMU. 
配置QEMU 
KVM的配置项相对简单,仅需配置一项。编辑QEMU VNC配置文件/etc/libvirt/qemu.conf并取消如下行的注释。同时注释 security_driver=”none”

vnc_listen=0.0.0.0
# security_driver="none"
 

配置Libvirt 
CloudStack使用libvirt管理虚拟机。因此正确的配置libvirt至关重要。Libvirt属于cloudstack-agent的依赖组件,应提前安装好。 
为了实现动态迁移,libvirt需要监听使用非加密的TCP连接。还需要关闭libvirts尝试使用组播DNS进行广播。这些都是在 /etc/libvirt/libvirtd.conf文件中进行配置。 
设置下列参数:

listen_tls = 0
listen_tcp = 1
tcp_port = "16059"
auth_tcp = "none"
mdns_adv = 0
 

仅仅在libvirtd.conf中启用”listen_tcp”还不够,我们还必须修改/etc/sysconfig/libvirtd中的参数: 
更改

LIBVIRTD_ARGS="-1"1

重启libvirt服务

service libvirtd restart1

KVM配置完成 
For the sake of completeness you should check if KVM is running OK on your machine:

lsmod | grep kvm1

kvm_intel              55496  0
kvm                   337772  1 kvm_intel
 

3 系统配置

3.1 登陆到用户界面

CloudStack提供一个基于web的UI,管理员和终端用户能够使用这个界面。用户界面版本依赖于登陆时使用的凭证不同而不同。用户界面是适用于大多数流行的浏览器包括IE7,IE8,IE9,Firefox Chrome等。URL是:(用你自己的管理控制服务器IP地址代替)

http://<management-server-ip-address>:8080/client1

如果管理服务器是全新的安装,。那么会出现一个安装向导。在稍后的访问中,,你将看到一个登录界面,,你需要通过用户名和密码登入来查看你的仪表盘.

用户名 -> 你账号的用户ID。默认用户名是admin。
密码 -> 用户ID对应的密码。默认用户名的密码是password。
域 -> 如果你是root用户,此处留空即可。
 

CloudStack用户界面帮助云基础设施的用户查看和使用他们的云资源,包括虚拟机、模板和ISO、数据卷和快照、宾客网络,以及IP 地址。如果用户是一个或多个CloudStack项目的成员或管理员,用户界面能提供一个面向项目的视图。

3.2 根管理员界面的概述

在管理服务器软件安装并且运行后, 你就可以运行CloudStack的用户界面.了。在这里通过UI,可以供给、查看并管理你的云基础架构。 
打开你自己喜欢的浏览器并访问这个URL。请把IP地址替换成你自己的管理服务器的IP。 
http://:8080/client 
初次登录管理服务器时,会出现一个向导启动画面。后续访问时,您会直接进入控制面板。 
如果你看到第一次的向导屏幕, 可以选择下面步骤之一进行。 
继续执行基本安装。如果你仅仅是想体验CloudStack,请选择这个,并且这样你可以马上开始跟着向导进行简单的配置。我们将帮助你建立一个有以下功能的云:一个运行CloudStack软件的机器和使用NFS协议的存储;一个运行VMs的XenServer或KVM hypervisor的服务器;一个共享的公有网络。 
安装向导的提示会给你需要的所有信息。但如果你需要更多的详细信息,你可以按照试用安装向导进行。 
我之前用过CloudStack。 如果您已经完成设计阶段,计划部署一个复杂CloudStack云,或是准备对用基础安装向导搭建的试验云进行扩展,请选择此项。在管理员UI中,您可以使用CloudStack中更强大的功能,例如高级VLAN网络、高可用、负载均衡器和防火墙等额外网络设备,以及支持Citrix XenServer、KVM、VMware vSphere等多种虚拟化平台。 
根管理员的仪表盘显示出来。 
在云的安装及后续管理过程中,您需要用根管理员登录UI。根管理员账号管理着CloudStack的部署以及物理设施。根管理员可以修改系统配置,改变基本功能,创建和删除用户账号,以及其他仅限于已授权人员执行的操作。在初始安CloudStack时,请务必修改默认密码为新的较独特的密码。 
打开你自己喜欢的浏览器并访问这个URL。请把IP地址替换成你自己的管理服务器的IP。

http://<management-server-ip-address>:8080/client
使用当前root用户的ID和口令登录UI。缺省为admin,pawword。
点击帐户。
点击管理员帐号名。
点击查看用户。
点击管理员用户名。
点击更改密码按钮。   
输入新密码,然后点击确认。
 

3.3 初始化配置

选择“基础架构 –> 添加区域”按照截图进行配置。 
 
 这里写图片描述

这里写图片描述
名称:default      dns1:8.8.8.8        dns2:8.8.4.4        (这些内容包括下面的填写仅为参考值。可根据实际情况进行修改) 
 
 这里写图片描述

这里写图片描述
提供名称:default01      预留网关:192.168.1.1        预留掩码:255.255.255.0 
起始IP:192.168.1.170      结束IP:192.168.1.189

这里写图片描述

来宾网关:192.168.1.1        掩码:255.255.255.0        起始IP:192.168.1.201 
结束IP:192.168.1.230

 这里写图片描述

这里写图片描述
 
主机名称:192.168.1.190      用户名:root            密码:*(这里用户名和密码,填写被添加主机的root用户和密码) 

这里写图片描述
 
名称:primary(这些名称包括上面的default ,都不是固定的,自己根据需要进行区分即可,) 
协议:选择nfs        服务器:192.168.1.190 
Path:/mnt/mycloud/primary(在第一部分里创建的primary目录) 
 这里写图片描述
NFS服务器:192.168.1.190            路径:/mnt/mycloud/secondary(在第一部分里创建的secondmary目录) 
 
 这里写图片描述

这里写图片描述
单击“是”启动区域! 
查看系统VM。大约5-10分钟启动成功,如果启动失败,查看日志文件进行改进! 
如果配置错误在可以在这里启动区域 
 
 这里写图片描述

这里写图片描述

如果以上步骤均没有问题,则会显示如上图所示的界面,除了虚拟路由器数目仍旧为0,系统VM数目为2之外,其他所有组件的数目均为1。 
系统VM是否启动成功可以查看其状态是否为Running:

 这里写图片描述
系统VM是不同于主机上创建的普通虚拟机的,他们是CloudStack云平台自带的用于完成自身的一些任务的虚拟机。 
Secondary Storage VM:简称为SSVM,用于管理二级存储的相关操作,如模板跟镜像文件的上传与下载,快照,volumes的存放,第一次创建虚拟机时从二级存储拷贝模板到一级存储并且自动创建快照,每一个资源域可以有多个SSVM,当SSVM被删除或停止,它会自动被重建并启动。 
Console Proxy VM:用于在web 界面上展示控制台。 
虚拟路由器将会在第一个实例启动后自动创建。 

这里写图片描述


3.4 启动虚拟机实例

3.4.1 搭建一个http 服务器

搭建http 服务主要用来管理ISO系统和镜像模板 
在master 节点安装 nginx 

yum  -y install nginx1

防火墙中加入允许80 端口访问

-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT1

编辑 /etc/nginx/nginx.conf  配置文件,能够使访问目录

autoindex on;# 显示目录
autoindex_exact_size on;# 显示文件大小
autoindex_localtime on;# 显示文件时间
 

到 /usr/share/nginx/html  目录 删除所有文件 ,启动nginx

/etc/init.d/nginx restart1

上传ISO 到 /usr/share/nginx/html 
看到如下界面 
 这里写图片描述
修改全局设置  secstorage.allowed 设置 ,二级存储ISO镜像和模板可以下载,IP网段 

这里写图片描述
3.4.2 制作模板

一种是通过KVM 制作的qcow2或raw文件
另外就是直接上传ISO文件作为模版文件
 

先在Cloudstack的模板注册中,添加ISO镜像文件,然后启动实例,选择从ISO启动,然后安装系统。  

这里写图片描述
 
URL 输入下载ISO的地址 
 这里写图片描述
完成后,已就绪状态是 “YES” 
 这里写图片描述
用ISO 安装虚拟机实例 
 这里写图片描述
选择ISO  
 
 这里写图片描述

这里写图片描述
选择磁盘方案 
 这里写图片描述
完成后选择 启动实例 
 这里写图片描述
安装centos 后 ,发现没有IP, 网卡处选择自动启动 
对于CentOS,必须要修改网络接口的配置文件,在这里我们编辑/etc/sysconfig/network-scripts/ifcfg-eth0文件,更改下面的内容。

DEVICE=eth0
TYPE=Ethernet
BOOTPROTO=dhcp
ONBOOT=yes
 

移除udev持久设备规则

rm -f /etc/udev/rules.d/70*
rm -f /var/lib/dhclient/*
 

移除SSH Keys 
这步是为了确认所有要作为模板的VMs的SSH Keys都不相同,否则这样会降低虚拟机的安全性。

rm -f /etc/ssh/*key*1

清除日志文件 
从主模板移除旧的日志文件是一个好习惯。

cat /dev/null > /var/log/audit/audit.log 2>/dev/null1

cat /dev/null > /var/log/wtmp 2>/dev/null
logrotate -f /etc/logrotate.conf 2>/dev/null
rm -f /var/log/*-* /var/log/*.gz 2>/dev/null
 

清除用户历史 
下一步来清除你曾经运行过的bash命令。

history -c
unset HISTFILE
 

关闭VM 
现在你可以关闭你的主模板并且创建模板了! 
halt -p 
创建模板! 
 这里写图片描述
成功后从模板列表中,可以看出 
 
接下来可以用模板创建VM

3.5 服务方案

除了云中的物理和逻辑基础设施以及 CloudStack 软件和服务器,你还需要一个用户服务层以便让人们能够真正利用云。这不仅仅意味这一个用户界面,而是一组用户可选择的选项和资源,如通过模版创建虚拟机,磁盘存储等等。 
计算和磁盘服务方案 
一个服务方案是一个虚拟硬件特征集合,比如 CPU 核心数量和速度,内存,已经磁盘大小。 CloudStack 管理员可以建立各种方案,接着终端用户在建立一个新虚拟机时就可以选择可用方案。基于用户的选择方案, CloudStack 可以发送整合在计费系统中的使用记录。 
CloudStack 管理员必须定义一些服务方案的特征,同时留下一些未定义的,让终端用户输入自己需要的值。这个对于降低 CloudStack 管理员定义的方案的数量很有用处。代替为每个用户定义一个他们想要可能组合值的计算方案,管理员可以为用户定义灵活的计算方案,并作为基本的若干不同虚拟机配置。 
磁盘方案特指: 
磁盘大小 (可选)。如果 CloudStack 管理员未定义,用户可选择磁盘大小。 
数据磁盘标签 
自定义计算方案 
为了创建一个新的计算方案 
以管理员权限登录CloudStack用户界面。

在左侧导航栏中,点击 服务方案。
选择方案中,选择计算方案
点击 添加计算方案
在对话框中,选择如下操作:
** 名称 **: 服务方案所需的名称。
** 描述 ** :显示给用户的简短方案描述。
** 存储类型 *:磁盘类型应该被分配。系统VM 运行时所在主机挂载的存储作为本地分配。通过 NFS 可访问的存储作为 共享分配。
** 自定义 ** :自定义计算方案使用在以下场景:部署虚拟机,改变停止状态和运行中虚拟机的计算方案,仅仅为了扩大规模。
123456789

* HA 方案 * : 如果必要,管理员可以选择监控系统 VM 和尽可能采用高可用。 
创建一个新的磁盘方案

为了创建一个新的磁盘方案
以管理员权限登录CloudStack用户界面。
在左侧导航栏中,点击 服务方案。
在选择方案中,选择 磁盘方案
点击 添加磁盘方案
123456

4 在企业中搭建自己的私有云

4.1 机器建议配置

CPU:  2C×10 核(Intel Xeon E5-2650 v3 或 Intel Xeon E5-2650 v3)
内存:256G (16G*16,单条内存无要求,按照最高性价比采购)
网卡:10G*2(模块与目前机房的万兆交换机匹配)
磁盘:600G×2块SAS盘(系统盘,,大小无特殊规定,按公司标准采购)
      6×4T SATA盘
 

4.2 部署架构

部署架构应该从硬件、网络、存储综合考虑,保障私有云整体的稳定性和安全性,主控制节点需要2台机器保障控制节点高可用,计算节点由多台机器(最少2台)组成一个或多个集群,保障业务的连续性、稳定性、安全性。

4.3 控制节点架构

主控节点有两台机器作为主备,安装cloudstack管理端、MYSQL和分布式文件系统作为二级存储,都是一主一备。

CloudStack管理服务器可以部署一个或多个前端服务器并连接单一的MySQL数据库。可视需求使用一对硬件负载均衡对Web请求进行分流。另一备份管理节点可使用远端站点的MySQL复制数据以增加灾难恢复能力 

这里写图片描述
4.4 计算节点存储架构

 

这里写图片描述

这里写图片描述

4.5 私有云整体架构

管理服务器集群(包括前端负载均衡节点,管理节点及MYSQL数据库节点)通过两个负载均衡节点接入管理网络。 
辅助存储服务器接入管理网络。 
每一个机柜提供点(POD)包括存储和计算节点服务器。每一个存储和计算节点服务器都需要有冗余网卡连接到不同交换机上 

这里写图片描述
4.6 高级网络

每个区域都有基本或高级网络。一个区域的整个生命周期中,不论是基本或高级网络。一旦在CloudStack中选择并配置区域的网络类型,就无法再修改。 
下表比较了两种网络类型的功能 
 这里写图片描述
 这里写图片描述
在一个云中可能会存在二种网络类型。但无论如何,一个给定的区域必须使用基本网络或高级网络。 
单一的物理网络可以被分割不同类型的网络流量。账户也可以分割来宾流量。你可以通过划分VLAN来隔离流量。如果你在物理网络中划分了VLAN,确保VLAN标签的数值在独立范围。

在cloudstack 中使用 openvswitch  
Open vSwitch(下面简称为 OVS)是由 Nicira Networks 主导的,运行在虚拟化平台(例如 KVM,Xen)上的虚拟交换机。在虚拟化平台上,OVS 可以为动态变化的端点提供 2 层交换功能,很好的控制虚拟网络中的访问策略、网络隔离、流量监控等等。 
安装openvswitch 安装包 

kmod-openvswitch-1.9.3-1.el6.x86_64.rpm
openvswitch-1.9.3-1.x86_64.rpm
 

添加如下配置信息到/etc/cloudstack/agent/agent.properties,以便CloudStack可以识别KVM上的Open vSwitch。

network.bridge.type=openvswitch
libvirt.vif.driver=com.cloud.hypervisor.kvm.resource.OvsVifDriver
 

验证Open vSwitch是否正确安装

lsmod |grep openvswitch
openvswitch            78045  0
ovs-vsctl 
 

对比网卡配置的变化 
用桥接的方式 bridge  cloudbr0

DEVICE=cloudbr0
TYPE=Bridge
ONBOOT=yes
NM_CONTROLLED=no
BOOTPROTO=none
USERCTL=no
IPV6INIT=no
HWADDR=00:0c:29:c2:10:fd
IPADDR=192.168.59.129
NETMASK=255.255.255.0
GATEWAY=192.168.59.21234567891011

用OVS的方式 bridge  cloudbr0

DEVICE=cloudbr0
IPV6INIT=no
ONBOOT=yes
TYPE=OVSBridge
BOOTPROTO=none
USERCTL=no
NM_CONTROLLED=no
STP=no
DEVICETYPE=ovs
IPADDR=192.168.59.129
NETMASK=255.255.255.0
GATEWAY=192.168.59.2
 

用bridge 的eth0

DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=no
BOOTPROTO=none
USERCTL=no
IPV6INIT=no
HWADDR=00:0c:29:c2:10:fd
IPADDR=192.168.59.129
NETMASK=255.255.255.0
GATEWAY=192.168.59.2
BRIDGE=cloudbr0123456789101112

用OVS 的 eth0

DEVICE="eth0"
IPV6INIT=no
ONBOOT=yes
TYPE=OVSPort
BOOTPROTO=none
NETMASK=255.255.255.0
GATEWAY=192.168.59.2
USERCTL=no
NM_CONTROLLED=no
DEVICETYPE=ovs
OVS_BRIDGE=cloudbr0
 

OVS主要是用来在虚拟化环境中。虚拟机之间一个虚拟机和外网之间的通信所用,如下是一个典型的结构图: 
那么,通常情况下的工作流程如下: 
 这里写图片描述
1 VM实例instance产生一个数据包并发送至实例内的虚拟网络接口VNIC,图中就是instance中的eth0. 
2 这个数据包会传送到物理节点上的VNIC接口,如图就是vnet接口。 
3 数据包从vnet NIC出来,到达桥(虚拟交换机)br100上. 
4 数据包经过交换机的处理,从物理节点上的物理接口发出,如图中物理节点上的eth0. 
5 数据包从eth0出去的时候,是按照物理节点上的路由以及默认网关操作的,这个时候该数据包其实已经不受你的控制了。 
OVS 的基本操作 
以下操作都需要root权限运行,在所有命令中br0表示网桥名称,eth0为网卡名称。

添加网桥:

#ovs-vsctl add-br br01

列出open vswitch中的所有网桥:

#ovs-vsctl list-br1

判断网桥是否存在

#ovs-vsctl br-exists br01

将物理网卡挂接到网桥:

#ovs-vsctl add-port br0 eth01

列出网桥中的所有端口:

#ovs-vsctl list-ports br01

列出所有挂接到网卡的网桥:

#ovs-vsctl port-to-br eth01

查看open vswitch的网络状态:

ovs-vsctl show1

删除网桥上已经挂接的网口:

#vs-vsctl del-port br0 eth01

删除网桥:

#ovs-vsctl del-br br01

4.7 企业存储使用

CloudStack定义了两种存储:主存储和辅助存储。主存储可以使用iSCSI或NFS协议。 
主存储的速度会直接影响来宾虚拟机的性能。如果可能,为主存储选择选择容量小,转速高的硬盘或SSD 

这里写图片描述
4.7.1 使用glusterfs 主要的要点

修改文件/etc/glusterfs/glusterd.vol,将端口改为:

option base-port 511521

添加如下这行配置

# cat /etc/glusterfs/glusterd.vol
volume management
typemgmt/glusterd
option working-directory /var/lib/glusterd
option transport-type socket,rdma
optiontransport.socket.keepalive-time 10
optiontransport.socket.keepalive-interval 2
optiontransport.socket.read-fail-log off
option rpc-auth-allow-insecure on
option base-port 51152
end-volume
 

启动逻辑卷之前执行命令

gluster volume set <volname>server.allow-insecure on1

添加主存储如下图所示: 

这里写图片描述
4.8 系统可靠性与高可用性

4.8.1 管理服务器的HA

CloudStack管理服务器可以部署为多节点的配置,使得它不容易受到单个服务器故障影响。管理服务器(不同于MySQL数据库)本身是无状态的,可以被部署在负载均衡设备后面。 
停止的所有管理服务不会影响主机的正常操作。所有来宾VM将继续工作。 
当管理主机下线后,不能创建新的VMs、最终用户,管理UI、API、动态负载以及HA都将停止工作。

4.8.2 启用了HA的虚拟机

用户可以给指定的虚拟机开启高可用特性。默认情况下所有的虚拟路由虚拟机和弹性负载均衡虚拟机自动开启了高可用特性。当CloudStack检测到开启了高可用特性的虚拟机崩溃时将会在相同的可用资源与中自动重新启动该虚拟机。高可用特性不会跨资源域执行。CloudStack采用比较保守的方式重启虚拟机,以确使不会同时运行两个相同的实例。管理服务器会尝试在本集群的另一台主机上开启该虚拟机。 
高可用特性只在使用共享主存储的时候才可以使用。不支持使用本地存储作为主存储的高可用。

4.8.3 主机的HA

用户可以给指定的虚拟机开启高可用特性。默认情况下所有的虚拟路由虚拟机和弹性负载均衡虚拟机自动开启了高可用特性。当CloudStack检测到开启了高可用特性的虚拟机崩溃时将会在相同的可用资源与中自动重新启动该虚拟机。高可用特性不会跨资源域执行。CloudStack采用比较保守的方式重启虚拟机,以确使不会同时运行两个相同的实例。管理服务器会尝试在本集群的另一台主机上开启该虚拟机。 
高可用特性只在使用共享存储主存储的时候才可以使用。不支持使用本地存储作为主存储的高可用。

4.9 性能调优

4.9.1 增加管理服务器到最大内存

如果管理服务器用于高需求,默认JVM的最大内存分配可能不足。增加内存: 
编辑Tomcat配置文件: 
/etc/cloudstack/management/tomcat6.conf 
改变命令行参数 -XmxNNNm中的N为更高的值。 
例如,如果当前值为 -Xmx128m,则改为 -Xmx1024m或更高。 
将新的设置生效,重启管理服务。

# service cloudstack-management restart1

4.9.2 设置数据库缓冲池大小

为MySQL数据库提供足够的内存空间来缓存数据和索引是很重要的: 
编辑MySQL配置文件: 
/etc/my.cnf 
在 [mysqld]部分的datadir下面插入如下行。使用适合您情况的值。如果MySQL和管理服务器在同一台服务器上面我们建议设置缓冲池为内存的40%,如果MySQL为专用的服务器我们建议设置为内存的70%。下面的示例假设一台专用的服务器的内存为1024M。 
innodb_buffer_pool_size=700M 
重启MySQL服务.

# service mysqld restart1

4.9.3 设置和监控每个主机的总VM数限制

管理员应该监视每个集群中的虚拟机实例的总数,如果总量快达到hypervisor允许的最大虚拟机数量时,不再向此群集分配虚拟机。并且,要注意为主机预留一定的计算能力,以防止群集中有主机发生故障,因为发生故障的主机上的虚拟机需要重新部署在这些预留主机上。请咨询您所选择hypervisor的文档,了解此hypervisor能支持的最大虚拟机数量,并将此数值设置在CloudStack的全局设置里。监控每个群集里虚拟机的活跃程序,并将活跃虚拟机保持在一个安全线内。这样,CloudStack就能允许偶尔的主机故障。举个示例:如果集群里有N个主机,而你只能让其中任一主机的停机时间不超过特定时间。那么,你能在此集群部署的最多虚拟主机数量值为:(N-1) * (每主机最大虚拟量数量限值)。一旦群集中的虚拟机达到此数量,必须在CloudStack的用户界面中禁止向此群集分配新的虚拟机。

5 Cloudstack API 调用

5.1 文档地址

http://cloudstack.apache.org/api/apidocs-4.8/TOC_Root_Admin.html

5.2 cloudstack API调用方法

所 有 CloudStack API请 求 都 是 以 HTTP GET/POST形 式 提 交 , 同 时 附 上 相 关 的 命 令 和 参 数 . 无 论 是 HTTP或 HTTPS, 一 个 请 求 都 
有 以 下 内 容 组 成 : 
CloudStack API URL: 这 是 Web服 务 API入 口 
命 令 : 你 想 要 执 行 的 Web服 务 命 令 , 比 如 开 启 一 个 虚 拟 机 或 创 建 一 个 磁 盘 卷 
参 数 : 命 令 所 需 的 任 何 必 要 或 可 选 的 参 数 
一 个 API GET请 求 的 样 例 看 起 来 像 这 样 : 
http://localhost:8080/client/api? 
command=deployVirtualMachine&serviceOfferingId=1&diskOfferingId=1&templateId=2&zoneId=4&api 
Key=miVr6X7u6bN_sdahOBpjNejPgEsT35eXqjB8CG20YI3yaxXcgpyuaIRmFI_ 
EJTVwZ0nUkkJbPmY3y2bciKwFQ&signature=Lxx1DM40AjcXU%2FcaiK8RAP0O1h 
U%3D 
每 一 个 API请 求 格 式 的 组 成 都 是 基 本 URL + API 路 径 + 命 令 字 串 + 签 名 .

5.3 API签名

到账户管理中生成签名 
 

这里写图片描述

这里写图片描述
5.4 二次开发

 这里写图片描述
 
主机情况 

这里写图片描述
虚拟机情况

这里写图片描述

6 系统维护及故障处理

6.1 系统监控

使用zabbix自带模板即可。Cpu、内存、主机存活、磁盘空间、主机运行时间、系统load。日常情况要查看服务器的监控值,遇到报警要及时处理。1

6.2 使用服务器日志

为了方便诊断系统,CloudStack 管理服务器在目录/var/log/cloud/management/下记录了所有网站、中间层和数据库的活动。CloudStack 会记录各种出错信息。我们推荐使用下述命令从管理服务器日志中寻找有问题的输出日志:

grep -i -E 'exception|unable|fail|invalid|leak|warn|error' /var/log/cloudstack/management/management-server.log1

openvswitch日志: /var/log/openvswitch 
libvirt、qemu日志:/var/log/libvirt 
glusterfs、包括每台机器的brick日志日志:/var/log/glusterfs 
cloustack management、agent的日志日志:/var/log/cloudstack

6.3 恢复丢失的虚拟路由器

症状 
虚拟路由器是运行着的,但主机失去连接。虚拟路由器不再按期望工作。 
原因 
虚拟路由器丢失或宕机。 
解决方案 
如果您确定虚拟路由器宕机了,或不再正常工作,请销毁它。您必须再建一个新的,此时备份路由器应保持运行(假定在使用冗余路由器配置的情况下)。

6.4 主机的维护计划与维护模式

你可以使一台主机进入维护模式。当激活维护模式时,这台主机将不会接纳新的来宾VMs,同时上面的VMs会无缝地迁移到其他非维护模式的主机上。这个迁移使用在线迁移技术并且不会中断用户的操作。

6.5 cpu分配到85%就再也建不了虚机了

#在全局配置中,将这个改为1.001

cluster.cpu.allocated.capacity.disablethreshold 
Cluster中CPU分配率上限,CPU分配量/CPU可用量不能超过该值;类型:小数(0~1);默认:0.85

6.6 清理openvswitch

主机故障后,openvswitch 信息不一致 
先执行ovs-vsctl show 
之后依次删除其中的vnet 
例如:ovs-vsctl del-port vnet8

6.7 使用glusterfs 报错

qemu-kvm通过libgfapi的方式访问glusterfs,示例如下:

<devices>
<emulator>/usr/bin/qemu-kvm</emulator>
<disk type='network' device='disk'>
<driver name='qemu' type='qcow2' cache='none'/>
<source protocol='gluster' name='dda5volume/329036b7-5155-4808-9731-1110a71dfbd2'>
<host name='127.0.0.1' port='24007'/>
</source>
<target dev='vda' bus='virtio'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
</disk>
通过fuse的方式访问glusterfs,示例如下:
<disk type='file' device='disk'>
<driver name='qemu' type='qcow2' cache='none'/>
<source file='/os_gluster_instance/8b12f0f1-562f-4b1b-8d6a-f20e4ed6cc55/disk'/>
<target dev='vda' bus='virtio'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>
</disk>
 

使用glusterfs的libgfapi性能会提高很高但,当每台物理服务器创建的虚拟机超过7或8台虚机的时候就无法创建成功,cloudstack management、agent上的libvirt都会报错,这些错误不是无法创建虚拟机的根本原因,需要看glusterfs的错误信息,但glusterfs集群的日志也没有相关的报错信息,需要看glusterfs的每个brick的日志,里面有如下的报错信息

[2013-12-02 17:21:17.553601] E [rpcsvc.c:521:rpcsvc_handle_rpc_call]
0-glusterd: Request received from non-privileged port. Failing request
[2013-12-02 17:21:20.557649] E [rpcsvc.c:521:rpcsvc_handle_rpc_call]
0-glusterd: Request received from non-privileged port. Failing request
 

后来google搜索之后,发现是glusterfs安全机制问题 
glusterd默认只接受小于1024的端口下发的请求,而Qemu使用了大于1024的端口下发请求,造成gluterd的安全机制默认阻止Qemu的请求 
所以需要做两步操作:

The following configuration changes are necessary for qemu and samba 
integration with libgfapi to work seamlessly:
        1) gluster volume set <volname>server.allow-insecure on
        2) Edit /etc/glusterfs/glusterd.vol to contain this line:
optionrpc-auth-allow-insecure on
Post 2), restarting glusterd would be necessary.
 

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐