如何检查Cassandra节点是否就绪?

lg40wkob  于 12个月前  发布在  Cassandra
关注(0)|答案(2)|浏览(186)

我在Docker容器中运行了一个Cassandra节点,我想在数据库准备就绪时启动CQL脚本。我试着检查端口以检测它何时准备好:

while ! nc -z localhost 7199; do
    sleep 1
done
echo "Cassandra is ready"
cqlsh -f ./createTables.cql

但是端口在数据库真正准备好之前被打开,因此cqlsh失败。如何正确检查Cassandra状态并启动脚本?

q5iwbnjs

q5iwbnjs1#

首先,您需要等待另一个端口:9042。这是CQLSH使用的端口。
另一种方法也可以等待执行cqlsh而不是nc(或者作为第二步,因为nc执行起来要快得多)。例如,您可以使用以下命令:

while ! cqlsh -e 'describe cluster' ; do
    sleep 1
done

等到 cassandra 准备好

9jyewag0

9jyewag02#

您可以使用shell命令在Docker容器上轮询nodetool status,并等待节点标记为UN
例如,假设您在Docker容器中只有1个Cassandra节点,并且它被命名为cassandra-node-1(使用docker run --name设置),如果cassandra-node-1已经可用,则nodetool status的输出为:

$ docker exec cassandra-node-1 nodetool status
Datacenter: my-datacenter-1
=======================================
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
--  Address     Load      Tokens  Owns (effective)  Host ID                               Rack 
UN  172.21.0.2  7.91 MiB  16      100.0%            c74fb450-fe49-4a73-9a0b-f25fbc4ad096  rack1

其中UN表示节点是UpNormal
然后一个until bash循环可以是:

until $(docker exec cassandra-node-1 nodetool status | grep "UN" > /dev/null); do 
  echo "Waiting for cassandra-node-1..."; 
  sleep 1; 
done

这里我们用grep来表示一个UN字符串。如果没有匹配的字符串,grep将返回一个非零的退出代码,而until将在条件为false-y时继续循环。(如果您有多个节点,则需要更好地检查所有节点是否都是UN。这只是1个节点的情况的示例。)
示例输出为:

$ until $(docker exec cassandra-node-1 nodetool status | grep "UN" > /dev/null); do echo "Waiting for cassandra-node-1"; sleep 1; done;
Error response from daemon: Container 42103912deea0329e5a2e73eda7a7a157f757598a58dc79e9ec9972ae95ec7a8 is not running
Error response from daemon: Container 42103912deea0329e5a2e73eda7a7a157f757598a58dc79e9ec9972ae95ec7a8 is not running
Error response from daemon: Container 42103912deea0329e5a2e73eda7a7a157f757598a58dc79e9ec9972ae95ec7a8 is not running
Waiting for cassandra-node-1
Waiting for cassandra-node-1
$

其中,一旦节点为UN,则until循环退出。
您也可以尝试使用其他nodetool命令,如infodescribecluster
https://cassandra.apache.org/doc/latest/cassandra/tools/nodetool/nodetool.html

相关问题