基于centos6.5部署 Cloudstack


1. 前言

CloudStack是一个功能强大、UI友好的开源云(IaaS)计算解决方案。自Ctrix将CloudStack捐献给Apache 后,一直持续高速发展,其社区活跃度已经渐渐赶上另一开源云OpenStack平台。CloudStack拥有所有开源云平台中最为友善的管理界面,而且其天生的多语种支持会使中文用户感觉很爽。

CloudStack可分为管理节点安装和受控节点安装。管理节点安装无特殊要求,完全可以安装到虚拟机环境下。受控节点因要创建虚拟机,故需要硬件虚拟化支持,推荐使用独立主机安装。CloudStack支持多种虚拟化方案,包括:KVM、Xen、XenServer、VMware。因XenServer、VMware已包含有强大的虚拟机管理功能,CloudStack可以直接与其通信调用其管理接口,因此这两种受控机环境下,无需安装任何软件。但KVM、Xen的受控机必须安装 CloudStack-Agent之后,才能被CloudStack管理。

2. 前期准备

需要在所有节点上做进行下面的配置

2.1 安装操作系统

安装CentOS 6.5 minimal,安装后以root用户登录

2.2 配置网络,确保主机能上网

  1. 使用vim编辑 ifcfg-eth0 文件

evim /etc/sysconfig/network-scripts/ifcfg-eth0

  1. 修改为如下内容:
配置项 修改说明
DEVICE=eth0 [不需要修改]
HWADDR=52:54:00:B9:A6:C0 [不需要修改]
NM_CONTROLLED=no [需要修改]
ONBOOT=yes [需要修改]
BOOTPROTO=none [需要修改]
IPADDR=192.168.1.121 [需要修改为你的IP]
NETMASK=255.255.255.0 [需要修改为你的掩码]
GATEWAY=192.168.1.1 [需要修改为你的网关]
DNS1=219.141.136.10 [需要修改为DNS1]
DNS2=219.141.136.10 [需要修改为DNS2]
  1. 运行下面的命令,网络服务进程network配置为开机即启动

chkconfig network on

  1. 运行下面的命令,重启网络服务进程 network

service network restart

  1. 测试网络

因我们要使用网络安装方式,所以要首先保证你的服务器可以正常联网。Ping www.baidu.com试试是否可以访问外网。

2.3 设置主机名称

CloudStack运行时需要获取本机名称,如无法正确获取可能导致服务无法正常启动并报一大堆的错。

  1. 运行以下命令检查:

hostname –fqdn

  1. 如无正常返回,请编辑 /etc/hosts 文件,添加主机ip对应的名称。
vim /etc/hosts
# 如:192.168.10.198 manage.cloudstack.com

#修改主机名

/etc/sysconfig/network     

vim /etc/sysconfig/network

# 添加如下
Hostname= manage.cloudstack.com
  1. 编辑完后立即生效。如果还失败的话,请重启服务器。

2.4 修改Linux安全设置

服务器上的SELinux会拦截CloudStack的一些命令,导致CloudStack操作失败,因此启动CloudStack前需要对SELinux进行设置。

vim /etc/selinux/config

# 修改
SELINUX=permissive

# 以上修改需重启服务器才能生效,为使设置立即生效可使用下边的命令
setenforce permissive

2.5 配置时间同步

管理节点会通过各种协议与受控节点通讯,为了确保安全,受控节点接到命令后会进行一系列的校验,如果两机的时间不同步的话,会导致命令拒绝执行。最简单的办法就是,所有服务器都安装ntp实现时间的自动同步。

# 运行以下命令安装ntp:
yum install ntp

# 设置ntp为开机自启动
chkconfig ntpd on

# 启动ntp服务
service ntpd start

2.6 更新 yum 仓库

默认情况下,CentOS的软件源中没有收录最新版本CloudStack,为了能顺利安装,我们需要手工指定软件源。

# 新建 repo 文件
vim /etc/yum.repos.d/cloudstack.repo

# 添加内容为:
[cloudstack]
name=cloudstack
baseurl=http://cloudstack.apt-get.eu/rhel/4.4/
enabled=1
gpgcheck=0

3. 安装数据库

yum install mysql-server
  • 配置 MySQL
# 修改连接数 (默认的mysql有连接数限制,无法满足CloudStack管理节点的要求,需要手工设定。 

vim /etc/my.cnf

# 在[mysqld]下面添加下列参数增加以下内容:

innodb_rollback_on_timeout=1

innodb_lock_wait_timeout=600

max_connections=350

log-bin=mysql-bin

binlog-format='ROW'



# 注:max_connections的参数应设置350乘以你准备部署的管理节点的数量。这里假定只安装一个管理节点。

# 启动 MySQL 服务:
service mysqld start

# 设置 MySQL 开机自动启动:
chkconfig mysqld on

# 默认安装的MySQL安全级别比较低,需要手工设置MySQL下密码、禁用远程访问,删除无用账户及测试数据库。
# 方法也很简单,直接使用如下命令按向导提示一步步来即可:
/bin/systemctl start mysqld.service
systemctl enable mysqld.service
  • 运行mysql 安全配置向导
mysql_secure_installation

# 数据库准备好后,需导入CloudStack的表及基础数据,这样云平台才能正常使用:
cloudstack-setup-databases cloud:123456@localhost --deploy-as=root:root密码

# 如果有以下输出表示数据库已经准备完毕

CloudStack has successfully initialized database, you can check your database configuration in /etc/cloudstack/management/db.properties 

4. cloud-client安装配置

