博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
CTDB原理介绍
阅读量:3913 次
发布时间:2019-05-23

本文共 1704 字,大约阅读时间需要 5 分钟。

1、简介

CTDB(Cluster Trivial Database)是一种轻量级的集群数据库实现,是集群Samba的集群数据库组件,主要用于处理Samba的跨节点消息以及在所有集群节点上实现分布式的TDB数据库。

CTDB的主要功能:

1) 提供TDB数据库的集群版本,并在节点故障时自动重建/恢复数据库;

2) 监视集群中的节点和每个节点上运行的服务;
3) 管理用于向客户端提供服务的公共IP地址池。或者,CTDB可与LVS一起使用;

现今,CTDB不仅支持管理Samba,而且也支持管理NFS、HTTPD、VSFTPD、ISCSI、WINBIND等应用。

2、CTDB的运行机制

为了使用CTDB,需要一个分布式文件系统(比如:GFS、CephFS、OCFS2等)为集群中的所有节点共享。CTDB 管理节点成员、执行恢复/故障切换、IP 重新定位以及监控管理服务的状态。

集群中每个节点都运行了一个CTDB的守护进程ctdbd,以Samba为例,应用服务并不是直接向其TDB数据库写入数据,而是与它的本地ctdbd守护进程进行交互,守护进程会通过网络与TDB数据库中的元数据进行交互。但是对于具体的数据写和读操作,一般是在本地存储上维护一个本地的副本。

CTDB拥有两种TDB文件:普通的和持久性的。根据不同的需求,CTDB对这两种TDB文件的处理方式完全不同:

1) 持久性的TDB文件会实时更新,并在每个节点上存储一个最新的副本。为了读写性能的考虑,持久性的TDB文件保存在本地存储上而不是共享存储中。数据在写入持久TDB时,它会锁定整个CTDB数据库,然后执行读/写操作,事务提交操作最终会被分发到所有节点,并在每个节点的本地写入。

2) 普通TDB文件是临时维护的,其原则是:每个节点不必知道数据库中的所有记录,只需知道影响它自己的客户端连接的记录就足够了。所以,即使某个节点宕机,丢失了此节点相关的所有普通TDB记录,也不会影响其他节点。

CTDB的运行机制如下图所示。

在这里插入图片描述

CTDB与Samba在集群之间的关系如下图所示:

在这里插入图片描述

3、CTDB进程

CTDB主要有两个进程:ctdb_daemon和ctdb_recoverd。

1) ctdb_daemon进程

ctdb_daemon 进程的工作如下:
a) 负责与外部进行通信,提供 tdb 操作及处理来自其它节点的消息,并处理来自本节点的消息(包括设置服务状态,TDB操作,IP takeover,来自节点recoverd的消息等);
b) 定期检查监控的服务状态,通过运行监控脚本,查询各个服务的运行状态;
c) 期检查检查ctdb_recoverd进程是否在运行,如果未运行,则重建该进程;
d) 将其它节点发给 ctdb_recoverd 的消息转给 ctdb_recoverd;
e) 当本节点是修复节点时(recmaster),将修复相关的请求转给ctdb_recoverd进程处理,包括选举修复节点,强制重新分配公共IP,以及将修复消息转发给其它节点等。

ctdb_daemon进程通过epoll机制处理事件,比如:定期查看各节点状态,当状态异常时,执行相应的处理。

2)ctdb_recoverd进程

ctdb_recoverd进程负责定期向ctdb_daemon进程查询系统状态;当需要修复时,发起选举过程,选出修复节点。在需要修复且被选为修复节点时,启动修复过程:通知所有节点进入修复状态、修复TDB、公共IP重新分配对接管的公共IP,主动触发TCP重连。

说明:

CTDB本身不是HA解决方案,但与集群文件系统相结合,它可以提供简单且高效的HA集群解决方案:
集群配置两组IP:Private IP用于heartbeat和集群内部通信。Public IP用于对外提供虚拟访问IP,当内部的节点发生宕机故障时,CTDB将调度其他可用节点接管其原先分配的Public IP,故障节点恢复后,漂移的Public IP会重新被接管,保证服务不中断。
这个过程对客户端是透明的,保证应用不会中断,也就是我们这里所说的高可用HA。

参考:

转载地址:http://pourn.baihongyu.com/

你可能感兴趣的文章
Power Automate Desktop概览
查看>>
GDB 调试 .NET 程序实录 - .NET 调用 .so 出现问题怎么解决
查看>>
C# 中 System.Range 结构体
查看>>
网络知识 | 《图解HTTP》读书笔记(上)
查看>>
再分享 5 个 vs 调试技巧
查看>>
.NET 云原生架构师训练营(模块一 架构师与云原生)--学习笔记
查看>>
跟我一起学.NetCore之熟悉的接口权限验证不能少(Jwt)
查看>>
.NET Standard 来日苦短去日长
查看>>
HttpReports 2.0 发布了 !!!
查看>>
进击吧! Blazor !第四期 组件开发
查看>>
.NET Core使用FluentEmail发送邮件
查看>>
你不该错过的2020中国开源年报,填开源开发者问卷,成为国内开源的见证者
查看>>
设计一个具有等待队列的连接池
查看>>
WPF MVVM 弹框之等待框
查看>>
浅议C#客户端和服务端通信的几种方法:Rest和GRPC和其他
查看>>
ASP.NET Core Blazor WebAssembly 之 .NET JavaScript互调
查看>>
做.NET开发多年,公司要我转Java...
查看>>
全球顶级开源大神们现身 COSCon'20
查看>>
只要十步,你就可以应用表达式树来优化动态调用
查看>>
首个使用Blazor 技术实现的社区软件 BlazorCommunity 发布
查看>>