【发布时间】:2019-08-25 20:07:03
【问题描述】:
我尝试将一个 dc 添加到我现有的集群中。我用一个键空间更改了我的 networkTopologie,但新的 DC 就像完整的副本一样工作。我只更改了一个键空间拓扑,但其他键空间的行转到新的 DC。当我在现有集群中添加一个插入内容时,这些内容也会转到新的 DC。
当我将新 DC 添加到我的集群时的其他问题我丢失了我用来连接 cassandra 的超级用户。
我的脚步;
在现有节点上;
- 将
cassandra-rackdc.properties更改为:
dc=datacenter1
rack=rack1
- 更改 cassandra.yaml
snitch: GossipingPropertyFileSnitch - 节点滚动重启:
nodetool flush && nodetool drain && service cassandra stop - 更新特定于应用程序的键空间以仅使用现有 DC 的 NetworkTopology
ALTER KEYSPACE {keyspace} WITH replication = {'class': 'NetworkTopologyStrategy', 'datacenter1': '3'} AND durable_writes = true;
新数据中心;
- 创建新实例并在所有节点上安装 cassandra,不要启动服务
- 选择单个节点作为 DC 的种子
- 将
cassandra.yaml更新为所有相同的设置,包括cluster_name等...并优化设置并将种子设置为除所选DC 种子之外的所有设置 在选定的种子集cassandra.yaml上为数据中心 1(现有)中的 1-2 个 IP 提供种子 - 将 cassandra-rackdc.properties 更改为:
dc=datacenter2
rack=rack1
- 在选定的 DC 种子节点上启动服务
- 检查
nodetool status新节点是否在 cassandra 中正确加入 - 在每次启动之间间隔 2 分钟以 1×1 启动其他节点
现有集群:
更改键空间拓扑
ALTER KEYSPACE {keyspace}
WITH replication = {'class': 'NetworkTopologyStrategy',
'datacenter1': '3', 'cassandra': '3'}
AND durable_writes = true;
键空间架构;
system_auth | True | {'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy', 'datacenter1': '1', 'datacenter2': '1'}
system_schema | True | {'class': 'org.apache.cassandra.locator.LocalStrategy'}
msg | True | {'class': 'org.apache.cassandra.locator.SimpleStrategy', 'replication_factor': '1'}
event | True | {'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy', 'datacenter1': '1'}
system_distributed | True | {'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy', 'datacenter1': '1', 'datacenter2': '1'}
system | True | {'class': 'org.apache.cassandra.locator.LocalStrategy'}
system_traces | True | {'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy', 'datacenter1': '1', 'datacenter2': '1'}
Datacenter: datacenter1
=======================
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
-- Address Load Tokens Owns Host ID
Rack
UN xxxxxx 230.49 KiB 256 ? 6a31597c-a86f-4e01-8f59-425d4f96f5fd rack1
UN yyyyyy 342.55 KiB 256 ? bdc1eb13-9707-4a5f-83f0-1cbfafbc520f rack1
Datacenter: datacenter2
=======================
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
-- Address Load Tokens Owns Host ID Rack
UN zzzzzzzz 273.42 KiB 256 ? cc56b7d5-15b7-4744-91f5-2ae2e6ac3a8e rack1
UN tttttttt 281.71 KiB 256 ? 4682ed50-7189-4903-8ed5-7c9bbdb09811 rack1
注意:非系统键空间没有相同的复制设置,有效的所有权信息没有意义
【问题讨论】:
-
“我只更改了一个键空间拓扑,但其他键空间的行进入了新的 DC。当我在现有集群中添加一些内容时,这些也进入了新的 DC。”你怎么知道数据会流向其他 DC。您是否打开“跟踪”并查看其他 DC 的节点是否参与检索数据?您可以使用“nodetool status
”检查密钥空间的所有权,这显示了哪个节点有多少百分比的数据 -
我只有两个键空间,第一个是 msg,另一个是 event。事件拓扑是 NetworkTopologyStrategy 和 datacenter 1 和 datacenter 2 。味精键空间 simpleStrategy 和 datacenter1 。但是当我从现有集群中插入一行时,我可以从我的新数据中心看到这一行,并且 cassandra 在 cassandra DATA 目录下创建一个 msg 目录。 nodetool status msg 显示两个数据中心信息
-
我可以看到 nodetool status msg 的输出吗?它应该显示有关两个 DC 的信息,但在“拥有”下,它显示 datacenter2 中每个节点的 0.0。
-
./nodetool status msg 数据中心:datacenter1 |/ State=Normal/Leaving/Joining/Moving -- 地址加载令牌拥有(有效)主机 ID 机架 UN 10.34.166.51 279.87 KiB 256 32.4% be697f8f- 974A-404F-8BD6-1B0206BDE173 RACK1 UN 10.34.167.52 342.45 KIB 256 32.5%F1B0C631-48F5-431C-91E7-3D7E7EF29B99 RACK1 UN 10.34.167.53 274.92 KIB 256 33.3%8905A972-5DB0-4E6F-AF22-3CF6E5D795F7 RACK1 SPAN>
-
数据中心:datacenter2 =======================状态=上/下|/状态=正常/离开/加入/移动 - 地址加载令牌拥有(有效)主机ID机架UN 10.34.166.22 182.84 KIB 256 33.2%E9177E05-51C8-4535-8CF4-B9849D18C91F RACK1 UN 10.34.166.21 193.34 KIB 256 33.0%5B9231AD-E300-4D81-A024-AE355FE1C2E6 RACK1 UN 10.34.167.111 352.09 KiB 256 35.6% 993683f5-eac5-40dc-a57e-d6126a3c1852 rack1
标签: cassandra nosql cassandra-3.0