将数据中心添加到现有群集的步骤。
如果新数据中心将使用其他数据中心或群集中的现有节点,请确保旧数据不会干扰新群集:
将每个节点添加到新的数据中心。参见删除节点。
完全删除应用程序目录。 请参阅将数据清除为独立进程或将数据清除为服务 。
删除后,从头开始安装Cassandra或DataStax Enterprise 。
1. 为防止客户端过早连接到新的数据中心,并确保读取或写入的一致性级别不会查询新的数据中心:
确保客户端配置为使用DCAwareRoundRobinPolicy 。
确保客户端指向现有的数据中心,这样他们就不会尝试访问新的数据中心,而该数据中心可能没有任何数据。
如果使用QUORUM一致性级别,请更改为LOCAL_QUORUM 。
如果使用ONE一致性级别,请设置为LOCAL_ONE 。
请参阅您的驱动程序的编程说明。
警告:如果客户端应用程序(包括DSE Search和DSE Analytics)未正确配置,则可能在数据中心准备就绪之前连接到新的数据中心。 这会导致连接异常,超时和/或不一致的数据。
2. 配置keyspace并创建新的数据中心:
使用ALTER KEYSPACE将NetworkTopologyStrategy用于以下密钥空间:
所有用户创建的
system: system_distributed和system_traces
DataStax Enterprise:
dse_perf,请参阅配置性能服务复制策略
system_auth和dse_security,请参阅配置system_auth和dse_security密钥空间复制 。
dse_leases,cfs,cfs_archive,dsefs和HiveMetaStore,请参阅设置分析密钥空间的复制因子
OpsCenter(如果已安装)
此步骤对于多个数据中心群集是必需的,因为nodetool rebuild需要在指定的源数据中心中使用这些密钥空间的副本。
ALTER KEYSPACE "sample_ks" WITH REPLICATION = {'class' : 'NetworkTopologyStrategy', 'ExistingDC' : 3 };
注意:数据中心名称区分大小写。 验证使用实用程序的情况,如dsetool status 。
3. 在新数据中心中,在每个新节点上安装Cassandra。 不要启动服务或重新启动节点。
确保在群集中的所有节点上使用相同版本的Cassandra。 请参阅安装Apache Cassandra 3.0的早期版本。
4. 在集群中其他节点的配置之后,在每个新节点上配置cassandra.yaml :
设置其他cassandra.yaml属性(如-seeds和endpoint_snitch) ,以匹配集群中其他节点上的cassandra.yaml文件中的设置。
要设置的属性:
群集名:
num_tokens: 推荐值:256
seeds: 每个种子节点的内部IP地址,在新的集群中。 种子节点不执行引导 (新节点加入现有集群的过程)。
listen_address:如果节点是种子节点,则该地址必须与种子列表中的IP地址匹配。 否则,gossip沟通失败,因为它不知道它是种子。
如果没有设置,Cassandra会向系统请求本地地址,即与其主机名相关的地址。 在某些情况下,Cassandra不会生成正确的地址,您必须指定listen_address。
rpc_address: 监听客户端连接的地址告密 。
endpoint_snitch:告密者的姓名 (请参阅endpoint_snitch )如果要更换告密者,请参阅切换告密 。
auto_bootstrap: false( 仅在初始化没有数据的干净节点时添加此设置。)
注意: 不要将所有的节点设置为种子,请参阅节点间通信(gossip) 。
使用以下设置来配置vnode令牌分配:
随机选择算法 :在每个节点上设置num_tokens 。 注释掉initial_token和allocate_tokens_for_local_replication_factor
num_tokens建议值为256. DataStax Enterprise的建议设置因系统类型而异,请参阅虚拟节点指导原则 。
分配算法 :在每个节点上设置num_tokens和allocate_tokens_for_local_replication_factor 。 注释掉initial_token 。
num_tokens建议值为8,而allocate_tokens_for_local_replication_factor是数据中心密钥空间的最高复制因子或最密集的数据密钥空间的RF。
注意:如果使用单令牌架构,请参阅生成令牌和添加或替换单令牌节点 。
5. 在每个新节点上,将新的数据中心定义添加到群集中使用的线索类型的属性文件中:
注意:不要使用SimpleSnitch。 SimpleSnitch(默认)仅用于单数据中心部署。 它不能识别数据中心或机架信息,只能用于公共云中的单数据中心部署或单区域。
每个snitch的配置文件
snitch | 配置文件 |
---|---|
PropertyFileSnitch | cassandra-topology.properties |
GossipPropertyFileSnitch | cassandra-rackdc.properties |
Ec2Snitch | |
Ec2MultiRegionSnitch | |
GoogleCloudSnitch |
6. 在现有的数据中心中:
在某些节点上,更新cassandra.yaml文件中的种子属性以将新的数据中心中的种子节点包括在内,并重新启动这些节点。 (对cassandra.yaml文件的更改需要重新启动才能生效。)
将新的数据中心定义添加到集群中使用的流氓类型属性文件。 如果更改线索,请参阅切换线索 。
7. 在每个机架上的一个节点上启动Cassandra 。
8. 通过机架旋转启动Cassandra,直到所有节点都启动。
9. 所有节点在集群中运行并且客户端应用程序都是数据中心感知后,使用cqlsh来更改密钥空间:
ALTER KEYSPACE "sample_ks" WITH REPLICATION = {'class': 'NetworkTopologyStrategy', 'ExistingDC':3, 'NewDC':3};
警告:如果客户端应用程序(包括DSE Search和DSE Analytics)未正确配置,则可能在数据中心准备就绪之前连接到新的数据中心。 这会导致连接异常,超时或不一致的数据。
10. 在新数据中心的每个节点上运行nodetool重建 。
$ nodetool rebuild - name_of_existing_data_center
警告:
如果您不在命令行中指定现有的数据中心,则新节点将显示为成功重建,但不包含任何数据。
如果您错过了这一步,如果现有的数据中心不完全同步,那么对具有LOCAL_ONE或ONE一致性级别的新数据中心的请求可能会失败。
此步骤可确保新节点识别集群中现有的数据中心。
您可以同时在一个或多个节点上运行重建。 一次在一个节点上运行,以减少对现有集群的影响。 集群可以处理额外的I / O和网络压力时,在多个节点上运行。
群集中的数据中心现在正在相互复制。