在单个数据中心配置中从 mSimpleStrategy 切换到 NetworkTopologyStrategy 非常简单。我要警告的唯一警告是确保正确拼写数据中心名称。否则将导致操作失败。
确保您使用正确的数据中心的一种方法是从system.local 查询它。
cassdba@cqlsh> SELECT data_center FROM system.local;
data_center
-------------
west_dc
(1 rows)
然后调整您的键空间以复制到该 DC:
ALTER KEYSPACE stackoverflow WITH replication = {'class': 'NetworkTopologyStrategy',
'west_dc': '3'};
现在对于多个数据中心,您需要确保正确指定新数据中心名称,并在完成后运行修复(在所有节点上)。这是因为SimpleStrategy 将所有节点视为一个数据中心,而不管它们的实际 DC 定义如何。所以你可以在一个 DC 中有 2 个副本,而在另一个 DC 中只有 1 个。
我已经多次更改了键空间的 RF。通常,没有问题。但是最好在完成后运行nodetool describecluster,以确保所有节点都具有架构协议。
专业提示:对于未来的谷歌员工,使用 SimpleStrategy 创建键空间没有任何好处。它所做的只是将您置于稍后必须修复的位置。事实上,我认为SimpleStrategy 应该永远不要使用。
那么数据移动何时开始?在我的情况下,因为我现在有特定的机架 ID,所以我希望我的副本在这个改变键空间操作时切换节点。
仅此一项不会导致令牌范围责任的任何调整。如果您的 RF 已经为 3,并且您的新 DC 定义也是如此,则您无需运行修复,因此不会流式传输任何内容。
我有一个 15 个节点的集群,分为 5 个机架。所以每个机架有 3 个属于它的节点。由于我之前有复制因子 3 和 SimpleStrategy,因此可能有超过 1 个副本属于同一个机架。而 NetworkStrategy 保证没有两个副本属于同一个机架。那么这不应该导致数据移动吗?
在这种情况下,如果您进行修复,您的二级或三元副本可能会找到新家。但您的初选将保持不变。
所以你是说在我进行维修之前没有任何变化?
正确。