4.1 安装cloud-client

设置好源以后,我们就可以直接使用yum安装了,非常简单方便。

安装管理节点的命令为:

yum install cloud-client

如果CentOS 是最小化安装的话,将需要安装300兆以上的文件,请耐心等待。如果网速过慢导致下载不了文件而中断安装的话,请重新运行上面的yum命令。

若网速确实慢,有个取巧的办法,从http://cloudstack.apt-get.eu/rhel/4.4/下载对应的文件,复制到/var/cache/yum/x86_64/6/cloudstack/packages,替换文件,重新运行上面的yumy命令。(也可以从网盘下载4.4.3版本对应文件http://pan.baidu.com/s/1nt7RtyT)

CloudStack使用MySQL管理数据,但安装cloud-client时没有包含MySQL,这时需要我们手工安装,并导入数据。

4.2 修改Tomcat

由于tomcat为了区分ssl和没有ssl,所以配置分为tomcat6-nonssl.conf和tomcat6-ssl.conf,需要把tomcat6-nonssl.conf更改tomcat6.conf,否则启动会报没有tomcat6.conf文件错误

# 切换文件夹 
cd /etc/cloudstack/management/

# 修改文件名 
mv tomcat6-nonssl.conf  tomcat6.conf

# 切换文件夹 
cd /usr/share/cloudstack-management/conf

# 修改文件名
mv server-nonssl.xml server.xml

# 注:Tomcat的默认端口是8080,若需要修改成其他端口,则需修改/etc/cloudstack/management/server.xml

4.3 安装网络存储

主存储由于可使用本地存储,故可不添加,但二级存储只能使用网络存储。CloudStack支持多种网络存储协议,如iSCSI、NFS、VMFS等。由于NFS简单易用,推荐使用NFS搭建网络存储。

# 1. 安装NFS服务:

yum install nfs-utils

# 2. 编辑 /etc/exports文件,设置主存储和二级存储的路径  
vim /etc/exports

# 在文件中,增加如下内容(注意192.168.10.0/24和(rw,async,no_root_squash)之间不能有空格,)如下:

/nfs/secondary 192.168.20.0/24(rw,async,no_root_squash)

/nfs/primary 192.168.20.0/24(rw,async,no_root_squash)

# 4. 建立文件夹

mkdir –p /nfs/secondary

mkdir –p /nfs/primary

# 4. 重新加载exports文件

exportfs -rv

#Exportfs命令是使得本地目录可以被NFS客户端进行安装,默认使用/etc/exports文件进行导出一个或者多个目录。参数:

#-r 重新读取etc/exports文件中的设置,并使设置生效,而无需重启NFS服务   
#-v 显示当前共享目录及详细的选项设置

# CentOS 6.x默认使用NFSv4。NFSv4需要所有客户端设置域。在我们的环境中域名为cs.com

vim /etc/idmapd.conf

# 文件中去掉注释并修改:

Domain = cs.com

# 修改/etc/sysconfig/nfs,将其中的端口号全部打开

vim /etc/sysconfig/nfs

# 打开下面的端口

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

4.4 设置防火墙

  • 开放防火墙端口
vim /etc/sysconfig/iptables
# 开放如下端口
-A INPUT -p tcp -m tcp --dport 111 -j ACCEPT

-A INPUT -p udp -m udp --dport 111 -j ACCEPT

-A INPUT -p tcp -m tcp --dport 2049 -j ACCEPT

-A INPUT -p tcp -m tcp --dport 32803 -j ACCEPT

-A INPUT -p udp -m udp --dport 32769 -j ACCEPT

-A INPUT -p tcp -m tcp --dport 892 -j ACCEPT

-A INPUT -p udp -m udp --dport 892 -j ACCEPT

-A INPUT -p tcp -m tcp --dport 875 -j ACCEPT

-A INPUT -p udp -m udp --dport 875 -j ACCEPT

-A INPUT -p tcp -m tcp --dport 662 -j ACCEPT

-A INPUT -p udp -m udp --dport 662 -j ACCEPT

# 重启防火墙

service iptables restart
  • 或者关闭防火墙
# 关闭防火墙
service iptables stop

# 关闭开机自启
chkconfig iptables off

4.5 启动NFS服务

# 启动服务
service rpcbind start
service nfs start

# 设置服务为自动重启
chkconfig rpcbind on
chkconfig nfs on

# 查看本机发布的nfs目录
showmount -e

4.6 导入系统虚拟机模板

系统虚拟机在CloudStack中扮演着重要的角色,如系统虚拟机没有正确导入,CloudStack将无法管理二级存储,也就无法完成导入模板、创建新的虚拟机等操作。系统虚拟机文件很大,没有包含在CloudStack安装程序中,需要我们手工下载并导入。注意系统虚拟机的模板版本。

4.1 及之前的版 acton-systemvm-02062012.qcow2.bz2
4.2 版本 systemvmtemplate-2013-06-12-master-kvm.qcow2.bz2
4.3 版本 systemvm64template-2014-01-14-master-kvm.qcow2.bz2
4.4.1 版本 systemvm64template-4.4.1-7-kvm.qcow2.bz2

用不同的虚拟机实现方案系统虚拟机模板也是不同的:

