【问题标题】:Apache Cassandra: Unable to gossip with any seedsApache Cassandra:无法使用任何种子进行八卦
【发布时间】:2014-01-08 13:40:42
【问题描述】:

我已经构建了 Cassandra server 2.0.3,然后运行它。它正在启动,然后通过消息停止:

X:\MyProjects\cassandra\apache-cassandra-2.0.3-src\bin>cassandra.bat >log.txt
java.lang.RuntimeException: Unable to gossip with any seeds
        at org.apache.cassandra.gms.Gossiper.doShadowRound(Gossiper.java:1160)
        at org.apache.cassandra.service.StorageService.checkForEndpointCollision
(StorageService.java:416)
        at org.apache.cassandra.service.StorageService.joinTokenRing(StorageServ
ice.java:608)
        at org.apache.cassandra.service.StorageService.initServer(StorageService
.java:576)
        at org.apache.cassandra.service.StorageService.initServer(StorageService
.java:475)
        at org.apache.cassandra.service.CassandraDaemon.setup(CassandraDaemon.ja
va:346)
        at org.apache.cassandra.service.CassandraDaemon.activate(CassandraDaemon
.java:461)
        at org.apache.cassandra.service.CassandraDaemon.main(CassandraDaemon.jav
a:504)

我可以改变什么来运行它?

