转 钢铁侠的云之舞~多租户,Docker,虚拟机 , 你怎么选?
感谢 王文杰
摘要
oracle 云技术
本文讨论的是Oracle数据库这位重量级“钢铁侠”的虚拟化,资源池,云化之路,或者你想怎么称呼都可以。本文不从lisence 成本角度讨论,仅仅为各位Oracle数据库的资深用户提供一点建议。
Oracle一直以来在数据库领域,除了贵就没有什么明显的缺点的全能的数据库。而且除了贵,还被认为太重,不敏捷,不适应云时代的节奏。其实这些都是片面的误解,随着计算机硬件的高速发展(闪存,高速网络,更快的CPU和内存)和Oracle版本发展到19c,20c,Oracle数据库已经和钢铁侠一样具有敏捷性,强大战斗力和可靠性。
当今IT的发展潮流,随着云计算的快速发展, 企业同时也希望实现整体数据库架构的资源云化,DBaaS(数据库类服务)就是PaaS 层的一个重要分支。
对比传统的标准化数据库部署模式,DBaaS能带来更灵活,可扩展、按需服务的体验,用户可对云环境中的资源进行调配。
各个厂商都有自己的dbaas概念和产品, 比如在基于云的服务器(如Amazon AWS或Microsoft Azure)上也有类型产品。DBaaS是由云服务商提供服务,用户不需要用专业的运维团队来维护服务器的运转。一些物理和虚拟化的硬件设备,包括操作系统、网络、相关的资源配置等,都可以提前完成设置,然后通过一个简单的调用,即可用分配数据资源,将应用程序连接起来。
Oracle国内目前基本上只有私有云
对于Oracle来讲,目前在国内由于数据中心没有落地,我们目前只能讨论私有云,而且目前企业也只感兴趣私有云,这和Oracle数据库承载的都是核心业务有关。而Oracle私有云的核心技术,就是多租户,以及通过enterprise manager实现“按需自助部署和管理 预打包,预配置”,”配置资源池,明确的计量和收费“。同时提供REST API调用,支持第三方dbaas平台的接入。”
多租户
技术
multi tenant
多租户是Oracle从12.1开始提供的技术,在19c版本中,已经变得非常的”友好“,各种bug得到修复,新特性逐渐加强和稳定。以前DBA担心的问题,现在基本都得以解决,大家可以放心使用,比如:热clone,热迁移, PDB级备份于恢复,PDB级DG保护,CBD fleet,PDB refresh,PDB旋转镜像 等等...
Oracle的每一个版本都有一个核心技术在支撑整个潮流更迭,比如
8的分区表
9i的ops,DG
10g的RAC,parallel
11g的ADG,RAC完善
而12c系的革命性技术,必定是多租户!
你要问我12c的新特性哪个好,我完全不在乎 什么超长VARCHAR,自动统计,ADG重定向..等等鸡毛蒜皮的特性,唯一能带给企业数据库架构师翻天覆地的革新的技术,就是多租户。当然为了支撑新一代的云技术,里面也包含了19c RAC底层的大量代码重写等等。
多租户部署案例
multi tenant
到这里,企业的IT管理专家可能要问,你在向CTO阐述了,从云化的战略角度,利用EM+多租户,实现了资源供应的敏捷性。但对于具体技术实施中,在底层技术架构了,你用什么来支撑?并且和oracle 传统小型机RAC购机有什么明显的区别呢?
和传统的构架下RAC数据库对比,Paas平台的节点是更多,资源供应更加敏捷,灵活,以及具有更好的高可用性和负载均衡机制。
传统RAC即使只在一个节点处理数据,也不可避免的产生GC交互 remote grant等,在节点规模增加的同时,GC的处理量也相应的增加。所以在2节点RAC上,都大量采用业务分区的策略。
而在PAAS平台中,为保证资源供给的冗余,灵活性,以及更好高可用性,建议采用4节点以上集群,多租户技术完美的和大型集群技术融合在一起构建了paas/dbaas平台。
在上面的图例中,利用多租户的构架,单个业务PDB数据库,只在两个节点OPEN,即可以保证多达6节点RAC的高可用性,也同时减少了资源的占用。在其它节点,该PDB处于mount状态,这样在GC网络层面也显著的减少gc remote message的产生。
多租户的高可用性
而它的高可用性的关键是通过scan listener+pdb+service来进行实现的。
scan listener可以自动感知服务各个节点的存活情况。
service可以快速在故障节点,备用节点,恢复节点之间启动和返回。
服务器端TAF的测录的充分配置,针对应用采用的驱动方式,JDBC THINK, JDBC OCI, OCI等等进行测试和配置。
pdb在发生failover的适合,会被service自动的open。假设某个节点崩溃,只需要几秒钟,即可完成备用节点pdb open和服务active。这甚至比传统架构上的”冻结GC“都还迅速。
应用只要测试好在这种架构下的连接行为,各种failover,switch over场景的行为。应用才真正可能真正实现一种故障前台业务,后台业务0感知,自动恢复的完美架构。
你还在用以前的TNS里面配两个VIP吗?out 了~
硬件设计上,在这种架构下,硬件要求和传统的RAC并无太大区别。但计算节点数更多,对心跳网络的要求非常高,必须是高质量的万M光纤(满足高吞吐量,低延迟,高可用性,gc测试要求0掉包),存储可以采用可靠的存储资源池解决方案,SAN网络要求高吞吐量,高可用性,根据实际需求选择是否用全闪配置。CPU选择2路以上的X86服务器,内存为了承载更多的PDB和业务,建议768GBor以上。
为什么不建议用小型机? 其中一个原因,比如小型机和集中式存储一次reboot长达10~20分钟的时间,数据库重启一次长达3分钟,会大大消减这种架构的“敏捷性”
而配置均衡的X86平台,一次故障的例子,节点3发生内核崩溃,4分钟完全数据库实例恢复,除了后台应用日志有记录连接池错误外,营业厅几乎没有感知。另外一次数据库instance crash,47秒即完成了重启, OCI 的service taf配置的6*10秒的retry delay,应用甚至都没有尝试连接备用节点,直接hang了47秒,然后即完成了恢复。
但是我们也面临挑战: 更大的集群,更高的集成度,都给我们在建设前期带来了更多的技术关注点,我们需要完善的工业级测试保障平台的稳定性。以及在oracle19c 20c版本的快速更迭中,需要紧密的和后台,研发协助,快速应对一些bug带来的问题。
传统的测试项目:
部分特有的测试关注点
最完美的dbaas解决方案,肯定是oracle exadata,提供极致的性能,无与伦比的均衡配置和完善高可用性。下图就是国内目前最大的一个exadatat资源池平台的图例。由于保密原因,无法清晰展现。
最后,paas/dbaas最终要通过em来实现资源管理的云化
并定义出标准化的服务模板,
实际在客户的生产应用中,有的客户并不在意这块,他们认为只要资源云化了,不管是通过命令行,还是通过web界面,只要达到了快速供应,敏捷交付,节约了成本,目的就已经达到了。
总结:
多租户+RAC大型集群+EM创建PAAS/DBAAS私有云平台,完美匹配企业数据库私有云的所有场景 (各种负载类型的核心数据库,UAT数据库,测试数据库)。
那么虚拟机呢,
虚拟机是存在了很多年的一种技术,所谓虚拟机,是硬件上安装了Windows/Linux/Mac OSX之后,再在上面安装hypervisor例如VMWare Workstation/Fusion/Virtualbox之类的软件,最后再安装Guest OS。也就是说,
Hardware -> Host OS -> Hypervisor -> Guest OS
现在国内用得最多的产品不得不提vmware 或者oracle VM box。已经广泛用于应用,数据库,备份,存储,甚至网络等各个层面,在架构上也渗入了iaas,paas,saas等领域,这里我就不多阐述。
那么在虚拟机上运行Oracle如何?这是完全没有问题的。早期,虚拟机技术只是推送一个OS,DBA还需要进行传统的数据库安装,比如会花费1~2天时间架设一个2节点的RAC。
现在虚拟机厂商也提供各种预定好的数据库模板,可以快速的供应一个已经安装好的数据库。
但通过虚拟机运行Oracle和多租户技术相比,有以下的劣势:
虚拟机供应同等规模的数据库资源池,需要更多的硬件。因为虚拟机是实现了一个完整OS核,在本身操作系统的基础上带来额外的开销。而多租户架构则是,直接访问OS/硬件资源,N个PDB共享资源。
虚拟机的硬件往往是低成本的实施,不适合进行核心数据库的整合,也没有使用裸机性能好。
PDB的供应,以及启动和关闭,远远比虚拟机敏捷。
PDB更容易管理,供应数据库,无须关注操作系统和硬件。更高效的的补丁安装。
虚拟机没有实现数据库整合,多租户整合后的lisence整体成本更低
总结:创建虚拟机环境+Oracle,只适合运行一些非核心,且对性能要求不高的业务,并且有独特的业务需求,需要进行操作系统级的隔离。
Docker ,
Docker是一种遵从Apache2.0协议开源的Linux容器方案,它通过进程和进程通信技术对操作系统的文件资源和网络的进行隔离,实现了包含文件资源、系统资源(shell环境等)以及网络资源的容器创建和管理。
Docker是利用Go语言编写,适用于Linux平台(仅适用)
官网:http://www.docker.com
源码:https://github.com/docker/docker
文档:https://docs.docker.com
Docker的实现思想和多租户类似,都是以容器为核心的思想:
快速供应:
在隔离的工作空间中支持多个工作负载,共享公共基础设施
消除重复的管理费用
每个服务器有更多的应用程序
高效的运维:多个工作负载之间的公共环境的管理成本
敏捷性:很容易提供新的工作负载、复制现有工作负载或在其他平台上重新部署工作负载
简单:工作负载不加更改地运行,并且易于使用
Docker有着独一无二的有优点,一次build,随处运行,快速供应。
Docker早已广泛的应用于Web 应用的自动化打包和发布。自动化测试和持续集成、发布。调整数据库或其他的后台应用。
Docker在制作好对应的image后,能够在几秒内就供应出一个数据库资源,提供服务。并且Docker又消除了VM的主要缺点,它仅仅提供对运行Oracle必要的内核的封装,从而大大减少了额外资源的占用,提供了接近于原生操作系统性能,但又提供了接近OS级的隔离。Docker对数据的持久化有成熟的解决办法,有资源控制,网络管理。
Docker传统上理解为互联网应用,但Docker和Oracle结合在一起,取长补短,在某些场景下,能发挥出更大的作用。
并且Docker也可以和多租户一起结合使用:
总结:虽然Docker不适合创建重要的生产数据库(比如出现问题可能缺乏原厂支持,容器的备份恢复方案非常原始,Docker也可以创建RAC集群,Docker的网络,你敢用于24*7的生产吗?等等),但Docker有它 独到之处,它非常非常适合于,企业创建数据库DEV, UAT测试平台。
在测试平台上Docker的优点:
多租户PAAS平台,建设需要1~2周,之后可以快速供应资源。Docker测试平台,建设只需要1天。
PAAS供应一个pdb需要5分钟,Docker只需要10秒。
PAAS的数据版本是固定的,Docker则可以任意供应任何版本的数据库(只要提前build好image)
举一个例子:
某银行新一代新核心研发热火朝天,超过500人的开发团队有很多的测试数据库的需求。(采用Docker+Oracle,能够以最少的时间,最高效的硬件利用效率,满足开发团队的数据库需求。)
光速信贷应用开发团队leader:DBA张大师,我们需要一个19c数据库,导入数据结构?今天能给不?
找虚拟机:正好没有19c模板,需要重头安装,给我2天。
docker平台:给我10秒,数据库运行成功,发给你ip 端口 服务名。并且逻辑备份脚本已经准备好。
1个月后。。。
paas UAT平台:完成测试后,我们会供应pdb,请导出测试库,导入到paas测试平台。
1个月后,上线前夕:
paas生产平台:完成uat测试后,可以通过多种pdb remote clone/relocate技术,快速迁移到生产平台。
当然真实场景不可能这么完美,但我们可以努力!
以上就是我个人对三种关键Oracle私有云技术的一些见解,
我推荐Oracle云化的关键技术:
多租户/Paas/Dbaas
EM/APEX
OGG (打通其他数据库的生命连接)
Docker (融入互联网血液,和传统企业技术取长补短)
Python/java(自动化运维好帮手)
最后预祝各位专家在企业数据库云化的道路上,百尺竿头更进一步!
A*S
原厂服务团队,在实施Oracle数据库云化,以及企业数据基础架构设计上有国内最专业的经验。
Better call A*S 您最信赖的数据库架构专家!
作者:王文杰
原厂首席系统分析师
2020-05