受控机使用 KVM /usr/share/cloudstack-common/scripts/storage/secondary/cloud-install-sys-tmplt -m /nfs/secondary -u http://cloudstack.apt-get.eu/systemvm/4.4/systemvm64template-4.4.1-7-kvm.qcow2.bz2 -h kvm -F
受控机使用XenServer /usr/share/cloudstack-common/scripts/storage/secondary/cloud-install-sys-tmplt -m /nfs/secondary -u http://download.cloud.com/templates/acton/acton-systemvm-02062012.vhd.bz2 -h xenserver -F
受控机使用vCenter /usr/share/cloudstack-common/scripts/storage/secondary/cloud-install-sys-tmplt -m /nfs/secondary -u http://download.cloud.com/templates/burbank/burbank-systemvm-pwd.ova -h vmware -F

文件较大,需耐心等待。当然,你也可以把文件下载到本地/var目录下,下载地址:http://cloudstack.apt-get.eu/systemvm/4.4,然后用-f参数导入。如:

/usr/share/cloudstack-common/scripts/storage/secondary/cloud-install-sys-tmplt -m /nfs/secondary -f /var/systemvm64template-4.4.1-kvm.qcow2.bz2 -h kvm –F

也可以到[http://pan.baidu.com/s/1c0CnH1u 下载4.4.1 ](http://pan.baidu.com/s/1c0CnH1u 下载4.4.1)kvm 或者xen模版

4.7 登陆WEB-UI

到目前为止,虽然还有很多工作要做,但你现在其实已经可以登陆CloudStack控制台了。

  1. 先初始化一下管理节点(这步只要执行一次就行了)
cloudstack-setup-management

# 1. 启动CloudStack服务:
service cloudstack-management restart
# 一般情况下,它会正常启动。如果启动时报权限问题,一般是因为cloud用户没有/var/log/cloudstack/management/ 写入权限导致。

# 2. 赋日志文件权限
chown cloud /var/log/cloudstack/ -R
# 启动CloudStack服务需要花点时间,大概等了将近3分钟才启动完成,这期间你可以查看下它的日志,确保它正常启动:

# 4. 查看日志
tail -100f /var/log/cloudstack/management/catalina.out
# 4. 查看cloudstack 启动状态
service cloudstack-management status
# 5. 启动成功能后,你现在就可以用谷歌、火狐浏览器(IE访问可能有兼容性问题)访问管理节点,地址:http://管理节点ip:8080/client,默认的用户名为admin,密码是password
  1. Cloudstack基于tomcat提供web服务,默认使用了8080端口。如果你想改用其它端口,可以修改/etc/tomcat6/server.xml文件进行配置。
  2. Cloudstack 默认安装在/etc/cloudstack/management 目录下,你可以通过修改 log4j-cloud.xml 文件来调整日志的输出级别、路径等。
  3. 初次登陆时会显示向导页面,一步步引导你创建第一个基础架构。目前我们的准备工作尚未完成,还无法正确添加,因此这里先选择跳过。
  4. 登陆后点击“基础架构”,CloudStack资源管理的功能都在“基础架构”下。其中,“区域”可以理解为一个机房,“提供点”可以理解为一个机架,“群集”是机架中主机的分组管理,“主存储”是网络存储,主要用于存放虚拟机硬盘的,当然你也可以使用本地存储,“二级存储”也是网络存储,主要用于存在虚拟机模板、快照的。
  5. “系统VM”是CloudStack自带的专用虚机,用于管理二级存储及远程终端。其中二级存储虚机必须正常启动模板等功能才可用。远程终端虚机正常启动后,才能通过WEB页面直接访问虚机控制台。
  6. “虚拟路由器”也是CloudStack自带的专用虚机。主要用于网络隔离、端口转发等网络相关功能。
  7. 根据以上的介绍,想添加新的“区域”还必须依赖于网络存储、系统虚机的支持。

4.8 遇到的问题

4.8.1 管理节点的Web界面无法访问

检查iptables是否阻挡了8080端口。检查cloudstack-management服务是否正常启动。

service cloudstack-management status

如果启动状态不正常,则需要检查一下日志。日志位于 /var/log/cloudstack/management/catalina.out 。根据日志中的错误提示,进行相应的处理,绝大多数问题都可以得到解决。如果日志信息不够详细,可以修改 /etc/cloudstack/management/log4j-cloud.xml来调整日志的输出级别。

4.8.2 登陆时提示用户名密码不正确。

默认的登陆用户名为 admin 密码是 password 。如果登陆时提示不正确,可能是导入基础数据库时有的问题。重新导入基础数据库:

cloudstack-setup-databases cloud:123456@localhost –deploy-as=root:root密码

如果还不行,将数据库删掉再重新导入。

4.8.3 CloudStack不能添加主存储或二级存储

检查/etc/sysconfig/nfs配置文件是否把端口都开放了。

检查iptables是否有阻挡。

检查CloudStack的“全局设置”,secstorage.allowed.internal.sites属性是否设置正确。

4.8.4 CloudStack无法导入IOS或虚拟机模板

创建好“基础架构”后,就可以导入ISO文件或虚拟机模板,为创建虚机做准备了。如果你发现注册ISO或注册模板时,状态字段一直不动,已就绪永远都是no,那一般都是因为二级存储有问题或Secondary Storage VM 有问题了。

选择“控制板”->系统容量,检查二级存储容量是否正确。

检查系统VM中的Secondary Storage VM是否正常启动。

4.8.5 重装CloudStack

安装完CloudStack后,我们往往会做各种实验,可能会把系统搞得很乱。想删除的话非常麻烦,因为它们之间往往存在层级关系,必须先从最底层删起。有没简单的办法直接推倒重来呢?答案是有的,最简单只要重置下其数据库即可。

  1. 先停掉CloudStack服务:
    service cloudstack-management stop
  2. 登陆mysql控制台,删除数据库:

mysql -u root -p

drop database cloud;

drop database cloud_usage;

drop database cloudbridge;

quit;

  • 重新导入基础数据:
    cloudstack-setup-databases cloud:123456@localhost –deploy-as=root:uicctech99866 (root密码)

  • 导入相应的系统虚机模板

/usr/share/cloudstack-common/scripts/storage/secondary/cloud-install-sys-tmplt -m /nfs/secondary -f /var/systemvm64template-4.4.1-kvm.qcow2.bz2 -h kvm –F

  • 删除/var/log/cloudstack/management目录下的所有日志(可选)

  • 初始化管理节点

cloudstack-setup-management

  • 授权cloud用户写日志的权限

chown cloud /var/log/cloudstack/ -R

  • 关闭iptables服务(初始化管理节点后,iptables服务会自动启动)

service iptables stop

  • 重启cloudstack服务

service cloudstack-management restart

这时查看日志如果提示权限不够给cloud用户授权

chown cloud /var/log/cloudstack/ -R

这时,你再登陆就会发现一个全新的CloudStack啦。

4.8.7 CloudStack的区域、提供点等无法用中文命名

CloudStack在4.1以前的版本中,区域、提供点等均可使用中文命名,但4.1版本时却不知为何做了限制。如果在意这个功能,请使用4.1以前的版本。推荐使用 4.0.2版。

4.8.8 CloudStack如何进行RDP远程桌面访问

CloudStack建立好Windows XP的虚拟机后,同网段的不能够进行远程桌面访问(XP里已经设置好允许远程访问,端口号3389也已经监听),telnet vmip 3389也不通。虚拟机之间也不能够互相访问。后查询资料发现,CS默认配置会导致CS外的机器连接虚拟机有问题,比如网络没有问题的机器使用远程桌面连接winxp的虚拟机会失败。是因为security groups and the ingress rules是白名单制度,如果不进行任何设置的话,网络访问虚拟机都会有问题。

解决办法:在infrastructure/zone/physicalNetwork/Network Service Providers/security groups/roles/ingress rules下增加一个3389的端口,就可以进行远程桌面连接了。

另外,可以设置ICMP方式的rule,使用0.0.0.0/0的CIDR,就完全不限制了,不过,可能会有些安全性的问题。

4.8.9 管理IP地址耗尽

UPDATE op_dc_ip_address_alloc SET nic_id=NULL,reservation_id=NULL,taken=NULL

4.8.10 Fail to generate certificate!: sudo: no tty present and no askpass program specified (With great power comes great responsibility.sudo:没有终端存在,且未指定 askpass 程序)

修改sudo配置文件

命令编辑配置文件 vim /etc/sudoers

增加行 Defaults visiblepw

否则会出现 sudo: no tty present and no askpass program specified

4.8.11 Fail to generate certificate!: timeout 在sudo中加入权限

原因是cloud用户没有权限增加cloud 用户权限 vim /etc/sudoers 增加行

cloud ALL =NOPASSWD : ALL

4.8.12 sudo: sorry, you must have a tty to run sudo(sudo:抱歉,您必须拥有一个终端来执行 sudo)

vim /etc/sudoers

注释掉 Default requiretty 一行

4.8.13 第一:安装完成后,启动cloud-management服务或者cloud-usage服务时,出现以下错误:

cloud-management dead but pid file exists

The pid file locates at /var/run/cloud-management.pid and lock file at /var/lock/subsys/cloud-management.

Starting cloud-management will take care of them or you can manually clean up.

将日志文件权限改为777

rm /var/run/cloud-management.pid

或赋日志文件权限

chown cloud /var/log/cloudstack/ -R

4.8.14 com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:Euplicate column name ‘size’:

cloudstack-setup-databases cloud:123456@localhost –deploy-as=root:刚才设定的root密码

cloudstack-setup-management

执行两遍,然后重新启动即可

5. 安装 KVM

KVM(kernel-based Virtual Machine)是一个开源的系统虚拟化平台,自Linux 2.6.20之后已集成到Linux内核中,因它使用Linux自身的调度器进行管理,所以相对于其他虚拟化解决方案而言,其核心源码很少也更加的稳定。CloudStack支持与多种虚拟化解决方案的集成。CloudStack+KVM是最佳的黄金组合,他们都功能强大且免费,你可以毫无顾忌地随意部署安装而不必害怕有人找你要授权费。KVM一直以来没有好的免费的集群管理工具,现在加上CloudStack后,如虎添翼,比起VCenter、XenCenter这类强力商业软件来讲也毫不逊色。

5.1 安装kvm

yum install kvm kmod-kvm qemu kvm-qemu-img virt-viewer virt-manager libvirt vconfig
  • 开放相关端口。
vim /etc/libvirt/libvirtd.conf
listen_tls  =0  
listen_tcp  = 1  
tcp_port  = "16509"  
mdns_adv  = 0  
auth_tcp  = "none"  


vim /etc/libvirt/qemu.conf
vnc_listen = 0.0.0.0 

vim /etc/sysconfig/libvirtd
LIBVIRTD_ARGS="--listen"
  • 启动虚拟机服务

service libvirtd restart

  • 测试一下是否成功:

lsmod | grep kvm

注: lsmod——显示已载入系统的模块

  • 检查KVM是否成功安装

virsh -c qemu:///system list

Id Name State

5.2 安装 Cloud-agent

KVM不像XenServer、VCenter等已经内置了强大的管理功能,因此必须安装一个CloudStack代理来完成主控端发来的指令。直接通过仓库安装:

yum install cloud-agent

注意:安装完 cloud-agent 后无需启动,等管理节点中添加主机时会自动启动。 默认的安装目录:/etc/cloudstack/agent

CloudStack是通过log4j来输出日志的,可以通过修改log4j-cloud.xml文件来调整日志的输出结构。

5.3 添加主机

到目前为止,你的准备工作已经完成了。如果创建的是简单网络域的话,你现在就可以在管理节点的WEBUI中顺利添加这台受控主机啦。这步的操作方法非常简单,CloudStack中有一个非常友好的向导,应该可以帮助你正确完成添加。

5.4 常见问题

5.4.1 在管理节点中添加主机失败

添加主机时失败,请查看日志。

管理节点日志在/var/log/cloudstack/management/catalina.out

受控节点日志在/var/log/cloudstack/agent/cloudstack-agent.out

5.4.2 Unable to start agent: Failed to get private nic name

在CloudStack中,流量标签是同受控主机的网桥相关的,如果设置了流量标签,则受控机必须设置相应的网桥。CloudStack4.3的agent在启动时,默认会自动创建cloudbr0和cloudbr1两个网桥。如果你指定了其他的标签名,则相应的网桥也要作修改,甚至需要在受控机上手工创建网桥。

如果想修改成其他网桥名字,那么需要在配置文件里面指定:

vim /etc/cloudstack/agent/agent.properties

修改下面两个参数

private.network.device

public.network.devic

如果网桥指定错误的话,那么就会出现上面的错误。

5.4.3 Failed to create vnet

如果你再尝试创建高级网络,出现的如上的错误,那是因为你没有安装vconfig程序。

yum install vconfig

5.4.4 libvirtd dead but subsys is locked(libvirtd 已死,但是 subsys 被锁)

yum install libdaemon avahi

service messagebus start

service avahi-daemon start

service libvirtd start

发现还是“libvirtd dead but subsys is locked”,在/var/lock/subsys/下面还是有libvirtd这个锁,于是想到selinux还没有禁用,于是

vi /etc/sysconfig/selinux

SELINUX=disabled

重新启动虚拟机,

service messagebus start

service avahi-daemon start

service libvirtd start

service libvirtd status

libvirtd is running,ok了

[root@server1 ~]# virsh -c qemu:///system list #使用这个命令检查KVM是否成功安装

Id Name State

(ps:hnbian:我在解决的时候上面的解决办法不好用,然后把kvm安装 1.2 小节中的vnc_listen = 0.0.0.0 改成vnc_listen = “0.0.0.0” 好了)

6. NOVNC安装

  1. 下载NOVNC

cd /var/

git clone git://github.com/kanaka/noVNC

  1. 如何使用NOVNC

cd noVNC/ utils

使用联创中控修改的launch.sh替换novnc自带的launch.sh

./ launch.sh

  1. 通过Web页面访问虚拟机

1)编程时动态往/var/noVNC/vnc_tokens文件中写入虚拟机IP和端口号与Token值的对应关系,如下面所示,注意Token值与虚拟机IP和端口号见有个空格。

