我们有一个3节点的Cassandra集群(版本3.16(。在其中一个节点(10.0.4.4(上,我们需要将数据从同一节点上的一个驱动器移动到另一个驱动器。在SO和其他网站上,我们看到了以下程序:
首先将数据从旧位置同步到新位置:
sudo rsync -avzP --delete /var/lib/cassandra/data /datadrive/cassandra/data
重复,直到足够快。然后排出&刷新节点
nodetool flush
nodetool drain
停止cassandra服务。我们在systemd上运行它,所以我们发布
sudo systemctl stop cassandra
再次运行rsync
sudo rsync -avzP --delete /var/lib/cassandra/data /datadrive/cassandra/data
更新casandra.yaml并设置data_file_directories:
data_file_directories:
- /datadrive/cassandra/data
确保设置了权限:
chown -R cassandra:cassandra /datadrive/cassandra/data
重新启动节点:
sudo systemctl start cassandra
执行此序列时,在启动时会出现以下错误:
ERROR [main] 2020-04-18 14:51:51,742 CassandraDaemon.java:774 - Exception encountered during startup
Apr 18 14:51:51 i1 cassandra: java.lang.RuntimeException: A node with address /10.0.4.4 already exists,
cancelling join. Use cassandra.replace_address if you want to replace this node.
我们缺少什么?节点没有被替换,所以我不确定是否设置replace_address。
更改已经有数据的运行节点的数据文件夹的正确方法是什么?
谢谢。
好吧,我终于找到了问题。我发布这个答案是因为我认为它可能会帮助犯同样错误的人。问题是这条线:
sudo rsync -avzP --delete /var/lib/cassandra/data /datadrive/cassandra/data
在同一系统上同步dir1到dir2内容的语法为:
rsync -r dir1/ dir2
请注意dir1后面的额外/。因此,纠正的rsync命令是:
sudo rsync -avzP --delete /var/lib/cassandra/data/ /datadrive/cassandra/data
一旦完成,一切都会完美。。。