草庐IT

PG数据库运维工具要覆盖哪些能力

白鳝 2023-03-28 原文
​过节前我和PG中国社区合作搞了一个关于如何使用D-SMART来运维PG数据库的线上直播,正好我的一个金融行业的客户听了我的介绍,打电话过来聊了聊。他们正在做数据库信创的选型,也试用了多个国产数据库,最后他们准备选择TDSQL。当时我觉得有点意外,他们从2020年就开始在做国产数据库选型,不过好像最初使用TDSQL后的感受并不太好。后来经过沟通才了解到,他们刚开始使用TDSQL的分布式数据库,发现对研发要求太高,所以后来就全部选择TDSQL的集中式MYSQL实例,用下来发现挺好用的。整个数据库云的节点数也从最初的十几个扩展到了大几十个。

无独有偶,昨天和另外一个金融客户在微信上聊了聊数据库信创选型的事情,他们最终也选择了TDSQL。和另外一个客户相似的是,他们也是选择了TDSQL的MYSQL集中式数据库实例。他们目前已经迁移了数十套数据库上去,大多数都是几十GB到几百GB的小库。他们觉得,小数据库,直接迁移到TDSQL的云平台上,使用起来十分便捷,TDSQL的数据库云管平台和运维工具基本上已经能够满足他们日常运维的需要了。

通过交流我觉得,这两个客户选择TDSQL,并不是因为TDSQL作为数据库有多优秀(TDSQL实际上不是一个数据库,而是一个数据库云平台解决方案,关于TDSQL今后有空,我会写一篇详细介绍),而是其数据库云管平台对于纳管大量的小型数据库实例,做的十分到位,用户选择它,并不是从数据库技术来考虑的,而是从使用的便捷性与可靠性来考虑的。

从客户选择TDSQL的理由,我们再来看看PG数据库的运维。泛泛的谈PG数据库的运维是个十分庞大的话题,因为不同的客户有其特殊的应用场景,对PG数据库的运维管理方式也有较大的差异。更为复杂的是,和我所说的这两个选择TDSQL的客户不同的是,PG数据库既有小型数据库,也有十分大型的数据库系统。有些客户在搞信创替代的时候,是把Oracle数据库1对1做替代的,很多数据库的热数据都超过数个TB。面对规模差异极大,运维要求不同的应用场景,运维工具要想适应千差万别的应用场景,确实是需要精心设计的。

PG数据库在国内的应用这两年发展的很快,再加上很多国产数据库也是以PG开源项目作为基础研发的,在应用、运维上十分相似,因此我们也可以把它们归类为PG类的数据库产品。

目前的国产数据库中,很多产品都是以PG社区版代码作为研发起点的,还有一些产品是基于openGauss开源项目的。这些数据库的基础特性都和社区版的PG数据库类似,不过也做了一定的拓展。不过从使用与运维上,它们的很多特性都与社区版PG十分类似。

还有一些数据库产品也和PG有着直接的关系,不过大部分基于PG的分布式解决方案PGXL/PGXC或者CITUS。比如腾讯的TBASE,南大通用的GBASE 8C分布式版本、亚信的ANTDB,虚谷数据库等。这里就不做仔细的罗列了。这些数据库的某个实例也是一个PG数据库,对某个具体的实例也可以看做是PG数据库实例,只不过在运维分布式数据库的时候,需要更加关注整个集群与网络的问题,在运维上区别还是很大的。

概括的说,PG数据库的运维需求分为五个方面,日常监控、故障预警、自动化巡检、性能优化和故障诊断。

有些企业已经在把一些核心系统在向PG类数据库迁移了,对于这些系统,日常就有监控的需求。因此一个数据库运维工具需要具备的最基础的能力就是监控能力,能够通过运维工具随时了解数据库实例的总体运行状态。D-SMART是通过健康模型来展示数据库的运行状态的。除此之外,如果我们在一些重大日期要做值守(比如企业的年终决算,国庆节等专项值守等),那么我们就还需要一些能够支撑关键系统值守的工具。

在D-SMART中,围绕数据库运维我们提供了“监控中心”、“日检中心”、“告警中心”、“性能优化中心”、“报告中心”、“容量管理中心”、“安全中心”、“工具中心”这几个中心化的功能组合来满足不同用户,不同应用场景的用户的需求。

对于日常监控功能,D-SMART提供了“今日看板”、“我的监控”、“关键SQL监控”这三个主要的运维监控工具。今日看板可以集中查看用户监控的数据库的综合信息,“我的监控”允许用户用传统的监控方法去定义自己想要监控的指标,用于重大护航监控。而“关键SQL监控”则是为企业核心业务系统提供的专项监控工具。当某个核心业务系统的关键SQL出现问题的时候(比如执行速度变慢,执行计划变化等),能够及时告警,确保核心业务的安全运行。

