将单个令牌节点添加到现有的 datastax cassandra 集群和数据传输不起作用
Posted
技术标签:
【中文标题】将单个令牌节点添加到现有的 datastax cassandra 集群和数据传输不起作用【英文标题】:Adding single token nodes to existing datastax cassandra Cluster and data transfer is not working 【发布时间】:2018-01-05 23:31:51 【问题描述】:将每个节点的新单个令牌添加到现有 datastax 集群并且数据传输不起作用。所遵循的过程如下所述。如果我遵循的过程是错误的,请更新我。谢谢
我们的 AWS EC2 数据中心有 3 个单令牌范围数据税节点,同时启用了搜索和图表。我们计划在我们的数据中心中再添加 3 个节点。我们目前正在为我们的密钥空间使用 DseSimpleSnitch 和简单网络拓扑。我们当前的复制因子是 2。
节点 1:10.10.1.36 节点 2:10.10.1.46 节点 3:10.10.1.56
cat /etc/default/dse | grep -E 'GRAPH_ENABLED=|SOLR_ENABLED='
GRAPH_ENABLED=1
SOLR_ENABLED=1
数据中心:搜索图
Address Rack Status State Load Owns Token
10.10.1.46 rack1 Up Normal 760.14 MiB ? -9223372036854775808
10.10.1.36 rack1 Up Normal 737.69 MiB ? -3074457345618258603
10.10.1.56 rack1 Up Normal 752.25 MiB ? 3074457345618258602
步骤 (1) 为了将 3 个新节点添加到我们的数据中心,我们首先更改了我们的键空间拓扑结构,并将 snitch 设置为网络感知。
1) 更改了告密者。 猫 /etc/dse/cassandra/cassandra.yaml | grep endpoint_snitch: endpoint_snitch: GossipingPropertyFileSnitch
cat /etc/dse/cassandra/cassandra-rackdc.properties |grep -E 'dc=|rack='
dc=SearchGraph
rack=rack1
2) (a) 关闭所有节点,然后重新启动。
(b) 在每个节点上运行顺序修复和 nodetool 清理。
3) 更改了键空间拓扑。
ALTER KEYSPACE tech_app1 WITH REPLICATION = 'class' : 'NetworkTopologyStrategy', 'SearchGraph' : 2;
ALTER KEYSPACE tech_app2 WITH REPLICATION = 'class' : 'NetworkTopologyStrategy', 'SearchGraph' : 2;
ALTER KEYSPACE tech_chat WITH REPLICATION = 'class' : 'NetworkTopologyStrategy', 'SearchGraph' : 2;
参考:http://docs.datastax.com/en/cassandra/3.0/cassandra/operations/opsChangeKSStrategy.html,http://docs.datastax.com/en/cassandra/3.0/cassandra/operations/opsSwitchSnitch.html
步骤(2)为了更新令牌范围和设置新的cassandra节点,我们遵循以下流程。
1) 重新计算令牌范围
root@ip-10-10-1-36:~# token-generator
DC #1:
Node #1: -9223372036854775808
Node #2: -6148914691236517206
Node #3: -3074457345618258604
Node #4: -2
Node #5: 3074457345618258600
Node #6: 6148914691236517202
2) 在新节点上安装 Datastax 企业相同版本。
3) 停止节点服务并清除数据。
4) (a) 以下列方式将令牌范围分配给新节点。
Node 4: 10.10.2.96 Range: -2
Node 5: 10.10.2.97 Range: 3074457345618258600
Node 6: 10.10.2.86 Range: 6148914691236517202
4) (b) 在每个新节点上配置 cassandra.yaml:
节点 4:
cluster_name: 'SearchGraph'
num_tokens: 1
initial_token: -2
parameters:
- seeds: "10.10.1.46, 10.10.1.56"
listen_address: 10.10.2.96
rpc_address: 10.10.2.96
endpoint_snitch: GossipingPropertyFileSnitch
节点 5:
cluster_name: 'SearchGraph'
num_tokens: 1
initial_token: 3074457345618258600
parameters:
- seeds: "10.10.1.46, 10.10.1.56"
listen_address: 10.10.2.97
rpc_address: 10.10.2.97
endpoint_snitch: GossipingPropertyFileSnitch
节点 6:
cluster_name: 'SearchGraph'
num_tokens: 1
initial_token: 6148914691236517202
parameters:
- seeds: "10.10.1.46, 10.10.1.56"
listen_address: 10.10.2.86
rpc_address: 10.10.2.86
endpoint_snitch: GossipingPropertyFileSnitch
5) 改变了告密者。
cat /etc/dse/cassandra/cassandra.yaml | grep endpoint_snitch:
endpoint_snitch: GossipingPropertyFileSnitch
cat /etc/dse/cassandra/cassandra-rackdc.properties |grep -E 'dc=|rack='
dc=SearchGraph
rack=rack1
6) 在关闭一致.rangemovement 的情况下,每隔两分钟在每个新节点上启动 DataStax Enterprise:
JVM_OPTS="$JVM_OPTS -Dcassandra.consistent.rangemovement=false
7) 新节点完全引导后,使用 nodetool move 为现有节点分配新的 initial_token,按照步骤 4(a) 中完成的令牌重新计算。每次在每个节点上完成一个过程。
On Node 1(10.10.1.36) : nodetool move -3074457345618258603
On Node 2(10.10.1.46) : nodetool move -9223372036854775808
On Node 3(10.10.1.56) : nodetool move 3074457345618258602
数据中心:SearchGraph
Address Rack Status State Load Owns Token
10.10.1.46 rack1 Up Normal 852.93 MiB ? -9223372036854775808
10.10.1.36 rack1 Up Moving 900.12 MiB ? -3074457345618258603
10.10.2.96 rack1 UP Normal 465.02 KiB ? -2
10.10.2.97 rack1 Up Normal 109.16 MiB ? 3074457345618258600
10.10.1.56 rack1 Up Moving 594.49 MiB ? 3074457345618258602
10.10.2.86 rack1 Up Normal 663.94 MiB ? 6148914691236517202
更新后:
但是我们在加入节点时遇到了以下错误。
AbstractSolrSecondaryIndex.java:1884 - Cannot find core chat.chat_history
AbstractSolrSecondaryIndex.java:1884 - Cannot find core chat.history
AbstractSolrSecondaryIndex.java:1884 - Cannot find core search.business_units
AbstractSolrSecondaryIndex.java:1884 - Cannot find core search.feeds
AbstractSolrSecondaryIndex.java:1884 - Cannot find core search.feeds_2
AbstractSolrSecondaryIndex.java:1884 - Cannot find core search.knowledegmodule
AbstractSolrSecondaryIndex.java:1884 - Cannot find core search.userdetails
AbstractSolrSecondaryIndex.java:1884 - Cannot find core search.userdetails_2
AbstractSolrSecondaryIndex.java:1884 - Cannot find core search.vault_details
AbstractSolrSecondaryIndex.java:1884 - Cannot find core search.workgroup
AbstractSolrSecondaryIndex.java:1884 - Cannot find core cloud.feeds
AbstractSolrSecondaryIndex.java:1884 - Cannot find core cloud.knowledgemodule
AbstractSolrSecondaryIndex.java:1884 - Cannot find core cloud.organizations
AbstractSolrSecondaryIndex.java:1884 - Cannot find core cloud.userdetails
AbstractSolrSecondaryIndex.java:1884 - Cannot find core cloud.vaults
AbstractSolrSecondaryIndex.java:1884 - Cannot find core cloud.workgroup
节点加入失败,出现以下错误:
ERROR [main] 2017-08-10 04:22:08,449 DseDaemon.java:488 - Unable to start DSE server.
com.datastax.bdp.plugin.PluginManager$PluginActivationException: Unable to activate plugin com.datastax.bdp.plugin.SolrContainerPlugin
Caused by: java.lang.IllegalStateException: Cannot find secondary index for core ekamsearch.userdetails_2, did you create it?
If yes, please consider increasing the value of the dse.yaml option load_max_time_per_core, current value in minutes is: 10
ERROR [main] 2017-08-10 04:22:08,450 CassandraDaemon.java:705 - Exception encountered during startup
java.lang.RuntimeException: com.datastax.bdp.plugin.PluginManager$PluginActivationException: Unable to activate plugin
以前有没有人遇到过这些错误或警告?
【问题讨论】:
手动分配令牌时的任何特殊原因,您可以在 Cassandra.yaml 中设置 numtoken = 1 并让 Cassandra 为您处理。 我已经按照上面步骤 2 (1) 中提到的重新计算配置了 num_tokens: 1 和 initial_token 范围。我们想手动分配 initial_token 范围,而不是 Cassandra 来处理它,因为我认为如果我们更改它并使用 Opscenter 重新平衡当前集群 Solr 将无法工作,请澄清我是否错了。我们遵循的上述步骤是否正确?用于添加节点。 我认为在扩展 cassandra 节点时手动管理令牌很乏味。 num_tokens:1 本身将自动帮助在 Cassandra 级别进行管理,并且随着数据重新平衡到新节点,Solr 将对它们进行索引。当数据移动到新节点时,相应的记录将从旧节点中删除,因为您运行 nodetool cleanup。随着记录在旧节点中消失,Solr 中相应的索引条目也会消失。从 Solr 核心中,您将能够看到被索引的记录数,并且您可以在添加节点后进行验证。我会避免手动分配令牌。 所以我们可以用 num_tokens:1 启动 3 个新节点,集群中现有的 3 个节点已经设置了 initial_token:。谢谢 最简单的方法是在将数据移动到新的联合节点时一次停用它们。您可以使用 replace_address 将它们添加回来而无需初始令牌 【参考方案1】:令牌分配问题 ::
1) I had wrongly assigned token range in Step 4) (a). Assign token which
bisect or trisect the value which are generated using
"token-generator"
Node 4: 10.10.2.96 Range: -6148914691236517206
Node 5: 10.10.2.97 Range: -2
Node 6: 10.10.2.86 Range: 6148914691236517202
Note : We don't need to change the token range of existing nodes in data
center.No need to follow procedure in Step 7 which i have mentioned
above.
Solr 问题已解决:找不到 cor ::
Increased load_max_time_per_core value in dse.yaml configuration file,
still i was receving the error.Finalys solved the issue
by following method
1) Started the new nodes as non-solr and wait for all cassandra data
to migrate to joining nodes.
2) Add the parameter auto_bootstrap: False directive to the
cassandra.yaml file
3) Re-start the same nodes after enabling solr. Changed parameter
SOLR_ENABLED=1 in /etc/default/dse
3) Re-index in all new joined nodes. I had to reloaded all core
required with the reindex=true and distributed=false parameters in
new joined nodes.
Ref : http://docs.datastax.com/en/archived/datastax_enterprise/4.0/datastax_enterprise/srch/srchReldCore.html
【讨论】:
以上是关于将单个令牌节点添加到现有的 datastax cassandra 集群和数据传输不起作用的主要内容,如果未能解决你的问题,请参考以下文章
如何将一个或多个节点添加到现有的YugaByte DB CE集群?
如何将 ResourceServer 添加到现有的 spring 安全配置
如何将 MFC ActiveX 控件添加到现有的 activex 项目
如何将 .net core Web API 项目添加到现有的 .NET core (3.1) Web Application 项目中?