TDengine高可用部署指南,时序数据库集群方案

阿木 发布于 9 小时前 1 次阅读


突然发现,今天是情人节。

窗外卖花的姑娘还在,但我得守着机房那一堆服务器的监控数据。

干运维的,数据库要是挂了,比失恋还难受。

特别是时序数据,一秒几百万个点往上怼,单点故障?

想都不敢想。

什么叫高可用?

不是那些PPT里吹的玄乎概念。

哪怕出现这样的情况,一台机器冒烟了,机房断电了,甚至某个倒霉蛋把网线踢了,然而你的业务依旧在运行,监控曲线仍然在跳动,钱还在源源不断地哗哗进账。

这才是他妈的高可用。

数据不能丢,这是底线

时序数据库这玩意儿,写入量太凶了。

不像你,MySQL删库是能够跑路的,然而物联网的数据一旦丢失,那便是实实在在地丢失了,是无法补回来的。

所以第一道防线,就是多副本

简单说,就是一份数据写三遍,存在不同的机器上。

通过运用Raft协议,借助那种“少数服从多数”的机制,以此来确保大家的数据都是一样的。

带头的没了,跟着的马上推选一位新的带头的出来,业务根本丝毫察觉不到有什么影响。

阿里云的那些人做事相当决绝,他们不但要存储数据,还必须确保做到即使你进行节点重启,内存中尚未写入磁盘的那部分缓存数据也不会丢失,这一切完全依靠WAL(预写日志)在那里支撑着。

别光想着活,还得想着怎么活得轻松

坦白讲,往昔之时,我格外厌烦那些每每会让你去搭建Kafka、Redis、Flink这一整套全家桶形式的方案。

不是说不好,是太特么累了。

你身为一个时序数据库,鉴于要达成高可用的目标,还必须去照应三四个兄弟系统,一旦出现问题,甚至连该先把锅甩向谁都不清楚。

这点我得夸夸TDengine那帮工程师,有点东西。

他们把流式计算、缓存这些功能直接内建到数据库内核里了 。

那就仿佛是你准备去用餐的时候,并非要先急急忙忙跑出去购买大米,接着费劲地去寻觅人来生火,最终还得自己动手去洗刷碗碟。

你直接点一份盖饭,啥都有了。

数据无需于各个系统之间来回倒腾,延迟得以降低了,可用性自然而然就提升上去了。

副本越多越好?

那是傻子干的事

你以为高可用就是疯狂堆机器?

三个副本不够?

来六个?

老板会杀了你。

硬件不要钱啊?

所以现在有了双副本 + 仲裁的玩法 。

数据只存两份,省了三分之一的存储成本。

但万一俩节点打起来,都说自己是老大怎么办?

这时候旁边那个不存数据的“仲裁者”举手投票,定生死 。

还有个叫“双活”的部署。

俩集群,异地,同时在线干活 。

若是你确实遭遇了诸如洪水、地震这般的情况,有一个机房处于了故障状态,然而另一个机房却依旧稳固地维持着运行姿态。

即便或许存有着几秒的延迟状况,然而对于容灾而言,这几秒,那可是关乎生死的关键所在。

电力系统的例子,很性感

我看过金仓数据库在一个省电力调度的案例 。

那才叫真·高可用。

连续不间断运行,全年之中需实现百分之九十九点九九九的可用率,且仅拥有四个小时的停机中断节点,每七天二十四小时持续运转不停歇。

进行压力测试之际,单日的并发连接数一下子达到了1024个,超出了设计值算出的2.4%。

他们怎么做的?

三层协同,数据层构建了3节点的共享存储集群,进而使得写入吞吐得到了40%的提升,跨安全区的同步,是隔着物理网闸来进行的,并且延迟被控制在了320毫秒以内。

还有更骚的操作:生产流量回放系统

把过去30天的真实业务负载,在测试环境重新跑一遍 。

这相较于任何压力测试而言更为真实。在进行切换这个动作的时候,业务方处于睡觉的状态,然而系统却早已经于背后静悄悄地完成了主备倒换。

最后说点人话

高可用设计,不是堆砌技术名词。

是你得明白,你的业务到底能承受多少秒的 downtime。

一旦你着手开展智能工厂相关工作,一秒钟出现的延迟,就极有可能致使一个机械臂 malfunction,如此一来,你势必需要采用强一致性,借助Raft协议设置三副本,千万别在这方面节约那部分资金。

若你来处理车联网相关事宜,在偶尔出现丢失几条轮胎温度数据的状况下,问题并非十分严重,如此一来,便采用双副本加上异步同步的方式,既能节省费用,又能减少人力投入。

倘若你从事金融监控工作,那就别再多说无用的话语,直接开启两地三中心模式,即便是成本变为原来的两倍,也一定要保证数据不会丢失。

哦对了,还有那些信创的要求。

当下,国产的时序数据库所达成的成果着实蛮不错,诸如IoTDB、TDengine、金仓这类,针对龙芯、鲲鹏、麒麟系统的适配已然相当成熟了。

别再迷信国外那一套了。

终究,于情人节这个日子,哪怕无人与你一同度过,只要你的数据库依旧结实稳固,那就不算作是真正的孤单寂寞。