Bootstrap

惊险一刻!2024跨年夜里:数据中心突然宕机,Doris CCR却让客户毫无察觉

惊险一刻!2024跨年夜里:数据中心突然宕机,Doris CCR却让客户毫无察觉

今天是2024年的最后一天12月31日。
跨年夜里,数据中心突却然闹腾了起来…
“老板,我们的数据中心刚刚…出了点问题…”
“What?客户数据呢?!”
“额…正在恢复中(客户毫无察觉)…”
这大概是每个数据团队最不想经历的噩梦场景。就像高空走钢丝,没有安全网的感觉总是让人心惊胆战。偏偏在这个数据就是生命的时代,数据中心导致业务中断带来的损失往往都以分钟计费。
But,当Apache Doris推出CCR(Cross Cluster Replication)功能后,这个让人揪心的问题似乎找到了"解药"。好比给企业数据加了一道"保险",主数据中心有任何闪失,备用中心立刻顶上,简直是数据容灾界的"及时雨"!

[]

Doris CCR 数据跨集群同步方案

小李最近有点烦恼。作为某医疗科技公司的数据架构师,他正面临一个棘手的问题:公司在全国各地的医院数据需要实时同步到总部进行分析,可现有的数据同步方案总是让他睡不踏实。

"要是数据同步出了问题,那些重要的医疗数据怎么办?"小李揉了揉太阳穴,“系统的高可用性也得保证啊!”

正当他为这个问题发愁时,他的老同学小王打来了电话:“听说你们在找跨集群数据同步方案?来看看Doris的CCR吧,我们金融部门用了一段时间,效果相当不错!”

"CCR?这是什么神仙技术?"小李来了兴趣。

[官网架构tu]

原来,CCR(Cross Cluster Replication)就像一位尽职尽责的"跨集群数据搬运工"。它通过一个叫Syncer的轻量级进程,在不同的Doris集群之间建立起数据传输的高速公路。

"这个Syncer很有意思,"小王解释道,“它就像是一个经验丰富的交通指挥官,通过binlog机制精确掌握每一份数据的去向。源集群有任何风吹草动,它都能第一时间知道,并指挥这些数据安全抵达目标集群。”

"听起来不错,"小李若有所思,“不过性能怎么样?我们医院每天产生的数据可不少。”

[tu]

"这个你放心,"小王胸有成竹地说,“我们做过详细的性能测试。用TPC-H 1T数据集测试,全量同步1TB的数据只用了6分多钟。增量同步更快,延迟只有33秒。如果是用Flink实时写入上游数据,下游延迟能稳定在5秒以内。”

"这性能确实够棒的!"小李眼前一亮,“配置复杂吗?”

"简单得很!"小王笑道,“就像组装积木一样,启动Syncer服务,配置好源集群和目标集群的信息就行。它支持库级和表级的同步,你们可以根据需求灵活选择。”

"说实话,我最开始也和你一样担心数据同步的问题,"小王继续说,“自从用了CCR,我晚上睡觉都踏实多了。不仅数据同步稳如泰山,就连系统升级和容灾备份都变得简单了。”

小李认真地记下了这些信息。CCR的设计理念让他印象深刻:简单却强大,灵活而可靠。这不正是他一直在寻找的解决方案吗?

Doris CCR在不同行业场景中的应用

"等等,"小李突然想到一个问题,“CCR具体能支持哪些同步方式?”

"这正是CCR的独特之处,"小王打开了他准备好的技术清单,“它有四种强大的同步绝技。”

[tu]

"这四种同步模式相辅相成,"小王解释道,“就像武林高手的四大绝技,每一种都有其独特的用武之地。”

"那实际操作起来复杂吗?"小李关心地问道。

"简单~来看个具体例子。"小王熟练地敲击键盘,展示了一段配置代码:

curl -X POST -H "Content-Type: application/json" -d '{
    # name: CCR同步任务的名称,唯一即可
    # 向syncer发起同步任务中的name只能使用一次
    "name": "ccr_test",
    "src": {
      # host、port:对应集群 Master FE的host和mysql(jdbc) 的端口
      "host": "localhost",
      "port": "9030",
      "thrift_port": "9020",
      # user、password:syncer以何种身份去开启事务、拉取数据等
      "user": "root",
      "password": "",
      # database、table:
      # 如果是库级别的同步,则填入your_db_name,your_table_name为空
      # 如果是表级别同步,则需要填入your_db_name,your_table_name
      "database": "your_db_name",
      "table": "your_table_name"
    },
    "dest": {
      "host": "localhost",
      "port": "9030",
      "thrift_port": "9020",
      "user": "root",
      "password": "",
      "database": "your_db_name",
      "table": "your_table_name"
    }
}' http://127.0.0.1:9190/create_ccr

