StorageGRID 扩展失败,并显示错误:正在启动 Cassandra 。错误:无法启动。正在重试 "
适用于
- StorageGRID Webscale 11.1
- StorageGRID Webscale 11.0
问题
在尝试扩展除显示为Complete
" " 的非存储节点以外的一组节点时,网格管理接口( GMI )将显示以下存储节点:
'Waiting for Cassandra nodes to join the cluster'
'Starting Cassandra. Error: Failed to start. Retrying'
'Waiting to Start Services'
位于下的节点的 Cassandra 日志文件/var/local/log/cassandra/system.log
显示以下错误:
ERROR [main] 2018-08-31 10:40:14,250 CassandraDaemon.java (line 678) Exception encountered during startup
java.lang.RuntimeException: A node with address localhost-grid/<IP_Address> already exists, cancelling join. Use cassandra.replace_address if you want to replace this node.
at org.apache.cassandra.service.StorageService.checkForEndpointCollision(StorageService.java:559) ~[cassandra-all-3.0.15.162564.jar:3.0.15.162564]
at org.apache.cassandra.service.StorageService.prepareToJoin(StorageService.java:889) ~[cassandra-all-3.0.15.162564.jar:3.0.15.162564]
at org.apache.cassandra.service.StorageService.initServer(StorageService.java:666) ~[cassandra-all-3.0.15.162564.jar:3.0.15.162564]
at org.apache.cassandra.service.StorageService.initServer(StorageService.java:614) ~[cassandra-all-3.0.15.162564.jar:3.0.15.162564]
at org.apache.cassandra.service.CassandraDaemon.setup(CassandraDaemon.java:354) [cassandra-all-3.0.15.162564.jar:3.0.15.162564]
at org.apache.cassandra.service.CassandraDaemon.activate(CassandraDaemon.java:582) [cassandra-all-3.0.15.162564.jar:3.0.15.162564]
at org.apache.cassandra.service.CassandraDaemon.main(CassandraDaemon.java:665) [cassandra-all-3.0.15.162564.jar:3.0.15.162564]
原因
- 扩展一组节点时,存储节点需要在 Cassandra 服务级别以组的形式加入。
- 如果一个存储节点在 Cassandra 中遇到错误,另一个存储节点将等待该节点跟上此过程。因此,整个扩展过程将暂停,直到解决该节点上的错误为止。
- 相反,非存储节点(例如管理节点或网关节点)则不具有此类依赖关系。其扩展过程无需等待其他节点即可完成。
解决方案
在显示错误'Starting Cassandra. Error: Failed to start. Retrying
的存储节点上执行以下步骤: " :
- 通过 SSH 连接到节点并运行以下命令升级到 root 权限:
su -
/etc/cassandra/cassandra-env.sh
运行以下命令备份现有的 Cassandra 环境文件:cp /etc/cassandra/cassandra-env.sh /etc/cassandra/cassandra-env.sh_bk
- 在 Cassandra 环境文件末尾添加以下两行:
JVM_OPTS="$JVM_OPTS -Dcassandra.replace_address=<SG_Node_IP>"
JVM_OPTS="$JVM_OPTS -Dcassandra.allow_unsafe_replace=true"
- 启动 Cassandra 服务:
service cassandra start
- 通过 SSH 连接到显示的节点
Waiting for Cassandra nodes to join the cluster
- 确认其 Cassandra 服务已成功启动:
service cassandra status
- 确认集群中 Cassandra 级别的节点状态:
nodetool status
- 如果节点最初出现错误(步骤 2 )显示 "UN" (正常运行),继续执行该错误节点上的 " 下一步 "
- 确认其 Cassandra 服务已成功启动:
- 删除或注释掉步骤 2 中添加的两行。
- 继续执行存储节点上发生错误中断的扩展过程:
touch /tmp/unhalt
整个扩展过程将在短暂的时间后在 GMI 中恢复。