amazon-ec2 - 在 NAT 环境中配置 Cassandra 部署
问题描述
这是一种部署方案,其中 NAT 存在于 DC 边界之间,以下是要求:
卡桑德拉版本:2.1.13
- 有 2 个 DC,两个跨 DC 的 Cassandra 节点(dc1:node1 和 dc2:node3)应使用公共 IP 跨 NAT 边界进行通信。
- 位于 NAT 后面的 DC 之一有 2 个 Cassandra 节点(dc1:node1 和 dc1:node2),它们都应该使用私有 IP 在 NAT 内进行通信。
- 所有这 3 个节点(dc1:node1、dc1:node2 和 dc2:node3)应该形成一个环并相互通信。
调查了种子、listen_address、broadcast_address 和 broadcast_rpc_address。 https://docs.datastax.com/en/cassandra/2.1/cassandra/configuration/configCassandra_yaml_r.html
如果广播地址和种子中使用了公共 IP,则跨 DC 和 NAT 通信可以工作,但是 NAT 内的节点无法相互检测。
如果在广播地址和种子中使用了私有 IP,那么在 DC 和 NAT 内通信可以工作,但是跨 DC 和 NAT 的节点无法相互检测到。
调查了 Ec2MultiRegionSnitch,但这不适用于前提部署:https ://docs.datastax.com/en/cassandra/2.1/cassandra/architecture/architectureSnitchEC2MultiRegion_c.html#architectureSnitchEC2MultiRegion_c__other-settings
实现上述 3 个要求需要哪些配置设置?
解决方案
使用 gossiping 属性文件 snitch,将 public ip 设置为 broadcast_address,将 private ip 设置为 listen_address。如果在其他 DC,他们将使用相同 DC 中的 listen_address 和广播地址。
推荐阅读
- hyperledger-fabric - 在 fabric-samples 中使用 couchdb 选项时,无法在 Hyperledger Fabric 1.3 中实例化链代码
- ios - 运行命令 shell 脚本 [cp] embed pods framework' 0.2 seconds Command PhaseScriptExecution failed with a nonzero exit code
- jasper-reports - 应用条件格式时子报表周围出现不需要的边框
- python - POST 请求方法在 Django Rest 框架中不起作用
- node.js - 如何使用带有 mocha 的 await 和 ESM 获取 selenium 驱动程序?
- java - 使用表达式委托而不是 Java 类有什么好处?
- dart - 在 Flutter 中定义 const 级别的类
- angular - ngIf 单行 if 语句 | 角 6
- ole - 从 SQL Server 2017 调用 Web 服务 - sp_OAMethod - 无法建立与服务器的连接
- java - 比较方法