Cassandra 集群添加节点

注意

本文档只是体系文档中的一部分,前面文档信息详见:
https://blog.51cto.com/michaelkang/2419518

场景:

用于节点扩容,测试方法:清理(172.20.101.165)节点上所有数据,模拟新节点加入;

确认内容:

1:使用相同版本的Cassandra
2:注意,种子节点不能引导。确保新节点没有在-seeds列表中列出,不要使所有节点种子节点。
3:copy加入DC现有节点配置文件到新节点,然后进行配置修改,文件如下:
    在cassandra.yaml文件和 cassandra-topology.properties或 cassandra-rackdc.properties

4:注意cassandra.yaml文件中设置以下属性 :
auto_bootstrap:
如果此选项已设置为false,则必须将其设置为true。该选项未在默认的cassandra.yaml配置文件中列出,默认为true。

CLUSTER_NAME:
新节点正在加入的群集的名称。

listen_address/broadcast_address:
使用其他Cassandra节点用来连接到新节点的IP地址。

endpoint_snitch:
告密者Cassandra用来定位节点和路由请求。

num_tokens:
要分配给节点的vnode数量。使用与数据中心中其他节点上设置的相同数量的令牌。令牌范围按比例分配,如果硬件能力不同,则为容量更高,性能更好的系统分配更多的令牌范围。

allocate_tokens_for_local_replication_factor:
指定数据中心密钥空间的复制因子(RF)。

5:加节点期间注意监控流量、进程,确保任务没有死掉;

过程梳理:

1:安装服务;
2:同步配置文件,修改配置;
3:修改修改cassandra.ymal文件的streaming_socket_timeout_in_ms值。默认值是3600000,即1小时,改成172800000(48小时),保证时间足够传输完所有数据。

--同步过程会对集群带来很大的负载,所以尽可能关闭或限制一些功能,避免对线上业务造成影响。非必选项,执行命令4-5--
所有节点都关闭,包括新节点(新节点启动后关闭))
4:关闭所有节点的压缩:nodetool disableautocompaction
5:停止正在执行的压缩:nodetool stop COMPACTION

6:限制所有节点数据迁移流量:nodetool setstreamthroughput 32/64/更大
--限制为32mbps/64mbps/更大, 假设你的集群有10个机器,那么你的新节点的流量大约是32*10mbps。你可以根据数据迁移的进度,网络压力、节点压力、磁盘压力、完成的节点个数,调整这个值。

7:修改数据目录权限,如果调整了集群相关目录文件夹配置,首先要修改权限:chown -R cassandra.cassandra /var/lib/cassandra
8:启动引导程序节点(新加入节点执行): /etc/init.d/cassandra start
9.使用nodetool status来验证节点是否已完全引导,并且所有其他节点都处于运行状态(UN)而不处于任何其他状态。

10:现在重新开启所有节点自动压缩:nodetool enableautocompaction
11:关闭所有节点数据迁移流量:nodetool setstreamthroughput 0

12:手动清理每一台老节点磁盘空间:nodetool cleanup
在新节点成功加入之后,对每个先前存在的节点运行nodetool cleanup,花费时间较长,推荐后台运行nodetool cleanup。如果你不这样做,旧的数据仍然会在老节点上,占用磁盘空间。
cleanup是单线程操作,整体上影响不大,不需要关闭压缩。
cleanup是单机行为,也不需要限制节点stream传输。
避开业务高峰时间,逐个节点执行。

验证集群数据

[root@kubm-01 ~]# cqlsh 172.20.101.157  -u cassandra -p cassandra  

cassandra@cqlsh> SELECT * from kevin_test.t_users; 

 user_id | emails                          | first_name | last_name
---------+---------------------------------+------------+-----------
       6 | {'[email protected]', '[email protected]'} |     kevin6 |      kang
       7 | {'[email protected]', '[email protected]'} |     kevin7 |      kang
       9 | {'[email protected]', '[email protected]'} |     kevin9 |      kang
       4 | {'[email protected]', '[email protected]'} |     kevin4 |      kang
       3 | {'[email protected]', '[email protected]'} |     kevin3 |      kang
       5 | {'[email protected]', '[email protected]'} |     kevin5 |      kang
       0 | {'[email protected]', '[email protected]'} |     kevin0 |      kang
       8 | {'[email protected]', '[email protected]'} |     kevin8 |      kang
       2 | {'[email protected]', '[email protected]'} |     kevin2 |      kang
       1 | {'[email protected]', '[email protected]'} |     kevin1 |      kang

参考信息:

https://blog.csdn.net/yuanjian0814/article/details/78768889
https://www.jianshu.com/p/1dcca8f19894
http://cassandra.apache.org/doc/latest/tools/nodetool/nodetool.html?highlight=setstreamthroughput
https://zhaoyanblog.com/archives/684.html
https://blog.csdn.net/yuanjian0814/article/details/78777735
https://blog.csdn.net/iteye_19004/article/details/82648737