"就这么简单?"小李有些惊讶,“只需要几行配置就能搞定?”

"没错,"小王笑着说,"CCR的设计理念就是化繁为简。不过,"他话锋一转,“在使用时还是有一些注意事项的。”

[tu]

"听起来都很合理,"小李点点头,“不过你们金融部门是怎么用CCR的?能具体说说吗?”

"那我得好好给你讲讲了,"小王露出了神秘的笑容,“这里面大有文章…”

Doris CCR 应用实践小结

[场景tu]

"在金融领域,数据同步可不是闹着玩的,"小王正色道,“一个环节出问题,后果都很严重。”

"小王,你们是怎么用CCR解决这些问题的?"小李好奇地问道。

"我们采用了两地三中心架构,"小王说,“主数据中心负责核心交易,同城中心通过Doris CCR实时同步数据,异地中心则作为灾备。CCR的增量同步延迟低于5秒,就算发生故障切换,数据也不会丢失。”

“那你们的业务量应该不小吧?性能够用吗?”

"性能问题确实考验过我们,"小王笑着说,“好在CCR提供了丰富的优化选项。通过调整内存配置、优化网络参数,再加上合理的任务规划,现在每天几十亿条交易记录的同步都不在话下。”

"医疗数据的隐私保护你们是怎么处理的?"小李问出了他最关心的问题。

"这个问题问得好,"小王说,“CCR本身并不改变数据内容,它只负责同步。数据的脱敏和权限控制可以在源端完成,CCR会严格保持这些设置。而且,CCR的网络传输是在内网进行的,本身就有一定的安全保障。”

"听起来很不错,"小李若有所思,“要是在我们医疗系统中应用CCR,是不是意味着…”

"你说得对,"小王接过话头,“CCR不仅能解决数据同步的问题,还能帮助你们建立完整的数据分析体系。想象一下,全国各地的分院数据实时汇总到总部,用于医疗资源调配、疾病预警、智能诊断,这些都将成为可能。”

"说实话,现在我对在医疗系统中应用CCR更有信心了,"小李露出了笑容,“不过实施过程中还有什么需要特别注意的吗?”

“那我再给你分享几个实战经验…”

"实战经验确实很重要,"小王正了正神色,“我给你分享三个关键点:”

[tu]

"第一,一定要做好容量规划。记住,每个CCR任务至少要预留4GB的FE堆内存。我们曾经就踩过这个坑,任务多了之后FE可能就开始罢工了。"小王笑着摇摇头。

“第二,监控要做到位。同步延迟、错误日志、性能指标,这些都要实时盯着。就像医生给病人做检查一样,发现问题要早发现早处理。”

“第三,别忘了准备应急预案。容灾演练每个季度都要做,就像消防演习一样,看着麻烦,真出事就知道有多重要了。”

"说得对,"小李若有所思,“不过你们是怎么处理大规模数据同步时的性能问题的?”

[性能相关参数tu]

"性能优化是门艺术,"小王说道,“关键是要找到瓶颈。我们通常从三个方面入手:配置优化、任务调度和资源规划。尤其是那个download_worker_count参数,调整得好,下载速度能提升好几倍。”

"最后再给你一个小贴士,"小王神秘地说,“记得在FE配置中设置ignore_backup_tmp_partitions=true,这样能避免很多意外情况。举例:如果上游有创建 tmp partition,那么 doris 会禁止做 backup,因此 ccr-syncer 同步会中断。”

小李认真地记下了这些建议。通过这次深入交流,他不仅对CCR有了全面的认识,更看到了它在数据中心灾备的巨大潜力。

从最初的困惑到现在的豁然开朗,小李的心中已经有了清晰的规划。CCR不仅能解决他们医疗系统的跨集群数据同步问题,还能帮助构建更可靠的容灾体系。

正如小王所说,“技术是用来解决问题的。CCR就像一位可靠的数据管家,让我们能够专注于业务创新,而不是整天为数据同步操心。”

随着Apache Doris CCR功能的不断完善,相信会有越来越多的企业从中受益。而这,也正是开源技术的魅力所在。

下期,我们将一起探讨其它更有趣有用有价值的内容,敬请期待!

;