02f63e037a3c485c8fd5c0164c6ef67b: 192.168.20.3:5902

2)在浏览器中访问:

http://192.168.20.2:6080/vnc_auto.html?path=%3ftoken=02f63e037a3c485c8fd5c0164c6ef67b&password=63c4b2ecfee93b8b

可以自动连接到对应虚拟机的控制台,其中token是/var/noVNC/vnc_tokens文件中存在的token值,password是访问虚拟机的vnc密码。

这里要特别注意一下,在url中%3f是’?’的url编码,我们不能直接使用path=?token=abc123这种格式。

7. VNCDoTool安装

  1. 安装python-devel

yum install python-devel

  1. 安装VNCDoTool

pip install vncdotool

注:

  • 若找不到pip命令,执行下面的语句

wget –no-check-certificate http://pypi.python.org/packages/source/s/setuptools/setuptools-0.6c11.tar.gz

tar zxvf setuptools-0.6c11.tar.gz

cd setuptools-0.6c11

python setup.py build

python setup.py install

wget –no-check-certificate https://github.com/pypa/pip/archive/1.5.5.tar.gz

tar zvxf 1.5.5

cd pip-1.5.5/

python setup.py install

  • 如果安装过程中出现依赖包缺失,则运行下面的命令:

pip install virtualenv

