我应该在 cassandra.yaml 中为 broadcast_rpc_address 使用啥地址

Posted

技术标签:

【中文标题】我应该在 cassandra.yaml 中为 broadcast_rpc_address 使用啥地址【英文标题】:what address should i use for broadcast_rpc_address in cassandra.yaml我应该在 cassandra.yaml 中为 broadcast_rpc_address 使用什么地址 【发布时间】:2018-05-11 01:23:57 【问题描述】:

    cluster_name: 'Cassandra Cluster'
    num_tokens: 256
    hinted_handoff_enabled: true
    max_hint_window_in_ms: 10800000
    hinted_handoff_throttle_in_kb: 1024
    max_hints_delivery_threads: 2
    authenticator: AllowAllAuthenticator
    authorizer: AllowAllAuthorizer
    permissions_validity_in_ms: 2000
    partitioner: org.apache.cassandra.dht.Murmur3Partitioner
    data_file_directories:
        - /var/lib/cassandra/data
    commitlog_directory: /var/lib/cassandra/commitlog
    disk_failure_policy: stop
    key_cache_size_in_mb:
    key_cache_save_period: 14400
    row_cache_size_in_mb: 0
    row_cache_save_period: 0
    saved_caches_directory: /var/lib/cassandra/saved_caches
    commitlog_sync: periodic
    commitlog_sync_period_in_ms: 10000
    commitlog_segment_size_in_mb: 32
    seed_provider:
        - class_name: org.apache.cassandra.locator.SimpleSeedProvider
          parameters:
              - seeds: "seednode-A-IP,seednode-B-IP,seednode-C-IP"
    concurrent_reads: 32
    concurrent_writes: 32
    trickle_fsync: false
    trickle_fsync_interval_in_kb: 10240
    storage_port: 7000
    ssl_storage_port: 7001
    listen_address: 10.8.9.83
    start_native_transport: true
    native_transport_port: 9042
    start_rpc: true
    rpc_address: 0.0.0.0
    broadcast_rpc_address: NAT-GATEWAY-IP
    rpc_port: 9160
    rpc_keepalive: true
    rpc_server_type: sync
    thrift_framed_transport_size_in_mb: 15
    incremental_backups: false
    snapshot_before_compaction: false
    auto_snapshot: true
    tombstone_warn_threshold: 1000
    tombstone_failure_threshold: 100000
    column_index_size_in_kb: 64
    compaction_throughput_mb_per_sec: 16
    read_request_timeout_in_ms: 5000
    range_request_timeout_in_ms: 10000
    write_request_timeout_in_ms: 2000
    cas_contention_timeout_in_ms: 1000
    truncate_request_timeout_in_ms: 60000
    request_timeout_in_ms: 10000
    cross_node_timeout: false
    endpoint_snitch: Ec2Snitch
    dynamic_snitch_update_interval_in_ms: 100
    dynamic_snitch_reset_interval_in_ms: 600000
    dynamic_snitch_badness_threshold: 0.1
    request_scheduler: org.apache.cassandra.scheduler.NoScheduler
    server_encryption_options:
        internode_encryption: none
        keystore: conf/.keystore
        keystore_password: cassandra
        truststore: conf/.truststore
        truststore_password: cassandra
    client_encryption_options:
        enabled: false
        keystore: conf/.keystore
        keystore_password: cassandra
    internode_compression: all
    inter_dc_tcp_nodelay: false

我们在 AWS 上部署了 Cassandra 集群,在 Auto Scaling 组中有 3 个种子节点(附加静态 ENI)和 3 个非种子节点。

我将 rpc_address 设置为 0.0.0.0,谁能告诉我 cassandra.yaml 文件中的 broadcast_rpc_address 应该是什么?

我之前使用的是 cassandra 2.0.7 版本,并且能够很好地连接到集群,只需将 rpc_address 设置为 0.0.0.0 并且没有设置 broadcast_rpc_address ,但是当我升级到 3.11.1 时它给了我错误

CassandraDaemon.java:708 - Exception encountered during startup: If rpc_address is set to a wildcard address (0.0.0.0), then you must set broadcast_rpc_address to a value other than 0.0.0.0

【问题讨论】:

Cassandra 能否在出现该错误的情况下启动? 【参考方案1】:

如果您使用的是 Cassandra 2.1 或更高版本,您可以配置 broadcast_rpc_address。你可以配置broadcast_rpc_address为公网IP。

Cassandra 将“broadcast_address/listen_address”用于节点间连接,将“broadcast_rpc_address/rpc_address”用于 rpc 接口(客户端 -> 协调器(Cassandra 节点)请求)。

【讨论】:

我们拥有私有子网中的所有节点,我使用 NAT 网关 ip(公共 IP)作为广播 rpc_address,我仍然无法连接到 cassandra 集群,但我能够连接到本地节点本身,知道什么是问题吗? 当我执行 cqlsh -u cassandra -p cassandra 时出现错误,无法连接到任何服务器,超时 这里的“loadbalacrdns”是什么? 我们不使用cassandra节点IP,而是使用负载均衡器进行cql连接

以上是关于我应该在 cassandra.yaml 中为 broadcast_rpc_address 使用啥地址的主要内容,如果未能解决你的问题,请参考以下文章

在Cassandra中加载cassandra.yaml之外的其他配置文件

cassandra.yaml 配置

Cassandra 配制 cassandra.yaml

如果在 cassandra.yaml 中启用了 auto_snapshot,那么这些快照啥时候会被删除

在 cassandra.yaml 中获取超过 max_value_size_in_mb 的值的错误

cassandra.yaml中的群集配置问题,用于多节点群集,其中只有1个公共IP