TDengine高可用架构之TDengine+Keepalived

ops/2024/10/21 4:05:31/

之前在《TDengine高可用探讨》提到过,TDengine通过多副本和多节点能够保证数据库集群的高可用。单对于应用端来说,如果使用原生连接方式(taosc)还好,当一个节点下线,应用不会受到影响;但如果使用了Restful/Websocket连接方式,而前端又没有部署负载均衡,那么必须调整应用程序,才能继续访问数据库。

对此我们可以采用TDengine+Keepalived 架构,使用VIP保证在没有负载均衡的情况下数据库集群可用性。
在这里插入图片描述
相较于部署负载均衡,该方案不需要再单独部署负载均衡服务器,架构更简单,避免了负载均衡的单点故障。但因不具备负载均衡的能力,访问压力会集中在一个节点上。

因此以上方案适用于负载不好的业务场景。

keepalived 安装配置

安装

yum install -y keepalived

配置 keepalived

/etc/keepalived/keepalived.conf

! Configuration File for keepalivedglobal_defs {router_id c3-60 ##节点标识,使用主机名即可
}vrrp_script chk_adapter {script "/etc/taos/adapter_check.sh"  ##检查脚本interval 2weight -50
}vrrp_instance VI_1 {state BACKUP ##由于采用了nopreempt,所有节点配置为BACKUPinterface ens192  ## 网卡virtual_router_id 51priority 100  ## 优先级nopreempt ##非抢占模式,防止故障节点恢复后VIP迁移advert_int 1  ##通告时间authentication {auth_type PASSauth_pass 1111}track_script {chk_adapter}virtual_ipaddress {192.168.3.59}
}

检测脚本

/etc/taos/adapter_check.sh

#!/bin/sh
acheck() 
{curl http://127.0.0.1:6041/-/pingif [ $? -ne 0 ]thensystemctl stop keepalivedreturn 1elsereturn 0fi
}acheck

以上脚本会检查taosadapter组件的可用性,当taosadapter不可用时,会停止keepalived服务,从而引发VIP的漂移。

测试

  1. 使用客户端连续查询
  2. 停止主节点taosadapter服务
  3. 检查客户端连接状态
  4. 检查主节点keepalived 服务状态

在这里插入图片描述
在这里插入图片描述
keepalived服务被停止。因为我的服务器没有启用ntp,因此时间存在差异。

优化

以上方案存在一个问题,即一个节点taosadapter出现故障后,keepalived服务会被中止。等故障恢复后,需要手动启动keepalived服务进行恢复。
为了keepalived能做到自动恢复,需要做如下优化:

  1. 修改检查脚本
    systemctl stop keepalived 修改为 pkill keepalived,即用杀掉进程替换中止服务。

  2. 修改keepalived服务脚本
    添加如下内容,让服务异常中止后,每隔30s自动重试启动。
    keepalived.service

Restart=always
StartLimitInterval=0
RestartSec=30
  1. 如果keepalived启动时taosadapter未启动,则keepalived可能会启动失败,因此需要设置启动顺序
    keepalived.service
After=taosadapter.service

http://www.ppmy.cn/ops/15913.html

相关文章

什么是方法重载和重写,区别是什么?

面试题目 什么是方法重载?什么是方法重写?方法重载和重写有什么区别?返回值不同算不算方法重载? 这个是对Java基础知识的考察,但我们要掌握的是写重载和重写方法有什么好处,为什么要这样写? …

常见的几种垃圾回收器

什么是垃圾回收器,可以这样理解,垃圾回收算法是概念理论,对应JAVA中的接口,垃圾回收器就是具体的实现,JVM有很多垃圾回收器,它们实现了不同的垃圾回收算法,可以用在不同jdk版本,也适…

分布式技术在文本摘要生成中的应用

摘要 自然语言处理首先要应对的是如何表示文本以供机器处理,随着网络技术的发展和信息的公开,因特网上可供访问的数字文档成爆炸式的增长,文本摘要生成逐渐成为了自然语言处理领域的重要研究课题。本文主要介绍了分布式技术在文本摘要生成中…

react之组件与JSX

第一章 - 描述用户界面 概述:React是一个用于构建用户界面(UI)的JavaScript库,用户界面由按钮,文本和图像等小单元内容构建而成。React帮助你把它们组合成可重用,可嵌套的组件。从web端网站到移动端应用&a…

C++/QT + Mysql + Tcp 企业协作管理系统

目录 一、项目介绍 二、项目展示 三、源码获取 一、项目介绍 1、项目概要:C/S架构、数据库Mysql、C、QT;支持实时通信、局域网内通信,可多个客户端同时登录; 2、(Server)管理端:用户管理、…

【笔试训练】day11

1.游游的水果大礼包 思路: 枚举。假设最后的答案是x个a礼包,y个b礼包,得到一个式子:ansa*xb*y 我们可以枚举x的数量,这样就能变相的把y的求出来。呃这就是鸡兔同笼问题嘛 x最大的范围是多少呢?也就是a礼…

人工智能在现代科技中的应用和未来发展趋势

人工智能(Artificial Intelligence,简称AI)作为一种模拟人类智能的技术,已经在现代科技中得到广泛应用,并且在未来有着更大的发展潜力。 首先,人工智能在现代科技中的应用是非常广泛的。其中,最…

数据结构PT2——堆栈/队列

一、堆栈(FILO) 堆栈是一种线性结构,也是一种特殊的线性表 1:堆栈的顺序存储实现 栈的顺序存储结构通常由一个一维数组和一个记录栈顶元素位置的变量组成 #define MaxSize typeof struct SNode *Stack struct SNode{ElementType Data[MaxSi…