virtualenv venv-vncdotool

# XXX requirements.txt from vncdotool source tree

pip install -r requirements.txt

pip install -e .

  1. 如何截屏

vncdo -s 192.168.20.3:5902 capture screen.png

8. CloudStack密码加密和解密

8.1 加密与解密

CloudStack存储一些敏感密码和密钥用于提供安全保障。这些值被自动加密。

  • 数据库密钥(该密钥不是数据库用户密码,而是在使用cloudstack-setup-databases初始化数据库时,如果加了-m 选项,对db.properties文件中关键参数进行加密。默认为“password”,可在/etc/cloudstack/management/key文件中查看)
  • 数据库密码
  • SSH密钥
  • 计算节点root密码
  • VPN密码
  • 用户API密钥
  • VNC密码

CloudStack使用简单的java加密库(JASYPT)。使用数据库密钥加密和解密数据值,随着数据库密码一起存储在CloudStack内部属性文件中。 上面列出的其他加密值, 例如 SSH 密钥, 也被记录在CloudStack数据库中。

当然,数据库密钥本身不可以公开存储-必须被加密存储。那么,CloudStack如何阅读它呢?从外部源启动管理服务器期间必须提供另一个密钥。有2种方法提供该密钥:从文件加载或者由CloudStack的管理员提供。CloudStack数据库中有个配置项,将会告知使用了哪种方法。如果加密类型设置为 “file,” 密钥必须存在于位置已知的文件中。如果加密类型设置为 “web,” 管理员则会运行

