云Oracle是基于腾讯云TStack的Oracle云化解决方案,采用开放的“X86服务器+高速以太网络+分布式软件定义存储”架构,使得Oracle运行在更加开放、可靠、易扩展、易整合的软硬件系统上,同时提供便捷的资源交付能力和管理能力,降低软硬件成本和运维成本,让用户更专注于业务发展。

▲图1 典型的IOE架构

在传统IOE架构中,Oracle运行在Unix小型机、光纤交换网络、磁盘阵列等专用软硬件设备上,这些设备提供了强大的运算 / IO能力,和高带宽低延迟的网络,使得Oracle可以支撑大吞吐量、高并发的关键业务。但在数据量日益增长、业务变化越来越快、要求“计算能力如水和电一般自由吞吐”的云时代,这种复杂专用、成本昂贵、难以伸缩的“高冷”架构,越来越难以适应企业应用的迅速发展,这也是云化Oracle的大背景。

腾讯云TStack运营着全球最大的企业私有云集群,拥有强大的X86服务器和云存储的计算、存储资源池。能否利用TStack的计算、网络和存储能力,将Oracle运行在X86服务器,IP网络,云存储的“云化”架构上,去掉IOE架构中的I和E呢?

Ⅰ 云Oracle第一步:接入TStack

▲ 图2 单实例云Oracle on TStack

  万事开头难,为了尽可能减少复杂性,我们首先选用Oracle单实例版本进行云化:

1. 从TStack计算资源池中创建VM,上面安装单实例Oracle软件和Ceph客户端;

2. 从TStack存储资源池中创建Ceph云盘(pool & image),使用Ceph的块设备接口挂载给VM,作为OS块设备。

3. 计算节点Oracle使用ASM将块设备组成Oracle文件系统。

Ceph的块存储特性,使得计算节点Oracle看到的(IP方式挂载的)块设备,与通过光纤网络、磁盘阵列挂载的并没有不同,因此能正常进行IO操作。通过与TStack团队合作,我们实现了单实例云Oracle的在线申请和交付,数据库部署时间由传统方式的“几天到几周”缩短到半小时以内。

与传统IOE架构相比,云Oracle获得了以下优势:

⒈开放性:

云Oracle采用开放、开源的软硬件(x86服务器、以太网络、Ceph等),取代了传统方案中专用的软硬件设备(小型机、光纤网络、磁盘阵列等),适合在数据中心云化环境中大规模部署。

⒉灵活性:

▪VM可按需创建并扩展;

▪云盘可在线扩、缩容,不影响数据库可用性;

▪Ceph集群可支持多套数据库(计算节点)接入;

▪云盘以IP方式挂载,不受地域限制。

⒊可靠性:

▪Ceph集群去中心化,无单点故障;

▪数据多副本,存放在不同存储节点;

▪硬件故障恢复后Ceph自动修复数据,无需人工干预。

⒋易部署维护:

▪自助申请、自动交付;

▪无专用硬件,维护简单。

⒌低成本:

▪单位容量成本(元/TB)是EMC高端存储的1/10;

▪整套成本是EMC存储方案的1/5。

单实例云Oracle证明了Oracle运行在Tstack上的可行性,并带来了“云化”架构的众多优点,但第一版的云Oracle也面临着两大明显挑战

1. 高可用性

单实例云Oracle每个数据库只有一个实例,一旦这个实例不可用,则整个数据库无法对外提供服务。这对于关键业务系统是不可接受的。

2. 性能

云Oracle刚在TStack环境上部署时,TPM(通过tpcc标准测试工具测得的每分钟处理事务数)性能指标只能达到10w,与EMC宣称的可支持几百万TPM差距很大,只能用于对性能要求不高的开发、测试环境。

针对这两个问题,我们对云Oracle进行了高可用架构和性能优化。

Ⅱ 云Oracle第二步:高可用增强 & 性能优化

利用Ceph云盘“可同时挂载给多个计算节点”的特性,我们实现了云Oracle的“HA双机热备”和“集群高可用”两个高可用方案。

▲ 图3 云Oracle双机热备方案

   HA双机热备是在单实例云Oracle的基础上,再增加一个HA实例,HA实例只安装数据库软件,平时不挂载Ceph云盘。主实例和HA实例共享云存储,当主实例发生故障时,可通过监控服务器上的切换程序,一键切换至HA备机,切换时间在分钟级。

   HA双机热备方案为单实例云Oracle提供了一定的可用性保护,缺点是平时有一台计算节点(HA实例)闲置,有一定的资源浪费。

▲ 图4 云Oracle集群高可用方案

其实Oracle数据库有自己的集群高可用版本 – RAC (Real Application Cluster),RAC使得数据库存储集中的情况下,拥有多个同时工作的数据库实例。在RAC集群架构中,多个实例不仅可以分担负载,还可以在仅剩一个实例可用时,依然可以对外提供服务(用户几乎无感知),实现整个数据库的高可用。

传统的RAC是基于IOE架构的(如图1),通过解决“云储存共享挂载”、”虚拟机私有网卡绑定”等问题,我们成功地在基于TStack的虚拟化环境、IP网络、云存储条件下部署和运行Oracle RAC,实现了云Oracle的“集群高可用”方案,并通过高可用场景测试,确保符合RAC的高可用场景。下面是我们构造的高可用测试案例和测试结果:

类别 测试场景 测试结果
高可用(DB实例) ▪正常关闭一个DB实例▪异常关闭一个DB实例 一个DB实例不可用后,数据库可用性不受影响(所有应用连接在1分钟内自动Failover到另一个DB实例上,应用无需重新连接)
高可用(主机) ▪ 一台计算节点主机断电 一台计算节点离线后,数据库可用性不受影响(所有应用连接在1分钟内自动Failover到另一个DB实例上,应用无需重新连接)
高可用(存储) ▪ 一台存储节点主机断电 一台存储节点离线后,数据库可用性不受影响(Ceph集群数据多副本,一台主机宕掉后集群可继续提供服务)
高可用(网络) ▪ 私有网络网卡失效▪一台计算节点公有网卡失效 一台计算节点的私有网络或公有网络失效后,数据库可用性不受影响。(RAC集群重组,踢掉网络失效的节点,1分钟以内处理能力恢复,应用无需重新连接)
数据库功能 ▪创建表空间、数据文件、用户和schema▪在线添加删除云盘(ASM磁盘) 与云存储相关的DB功能均正常,符合预期
   在性能优化方面,我们采用硬件升级、Ceph优化、数据库优化等手段,结合Oracle数据库的IO特点,经过大量的迭代尝试,使TPM(每秒处理事务数)测试结果从10w提升至137w,已经可以满足大多数企业应用需要。

▪硬件升级:CPU(E5-2670取代E5-2630),网络(万兆以太网取代千兆以太网),存储(nvme ssd硬盘取代普通ssd硬盘)

▪Ceph优化:K(kraken)版取代J(Jewel)、H(Hammer)版本、随机写多线程优化、条带大小调整

▪数据库优化:数据和日志Ceph集群分离、ASM条带化、数据库参数调优

云Oracle第三步:实践检验

是骡子是马,还要拉出来溜溜。虽然通过了高可用性和性能测试,但基于全新云化架构的TStack Oracle能否经受得住大并发的关键业务考验,才是我们最关心的。

    在最近的WX客户项目中,TStack云Oracle经历了上线以来的第一次“大考”。

下面是WX项目的特点和对数据库的要求:

WX项目的特点 对数据库的要求
关键业务业务独立,与现有业务耦合少 高可用尽可能独立部署,迁移时间可控
数据量大,增长快(数据量600GB,增速4GB/天) 存储容量大单位容量成本低可灵活扩容
读多写少,读IO繁忙(读写IO比例60:1) 读IO性能好读写分离

由于历史原因,WX项目数据库部署在使用EMC存储的4节点Oracle RAC上(后面简称EMC库),春节期间,由于业务单量暴增(日单量从3w增至10w),数据量增长达到3GB/天,EMC库很快出现了容量、性能不足以支撑的迹象,需要快速进行扩容或数据库迁移,而EMC存储扩容成本很高。

在进行容量评估后,确定已有的一套双节点集群高可用云Oracle(后面简称TStack云库)可以支撑WX业务,且云Oracle的高可用、灵活扩展、存储成本低等特性很适合WX项目。于2017.11.18日将WX模块迁移至TStack云库,采用Oracle数据泵备份/恢复方式进行迁移,70GB数据实际用时2小时左右。

迁移后第二天,收集对比了TOP SQL在EMC库和TStack云库上的实际执行时间,迁移后,相同SQL在云库上的执行时间缩短90%以上。

   迁移后,TStack云库经历了18年春节前的WX业务放量(日单量从10w增长至45w),虽然IO负载有显著增加,但没有出现性能问题,IO响应时间表现良好。

业务峰值时云盘读IO吞吐量达到1GB/秒,几乎用满计算节点万兆网带宽,SSD云盘响应时间在7ms以内(读延迟5ms,写延迟3ms),表现良好。

总结:与TPM性能压测时关注写的性能不同,WX实际业务的IO压力在读(读写IO比例60:1,大表全表扫描占用云存储的网络带宽)。云Oracle的万兆网络和SSD云硬盘,使得单个计算节点可以支撑1GB/秒的读IO吞吐量,可满足大多数企业应用要求。

后续的运营优化:

虽然WX业务放量并没有导致云库的性能问题,但业务侧一些SQL效率较低,导致很多大表全表扫描,数据库读IO负载较高。

通过监控AWR性能报告,3月对云库运行时间长、IO占用高的TOP SQL进行了集中的SQL优化,优化后,TOP SQL执行时间下降70%以上,数据库物理读IO下降95%,基本解决了读IO较高的问题。

3月对WX新上线的报表、预警模块进行了读写分离部署,部署到云库的只读灾备库:

云灾备库是独立的计算+存储节点(单实例方式),通过Active Dataguard与主库实时同步。主库故障时,备库可切换为主库运行,平时备库可以用只读方式打开,供查询应用使用,减轻主库的负担。

截至目前,腾讯云TStack云Oracle已稳定运行一年多,可用性100%,性能经受住了WX等高并发关键业务的检验。相信随着承载业务量的增加,云Oracle的灵活易扩展、性价比高、运维简单等优势会进一步得以体现。

更多关于TStack云Oracle的介绍,请参考:

https://cloud.tencent.com/solution/c-oracle

文章来源于腾讯云开发者社区,点击查看原文