横跨7个版本的OpenStack无感知热升级在360的落地与实践

本文介绍了360公司在横跨7个版本的OpenStack升级中,如何实现业务无感知的热迁移。通过数据库对齐、网络数据面对齐和软件层面的全面更新,克服了版本跨度大、架构差异大的挑战。升级过程涉及Nova、Glance、Cinder数据库的对齐,以及计算、网络和存储的软件更新。升级后实现了架构统一、运维统一和功能统一,提升了服务效率。
摘要由CSDN通过智能技术生成

01

背景

360公司的IaaS服务平台,是基于开源Openstack项目研发的,在发展的数年间已历经了多次版本的更新迭代。2015年,360团队基于Liberty版本自主研发了360公有云(奇云),以及支持集团内部事业部使用的私有云(HULK)。2019年-2020年期间,360团队基于Openstack Stein版本,重新打造了可适配ToB业务场景的IaaS平台360Stack。该产品通过了多项权威资质认证,目前已成为可面向市场进行商业化交付的成熟解决方案。2021年,360虚拟化团队继续将ToB里的虚拟化能力,反哺到公司内的ToC集群,并自研主机Overlay架构以适配公司的大规模业务场景,应用计算存储分离结构,上线更丰富适用的云主机功能,例如弹性伸缩、可抢占实例、弹性裸金属等功能。对比于早期版本,目前最新的Stein版本功能,已有了极大的改进。

自研Openstack Stein版已被应用于北京的2个25G新机房,但是公司内北京、上海、郑州等6大主力机房目前在运行的虚拟化集群,几乎还是Liberty版本,运维着3000多台物理机,规模巨大、管理成本高。如果能够将公司内的L版本升级到S版本,将大大提升服务效率。

1.1 心路历程

整体客观而言,升级工作版本跨度很大,隔了7个版本,按Openstack一年2个版本的迭代速度,相当于隔了3年半。中间版本的表结构差异,功能差异非常大,两拨人马两套代码和数据,中间断层非常严重。要达成统一,大家都默认不可行,默认接受新的用S版本,老机房都用L版本。

但是360虚拟化团队基于使命必达、创新突破的价值观秉持下,我们提出一定要统一,公司底层云底座必须统一架构,并且所有机房必须支持今年上线的新能力。最后在保持统一目标下,大家群策群力,想了多种方案,比如机房迁移,挂公告ceph冷迁移。或者ceph双写热迁移等。

但上述方案对用户影响都比较大,我们提出能不能做到对业务无感知,这对团队的技术要求提出了更大挑战,最后大家几经研究讨论,用表结构对齐,流表补齐,组件定制升级的思路,达成了我们如下的横跨7个版本业务0感知的Openstack热迁移方案。该方案足够通用,理论上支持以后的任意Openstack之间版本热升级,希望能对大家有所帮助。

业界当前基本上IaaS除了一些头部云厂商自研,其他IaaS厂商还是基于Openstack居多,但可能大家都是基于一个版本之后二次开发cherrypick,可能与社区渐行渐远,也有可能一些跟社区跟的比较紧的,持续跟着社区热升级也不会有这种情况。还有一些公司私有云已经没有IaaS,直接用k8s容器推动业务全面容器化,部分特殊vm需求用kubevirt代替等。所以每家公司都有自己的独特背景和经历,做方案的时候除了技术还需要一些勇气,希望能对大家有所借鉴。

1.2 升级后的好处

  • 架构统一:应用主机overlay网络架构和存算分离结构;

  • 运维统一:从同一个平台运维,底层版本一致,各集群间处理的问题有共性,提高处理效率;

  • 功能统一:利于快速推进新功能,且功能增强(包括多规格企业级实例、云硬盘、弹性伸缩、基于主机overlay的VPC网络等);

那么该如何实现对存量L版集群的平滑升级呢?

02

升级思路探索

背景中提到,2015年,360技术团队基于Liberty版本上进行了自研,其中包含了大量为满足当时网络Overlay架构、云主机生命周期管理等功能的服务特性。自研Stein版本与Liberty旧版相比,不仅有社区代码的变动、自研代码的差异、数据库表结构的变化,最核心的还是自研Stein版采用了主机Overlay网络结构,并采用存算分离的计算架构。这两个版本从各方面来看,都差别巨大。

观察Openstack 这个IaaS平台服务本身,它最根本的依赖元素是各个组件的代码、数据库和消息队列。Openstack社区在每次进行版本升级时,不仅有代码的变动,还会详细描述数据库表结构的创建升级删除操作。所以按社区的这种升级方式来操作,对我们这个现状基本是不可行的。

基于虚拟化团队对Openstack多年的开发经验积累,我们探索出从控制层面的数据库入手,将L版使用的数据库对齐到S版使用的数据库中,使得集群控制面能够平滑升级到S版本。同时对计算节点,进行了软件层面的整体更新。另外,为了保证升级过程现有业务的网络无感知、零中断,我们还增加了网络流表补齐。综上所述,L-S架构热升级包含三方面的升级操作:控制面对齐、网络数据面对齐、软件层面全部更新

e29a01d6cca7c081c76039b18e0a9d13.png

L-S 热升级架构图

2.1 控制面补齐

控制面数据对齐,我们采用数据库导入的方式,分为三个步骤,主要应用于Nova、Cinder、Glance三个组件:

  • 先新建临时表;

  • 再将L版中的关键数据库表导入临时表,对临时表进行适配修改;

  • 最后将临时表导入S版的数据库中;


2.1.1 Nova数据库对齐

下面以nova组件为例,详细讲解其中的步骤。L版到S版nova组件架构上有变动,数据库和数据表也有相应变更,从L版nova数据库53张表(忽略shadow_开头的表)到S版的148张表(包括nova_api中32张+nova_cell0中58张+nova中58张,忽略以shadow_开头的表),数据库表变化很大。虽然有这么多变化,但是我们关心的数据表主要在虚拟机和hypervisor,而hypervisor信息可由nova-compute实时上报,因此只需要关心存量虚拟机以及虚机周边信息的记录。以下列出与虚拟机数据表记录相关的表,其它数据表保持使用S版的。nova_cell0库存储调度失败的虚拟机信息,可忽略,无需进行迁移操作。

步骤一:在L版使用的DB中创建临时数据库migrate_nova_api和migrate_nova,并依据S版数据库创建临时数据表。

新建migrate_nova_api库,按S版表结构新建下面的表

S版本里新增字段使用默认值或进行后期处理,删除字段无需关注。

Flavors

记录Flavor信息。将L版的instance_types表迁移到flavors表,同时表中移除deleted_at、deleted字段

flavor_extra_specs

记录Flavor额外键值信息。将L版的instance_type_extra_specs迁移到flavor_extra_specs,同时表中移除deleted_at、deleted字段,L版instance_type_id字段变为flavor_id字段

key_pairs

无差异,全量导入

instance_mappings

记录instance和cell的映射。先从L的instances表导入数据,之后用脚本填充cell_id信息。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值