com.cloud.utils.crypt.EncryptionSecretKeySender

工具,关键在于连接至管理服务器中一个已知的端口。

在CloudStack初始化的过程中设置加密类型,数据库密钥和管理服务器密钥。这些都是CloudStack数据库设置脚本的参数(cloud-setup-databases)。默认值是file,password和password。当然,强烈建议你修改这些密钥值。

好了,更多信息查看CloudStack官方文档。

直接上干货。

8.2 解密虚拟机VNC密码

新版本CS中默认启用虚拟机的VNC密码,保证安全性。但,CPVM的性能,呵呵。

所以当不想通过CPVM时,需要解密VNC密码才能连接直接通过vnc工具连接。

以KVM为例:

(其实有两个简单的方式可以让你快速得到VNC密码:1、在kvm主机中通过 “virsh edit 虚拟机名称”,进去编辑状态,可以查看到明文的VNC密码。2、通过virt-manager打开某个虚拟机,先在details里面种手动将VNC密码修改,然后再使用更改后的密码登录;第二个方法慎用,可能会造成CS页面中Console功能异常,不过虚拟机关机,再开机后密码会重新生成,console恢复正常。)。

\1. 在CloudStack UI中查找该虚拟机的内部名称。例如:i-2-15-VM

\2. 在CloudStack数据库中查找该虚拟机加密后的vnc密码

mysql> select vnc_password from cloud.vm_instance where instance_name = ‘i-2-15-VM’ or name = ‘InstanceName’;

+———————————————-+

| vnc_password |

+———————————————-+

| mmwJnTulUgSWyd/NdiXAkRtI+y+33h5dbuk4+OGpkck= |

+———————————————-+

1 row in set (0.00 sec)

8.3 使用jasypt库解密

jasypt库路径为:

[root@localhost ~]# /usr/share/cloudstack-common/lib/jasypt-1.9.0.jar

使用如下命令解密:

[root@localhost ~]# java -cp /usr/share/cloudstack-common/lib/jasypt-1.9.0.jar

org.jasypt.intf.cli.JasyptPBEStringDecryptionCLI input=”上步骤中得到的vnc密码”

password=”数据库密钥(参见前面解释)”

例如:

[root@localhost ~]# java -cp

/usr/share/cloudstack-common/lib/jasypt-1.9.0.jar

org.jasypt.intf.cli.JasyptPBEStringDecryptionCLI

input=”mmwJnTulUgSWyd/NdiXAkRtI+y+33h5dbuk4+OGpkck=” password=”password”

—-ENVIRONMENT—————–

Runtime: Sun Microsystems Inc. OpenJDK 64-Bit Server VM 20.0-b12

—-ARGUMENTS——————-

input: mmwJnTulUgSWyd/NdiXAkRtI+y+33h5dbuk4+OGpkck=

password: password

—-OUTPUT———————-

f7d7ae4bac54cfa2

其中,OUTPUT即为解密后的vnc密码,使用该密码连接VNC控制台。

8.4 解密计算节点root密码

还是以kvm为例,该密码为添加主机时使用的root密码。

1.在数据库host_details表中查出加密后的主机密码字段

+—-+———+———-+———————————-+

| id | host_id | name | value |

+—-+———+———-+———————————-+

| 10 | 1 | password | jQ5GklnC7FEShUJUo0uZs4p9LYclP8ng |

| 20 | 4 | password | f8qWuceOf6AzeN+AJ82OYQN7mSqiqYPU |

| 30 | 5 | password | 6icHGY6p5O+fq+hrJ/CRv9u+SaVPvvmj |

| 40 | 6 | password | OcU/tzEcZXzKhjaxQA8n48usagBXCpPm |

+—-+———+———-+———————————-+

4 rows in set (0.00 sec)

2.复制value值,进行解密

[root@localhost ~]# java -cp /usr/share/cloudstack-common/lib/jasypt-1.9.0.jar

org.jasypt.intf.cli.JasyptPBEStringDecryptionCLI

input=”jQ5GklnC7FEShUJUo0uZs4p9LYclP8ng” password=”password”

[root@localhost ~]# java -cp

/usr/share/cloudstack-common/lib/jasypt-1.9.0.jar

org.jasypt.intf.cli.JasyptPBEStringDecryptionCLI

input=”f8qWuceOf6AzeN+AJ82OYQN7mSqiqYPU” password=”password”

[root@localhost ~]# java -cp

/usr/share/cloudstack-common/lib/jasypt-1.9.0.jar

org.jasypt.intf.cli.JasyptPBEStringDecryptionCLI

input=”6icHGY6p5O+fq+hrJ/CRv9u+SaVPvvmj” password=”password”

[root@localhost ~]# java -cp

/usr/share/cloudstack-common/lib/jasypt-1.9.0.jar

org.jasypt.intf.cli.JasyptPBEStringDecryptionCLI

input=”OcU/tzEcZXzKhjaxQA8n48usagBXCpPm” password=”password”

其中,OUTPUT即为解密后的密码。

9. kvm嵌套虚拟化

9.1 确认软硬件环境支持

9.1.1 物理机的CPU支持硬件虚拟化技术

