【问题标题】:Configuring Cassandra deployments in NAT environment在 NAT 环境中配置 Cassandra 部署
【发布时间】:2018-11-24 08:46:19
【问题描述】:

这是一种部署方案,其中 NAT 存在于 DC 边界之间,以下是要求:

Cassandra 版本:2.1.13

  1. 有 2 个 DC,跨 DC 的两个 Cassandra 节点(dc1:node1 和 dc2:node3)应使用公共 IP 跨 NAT 边界进行通信。
  2. NAT 后面的一个 DC 有 2 个 Cassandra 节点(dc1:node1 和 dc1:node2),它们都应该使用私有 IP 在 NAT 内通信。
  3. 所有这 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 内的节点无法相互检测。

如果在 broadcast_address 和种子中使用了私有 IP,则在 DC 和 NAT 内通信正常,但是跨 DC 和 NAT 的节点无法相互检测。

调查了 Ec2MultiRegionSnitch,但这不适用于本地部署:https://docs.datastax.com/en/cassandra/2.1/cassandra/architecture/architectureSnitchEC2MultiRegion_c.html#architectureSnitchEC2MultiRegion_c__other-settings

需要哪些配置设置才能达到上述 3 个要求?

【问题讨论】:

    标签: amazon-ec2 cassandra datastax-enterprise


    【解决方案1】:

    使用gossiping属性文件snitch,设置公网ip为broadcast_address,私网ip为listen_address。如果在其他 DC,他们将使用同一个 DC 中的 listen_address 和广播地址。

    【讨论】:

    • 是的,进行了这些更改,但这些更改不适用于 DC 和 NAT 中的节点。跨 DC 和 NAT 节点能够正确通信。
    • 可能想检查防火墙,nc -z {private ip of other in dc} 7000 以测试连接性。 netstat -anp | grep 7000 看看它在听什么
    • 嗨,克里斯,NAT 外部的节点 3 将如何与 NAT 后面的节点 1 的私有 IP 进行通信?但是node3只能和node 1的公网IP通信,然后NAT会把公网IP转换成私网IP,对吧?
    • 用seeds=public address、listen_address=private和broadcast_address=public进行的设置。在所有 3 个节点上使用这些设置:dc1:node1 和 dc2:node3 可以工作,但 dc1:node1 和 dc1:node2 不能,是因为种子在 NAT 后面的 DC 内具有公共地址可能无法工作吗?检查在 dc1:node1 上侦听的观察结果之一,列出了私有 IP:node1# netstat -anp | grep -E "(7001)" tcp 0 0 dc1:node1_privateIP:7001 0.0.0.0:* LISTEN 9999/java dc1:node2可以与dc1:node1_publicIP建立连接吗?
    • 如果与种子之一在同一个 DC 中使用其私有而不是公共
    【解决方案2】:

    用seeds=public address、listen_address=private 和broadcast_address=public 进行的设置。 在所有 3 个节点上进行这些设置:

    • dc1:node1 & dc2:node3 有效,但
    • dc1:node1 和 dc1:node2 没有

    是因为种子在 NAT 后面的 DC 内有公共地址可能无法正常工作吗?

    在 dc1:node1 上检查监听的观察之一,列出了私有 IP:

    node1# netstat -anp | grep -E "(7001)" 
    tcp 0 0 dc1:node1_privateIP:7001 0.0.0.0:* LISTEN 9999/java 
    

    dc1:node2 能否与 dc1:node1_publicIP 建立连接? https://issues.apache.org/jira/browse/CASSANDRA-9748 是否与此处相关或仅适用于多个 NICS 而不是 NAT 环境的情况?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-03-05
      • 1970-01-01
      • 2016-12-11
      • 2019-06-20
      • 2017-12-30
      • 1970-01-01
      • 2019-11-21
      相关资源
      最近更新 更多