对于大量的小型的数据库实例,全面监控是不太现实的。如果一个十几人的团队要运维数百上千个数据库实例,那么最这些数据库进行全面监控既不必要,也不可能。因此这种运维场景应该把大量的监控工作变成自动化任务,由监控系统自动完成。

“数据库日检”是一个十分有效的自动化运维工具,每天半夜针对数据库的运行数据以及一些规则自动做分析,并形成言简意赅的日检总结报告,运维人员上班后直接阅读这些报告就可以了解自己运维的数百个数据库实例中存在的一些常见问题,从而可以确定当天或者近期是否需要对某些数据库实例做相应的变更。

当我们需要运维大量的小型数据库实例的时候,预警也变得十分困难了。传统的“基线告警”的效果就变得十分鸡肋了。除了数据库实例宕机以外,其他的预警很难做的精准。海量的告警信息会让预警变得毫无意义。因此基于故障模型的“运维经验告警”变得尤为重要。通过专家经验与以往的经验构建的复杂的规则不仅能够更为精准的预警,也能让告警产生后,运维人员可以更加快速的定位问题,消除隐患。

“数据库巡检”是广大DBA都觉得十分鸡肋的功能,最主要的问题在于这项工作必须做,但是做一次真正到位的巡检既需要大量的专业DBA参与,又需要做大量的重复劳动,总的看来,性价比并不高。另外一方面,全面高质量的巡检又能够帮助我们发现一些系统隐患,有助于实现防患于未然。针对这个矛盾,如果能够实现高质量的自动化巡检,那么问题就迎刃而解了。几个月前,我们帮助一个用户做了一次远程巡检,用户把D-SMART采集的监控数据发给我们实验室,我们的数据库专家利用远程数据产生的巡检报告,对近30套数据库系统进行了一次远程会诊,帮助用户发现了各类问题两百多个,而这些工作仅仅花了不到2个人天。通过自动化手段,如果能够把数据库巡检的效率提高了,那么巡检工作也就不会这么鸡肋了。

除了巡检之外,一些审计工作也十分关键,比如安全审计、容量审计、SQL审计等。因为这些审计需要十分专业的技能,另外工作量也很大,因此在面对大量的数据库实例的时候,也和巡检一样变得十分鸡肋,要想做到位成本太高,做不到位等于不做。不过这些工作如果能够由自动化工具自动完成,那么也就能够发挥出十分重要的作用了。

实际上除了这些运维监控工作之外,大量的数据库实例的管理工作还有很多自动化操作是DBA十分需要的,这也是我开始说的那两个客户选择TDSQL的主要原因。管理海量的数据库实例,数据库云平台是必选项,只不过这些自动化管理功能本身就十分复杂,根据企业特点构建独立的数据库云平台本身就是一个大工程。当然,如果企业云平台的RDS服务就能够满足你的数据库应用需求了,那么直接使用云平台的RDS就够用了。当然面对现在的信创需求,需要企业的RDS需要不仅仅支持开源的MYSQL/PG数据库,也要支持国产数据库产品。​