grep -E ‘^flags.*(vmx|svm)’ /proc/cpuinfo

flags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm pcid sse4_1 sse4_2 popcnt tsc_deadline_timer xsave avx lahf_lm arat epb xsaveopt pln pts dtherm tpr_shadow vnmi flexpriority ept vpid

得到类似的输出,如果没有则表示当前CPU不支持硬件虚拟化技术。

9.2 升级RHEL6.5的kernel

嵌套式虚拟是一个可通过内核参数来启用的功能。很可惜,现有的 RHEL6.x 内核暂时并未支持此参数。

你可以通过 cat /sys/module/kvm_intel/parameters/nested 或者 modinfo kvm-intel |grep nested 来确定你的系统是否支持nested这个参数。默认的RHEL6的系统上此参数并不存在。

那么就需要升级内核来支持nested。你可以选择到Linux内核官网下载较新的内核(不建议最新,一些太新的内核特性跟保守的RHEL系可能不能很好的兼容),手动编译安装。

这里一个简单的方法,利用CentOS社区xen-c6项目中提供的一个支持nested参数的内核。

9.2.1 添加xen-c6的软件库

cd /etc/yum.repos.d

wget http://dev.centos.org/centos/6/xen-c6/xen-c6.repo

vim /etc/yum.repos.d/xen-c6.repo

[xen-c6]

name=CentOS-$releasever - Xen

baseurl=http://dev.centos.org/centos/6/xen-c6/$basearch/

gpgcheck=0

Priority=1

enabled=0

[xen-c6-source]

name=CentOS-$releasever - Xen Source

baseurl=http://dev.centos.org/centos/6/xen-c6/SRPMS/

gpgcheck=0

Priority=1

enabled=0

将其修改为enabled=0令这个第三方的软件库不会被默认启用。

9.2.2 安装新的内核

yum –enablerepo xen-c6 install kernel kernel-firmware

安装完成后,修改grub.conf,确定系统从新的内核启动,并重启系统。

9.3 开启kvm内核模块的nested参数

9.3.1 重新加载kvm内核并指定netsted=1参数

rmmod kvm_intel

modprobe kvm-intel nested=1

cat /sys/module/kvm_intel/parameters/nested

Y

9.3.2 确定下次重启自动开启

方法1:

vim /etc/grub.conf

在kernel行后面加上

kvm-instel.nested=1

(注意:!!这里是在kernel行后面加,不是在文件最后行加)

方法2:

echo “options kvm-intel nested=1” ?> /etc/modprobe.d/kvm-intel.conf

9.2 编辑agent配置文件

vim /etc/cloudstack/agent/agent.properties

# 添加下面内容

guest.cpu.mode=custom
# 或
guest.cpu.mode=host-model
# 或
guest.cpu.mode=host-passthrough(这里推荐用这个)

# 若选择 guest.cpu.mode=custom就需要增加下面这行,选其他的不必添加下面这行

guest.cpu.model=xxxx

# xxxx内容是从 /usr/share/libvirt/cpu_map.xml 文件中选取的,是选择CPU的类型

解释说明:

custom: 选择custrom时你可以直接显视的给出CPU的module name规范,这个规范从文件 /usr/share/libvirt/cpu_map.xml中查找。

host-model: libvirt 根据/usr/share/libvirt/cpu_map.xml 文件来自动确定 CPU 模型。选择和主机最相近的匹配。 尽可能找到CPU性能和flags参数相近的主机。

host-passthrough: libvirt 会告诉KVM向没有修改过CPU的主机迁移. 与host-model的差别是不仅匹配flags特性,还要匹配CPU的每一个特性. 这将给出绝对最好的性能, 同时对一些应用程序很重要,但这样做会付出一些代价:虚拟机之间的迁移只会迁移到完全匹配CPU的主机上。

提示:使用host-passthrough参数可能会导致迁移失败,这个时候建议你改成host-model 或custom参数。

例如:

custom

  guest.cpu.mode=custom

  guest.cpu.model=SandyBridge

host-model

  guest.cpu.mode=host-model

host-passthrough

  guest.cpu.mode=host-passthrough(这里推荐用这个)

注意:cloudstack-agent服务不必手动开启,ManagementServer在添加主机的时候会自动帮你启动。

10. CloudStack 配置

登陆http://管理节点IP:8080/client,用户名:admin,密码:password

10.1 添加基础架构

现在CloudStack管理节点所有的准备工作都已经完成了。接下来你就可以添加自己的第一个“区域”了。建议安装完一个计算节点再进行添加基础架构的操作。

  • 注意和上边的提供点的IP范围不能重复

10.2 高级网络配置

  1. 登录cloudstack

默认帐号是admin 密码是 password 如果密码不对 查看管理节点安装Q&A的解决办

  1. 向导页

这里我们要进行高级网络配置,点击跳过指南。

  1. 进入cloudstack环境的首页
  1. 点击基础架构

这时我们没有做任何配置,所以各个节点的设备数量均为0

  1. 点击区域
  1. 点击添加区域

基本为基本网络,高级为高级网络,这里我们要进行高级网络配置,故我们选择高级网络。点击next。

  1. 添加区域
  1. 设置物理网络
  1. 添加公共通信ip范围
  1. 添加提供点
  1. 添加来宾通信范围
  1. 设置集群名称

虚拟机管理程序在之前选择过了,所以这里的虚拟机管理程序有默认值,添加集群名称点击next。

  1. 向集群添加主机
  1. 添加主存储
  1. 添加辅助存储
  1. 所有准备工作已经完成 进行下一步骤

