我的任务是重新编写一些低于标准的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会说每个人都认为群集中缺少一个不同的节点?
答案 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 -
另请查看Apache Cassandra网站 -
http://docs.datastax.com/en/landing_page/doc/landing_page/current.html
以及用户论坛 -
答案 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提供了不错的文档。