有关PG数据库运维工具要覆盖哪些能力的更多相关文章

  1. ruby - 在 64 位 Snow Leopard 上使用 rvm、postgres 9.0、ruby 1.9.2-p136 安装 pg gem 时出现问题 - 2

    我想为Heroku构建一个Rails3应用程序。他们使用Postgres作为他们的数据库,所以我通过MacPorts安装了postgres9.0。现在我需要一个postgresgem并且共识是出于性能原因你想要pggem。但是我对我得到的错误感到非常困惑当我尝试在rvm下通过geminstall安装pg时。我已经非常明确地指定了所有postgres目录的位置可以找到但仍然无法完成安装:$envARCHFLAGS='-archx86_64'geminstallpg--\--with-pg-config=/opt/local/var/db/postgresql90/defaultdb/po

  2. ruby - 解析 RDFa、微数据等的最佳方式是什么,使用统一的模式/词汇(例如 schema.org)存储和显示信息 - 2

    我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i

  3. ruby-on-rails - 在混合/模块中覆盖模型的属性访问器 - 2

    我有一个包含模块的模型。我想在模块中覆盖模型的访问器方法。例如:classBlah这显然行不通。有什么想法可以实现吗? 最佳答案 您的代码看起来是正确的。我们正在毫无困难地使用这个确切的模式。如果我没记错的话,Rails使用#method_missing作为属性setter,因此您的模块将优先,阻止ActiveRecord的setter。如果您正在使用ActiveSupport::Concern(参见thisblogpost),那么您的实例方法需要进入一个特殊的模块:classBlah

  4. ruby - 无法覆盖 irb 中的 to_s - 2

    我在pry中定义了一个函数:to_s,但我无法调用它。这个方法去哪里了,怎么调用?pry(main)>defto_spry(main)*'hello'pry(main)*endpry(main)>to_s=>"main"我的ruby版本是2.1.2看了一些答案和搜索后,我认为我得到了正确的答案:这个方法用在什么地方?在irb或pry中定义方法时,会转到Object.instance_methods[1]pry(main)>defto_s[1]pry(main)*'hello'[1]pry(main)*end=>:to_s[2]pry(main)>defhello[2]pry(main)

  5. ruby-on-rails - 错误 : Error installing pg: ERROR: Failed to build gem native extension - 2

    我克隆了一个rails仓库,我现在正尝试捆绑安装背景:OSXElCapitanruby2.2.3p173(2015-08-18修订版51636)[x86_64-darwin15]rails-v在您的Gemfile中列出的或native可用的任何gem源中找不到gem'pg(>=0)ruby​​'。运行bundleinstall以安装缺少的gem。bundleinstallFetchinggemmetadatafromhttps://rubygems.org/............Fetchingversionmetadatafromhttps://rubygems.org/...Fe

  6. ruby - 覆盖相似的方法,更短的语法 - 2

    在Ruby类中,我重写了三个方法,并且在每个方法中,我基本上做同样的事情:classExampleClassdefconfirmation_required?is_allowed&&superenddefpostpone_email_change?is_allowed&&superenddefreconfirmation_required?is_allowed&&superendend有更简洁的语法吗?如何缩短代码? 最佳答案 如何使用别名?classExampleClassdefconfirmation_required?is_a

  7. ruby - Ruby 有 `Pair` 数据类型吗? - 2

    有时我需要处理键/值数据。我不喜欢使用数组,因为它们在大小上没有限制(很容易不小心添加超过2个项目,而且您最终需要稍后验证大小)。此外,0和1的索引变成了魔数(MagicNumber),并且在传达含义方面做得很差(“当我说0时,我的意思是head...”)。散列也不合适,因为可能会不小心添加额外的条目。我写了下面的类来解决这个问题:classPairattr_accessor:head,:taildefinitialize(h,t)@head,@tail=h,tendend它工作得很好并且解决了问题,但我很想知道:Ruby标准库是否已经带有这样一个类? 最佳

  8. ruby - 是否可以覆盖 gemfile 进行本地开发? - 2

    我们的git存储库中目前有一个Gemfile。但是,有一个gem我只在我的环境中本地使用(我的团队不使用它)。为了使用它,我必须将它添加到我们的Gemfile中,但每次我checkout到我们的master/dev主分支时,由于与跟踪的gemfile冲突,我必须删除它。我想要的是类似Gemfile.local的东西,它将继承从Gemfile导入的gems,但也允许在那里导入新的gems以供使用只有我的机器。此文件将在.gitignore中被忽略。这可能吗? 最佳答案 设置BUNDLE_GEMFILE环境变量:BUNDLE_GEMFI

  9. ruby - 我如何添加二进制数据来遏制 POST - 2

    我正在尝试使用Curbgem执行以下POST以解析云curl-XPOST\-H"X-Parse-Application-Id:PARSE_APP_ID"\-H"X-Parse-REST-API-Key:PARSE_API_KEY"\-H"Content-Type:image/jpeg"\--data-binary'@myPicture.jpg'\https://api.parse.com/1/files/pic.jpg用这个:curl=Curl::Easy.new("https://api.parse.com/1/files/lion.jpg")curl.multipart_form_

  10. 世界前沿3D开发引擎HOOPS全面讲解——集3D数据读取、3D图形渲染、3D数据发布于一体的全新3D应用开发工具 - 2

    无论您是想搭建桌面端、WEB端或者移动端APP应用,HOOPSPlatform组件都可以为您提供弹性的3D集成架构,同时,由工业领域3D技术专家组成的HOOPS技术团队也能为您提供技术支持服务。如果您的客户期望有一种在多个平台(桌面/WEB/APP,而且某些客户端是“瘦”客户端)快速、方便地将数据接入到3D应用系统的解决方案,并且当访问数据时,在各个平台上的性能和用户体验保持一致,HOOPSPlatform将帮助您完成。利用HOOPSPlatform,您可以开发在任何环境下的3D基础应用架构。HOOPSPlatform可以帮您打造3D创新型产品,HOOPSSDK包含的技术有:快速且准确的CAD

随机推荐