无法向CnosDB v2.4.0集群写入数据的问题求助
问题描述
部署了CnosDB v2.4.0(修订版48ea218)集群,配置如下:
- 3台服务器,每台部署1个数据节点
- 其中1台同时部署元节点(仅1个元节点,默认应为Leader)
执行写入请求:
curl -XPOST -u "root:" "http://127.0.0.1:8902/api/v1/write?db=public" -d "ma,ta=a fa=1i"
返回错误:
error: 050019, error_message: grpc client request error: The Operation can only Exec in Leader ReplicationSet {id: 38, leader_node_id 15, leader_vnode_id:39 vnodes: [VnodeInfo {id: 39, node_id:15, status: Running }]}
在部署元节点的服务器上执行写入仍报错,需解决该问题。
补充环境信息:
- 操作系统:Red Hat Enterprise Linux Server release 7.9 Beta(Maipo)
- 内核:3.10.0-1136.el7.x86_64
- CPU:24核
- 内存:64GB
- 磁盘:HDD 500GB
解决方案
1. 核对节点ID与Leader归属
登录CnosDB CLI,执行命令查看集群状态:
SHOW REPLICATIONSETS; SHOW VNODES;
重点匹配错误信息中的ReplicationSet ID(38)、Leader Node ID(15),确认当前执行写入的服务器对应的Node ID是否为15——如果不是,说明你连接的节点并非该ReplicationSet的Leader。
2. 检查当前节点的配置映射
查看CnosDB配置文件(通常为cnosdb.conf),核对node_id和http_listen_port参数:
- 确认当前节点的
node_id是否为15 - 确认
http_listen_port是否为8902,避免端口映射错误导致请求发送到非Leader节点
3. 直接指定Leader节点地址写入
如果已确认Leader节点的IP(例如192.168.1.10),修改写入请求的目标地址:
curl -XPOST -u "root:" "http://192.168.1.10:8902/api/v1/write?db=public" -d "ma,ta=a fa=1i"
4. 重启节点刷新状态
由于单元节点集群的元数据应直接生效,可尝试重启当前元节点及对应的数据节点,确保ReplicationSet状态加载正确:
systemctl stop cnosdb systemctl start cnosdb
5. 校验数据节点的ReplicationSet配置
查看数据节点的配置文件,确认replication_set_id是否正确关联到ID为38的ReplicationSet,避免配置不匹配导致的Leader识别错误。
内容的提问来源于stack exchange,提问作者Munin
相关产品推荐
相关产品推荐

