【Cassandra】Cassandra集群管理节点

添加节点

Cassandra 的添加节点应该是最简单了,可以理解是 无脑添加。啥意思呢,这么来说,Cassandra 的添加节点,我们需要修改的配置有:

  • 集群名,保持一致
  • Token 保持一致
  • seeds 保持一致

然后就可以了

这里需要 纠正一个问题 ,我们建议的 Token 保持一致的前提的是, 每台机器的性能要一样,比如说同样的CPU 核心数,同样的 内存大小。我们用最简单的方式去理解这个 Token , 就是权重比。比如说:三台 cassandra 节点的 token , 都是 500 ,token 比也就是 1:1:1 , 那么每个 cassandra 节点处理的数据量是一样的,如果说 第三个节点的 cassandra 的 token 的值是 250 , 那这个比例就是 2:2:1 , 那么三个节点的数据的处理量是不同的。这里需要注意一下。至于这个 Token 的值,则么去影响到 cassandra 的负载均衡,老夫最近也在研究。后续应该会有更新。

删除节点

Cassandra 删除节点,其实还是比较麻烦的。这里,笔者经过测试,总结了下:

修复keyspace

nodetool repair <keyspace_name>

检查当前的节点状态
执行 nodetool status

Datacenter: datacenter1
=======================
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
--  Address       Load       Tokens       Owns (effective)  Host ID                               Rack
UN  192.168.0.24  378.83 KiB  500          66.9%             7f53d662-e883-42c5-9de5-b626394bda08  rack1
UN  192.168.0.25  308.08 KiB  500          65.3%             26e0de75-583d-4b82-98b8-cce223f300e9  rack1
DN  192.168.0.23  957.67 KiB  500          67.8%             a9d4b392-e47c-4985-a47c-eef535b9ece4  rack1

可以看到,现在有一个节点处于 DN 状态,这个节点也就是我目前要移除的节点,如果你要移除的节点,处于 UN 状态,需要执行: nodetool decommission , 在需要移除的节点上

移除节点
我们在 活动的节点上执行:

nodetool removenode a9d4b392-e47c-4985-a47c-eef535b9ece4

随后,我们在 查下 状态:

Datacenter: datacenter1
=======================
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
--  Address       Load       Tokens       Owns (effective)  Host ID                               Rack
UN  192.168.0.24  450.04 KiB  500          100.0%            7f53d662-e883-42c5-9de5-b626394bda08  rack1
UN  192.168.0.25  379.33 KiB  500          100.0%            26e0de75-583d-4b82-98b8-cce223f300e9  rack1

如果现在我们的节点是 seed 节点, 那我们需要做的就是,在配置中移除当前的这个节点。

seed_provider:
    # Addresses of hosts that are deemed contact points.
    # Cassandra nodes use this list of hosts to find each other and learn
    # the topology of the ring.  You must change this if you are running
    # multiple nodes!
    - class_name: org.apache.cassandra.locator.SimpleSeedProvider
      parameters:
          # seeds is actually a comma-delimited list of addresses.
          # Ex: "<ip1>,<ip2>,<ip3>"
          - seeds:  "192.168.0.23,192.168.0.24"

这里我们删除 我们的 192.168.0.23 这个节点 IP,随后在进行重启。重启之后在 查看状态:

Datacenter: datacenter1
=======================
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
--  Address       Load       Tokens       Owns (effective)  Host ID                               Rack
UN  192.168.0.24  584.07 KiB  500          100.0%            7f53d662-e883-42c5-9de5-b626394bda08  rack1
UN  192.168.0.25  555.77 KiB  500          100.0%            26e0de75-583d-4b82-98b8-cce223f300e9  rack1

这里也要纠正一下,笔者上面的方式,其实是在一个空的 cassandra 集群上做的,所以删除会很快,但是在实际中,不是这样的。

在实际中,我们删除一个节点上的数据,集群会做一个数据上的迁移,我个人的理解就是缺少补啥,迁移过后,其他的节点会告知集群,我这个节点迁移好了,集群要等所有的节点都返回了 OK ,然后在进行删除(个人理解。实际在删除的时候,的确在等一个返回)。所以呢,笔者删几个节点,直接就傻了,因为我着实是不知道要等多久。

可以通过 nodetool removenode status 来查看删除节点的状态,如果等待时间太长了,你又不想等,而且允许数据的丢失的时候,我们可以强制性的删除。nodetool removenode force 就可以了。我就是执行的这个,分分钟给删了。仅供参考。

上一篇:Python数据可视化分析--豆瓣电影Top250


下一篇:数电实验第五周报告:按键消抖,流水灯,呼吸灯