确定健康Cassandra集群的方法是什么?

时间:2017-11-20 16:07:27

标签: cassandra centos

我的任务是重新编写一些低于标准的Ansible剧本来代替CentOS中的Cassandra集群。坦率地说,那里的Cassandra似乎没有太多信息。

我设法使用以下配置文件info scrubbed在同一时间在所有三个节点上运行服务。

HOSTIP=10.0.0.1
MSIP=10.10.10.10
ADMIN_EMAIL=my@email.com
LICENSE_FILE=/tmp/license.conf
USE_LDAP_REMOTE_HOST=n

ENABLE_AX=y
MP_POD=gateway

REGION=test-1

USE_ZK_CLUSTER=y
ZK_HOSTS="10.0.0.1 10.0.0.2 10.0.0.3"
ZK_CLIENT_HOSTS="10.0.0.1 10.0.0.2 10.0.0.3"

USE_CASS_CLUSTER=y
CASS_HOSTS="10.0.0.1:1,1 10.0.0.2:1,1 10.0.0.3:1,1"
CASS_USERNAME=test
CASS_PASSWORD=test

HOSTIP根据配置文件所在的节点而变化。

问题是,当我运行nodetool ring时,每个节点都说集群中只有两个节点:本身和另一个节点,其他两个节点看起来是随机的。

确定“健康”的Cassandra集群有哪些基本的健全性检查?为什么nodetool会说每个人都认为群集中缺少一个不同的节点?

3 个答案:

答案 0 :(得分:1)

实际上,您真正要检查的是schema_id上的所有节点是否都“ AGREE”。 nodetool状态显示节点或向上,向下,正在连接的状态,但这并不真正意味着“健康”以进行架构更改或其他更改。 最简单的方法是: nodetool describecluster

Cluster Information:
        Name: FooBarCluster
        Snitch: org.apache.cassandra.locator.GossipingPropertyFileSnitch
        DynamicEndPointSnitch: enabled
        Partitioner: org.apache.cassandra.dht.Murmur3Partitioner
        Schema versions:
                43fe9177-382c-327e-904a-c8353a9df590: [10.136.2.1, 10.136.2.2, 10.136.2.3]

如果架构ID不匹配,则需要等待架构建立或运行修复,例如这样说:

43fe9177-382c-327e-904a-c8353a9df590: [10.136.2.1, 10.136.2.2]
43fe9177-382c-327e-904a-c8353a9dxxxx: [10.136.2.3]

但是,运行nodetool非常繁琐且难以解析。

信息在数据库内部,您可以在此处检查:

'SELECT schema_version, release_version FROM  system.local' and
'SELECT peer, schema_version, release_version FROM system.peers'

然后,您在所有节点之间比较schema_version ...如果它们匹配,则该群集很可能很健康。在对架构进行任何更改之前,您应该始终进行检查。

现在,在滚动升级期间,更改引擎版本时,release_version是不同的,因此,要支持自动滚动升级,您需要单独检查release_versions中的schema_id匹配。

答案 1 :(得分:0)

nodetool status - 群集概述(负载,状态,所有权)

nodetool info - 节点级更精细的细节

至于节点不匹配,我会检查以下内容:

cassandra-topology.properties - identical across the cluster (all 3 IPs listed)

cassandra.yaml - I typically keep this file the same across all nodes. The parameters that MUST stay the same across the cluster are: cluster_name, seeds, partitioner, snitch).

验证所有节点可以相互联系(ping,telnet等)

DataStax(Cassandra Vendor)有一些很好的文档。请注意,某些功能仅适用于DataStax Enterprise -

Updated Fiddle

另请查看Apache Cassandra网站 -

http://docs.datastax.com/en/landing_page/doc/landing_page/current.html

以及用户论坛 -

http://cassandra.apache.org/community/

答案 2 :(得分:0)

我不确定您可能遇到的所有问题,但是......

检查cassandra.yaml文件。你需要至少3件事情 - 种子:列表(但不要将所有节点列为种子!),cluster_name和snitch。确保你的listen_address是正确的。

如果您正在使用gossipingPropertyFileSnitch,请检查cassandra-topology.properties和/或cassandra-rackdc.properties文件的准确性。

不要同时启动所有节点。首先启动种子节点 - 其他节点将"八卦"用种子节点学习集群拓扑。最后关闭种子节点。

不要使用共享存储空间。这违背了分布式数据的目的,被认为是一种cassandra反模式。

如果您使用的是AWS,请不要使用自动缩放组,除非您知道自己在做什么。

完成所有操作后,请使用nodetool status | ring | info或jmx查看群集正在执行的操作。

Datastax确实为cassandra提供了不错的文档。