无法从不同主机连接到 cassandra 节点
Can't connect to cassandra node from different host
我在一台机器上有一个 cassandra 节点。当我从同一台机器访问 cqlsh 时,它工作正常。
但是当我尝试使用“192.x.x.x”从另一台机器连接到它的 cqlsh 时,我收到一条错误消息
连接错误:('Unable to connect to any servers', {'192.x.x.x': error(111, "Tried connecting to [('192.x.x.x', 9042)]. Last error: Connection refused")})
这是什么原因?我该如何解决?
可能远程 Cassandra 节点未绑定到外部网络接口,而是绑定到环回接口(这是默认配置)。您可以通过在远程机器上使用 "telnet thecassandrahost 9042" 来确保这一点,它不应该工作。
为了将 Cassandra 绑定到外部网络接口,您需要编辑 cassandra.yaml 配置文件并将属性“listen_address
”和“rpc_address
”设置为您的远程 IP或“0.0.0.0”(并非所有版本的 Cassandra 都支持通配符地址)。
还要检查防火墙是否已正确配置或禁用(sudo service iptables stop)。
设置此文件所在的配置参数。可能 /etc/cassandra/cassandra.yaml
.
cassandra.yaml
listen_address: 192.x.x.x
rpc_address: 192.x.x.x
然后,重启服务。
1.Update:./conf/cassandra.yaml
rpc_address: 0.0.0.0 ("0.0.0.0" allow anywhere IP,but you can appoint an IP)
\# broadcast_rpc_address: 1.2.3.4 (Delete comment if rpc_address=0.0.0.0)
2.restart
./bin/cassandra
案例:我在使用java访问cassandra时遇到无法远程访问cassandra的问题
我编辑 cassandra.yaml 设置 listen_address 和 roc_address 作为 ip 地址解决问题。
即使在我设置了 RPC_ADDRESS
之后,它也对我不起作用,直到我设置了 -e CASSANDRA_START_RPC=true
选项。
在我的例子中,它总是设置为 false
。我已经用 Ubuntu、Docker 和 Cassandra 试过了。
在 cassandra.yaml 文件中设置以下配置参数(对于 CentOS,它位于 /etc/cassandra/default.conf 中)
rpc_address: 0.0.0.0
验证以下值是否与以下相同(通常它们是默认值)
start_native_transport:真
native_transport_port:9042
CentOS 的最后一步,更新防火墙配置并允许端口 9042 通过传入连接
- 从CentOS菜单中的“系统/管理/防火墙”访问防火墙
- 在“其他端口”下添加端口
我遇到了同样的问题。我正在关注此 post 中的答案。不幸的是,我没有运气让它发挥作用。我做了一些研究。它现在有效。这是我的零钱。
环境
Ubuntu VirtualBox 上的服务器 16.04.3 LTS,
DSE 版本 5.1
安装 DSE
我正在按照此页面安装 DSE
https://docs.datastax.com/en/dse/5.1/dse-dev/datastax_enterprise/install/installGUIdse.html
- 转到/etc/dse/cassandra/cassandra.yaml
- 将 'seeds' 从 127.0.0.1 更改为 {seriver ip} exp。我的是 172.20.10.9
- listen_address
在 DSE 5.1 官方文档中说 'Never specify 0.0.0.0; it is always wrong.'
我所做的是注释掉 'listen_address' setting
- 'rpc_address' 从本地主机更改为 0.0.0.0
- 'broadcast_address' 更改为服务器 IP。我的是 172.20.10.9
- 'broadcast_rpc_address'更改服务器ip
- 重启 dse 等待几分钟,它正在改变。如果还是不行,重启机器。
这是我 15 秒后的日志。
`ubuntu08@ubuntu08:~$ 节点工具状态
nodetool:无法连接到“127.0.0.1:7199”- ConnectException:'Connection refused (Connection refused)'。
ubuntu08@ubuntu08:~$ 节点工具状态
错误:节点还没有 system_traces,可能仍在引导
ubuntu08@ubuntu08:~$ 节点工具状态
数据中心:SearchGraphAnalytics
状态=Up/Down
|/ 状态=Normal/Leaving/Joining/Moving
-- 地址加载令牌拥有主机 ID 机架
UN 10.0.0.44 278.51 KiB 32 ? 19db0016-df63-4470-9921-f3b5fe4e9341 机架 1
`
- 我可以通过 运行 'cqlsh 172.20.10.9' 从本地或其他机器访问。
这是 Cassandra 的另一个文档 https://docs.datastax.com/en/developer/java-driver/3.3/manual/address_resolution/
我遇到了同样的问题,不允许我收听 0.0.0.0,而 Cassandra 运行正在具有桥接网络的 VM 上运行。我找到的解决方案是让 VM SSH 连接到自身,将桥接网络接口上的端口转发到本地主机:
ssh -L 192.168.x.x:9042:127.0.0.1:9042 myvmuser@localhost
由于桥接网卡的 IP 会发生变化(取决于它是哪台开发人员机器 运行),ssh 命令必须首先获取 IP,此片段适用于此:
ifconfig | grep -Eo 'inet (addr:)?([0-9]*\.){3}[0-9]*' | grep -Eo '([0-9]*\.){3}[0-9]*' | grep -v '127.0.0.1'
此外,因为这应该在启动时发生,所以您必须为虚拟机用户创建一个 SSH 密钥并通过 .ssh/authorized_keys.
信任它。
我在一台机器上有一个 cassandra 节点。当我从同一台机器访问 cqlsh 时,它工作正常。
但是当我尝试使用“192.x.x.x”从另一台机器连接到它的 cqlsh 时,我收到一条错误消息
连接错误:('Unable to connect to any servers', {'192.x.x.x': error(111, "Tried connecting to [('192.x.x.x', 9042)]. Last error: Connection refused")})
这是什么原因?我该如何解决?
可能远程 Cassandra 节点未绑定到外部网络接口,而是绑定到环回接口(这是默认配置)。您可以通过在远程机器上使用 "telnet thecassandrahost 9042" 来确保这一点,它不应该工作。
为了将 Cassandra 绑定到外部网络接口,您需要编辑 cassandra.yaml 配置文件并将属性“listen_address
”和“rpc_address
”设置为您的远程 IP或“0.0.0.0”(并非所有版本的 Cassandra 都支持通配符地址)。
还要检查防火墙是否已正确配置或禁用(sudo service iptables stop)。
设置此文件所在的配置参数。可能 /etc/cassandra/cassandra.yaml
.
cassandra.yaml
listen_address: 192.x.x.x
rpc_address: 192.x.x.x
然后,重启服务。
1.Update:./conf/cassandra.yaml
rpc_address: 0.0.0.0 ("0.0.0.0" allow anywhere IP,but you can appoint an IP)
\# broadcast_rpc_address: 1.2.3.4 (Delete comment if rpc_address=0.0.0.0)
2.restart
./bin/cassandra
案例:我在使用java访问cassandra时遇到无法远程访问cassandra的问题
我编辑 cassandra.yaml 设置 listen_address 和 roc_address 作为 ip 地址解决问题。
即使在我设置了 RPC_ADDRESS
之后,它也对我不起作用,直到我设置了 -e CASSANDRA_START_RPC=true
选项。
在我的例子中,它总是设置为 false
。我已经用 Ubuntu、Docker 和 Cassandra 试过了。
在 cassandra.yaml 文件中设置以下配置参数(对于 CentOS,它位于 /etc/cassandra/default.conf 中)
rpc_address: 0.0.0.0
验证以下值是否与以下相同(通常它们是默认值)
start_native_transport:真
native_transport_port:9042
CentOS 的最后一步,更新防火墙配置并允许端口 9042 通过传入连接
- 从CentOS菜单中的“系统/管理/防火墙”访问防火墙
- 在“其他端口”下添加端口
我遇到了同样的问题。我正在关注此 post 中的答案。不幸的是,我没有运气让它发挥作用。我做了一些研究。它现在有效。这是我的零钱。
环境 Ubuntu VirtualBox 上的服务器 16.04.3 LTS, DSE 版本 5.1
安装 DSE
我正在按照此页面安装 DSE https://docs.datastax.com/en/dse/5.1/dse-dev/datastax_enterprise/install/installGUIdse.html
- 转到/etc/dse/cassandra/cassandra.yaml
- 将 'seeds' 从 127.0.0.1 更改为 {seriver ip} exp。我的是 172.20.10.9
- listen_address 在 DSE 5.1 官方文档中说 'Never specify 0.0.0.0; it is always wrong.' 我所做的是注释掉 'listen_address' setting
- 'rpc_address' 从本地主机更改为 0.0.0.0
- 'broadcast_address' 更改为服务器 IP。我的是 172.20.10.9
- 'broadcast_rpc_address'更改服务器ip
- 重启 dse 等待几分钟,它正在改变。如果还是不行,重启机器。
这是我 15 秒后的日志。 `ubuntu08@ubuntu08:~$ 节点工具状态 nodetool:无法连接到“127.0.0.1:7199”- ConnectException:'Connection refused (Connection refused)'。 ubuntu08@ubuntu08:~$ 节点工具状态
错误:节点还没有 system_traces,可能仍在引导 ubuntu08@ubuntu08:~$ 节点工具状态
数据中心:SearchGraphAnalytics
状态=Up/Down |/ 状态=Normal/Leaving/Joining/Moving -- 地址加载令牌拥有主机 ID 机架 UN 10.0.0.44 278.51 KiB 32 ? 19db0016-df63-4470-9921-f3b5fe4e9341 机架 1 `
- 我可以通过 运行 'cqlsh 172.20.10.9' 从本地或其他机器访问。
这是 Cassandra 的另一个文档 https://docs.datastax.com/en/developer/java-driver/3.3/manual/address_resolution/
我遇到了同样的问题,不允许我收听 0.0.0.0,而 Cassandra 运行正在具有桥接网络的 VM 上运行。我找到的解决方案是让 VM SSH 连接到自身,将桥接网络接口上的端口转发到本地主机:
ssh -L 192.168.x.x:9042:127.0.0.1:9042 myvmuser@localhost
由于桥接网卡的 IP 会发生变化(取决于它是哪台开发人员机器 运行),ssh 命令必须首先获取 IP,此片段适用于此:
ifconfig | grep -Eo 'inet (addr:)?([0-9]*\.){3}[0-9]*' | grep -Eo '([0-9]*\.){3}[0-9]*' | grep -v '127.0.0.1'
此外,因为这应该在启动时发生,所以您必须为虚拟机用户创建一个 SSH 密钥并通过 .ssh/authorized_keys.
信任它。