升级 OpenNebula 3.x 到 OpenNebula 4.0
2013年05月24日 | 标签: cloud computing, iaas, opennebula
正在测试 OpenNebula 的升级工作,安装和测试新版 OpenNebula 4.0 是一件事,还有一件事是测试升级过程中可能遇到的问题和解决办法。升级是危险操作,每一个阶段都可能会有问题,所以升级前的各种备份和测试工作都需要准备妥当,配置文件、虚拟机、数据库等等都是必须备份的。好的升级除了应该保证数据完整、各部分运行正常外还应该尽量让用户察觉不到。
OpenNebula 官方文档说如果要升级的话需要参考相关版本的文档然后逐个版本依次升级:
If you are upgrading from a version prior to 3.8, read the 3.4 upgrade guide, 3.6 upgrade guide and 3.8 upgrade guide for specific notes.
逐个版本升级的过程太麻烦,我们看看能不能一次升级到位。
先停掉 OpenNebula 3.x 的相关服务:
$ sunstone-server stop $ econe-server stop $ occi-server stop $ oneacctd stop $ one stop
导出数据库(会在 /var/lib/one 下生成一个名为 one.db.bck 的备份文件):
$ onedb backup -v -f --sqlite /var/lib/one/one.db
关闭所有虚拟机后,然后在控制节点和计算节点正常安装 OpenNebula 4.0.
安装完 OpenNebula 4.0 后用新版的 onedb 升级数据库(也就是升级 one.db.bck 里面的表结构、字段等),这个升级过程将会自动从 3.2.1 到 3.3.0 到 3.3.80 到 … 逐个版本升级到 3.9.80,整个过程完成后会纪录在当前目录的 one.upgrade.log 日志文件里:
$ onedb upgrade -v -f --sqlite one.db.bck
注意升级前(onedb upgrade)一定要关闭所有虚拟机,否则升级数据库会报错:
> Running migrator /usr/lib/one/ruby/onedb/3.3.0_to_3.3.80.rb You can't have active VMs. Please shutdown or delete the following VMs: ...
如果不想(或者不允许)关闭所有虚拟机的话,可以通过直接修改数据库的办法 “骗过” 升级脚本(onedb),只需要到数据库里手动把所有 VMs 的状态(state)改成 shutdown 就可以了:
$ sqlite3 one.db.bck sqlite> SELECT oid,name,state,lcm_state FROM vm_pool WHERE (state <> 1 AND state <> 6); sqlite> UPDATE vm_pool set state=1 WHERE (state <>1 and state <>6);
数据库升级完后就要开始升级配置文件,OpenNebula 4.0 一些配置文件、参数以及目录结构有改动,比如 OpenNebula 配置文件里的一些驱动名改了,im_kvm 改成了 kvm、vmm_kvm 改成了 kvm,为了兼容,所以需要增加 im_kvm 和 vmm_kvm. 修改 oned.conf 配置文件:
$ vi /etc/one/oned.conf ... IM_MAD = [ name = "kvm", executable = "one_im_ssh", arguments = "-r 0 -t 15 kvm" ] IM_MAD = [ name = "im_kvm", executable = "one_im_ssh", arguments = "-r 0 -t 15 kvm" ] ... VM_MAD = [ name = "kvm", executable = "one_vmm_exec", arguments = "-t 15 -r 0 kvm", default = "vmm_exec/vmm_exec_kvm.conf", type = "kvm" ] VM_MAD = [ name = "vmm_kvm", executable = "one_vmm_exec", arguments = "-t 15 -r 0 kvm", default = "vmm_exec/vmm_exec_kvm.conf", type = "kvm" ] ...
注意 authn 这一行需要有 server_cipher:
$ vi /etc/one/oned.conf ... AUTH_MAD = [ executable = "one_auth_mad", authn = "ssh,x509,ldap,server_cipher,server_x509" ] ...
/var/lib/one 目录结构中增加了一些新目录,比如 datastore, vms 等,OpenNebula 3.x 老版本的虚拟机镜像在 /var/lib/one 需要移到新的 /var/lib/one/vms 下,所以需要登陆到每个 OpenNebula 节点移动虚拟机镜像目录:
$ mkdir /var/lib/one/vms $ mv /var/lib/one/[0-9]* /var/lib/one/vms
然后启动所有服务和虚拟机、观察日志文件,看看新版 OpenNebula 有什么问题:
$ one start $ occi-server start $ sunstone-server start