【问题讨论】:

    标签: cassandra-2.0


    【解决方案1】:

    我的 cassandra v2.0.4 集群运行单个节点时遇到了类似问题。

    检查您的 cassandra.yaml 并确保您的“listen_address”和“seeds”值匹配,但种子值需要用引号引起来。

    【讨论】:

    • 如果您在向集群添加新节点时看到这一点,除了这些之外,您可能还想检查新添加节点上的集群名称是否与其他机器相同集群。
    • 除了listen_address,在种子中我还得放置broadcast_address,如:- seeds: "1.2.3.4,1.2.3.5"
    • 我认为引号不需要“围绕它”。从我的集群上可以看出,种子在没有它们的情况下工作......
    • 这个答案令人困惑,对于大多数搜索这个问题的人来说不是很有帮助,他们试图将一个集群而不是一个节点放在一起。在那种情况下,这些都是一样的。
    • @oneirois 这个答案也对我有帮助,在集群完全重启后启动 first 节点时。 (不要在家里尝试)。
    【解决方案2】:

    如果您的私有 IP 地址与公共 IP 地址不同(例如在 AWS 上),您可能会遇到此问题。例如,当它显示为“55.70.33.10”时,主机认为它是“172.31.0.2”。

    这个问题的解决方法是:

    listen_address: 172.31.0.2
    broadcast_address: 55.70.33.10
    

    【讨论】:

      【解决方案3】:

      cassandra.yaml

      1. 确保您的 cluster_name 条目在集群中的所有节点上匹配 (如果您更改了集群名称,您可能需要删除您的存储)

      2. 验证所有节点可以互相ping通

      3. broadcast_rpc_addresslisten_address 应设置为本地 IP (不是本地主机或127.0.0.1

      4. 种子应指向种子的 IP 地址

      【讨论】:

        【解决方案4】:

        如果您在 AWS 上并使用 Ec2MultiRegionSnitch,则需要将种子设置为公共 IP 地址而不是私有 IP。

        【讨论】:

          【解决方案5】:

          我在 Ubuntu 16.04 上遇到了同样的问题。我不确定哪些更改使它起作用,其中XXX.XXX.XXX.XXX 是您面向公众的 IP 地址,下面是来自cassandra.yaml 的选择

          seed_provider:
              # Addresses of hosts that are deemed contact points. 
              # Cassandra nodes use this list of hosts to find each other and learn
              # the topology of the ring.  You must change this if you are running
              # multiple nodes!
              - class_name: org.apache.cassandra.locator.SimpleSeedProvider
                parameters:
                    # seeds is actually a comma-delimited list of addresses.
                    # Ex: "<ip1>,<ip2>,<ip3>"
                    - seeds: "XXX.XXX.XXX.XXX"
          
          
          listen_address: XXX.XXX.XXX.XXX
          broadcast_address: XXX.XXX.XXX.XXX
          broadcast_rpc_address: XXX.XXX.XXX.XXX
          listen_on_broadcast_address: true
          start_rpc: true
          rpc_address: XXX.XXX.XXX.XXX
          

          由于某种原因,我还需要重新启动我的虚拟机。 ¯_(ツ)_/¯

          【讨论】:

            【解决方案6】:

            为了在 RHEL 上快速设置单节点,我执行了以下操作: 获取有关您的网络接口设置的信息:

            # /sbin/ifconfig -a
            

            它将列出接口和它们所连接的 IP 地址。 通常它会显示一个“以太网”接口和一个“本地环回”。 获取关联的 IP 地址。

            然后编辑conf/cassandra.yaml:

            rpc_address: [Local Loopback address]
            broadcast_rpc_address: [Ethernet address]
            listen_address: [Local Loopback address]
            broadcast_address: [Ethernet address]
            listen_on_broadcast_address: true
            seed_provider:
                - class_name: org.apache.cassandra.locator.SimpleSeedProvider
                  parameters:
                      - seeds: "[Ethernet address]"
            

            然后,在 Linux 防火墙上打开正确的端口,即 9042、7000 和 7001。有关在 Linux 上打开端口的更多信息,请点击此处: http://ask.xmodulo.com/open-port-firewall-centos-rhel.html

            【讨论】:

              【解决方案7】:

              在 cassandra.yaml 中,我将种子从域名更新为 IP 地址。并且有效。

              【讨论】:

                【解决方案8】:

                发生在我身上是因为在我的配置中指定了“initial_token”设置(我认为是因为我刚刚从另一个集群成员复制到配置文件)。清除数据目录,注释掉设置并重新启动节点后,对我来说效果很好。

                【讨论】:

                  【解决方案9】:

                  我今天遇到了这个错误...

                  除了时间问题,我找不到任何错误原因。

                  我重启了很多次,过了一会儿它就卡住了。看起来他们希望在 gossip 频道上进行双向通信,如果它发生得不够快(对我来说这看起来时间很短),那么他们就会掉线并产生错误。

                  就我而言,我刚刚升级了我的软件并重新启动了计算机。所以这显然不是计算机之间的连接问题(我有防火墙和 SSL,使事情复杂化)并且节点之前连接过......所以我从 datastax 找到的一个条目并不适用......

                  https://support.datastax.com/hc/en-us/articles/209691483-Bootstap-fails-with-Unable-to-gossip-with-any-seeds-yet-new-node-can-connect-to-seed-nodes

                  【讨论】:

                    【解决方案10】:

                    我遇到了同样的错误。可以有不止一种解决方案。希望我的错误是你所做的。

                    我的 localhost IP 指向某个域名(我这样做是为了让我的 Spring Boot 应用程序的服务器上下文是某个域名,例如 www.example.com:8080 而不是 localhost:8080,并且我的主机中有以下条目Windows 系统上的文件)。

                    127.0.0.1 www.example.com
                    

                    虽然我的 cassandra 批处理文件正在寻找它没有找到的 localhost。所以,我在我的主机文件中也为 localhost 做了另一个条目:

                    127.0.0.1  localhost
                    
                    127.0.0.1  www.example.com
                    

                    添加后,我打开新的命令提示符,从 cassandra bin 目录运行cassandra batch,然后它就可以工作了。

                    【讨论】:

                      【解决方案11】:

                      禁用防火墙和 SELINUX,然后重试

                      【讨论】:

                      • Windows 机器上的 SELinux?
                      【解决方案12】:

                      在我们的例子中,启用了 ssl,并且 cassandra.yaml 配置看起来像上面的 cmets 一样好。然后我们通过在 cassandra-env.sh -Djavax.net.debug=ssl:handshake

                      中添加以下 jvm 参数来启用 ssl 调试

                      再次启动节点后,我们在 cassandra 日志文件中注意到以下内容

                      MessagingService-Outgoing-geo2_host/xx.xx.xx.xx,出现异常 等待关闭 javax.net.ssl.SSLHandshakeException:收到致命错误 警报:certificate_unknown

                      在进一步调查 ssl 调试日志后,我们得知证书无效。修复此 ssl 问题后,节点能够加入集群。

                      【讨论】:

                      • 证书的确切问题是什么?我也面临同样的问题。
                      • 我的证书有效期是未来
                      【解决方案13】:

                      感谢 elvingt

                      他的回答只是提醒我,我需要验证所有节点都需要能够相互交谈。
                      https://support.datastax.com/hc/en-us/articles/209691483-Bootstap-fails-with-Unable-to-gossip-with-any-seeds-yet-new-node-can-connect-to-seed-nodes

                      八卦通信必须是双向的。

                      要验证使用此命令,您需要从 BOTH SIDE

                      进行测试

                      nc -vz {your_node_ip} 7000

                      然后我记得我昨晚打开了我的 ubuntu 防火墙。我打开它

                      sudo ufw 允许 7000/tcp

                      它现在正在工作

                      【讨论】:

                        【解决方案14】:

                        在启动/引导过程中出错

                        不能用任何种子八卦

                        表示 broadcast_address 存在一些问题。 broadcast_address 负责与其他节点通信,而不是与客户端通信。

                        此地址必须在种子节点中设置(种子节点必须设置),如果您使用云虚拟机,您可能有不同的 IP(公共和私有),因此建议使用您的私有 IP 作为广播地址,这将节省您的 n/ w 也有成本。

                        # Address to broadcast to other Cassandra nodes
                        # Leaving this blank will set it to the same value as listen_address
                        broadcast_address: 10.11.xx.xxx
                        

                        在我的场景中,我使用的是 IBM,一旦我在种子节点中设置了广播地址,问题就得到了解决。

                        请确保您先启动种子节点,然后再启动其他节点,此顺序是强制性的。

                        【讨论】:

                          【解决方案15】:

                          cassandra.yamllisten_address 值从 localhost 更改为 domainName 解决了我的问题

                          【讨论】:

                            【解决方案16】:

                            我遇到了同样的问题,我检查了端口,使用了 tcpdump、netcat 来测试连接,最后涉及到 internode_encryption 上的过期 SSL 证书。我修改了 internode_encryption 以使其“无”,重新启动所有节点并且它工作。 在所有邻居节点都关闭之前。节点修复命令失败: “没有得到所有端点的肯定答复” P.S 不要长时间将 internode_encryption 保留为 none,只需重新生成证书并重新启用即可。

                            【讨论】:

                              猜你喜欢
                              • 2015-12-22
                              • 2014-08-19
                              • 2015-02-07
                              • 1970-01-01
                              • 2016-05-18
                              • 2017-01-27
                              • 2014-11-28
                              • 1970-01-01
                              • 2018-07-20
                              相关资源
                              最近更新 更多