Cassandra报错 Not enough replicas avaiable for query at consistency LOCAL_ONE

之前开发装了个时序数据库Cassandra的集群,一共3个节点,用于存储底层MQTT上报的数据,通过SpringBoot在网页展示,最近Cassandra开始反复出问题。

Java后台打印日志CQL报错 Not enough replicas avaiable for query at consistency LOCAL_ONE (1 required but only 0 alive)这个错误其实说的很清楚:没有足够的副本可用于一致性为1的查询(需要1个,但只有0个有效)。Cassandra运行query需要至少1个节点,而节点数量为0。这就很奇怪,明明之前部署了3个节点,怎么会1个都访问不到。

排查3个节点的具体情况,发现有1个节点服务器下线了,但是另外两个均正常运行。我们的情况暂时无法重启节点服务器,所以需要从其他方向入手。

搜索错误之后决定排查keyspace的replication_factor复制因子情况,通过正常节点所在的服务器,命令行进入数据库./cqlsh xxx.xxx.xxx.xxx,在数据库中查询keyspace具体情况desc keyspacename; 找到replication_factor,果然,这里对应数字为1。3个节点的集群算是白部署了,keyspace的replication_factor为1,读写都有可能会遇到查询那个坏了的节点,从而导致查询失败的情况。这里需要改写复制因子来对应集群节点,运行以下命令:

alter keyspace keyspacename with replication = {'class': 'SimpleStrategy', 'replication_factor': 3};

这里执行需要一点时间,等待执行完后再运行desc keyspacename; 确认replication_factor修改完毕。

再度检查Java程序,程序正常运行。

另外,Cassandra集群中的节点服务器下线,有可能导致各种报错,以下三种情况,怀疑全部是由于节点下线和复制因子设置为1导致,有待进一步确认:

1. 读写Cassandra数据可能会出现NoHostAvailable错误

2. 更新keyspace时,会因为节点下线产生版本不一致报错schema version mismatch detected; check the schema versions of your nodes in system.local and system.peers.

3. Java后台日志出现system.peers相关错误query 'SELECT * FROM system.peers' timed out after PT0.5S

  • 10
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值