CloudStack是开源软件,CloudPlatForm是CloudStack的企业版实现,其中增加了某些企业级特性,如主机高可用,所以打算将原有的CloudStack升级为CloudPlatForm,从而提高整个架构的稳定性与高可用性。
建议使用本手册的读者先单独安装CloudStack4.1.1以及CloudPlatForm4.2.0或者CloudStack4.2.0,需要足够了解两个版本之间的安装差异,才能在升级的过程中遇到问题可以快速定位是个人操作的问题还是版本差异导致的问题。毕竟生产环境的升级风险还是非常之大的。
如果读者使用在生产环境上面的CloudStack有外围系统需要调用CloudStack的接口进行一些功能实现,也需要考虑两个版本之间的API差异,总之,生产环境升级之前一定要做到测试环境完全没有问题,并且建议测试2~3遍。确保万无一失的情况下面,做到生产环境的数据备份,再进行生产环境的升级。
本文同样适用于CloudStack4.1.1到CloudStack4.2.0的升级工作。
就笔者的操作经验来看,安装CloudStack4.1.1与 CloudPlatForm4.2.0的最大区别是两个版本的系统模板文件不一样,在整个升级过程中,官方文档中没有提及,但是确实非常关键,如果关于系统模板的升级工作没有做好,那么在CloudStack中充当重要角色的几个系统虚机就无法正常工作。
两个系统模板链接
【本文以CloudStack+KVM为背景环境,故系统模板使用的是KVM的模板】
CloudStack4.1.1
http://download.cloud.com/templates/acton/acton-systemvm-02062012.qcow2.bz2
CloudPlatForm4.2.0【开源版也是这个,Md5值验证一致】
http://download.cloud.com/templates/4.2/systemvmtemplate-2013-06-12-
master-kvm.qcow2.bz2
本文不对CloudStack4.1.1的安装步骤赘述了,在此仅仅列出CloudStack中的相关逻辑资源信息
角色
值
Zone
ClovemZone
POD
管理IP范围
192.168.0.110-192.168.0.110
来宾IP范围
192.168.0.130-192.168.0.150
集群
CLUSTER
主机
192.168.0.2[解析后显示ClovemDemo ]
主存储
192.168.0.2/primary [NFS]
辅助存储
192.168.0.2/secondary [NFS]
SSVM
s-1-VM
CPVM
v-2-VM
VRouter
r-6-VM
运行实例
clovem-instance-001 [i-2-5-VM]
注:本文测试环境管理节点跟主机节点以及存储均在一台主机上
下面几个截图为以上部分信息来源。
<a href="http://blog.51cto.com/attachment/201312/133853481.png" target="_blank"></a>
<a href="http://blog.51cto.com/attachment/201312/133855492.png" target="_blank"></a>
<a href="http://blog.51cto.com/attachment/201312/133857197.png" target="_blank"></a>
<a href="http://blog.51cto.com/attachment/201312/132800425.png" target="_blank"></a>
登录已经运行的实例进行计时操作,按1个小时开始计算,计时的同时是为了证明升级过程中,不会影响实例的使用。
1.添加并启用cloudplatform4.2.0的YUM源,用于更新使用。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<code>[root@ClovemDemo ~]</code><code># cat /etc/yum.repos.d/rhel-source.repo</code>
<code>[rhel6u3]</code>
<code>name=rhel6u3</code>
<code>baseurl=</code><code>file</code><code>:</code><code>///media/rhel6u3</code>
<code>enabled=1</code>
<code>gpgcheck=0</code>
<code>[cloudstack4.1.1]</code>
<code>name=cloudstack4.1.1</code>
<code>baseurl=</code><code>file</code><code>:</code><code>///media/cloudstack4</code><code>.1.1</code>
<code>[cloudplatform4.2.0]</code>
<code>name=cloudplatform4.2.0</code>
<code>baseurl=</code><code>file</code><code>:</code><code>///media/cloudplatform4</code><code>.2.0</code>
2.停止cloudstack-management服务,并备份cloud库文件。
<code>[root@ClovemDemo ~]</code><code># service cloudstack-management stop</code>
<code>Stopping cloudstack-management: [ OK ]</code>
<code>[root@ClovemDemo ~]</code><code># mysqldump -u root –p123456 cloud > cloudstack-backup.sql</code>
3. 执行yum upgrade操作,进行组件升级
<code>[root@ClovemDemo ~]</code><code># yum upgrade –y</code>
<code>[root@ClovemDemo ~]</code><code># rpm -qa |grep cloudstack</code>
<code>cloudstack-common-4.2.0-2.el6.x86_64</code>
<code>cloudstack-agent-4.2.0-2.el6.x86_64</code>
<code>cloudstack-awsapi-4.2.0-2.el6.x86_64</code>
<code>cloudstack-management-4.2.0-2.el6.x86_64</code>
由于本测试环境的管理节点跟主机[Agent]节点为同一台物理主机,所以,此处会将cloudstack-agent也进行更新,不管是开源版的cloudstack,还是企业版的cloudplatform,名称都是cloudstack-服务项。
可以看到所有的cloudstack组件均升级到4.2.0版本了。
4. 启动管理节点,重启[Agent]节点
<code>[root@ClovemDemo ~]</code><code># ps -ef |grep java |grep -v grep |wc –l</code>
<code>0</code>
<code>[root@ClovemDemo ~]</code><code># service cloudstack-management start</code>
<code>Starting cloudstack-management: [ OK ]</code>
<code>[root@ClovemDemo ~]</code><code># ps -ef |grep java |grep -v grep |wc -l</code>
<code>1</code>
<code>[root@ClovemDemo ~]</code><code># /etc/init.d/cloudstack-agent restart</code>
<code>Stopping Cloud Agent:</code>
<code>Starting Cloud Agent:</code>
<code>[root@ClovemDemo ~]</code><code># ps -ef |grep java |grep -v grep |wc -l</code>
<code>3</code>
<code>[root@ClovemDemo ~]</code><code># lsof -i:8080</code>
<code>COMMAND PID USER FD TYPE DEVICE SIZE</code><code>/OFF</code> <code>NODE NAME</code>
<code>java 64485 cloud 35u IPv6 1289046 0t0 TCP *:webcache (LISTEN)</code>
<code>[root@ClovemDemo ~]</code><code># tailf /var/log/cloudstack/management/management-server.log</code>
通过以上命令发现服正常启动,用tailf命令监控管理服务的日志信息
5. 登录UI查看升级后信息
<a href="http://blog.51cto.com/attachment/201312/134056208.png" target="_blank"></a>
<a href="http://blog.51cto.com/attachment/201312/134058315.png" target="_blank"></a>
<a href="http://blog.51cto.com/attachment/201312/134101970.png" target="_blank"></a>
<a href="http://blog.51cto.com/attachment/201312/134103720.png" target="_blank"></a>
<a href="http://blog.51cto.com/attachment/201312/134228881.png" target="_blank"></a>
这样的警告,可以暂不关心,做到最后,一切都会正常了。
<a href="http://blog.51cto.com/attachment/201312/134447152.png" target="_blank"></a>
6. 升级系统模板
[1] 记录数据库中保存的原先系统模板的名称以及路径
<code>template</code><code>/tmpl/1/3//b7b85af8-d127-41d9-b316-34d2301fa7c7</code><code>.qcow2</code>
17
<code>[root@ClovemDemo ~]</code><code># mysql -uroot -p123456 cloud -e 'SELECT install_path FROM template_host_ref\G'</code>
<code>*************************** 1. row ***************************</code>
<code>install_path: template</code><code>/tmpl/1/9/</code>
<code>*************************** 2. row ***************************</code>
<code>install_path: template</code><code>/tmpl/1/8/</code>
<code>*************************** 3. row ***************************</code>
<code>install_path: template</code><code>/tmpl/1/3//b7b85af8-d127-41d9-b316-34d2301fa7c7</code><code>.qcow2</code>
<code>*************************** 4. row ***************************</code>
<code>install_path: template</code><code>/tmpl/1/1/</code>
<code>*************************** 5. row ***************************</code>
<code>install_path: NULL</code>
<code>*************************** 6. row ***************************</code>
<code>*************************** 7. row ***************************</code>
<code>*************************** 8. row ***************************</code>
<code>install_path: template</code><code>/tmpl/2/202//3bce9e6c-4480-32e6-bd52-c7199a1bc375</code><code>.qcow2</code>
[2] 查看模板所在路径以及相关模板信息
18
19
<code>[root@ClovemDemo ~]</code><code># ls\</code>
<code> </code><code>/secondary/template/tmpl/1/3/b7b85af8-d127-41d9-b316-34d2301fa7c7</code><code>.qcow2</code>
<code>/secondary/template/tmpl/1/3/b7b85af8-d127-41d9-b316-34d2301fa7c7</code><code>.qcow2</code>
<code>[root@ClovemDemo ~]</code><code># cat /secondary/template/tmpl/1/3/</code>
<code>b7b85af8-d127-41d9-b316-34d2301fa7c7.qcow2 template.properties </code>
<code>[root@ClovemDemo ~]</code><code># cat /secondary/template/tmpl/1/3/template.properties</code>
<code>filename=b7b85af8-d127-41d9-b316-34d2301fa7c7.qcow2</code>
<code>description=SystemVM Template</code>
<code>checksum=</code>
<code>hvm=</code><code>false</code>
<code>size=725811200</code>
<code>qcow2=</code><code>true</code>
<code>id</code><code>=3</code>
<code>public=</code><code>true</code>
<code>qcow2.filename=b7b85af8-d127-41d9-b316-34d2301fa7c7.qcow2</code>
<code>uniquename=routing-3</code>
<code>qcow2.virtualsize=725811200</code>
<code>virtualsize=725811200</code>
<code>qcow2.size=725811200</code>
记录<code>template.properties</code> 中的filename以及qcow2.filename字段
<code>b7b85af8-d127-41d9-b316-34d2301fa7c7</code><code>.qcow2</code>
[3] 导入cloudplatform4.2.0的系统模板,覆盖原有模板文件
<code>[root@ClovemDemo ~]</code><code># /usr/share/cloudstack-common/scripts/storage/secondary/cloud-install-sys-tmplt 、-m /secondary/ -f /var/www/html/cloud/systemvmtemplate-2013-06-12-master-kvm.qcow2.bz2 -h kvm -F</code>
<code>Uncompressing to </code><code>/usr/share/cloudstack-common/scripts/storage/secondary/7d037545-8106-4007-b1b9-3aaf59e9ae64</code><code>.qcow2.tmp (</code><code>type</code> <code>bz2)...could take a long </code><code>time</code>
<code>Moving to </code><code>/secondary/template/tmpl/1/3///7d037545-8106-4007-b1b9-3aaf59e9ae64</code><code>.qcow2...could take a </code><code>while</code>
<code>Successfully installed system VM template </code><code>/var/www/html/cloud/systemvmtemplate-2013-06-12-master-kvm</code><code>.qcow2.bz2 to </code><code>/secondary/template/tmpl/1/3/</code>
[4]查看新导入的系统模板信息
<code>[root@ClovemDemo ~]</code><code># ls /secondary/template/tmpl/1/3/</code>
<code>7d037545-8106-4007-b1b9-3aaf59e9ae64.qcow2 template.properties</code>
<code>filename=7d037545-8106-4007-b1b9-3aaf59e9ae64.qcow2</code>
<code>size=276162048</code>
<code>qcow2.filename=7d037545-8106-4007-b1b9-3aaf59e9ae64.qcow2</code>
<code>qcow2.virtualsize=276162048</code>
<code>virtualsize=276162048</code>
<code>qcow2.size=276162048</code>
发现其文件名已经改变
[5] 修改新系统模板导入后的文件名,跟原先的系统模板名一致
<code>[root@ClovemDemo ~]</code><code># cd /secondary/template/tmpl/1/3/</code>
<code>[root@ClovemDemo 3]</code><code># mv 7d037545-8106-4007-b1b9-3aaf59e9ae64.qcow2 b7b85af8-d127-41d9-b316-34d2301fa7c7.qcow2</code>
<code>[root@ClovemDemo 3]</code><code># sed -i 's/7d037545-8106-4007-b1b9-3aaf59e9ae64.qcow2/b7b85af8-d127-41d9-b316-34d2301fa7c7.qcow2/g' template.properties</code>
<code>[root@ClovemDemo 3]</code><code># cat template.properties</code>
如上代码操作,将<code>7d037545-8106-4007-b1b9-3aaf59e9ae64.qcow2 </code>修改为原先系统模板的名称
<code>b7b85af8-d127-41d9-b316-34d2301fa7c7.qcow2</code>,<code>template.properties</code>中也同时替换,如此,无需修改数据库中的相关字段。
[6]将CloudPlatForm的区域禁用
<a href="http://blog.51cto.com/attachment/201312/135640185.png" target="_blank"></a>
<a href="http://blog.51cto.com/attachment/201312/135643362.png" target="_blank"></a>
[7] 清空系统模板缓存,将所有系统虚机状态置为Stopped
<code>mysql> UPDATE template_spool_ref SET download_pct=</code><code>'0'</code><code>,download_state=</code><code>'NOT_DOWNLOADED'</code><code>,state=</code><code>'NULL'</code><code>,local_path=</code><code>'NULL'</code><code>,install_path=</code><code>'NULL'</code><code>,template_size=</code><code>'0'</code> <code>WHERE template_id=</code><code>'3'</code><code>;</code>
<code>Query OK, 1 row affected (0.01 sec)</code>
<code>Rows matched: 1 Changed: 1 Warnings: 0</code>
<code>mysql> UPDATE vm_instance SET state=</code><code>'Stopped'</code> <code>where </code><code>id</code><code>=1;</code>
<code>mysql> UPDATE vm_instance SET state=</code><code>'Stopped'</code> <code>where </code><code>id</code><code>=2;</code>
<code>Query OK, 1 row affected (0.02 sec)</code>
<code>mysql> UPDATE vm_instance SET state=</code><code>'Stopped'</code> <code>where </code><code>id</code><code>=6;</code>
将s-1-VM,v-2-VM,r-6-VM的状态全部置为Stopped状态,id号一般为系统虚机名称中间的数字,不确定的话,通过对vm_instance的记录进行查询即可。
[8] 启用cloudplatform的区域,销毁所有Stopped状态的系统虚机
<a href="http://blog.51cto.com/attachment/201312/140030833.png" target="_blank"></a>
<a href="http://blog.51cto.com/attachment/201312/135949809.png" target="_blank"></a>
按照同样的方式销毁SSVM(s-1-VM)跟CPVM(v-2-VM),然后查看基础架构
<a href="http://blog.51cto.com/attachment/201312/140256830.png" target="_blank"></a>
等待片刻,查看系统虚机,发现新的SSVM跟 CPVM已经重建完成
<a href="http://blog.51cto.com/attachment/201312/140412279.png" target="_blank"></a>
[9] 新建实例,验证功能是否正常
<a href="http://blog.51cto.com/attachment/201312/140709314.png" target="_blank"></a>
<a href="http://blog.51cto.com/attachment/201312/140712110.png" target="_blank"></a>
<a href="http://blog.51cto.com/attachment/201312/140714133.png" target="_blank"></a>
<a href="http://blog.51cto.com/attachment/201312/140716567.png" target="_blank"></a>
<a href="http://blog.51cto.com/attachment/201312/140718383.png" target="_blank"></a>
<a href="http://blog.51cto.com/attachment/201312/140721892.png" target="_blank"></a>
[10]查看原有实例clovem-instance-001状态并验证功能调用
<a href="http://blog.51cto.com/attachment/201312/140824842.png" target="_blank"></a>
<a href="http://blog.51cto.com/attachment/201312/140932990.png" target="_blank"></a>
<a href="http://blog.51cto.com/attachment/201312/140935283.png" target="_blank"></a>
<a href="http://blog.51cto.com/attachment/201312/141207355.png" target="_blank"></a>
<a href="http://blog.51cto.com/attachment/201312/141209210.png" target="_blank"></a>
<a href="http://blog.51cto.com/attachment/201312/141753313.png" target="_blank"></a>
此时再去看日志,会发现之前的警告消失了。
<a href="http://blog.51cto.com/attachment/201312/141417828.png" target="_blank"></a>
按照以上的步骤操作,基本不会有问题了,笔者通过了多次验证,记录下以上所有步骤,希望可以帮到大家。
升级成功后,大家可以进行更加详细的测试,比如上文的停止,启动实例,也可以通过注册模板,下载模板等其他方式验证升级是否成功!
祝大家操作顺利!
本文转自 暗黑魔君 51CTO博客,原文链接:http://blog.51cto.com/clovemfong/1345640,如需转载请自行联系原作者