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 | {'k6-6@gmail.com', 'k6@pt.com'} | kevin6 | kang
7 | {'k7-7@gmail.com', 'k7@pt.com'} | kevin7 | kang
9 | {'k9-9@gmail.com', 'k9@pt.com'} | kevin9 | kang
4 | {'k4-4@gmail.com', 'k4@pt.com'} | kevin4 | kang
3 | {'k3-3@gmail.com', 'k3@pt.com'} | kevin3 | kang
5 | {'k5-5@gmail.com', 'k5@pt.com'} | kevin5 | kang
0 | {'k0-0@gmail.com', 'k0@pt.com'} | kevin0 | kang
8 | {'k8-8@gmail.com', 'k8@pt.com'} | kevin8 | kang
2 | {'k2-2@gmail.com', 'k2@pt.com'} | kevin2 | kang
1 | {'k1-1@gmail.com', 'k1@pt.com'} | 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
原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/193277.html