1

我正在努力使用“ccm start”命令启动 Cassandra 集群。

我创建了一个名为 Gdelt 的集群,有 3 个节点,如下所示 ccm status

Cluster: 'Gdelt' 
-------------------
node1: DOWN (Not initialized)
node3: DOWN (Not initialized)
node2: DOWN (Not initialized)
node4: DOWN (Not initialized)

ccm start引发以下错误:

Traceback (most recent call last):
  File "/usr/local/bin/ccm", line 112, in <module>
    cmd.run()
  File "/usr/local/lib/python2.7/dist-packages/ccmlib/cmds/cluster_cmds.py", line 510, in run
    allow_root=self.options.allow_root) is None:
  File "/usr/local/lib/python2.7/dist-packages/ccmlib/cluster.py", line 390, in start
    common.assert_socket_available(itf)
  File "/usr/local/lib/python2.7/dist-packages/ccmlib/common.py", line 521, in assert_socket_available
    raise UnavailableSocketError("Inet address %s:%s is not available: %s; a cluster may already be running or you may need to add the loopback alias" % (addr, port, msg))
ccmlib.common.UnavailableSocketError: Inet address 127.0.0.1:9042 is not available: [Errno 98] Address already in use; a cluster may already be running or you may need to add the loopback alias
Traceback (most recent call last):
  File "/usr/local/bin/ccm", line 112, in <module>
    cmd.run()
  File "/usr/local/lib/python2.7/dist-packages/ccmlib/cmds/cluster_cmds.py", line 510, in run
    allow_root=self.options.allow_root) is None:
  File "/usr/local/lib/python2.7/dist-packages/ccmlib/cluster.py", line 390, in start
    common.assert_socket_available(itf)
  File "/usr/local/lib/python2.7/dist-packages/ccmlib/common.py", line 521, in assert_socket_available
    raise UnavailableSocketError("Inet address %s:%s is not available: %s; a cluster may already be running or you may need to add the loopback alias" % (addr, port, msg))
ccmlib.common.UnavailableSocketError: Inet address 127.0.0.1:9042 is not available: [Errno 98] Address already in use; a cluster may already be running or you may need to add the loopback alias

我尝试使用以下 bash 脚本创建环回别名并执行它:

#!/bin/bash

sudo ifconfig lo0 alias 127.0.0.2 up
sudo ifconfig lo0 alias 127.0.0.3 up
sudo ifconfig lo0 alias 127.0.0.4 up
sudo ifconfig lo0 alias 127.0.0.5 up
sudo ifconfig lo0 alias 127.0.0.6 up

这会在执行 bash 脚本时引发以下错误:

alias: Host name lookup failure
ifconfig: `--help' gives usage information.

我已经在命令行中直接尝试了 ifconfig,如下所示:

sudo ifconfig lo:0 127.0.0.1 up

这给出了以下错误:

SIOCSIFADDR: File exists
SIOCSIFFLAGS: Cannot assign requested address
SIOCSIFFLAGS: Cannot assign requested address

这清楚吗,如果没有请告诉我,以便我澄清更多

我最终不知道如何在 Cassandra 中运行我的集群。非常感谢您的帮助。哈比卜

4

2 回答 2

1

所以 Cassandra 用户默认使用端口 9042。但是,正如您的输出所示,当您尝试启动节点时,似乎已经有一些东西正在使用该端口。从以下消息中可以看出这一点:

Inet address 127.0.0.1:9042 is not available: [Errno 98] Address already in use

在这种情况下,您有几个选择:

  1. 使用端口 9042 找到进程并杀死它(假设它不重要)
  2. 使用不同的端口启动节点

对于 (1),您可以使用:

netstat -nap | grep 9042 | grep LISTEN

您可能需要成为“root”用户才能找到该进程,因为 netstat 只会显示您当前用户“拥有”的内容。如果您是 root,您将看到所有进程。

对于 (2),您可以简单地更改 cassandra.yaml 文件 (native_transport_port) 中的端口。您还应该将“listen_address”参数和“native_transport_broadcast_address”更改为您的主机 IP 地址,这样您就不会使用环回地址(您可以使用“hostname -i”来查找本地主机的 IP 地址) - 并设置如果您希望它在所有接口上侦听,请将“native_transport_address”设置为“0.0.0.0”。这就是我们所做的。希望这将使您的节点启动并运行。

于 2020-01-13T13:36:17.237 回答
0

Cassandra 为不同的进程使用以下端口:

   thrift=('127.0.0.1', 9160)
   binary=('127.0.0.1', 9042)
   storage=('127.0.0.1', 7000)

确保所有这些端口都没有用于集群的任何 IP。

于 2020-07-29T08:43:40.533 回答