概述
在 CnosDB 的早期版本中,副本的管理是基于 vnode(虚拟节点)机制。vnode 的设计使得每个虚拟节点可以独立存储数据分片,多个 vnode 组合成一个副本集。这种方式虽然在一定程度上提升了系统的可用性,但缺乏明确的主从关系,导致在数据一致性和故障恢复方面存在一定的挑战。
从 vnode 到 replicas 的转变
1. 主从概念的引入
随着 CnosDB 的发展,用户对数据一致性和高可用性的需求不断提升。引入主从副本后,副本之间的关系变得更加明确。每个副本都有一个主节点和多个从节点,主节点负责数据的写入和更新,从节点负责数据的读取和备份。这一结构不仅提高了数据的一致性,还简化了故障恢复过程。
2. 简化管理
在采用 replicas 管理副本后,用户可以更方便地进行副本的管理。通过简单的命令,用户能够轻松地迁移、删除和查看副本状态,而无需考虑 vnode 的复杂性。这样,运维人员可以将更多精力集中在运维层面,而不是底层的管理细节。
3. 性能提升
新的副本管理机制还带来了性能上的优化。由于主从关系的明确,CnosDB 能够更高效地进行数据同步和负载均衡,减少了数据迁移的时间和资源消耗,从而提升了整体的响应速度和吞吐量。
如何进行副本管理
在 CnosDB 2.4.2 中,用户可以通过以下步骤进行副本管理:
1. 查看副本状态
用户可以通过查询命令查看副本相关信息,以确保数据的健康性和可用性:
以上命令将返回如下内容:
+------------+----------+--------------+-------------------------+-------------------------+
| replica_id | location | database | start_time | end_time |
+------------+----------+--------------+-------------------------+-------------------------+
| 2 | 1001* | usage_schema | 2023-12-19 00:00:00 UTC | 2024-12-18 00:00:00 UTC |
| 5 | 1001* | my_db | 2022-11-02 23:00:00 UTC | 2022-11-03 07:20:00 UTC |
+------------+----------+--------------+-------------------------+-------------------------+
复制代码
2. 增加副本
用户可以使用简单的命令给复制组增加一个副本,例如:
REPLICAS ADD replica_id 5 node_id 2001;
复制代码
执行完后将在2001
节点上新增一个副本,如下:
+------------+------------+--------------+-------------------------+-------------------------+
| replica_id | location | database | start_time | end_time |
+------------+------------+--------------+-------------------------+-------------------------+
| 2 | 1001* | usage_schema | 2023-12-19 00:00:00 UTC | 2024-12-18 00:00:00 UTC |
| 5 | 1001*,2001 | my_db | 2022-11-02 23:00:00 UTC | 2022-11-03 07:20:00 UTC |
+------------+------------+--------------+-------------------------+-------------------------+
复制代码
备注:标识符 * 表示其为副本的主节点
3. 提升节点为主
如果想改变副本的角色,比如将一个 Follower 变更为 Leader,可以通过 replica promote 进行。replica promote
提升一个从节点为主节点,这在更换机器等运维过程中可能会用到,如下所示:
my_db ❯ replica promote replica_id 5 node_id 2001;
Query took 0.854 seconds.
my_db ❯ show replicas;
+------------+------------+--------------+-------------------------+-------------------------+
| replica_id | location | database | start_time | end_time |
+------------+------------+--------------+-------------------------+-------------------------+
| 2 | 1001* | usage_schema | 2023-12-19 00:00:00 UTC | 2024-12-18 00:00:00 UTC |
| 5 | 1001,2001* | my_db | 2022-11-02 23:00:00 UTC | 2022-11-03 07:20:00 UTC |
+------------+------------+--------------+-------------------------+-------------------------+
Query took 0.010 seconds.
复制代码
提升复制组 5 在 2001 节点为主节点;主节点变成 2001,1001 降为从节点
4. 删除副本
如果需要删除某个副本,可以使用:replica remove
my_db ❯ replica remove replica_id 5 node_id 2001;
Query took 0.036 seconds.
my_db ❯ show replicas;
+------------+----------+--------------+-------------------------+-------------------------+
| replica_id | location | database | start_time | end_time |
+------------+----------+--------------+-------------------------+-------------------------+
| 2 | 1001* | usage_schema | 2023-12-19 00:00:00 UTC | 2024-12-18 00:00:00 UTC |
| 5 | 1001* | my_db | 2022-11-02 23:00:00 UTC | 2022-11-03 07:20:00 UTC |
+------------+----------+--------------+-------------------------+-------------------------+
Query took 0.011 seconds.
复制代码
如果只有一个副本不允许删除,可以通过下面的销毁复制组达到删除目的
5.销毁复制组
销毁整个复制组可以通过命令:replica destoryreplica destory
销毁整个复制组,如下所示:
my_db ❯ replica destory replica_id 5;
Query took 0.027 seconds.
my_db ❯ show replicas;
+------------+----------+--------------+-------------------------+-------------------------+
| replica_id | location | database | start_time | end_time |
+------------+----------+--------------+-------------------------+-------------------------+
| 2 | 1001* | usage_schema | 2023-12-19 00:00:00 UTC | 2024-12-18 00:00:00 UTC |
+------------+----------+--------------+-------------------------+-------------------------+
复制代码
评论