将单个令牌节点添加到现有的 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 项目中?

创建新的节点并添加到现有的节点树上

将 Apache NiFi 添加到现有的 Hortonworks HDP 集群