大家好,欢迎来到QPCON 中国2021今天我们给大家带来的分享是在KBS里面如何保护我们的数据库工作负载在开始分享之前,我先进行一个自我介绍我叫刘洋,是级不科技的CEO和创始人级不科技是一家非常专注在云阴生数捐权和保护的公司在开始级不科技的创业之前我在IBM有超过15年的存储研发的经验旁边是我的创业小伙伴,郭勇杰下面请他给大家做一个自我介绍大家好,我是来自级不科技的郭勇杰在级不科技之前,我也是来自IBM在存储领域有超过7年的这样的一个开发经验我和我们的团队在云阴生存储的这块有超过3年的积累时间好,谢谢勇杰我们今天的这个分享主要有四部分组成首先我们会从国内现在一个比较热门的讨论开始就是说数据库到底应不应该跑在KBS里边当然我们的答案是肯定的然后我们会去讨论如何利用社区开源的我的项目来去做这个容器里边的数据库的备份和融灾第三个来讲的话,既然讨论到备份和融灾我们一定会去讨论到数据移植性的问题我们这里会介绍我勒柔的护格机制以他的局限性然后会有勇杰给大家介绍一下由技补科技开源的数据移植性框架AMBER APP项目然后到最后勇杰也会给大家做一个现场的演示结合AMBER APP和我勒柔我们可以去怎么样来去实现买搜靠他的数据库移植性好,我们开始第一个话题数据库到底要不要跑到KBS里边这是目前在国内有非常多的讨论确实来讲,数据库是企业里面非常重要的工作负载大家在设计上面的话,其实是比较谨慎的围绕数据库跑在容器上面的话,常见的一些问题比如说我们的存储是不是ready我们针对数据库这样的一些自动化的工具是不是ready针对数据库的备份和容灾,这样的方案是不是ready以及我们是不是有足够多的这样一些社区案例来去做参考那如果是放在两三年前确实来讲的话,就说我们认为整个KBS的社区里边的话,我们是没有为数据库上容器做好这些准备的但是在今天从技术的角度来讲的话把数据库跑到KBS里面是完全没有问题的首先从存储的角度来讲除了说现在社区有很多的容器原生的这些存储方案之外我们通过CSI的接口也可以把我们现有环境中的这样一些商业化存储的方案通过CSI的方式然后挂载给容器里面的数据库应用来去使用从而能够给数据库提供一个稳定的可靠的这样一个存储服务那第二来讲的话,就是说目前几乎所有的开源数据库和很多的商业数据库其实也都已经实现了容器化可以在容器上一件部署有很多数据库也提供了 Prater然后来去自动化很多的一些数据库运萎的这样一操作第三来讲的话,就是我们今天讨今天的分享的主题就是社区里面的话我们有Wolero这样的一个开源的方案可以来去帮我们做在KBS里面的数据库的备份和容灾这样的一些方案当然来讲的话,就是说从社区的角度来讲也有很多用户已经开始在KBS上面来去运行数据库对新CF去年的用户调查来去显示有55%的用户已经在他们的生产KBS集群上运行了有状态应用我们都知道数据库是有状态应用中的一个很重要的一部分数据库跑在容器里边的话其实还有很多的这样一些好处比如说开发的敏捷性我们现在可以把数据库的这样一些scammer的定义和我们的应用的代码一起放在我们的DiWalts流程里面也通过CICD这样的方式可以去很快的来去进行迭代然后进行很早的测试来去发现问题,来去改正问题这个可以很大成状地提高我们开发的这样一个敏捷性同时来讲的话,就是说把数据库关键的负载和应用跑在一起的话我们也可以从整个KBS的控制平面来去进行一个统一的管控不光是提高我们资源的利用率对于我们日常的运为管理来讲也会变得更加简单所以说从整体的情况来讲的话我们认为不光是说KBS目前从技术的角度来讲是可以完全来去运行数据库的工作负载并且我们相信数据库跑在KBS上面的话一定是大势所趋好,下面我们来去介绍一下如何利用Wallero来去保护我们在KBS里面的数据库工作负载Wallero是一个面向KBS里面应用的这样一个端道端的数据保护的方案所以说它一方面来讲的话它可以把我们应用比如说像数据库它在运行的过程中需要的各种API资源包括数据库的image本身包括它的一些config map还有service的一些配置那些资源都能够去补货到然后把它们备份到i3接口的对象存储上同时对于我们数据库使用到的这样一个PVC那Wallero也是可以来去进行备份那如果是我们的集群里面已经有了可以支持CSI快照的这样的一个存储的话Wallero会调用CSI的接口然后通过做快照的方式来去进行一个crypt consistency的这样一个备份当然来讲的话如果是结合Wallero的hook机制我们也可以去实现一个英语之性的这样一个备份那如果是我们底层的存储比如说用的是mfs它并不支持这样的一个快照的一个能力那Wallero也提供了Restake这样一个文件复制的这样一个方式来去做备份那当然来讲的话就是Restake这个文件复制的备份它本身是没有办法去保证这个数据的一致性因为我们在这个考备文件的过程中那你的数据库可能会有这个还会有这样的一些操作在进行那这个时候我就要去结合使用Wallero的hook来去保证我们在进行Restake备份的时候这个数据是在一个隐私性的状态当然来讲的话就说基于Wallero我们不光是局限于去做数据库和其他应用它的本地备份的恢复那举个例子来讲我们可以利用Wallero把我的数据库应用和数据然后备份到远端的S3存储上那这样的话当我真的遇到灾难的时候我可以在公共云端很快地拉起我的K8集群然后利用Wallero把我的应用和数据恢复过来这样的话我就能够实现一个非常低成本的这样一个栽培方案那同时使用Wallero我们还可以去进行我们的应用和数据从一个K8集群到另外一个K8集群的迁移那基于Wallero我们其实可以打造很多很丰富的这样的一些方案和场景但是在今天我们就不够多展开了好 那回到这个数据库的数据保护上面的话那其实有一个话题是绕不开的就是数据移植性我们都知道现代比较流行的这样一些数据库基本上都会支持比如说通过Red High Log这样的一个方式能够去实现Crash Consistency的恢复但是在很多的场景下我们还是需要应用移植性的这样的一个恢复能力比如说像MySQL的话它通过BinLog和AndroidLog其实可以去实现Crash Consistency但是就说它的对性能的影响是非常大的所以说很多的场景里面的话处于性能的考虑我们有的时候不会说一定都会去做到这样的一个移植性的这样的一个配置这个时候的话当我们去进行备份的时候我们就希望能够去做一个数据移植性的这样一个备份第二个角度来讲的话就说我们在数据库进行Crash Consistency的恢复的时候它是要去进行Log的Replay这个就会影响到我们数据库这样的一个恢复的速度第三个来讲我们都知道KBS里面的应用它很多时候是有很多个微服务组成这些微服务里面的话可能就是说除了我们的数据库之外可能还有其他的有状态应用或者说我可能本身在一个应用里面它就会有多个数据库的实力这样的话就仅仅通过数据库本身的Crash Consistency就是没法满足我们应用移植性的要求这个时候的话我们就需要一些新的机制然后来去从整个应用多个微服务的角度来去实现它的移植性我来说本身是给我们提供了这样一个Hook的机制能够允许我们在备份前后或者微服前后来去执行特定的Hook的一些指令但是Volero的Hook本身它今天的原理它是说需要在ApplicationPow的里面去运行一条命令来去执行这样的一个Hook的动作这个来讲它本身会有一些限制比如说文寻的这个命令就是说它需要预先预埋在我的容器里面如果是说我的容器不是我们本身开发的这样的一个容器这样的话就会有一些限制那另外来讲的话我直接在这个容器里边去去直接运行命令的话那本身可能也会有一些安全性的一些隐患这样一个角度来讲的话通过这个运行这个命令行的这样一个方式的话它的错误处理也好或者说来去监控我这个Hook执行的这样一个状态的角度来讲的话都很有它的这样的一些局限性第三个来讲的话就是说如果我们需要去实现一些更复杂的逻辑比如说我的App里面是有多个微服务需要去协调那这样的话就是说这个Hook机制就没办法去完成这样一些复杂的操作所以说基于这个无聊Hook机制的一些局限性那我们GPU科技推出了我们的开源项目MRAPP那么下面的话我们就请勇杰来去给我们介绍一下这个我们的开源项目MRAPP好的 接下来由我为大家介绍一下由GPU科技开源的这样的一个AppKBIS原生的这样的一个应用框架那么它提供了一个通用的应用移植性的这样的一个服务它可以和外来肉以及其他的KBIS备用方案能够紧密的集成在一起那App是基于Operator这样的框架进行设计的那么它首先通过CRD定义了一套声明式的AppQuest和Unquad接口那在这个基础之上我们通过Controller来去监听和处理对应的应用实际性求那么在后台我们结合Driver Manager这个Plugin的方式来去对应的应用类型来做实际的Quest和Unquad操作那么在当前的Ampere App版本我们类制了对KBIS上典型的数据库的支持那这里就包括了MessaclPoseGrass和Mongodb那通过这种方式设计的这个框架有什么优点呢那首先App是一个无倾肉式的这样的一个交流方式比如我们的应用不需要修改代码和配置就可以结合App来去做对常见数据库的应用一致性的保证那另外我们基于CR status可以在整个过程里面对这个QuestUnquad的状态有一个很直观的这样的一个查看那第二点呢因为App是基于Operator方式来去设计的那么通过CR和CRD这种的方式我们可以和其他的应用很容易的集成在一起那最后呢就是对一些复杂的应用场景的操作比如说我们的应用要依赖多个微服务那这个时候要去保证应用一致性的话我们可以通过自定义的这些操作通过那个插件的方式接入进来来提供数据一致性的保证那下面是mr app的这样一个github的link那么希望大家可以一块参与进来来更加丰富kbis上对有状态应用的支持好的接下来我们基于mr app来做一个现场的演示那这个demo分为五个部分首先我们会起一个基于myserco的这样一个有状态应用那同时呢我们会模拟有持续的业务请求和数据库写入那在这个之后呢我们会基于mr app来去定义一个ab hook来去先快的myserco数据库那再基于玩肉进行一个应用和数据的这样备份那备份之后我们就可以很快的去unquire掉myserco这样应用可以继续的运行那么在此之后呢我们删除应用和数据再利用玩肉进一恢复那最后我们继续恢复的这样的一个应用来去比较我们对应的这个数据那我们期望这个恢复后的数据和我们快的那个时间点的数据是一模一样的好的接下来我们把屏幕切换到terminal上那首先我们来查看在这个集讯里面安装的mr app状态那我们的mfc operator形式通过plomedepartment的方式来去部署到这个集讯里面的那接下来我们查看一下我们当前这个应用而我们用有一个myserco和一个java sprint这样的一个程序来组成那么它提供的adv的接口来去读写数据那接下来我们通过这样的一个程序来去模拟我们的持续的数据写入那么这里是每三秒钟会写入一条记录好的那么在备份之前首先我们要创建一个mr app的av hook创建完成那么来看一下这个hook当前的状态那这里是ready的那这里呢我们通过创建这个hook并做一些检查去看这个hook本身的配置是否正确那这个在瓦肉的hook里面呢就在运行到hook那个阶段才能看到是否我们的配置不对发现问题那这里是一个很好的预先检查的一个过程好的那么接下来在备份之前先先去quad我们的应用和数据库那这里看到我们的quad很快就完成了那我们这边的数据写入其实也暂停这里我们来查看我们现在ab hook的状态现在已经quad的状态那我们在这个时刻点来去做一个应用的备份好的我们的备份很快就完成了那在应用备份完成之后呢我们就可以onquad的应用那这个之后其实我们的应用就可以继续运行了那这里我们先暂停这个应用写入我们来删除我们当前的这个应用好的应用已经被删除了那我们基于刚才的备份来去做一个应用的恢复好的我们这里晚儿的恢复已经结束那我们看看我们的应用是不是已经正常起起来了这里我们的加碼应用还在等待数据库的出手化好的我们应用已经恢复成功那我们来看看恢复后的数据我大补这个工具那就查看好这里可以看到这个是我们恢复后的数据那么最后一条是ID28那时间测是5.08分那可以看到所我们在quad玩数据库的时刻点的数据是一模一致的所以通过这种方式我们可以看到App结合MyCircle我们可以达到对应用一致性的数据保护好的演示部分就到这里除了级不科技开源的App这个解决方案以外我们在国内也发起了这样一个YR中文社区的这样一个成功益性的项目那么希望和社区以及用户一块探讨关于在KBi上数据保护这块的问题场景以至下时间欢迎大家关注我们的微信公众号谢谢