10.3 修改全局属性

CloudStack有一个全局属性来控制二级存储所在的网段。如果这个网段没配或配置的不对,将可能无法成功能添加到二级存储。登陆 CloudStack 管理页面,选择“全局设置”,在右上边的搜索框中输入

  1. 进行修改
修改项 操作方式
搜索sites 修改 secstorage.allowed.internal.sites 为二级存储当前网段,如 192.168.10.0/24,表示Web服务器的网段在192.168.1.0,或者192.168.1.180/32,表示Web服务器的IP地址为192.168.1.180。
搜索local 修改system.vm.use.local.storage 为 true。 允许系统虚机使用本地存储。修改后,重启CloudStack生效。
搜索control 修改control.cidr为192.168.10.0/24 修改control.gateway为192.168.1.1
搜索management 修改management.network.cidr为192.168.1.0/24
  1. 修改之后重启CloudStack

service cloudstack-management restart

10.4 基础网络多网段配置

  1. 添加一个提供点
  1. 在刚刚添加的提供点下面添加集群
  1. 在刚刚添加的集群下面添加主机(注意该主机的ip需要在此提供点的要在该提供点的网段内)
  1. 为添加的提供点 添加ip范围

新增实例测试多网段,如果能创建出该网段的实例,并且该实例能够正常通信,说明基础网络多网段配置成功

10.5 高可用性(HA)的配置

  1. 添加支持ha的计算方案
  1. 全局设置 搜索 ha.tag

添加值为ha(其他值也可以只要与主机标签值一致即可)

  1. 修改主机标签

注意:

  • 这里主机标签的值要与刚刚设置ha.tag 的值一致。
  • 当看到已启用高可用性为 yes 说明配置成功。
  • 如果你只有两台计算节点时,不能将两台都设置为高可用性。
  • 计算节点的高可用星要在一个集群内才能生效

11. 虚拟机安装

11.1 SystemVM模板

导入系统虚拟机模板后,可在WEB-UI界面进行查看。注意SystemVM的已就绪状态必须为“Yes”,若不是,请查看日志检查错误。

在“模板”界面上,你还会发现有“CentOS 5.5(64-bit) no GUI (KVM)”模板,这是CloudStack的测试模板,且已就绪状态为“No”,不必担心,SystemVm起来后会默认自动后台下载的。可以查看/nfs/secondary/template/tmpl/1/4目录下的文件,不断刷新你就会发现有个文件越来越大。

11.2 注册ISO

将镜像文件放在tomcat文件夹下的webapps\ROOT文件夹下

如下图URL 如果tomcat 在本机的话不能使用127.0.0.1或者loaclhost

开始下载ISO文件,需要等待较长的时间

下载完成后,已就绪变为“Yes”,状态为“Successfully Installed”,若状态为“Successfully Installed”,但已就绪为“No”,重启cloudstack-management服务。

11.3 通过ISO安装实例

11.4 创建模板

CloudStack支持将已安装的虚拟机的系统磁盘创建成模板。创建模板前需先将虚拟机关闭

11.5 通过模板安装实例

12. 使用CludStack API

12.1 使用方法

CloudStack API基于Web Service,可以使用任何一种支持HTTP调用的语言(例如 Java,PHP)编写代码。

在全局配置中设置API服务器端口(integration.api.port,默认为空),比如设置成8096。需要特别注意,在全局配置打开Api服务端口之后,用户要自己对安全负责,因为这里没有任何的认证及鉴权的步骤。

访问方式:BaseUrl+CommandString,其中BaseUrl为http://ip:port/client/api?,CommandString为API命令加参数组成的字符串,详见API文档。例如:http://192.168.1.150:8096/client/api?command=deployVirtualMachine&serviceofferingid=1&templateid=204&zoneid=1

12.2 修改Web控制台鼠标指针的方法

Web控制台的鼠标指针默认是个十字架,若需要修改鼠标指针为默认指针,需登录控制台代理虚拟机修改CSS文件。具体方法如下:

CloudStack的网络不允许从外部登陆系统虚拟机,只能从系统虚拟机所在的主机上登陆,并且ssh的端口号不是22,而是3922。登陆方法:首先在界面查询系统虚拟机所在的主机和link local IP(本例中为169.254.1.175),然后登陆到该host上,使用如下命令进行系统虚拟机登陆:

ssh -i /root/.ssh/id_rsa.cloud -p 3922 root@169.254.1.175

查找ajaxviewer.css,输入命令:

find . –name 'ajaxviewer.css'
./usr/local/cloud/systemvm/css/ajaxviewer.css

# 修改ajaxviewer.css中的cursor:crosshair;为cursor:default;

.canvas_title{
      cursor:crosshair;
}

# 修改为:

.canvas_title{
      cursor:default;
}

文章作者: hnbian
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 hnbian !
评论
 上一篇
Hive不用UDF实现group concat功能 Hive不用UDF实现group concat功能
Hive中并没有 group concat(合并多行)的函数,但是如果只需要简单合并功能,通过以下 hive自带的两个函数即可实现 返回类型 函数 说明 string concat_ws(string SEP, string
2016-02-12
下一篇 
Hadoop 环境部署文档 Hadoop 环境部署文档
1. Hadoop 1.2.1 伪分布式部署1.1 使用host-only方式将Windows上的虚拟网卡改成跟Linux上的网卡在同一网段 注意:一定要将widonws上的WMnet1的IP设置和你的虚拟机在同一网段,但是IP不能相同 1
2015-07-31
  目录