我刚刚开始使用Cassandra(datastax),版本2.1.3和cqlsh版本5.0.1。
Cassandra启动良好,集群即时运行。
Cqlsh无法正常工作(在任何节点上)并发出以下错误:
连接错误:('无法连接到任何服务器',{'127.0.0.1':错误(111,“尝试连接到[('127.0.0.1',9042)]。上次错误:连接被拒绝”)})
我尝试用主机自己的ip,其他主机ip,不同的端口启动cqlsh但结果仍然相同 - 始终连接被拒绝。
尝试将rpc_address
更改为指向节点的IP而不是0.0.0.0,并在连接到cqlsh时指定IP,就好像IP是10.0.1.34并且rpc_port
保留为默认值9160,那么以下内容应该有效:
cqlsh 10.0.1.34 9160
要么:
cqlsh 10.0.1.34
还要确保在/etc/cassandra/cassandra.yaml配置文件中将start_rpc设置为true。
我试图在网络驱动器上运行它。所以我在cqlsh中增加了client_timeout
并且它有效。
确保您还将“种子”设置为您在“listen_address”中提供的地址
我遇到了与Cassandra 3.11.0相同的问题,任何时候我改变了rpc的地址或者监听地址cqlsh都行不通。我不得不将相同的本地ip添加到seeds
经过多次反复试验,我的工作cassandra.yaml最终结果如下:
class-name: org.apache.cassandra.locator.SimpleSeedProvider
parameters:
-seeds: "192.168.0.30"
listen_adress: 192.168.0.30
rpc_address: 192.168.0.30
尝试telnet到给定的地址。就我而言,有一个阻止我的防火墙。
当我安装Cassandra 3.11.1时,我遇到了这个问题。我检查了/var/log/cassandra/cassandra.log并发现此错误在启动期间遇到异常....这是一个错误并已报告。原帖子链接https://issues.apache.org/jira/browse/CASSANDRA-14173。
解决方案是将Cassandra降级到3.0
卷曲-O https://www.apache.org/dist/cassandra/redhat/30x/cassandra-3.0.15-1.noarch.rpm
要么
wget https://www.apache.org/dist/cassandra/redhat/30x/cassandra-3.0.15-1.noarch.rpm
cassandra(pid 2322)正在运行......
进入这个问题,[cqlsh 5.0.1 | Cassandra 3.11.4 | CQL spec 3.4.4 | Native protocol v4]
必须在start_native_transport: true
文件中设置cassandra.yaml
。
为了验证,
tailf /var/log/cassandra/system.log
文件cassandra.yaml
sudo service cassandra restart
在日志文件中显示。
INFO [main] 2019-03-15 19:53:06,156 Server.java:156 - Starting listening for CQL clients on /10.139.45.34:9042 (unencrypted)...
您需要在要连接的节点上编辑cassandra.yaml
,并为rpc_address
和listen_address
设置节点ip地址,然后重新启动Cassandra。
rpc_address
是Cassandra监听客户端调用的地址。
listen_address
是Cassandra监听其他Cassandra节点的地址。
这是因为cassandra中的一些预配置。为了解决这个问题,cassandra-env.sh
文件中有以下注释行:
#add this if you’re having trouble connecting: #JVM_OPTS="$JVM_OPTS -Djava.rmi.server.hostname=<public name>
你必须开始修复错误。
打开终端并使用以下简单步骤开始修复:
步骤1
使用
sudo nano /etc/cassandra/cassandra-env.sh
此命令和搜索JVM_OPTS="$JVM_OPTS -Djava.rmi.server.hostname=
通过简单地删除行开头附加的#
取消注释该行。
注意:如果您从未打开此文件来修复此错误,那么您将找到JVM_OPTS="$JVM_OPTS -Djava.rmi.server.hostname=<public name>
步骤2现在用<public name>
替换127.0.0.1
步骤3保存文件并使用systemctl restart cassandra.service
重新启动cassandra(如果您没有运行服务器)。或者使用systemctl start cassandra.service
启动cassandra(如果服务器未运行)。
步骤4使用sudo service cassandra status
或systemctl status cassandra.service
检查状态。
注意:检查系统监视器是否cassandra是否在那里运行。
现在试试cqlsh
。它会工作的。
注意:nano
是编辑器,您可以使用其他您喜欢的编辑器。
如果在/ var / log / cassandra中检查cassandra的system.log文件,您将看到出现此问题,因为rpc服务器尚未启动。
默认情况下,cassandra.yaml文件中的start_rpc设置为false。将其设置为start_rpc:true然后再试一次。
至少在Cassandra 3.0中,start_rpc默认设置为true。 https://docs.datastax.com/en/cassandra/3.0/cassandra/configuration/configCassandra_yaml.html
最近从Archocinux上的Cassandra 3.0降级到Cassandra 2.2后出现了同样的问题。
与上述解决方案不同,我的问题不在.cassandra中,但3.0版将其配置保留在/ var / lib / cassandra目录中。
以下命令解决了我的问题:
sudo rm -R /var/lib/cassandra
sudo rm -R /var/log/cassandra
sudo rm -R /usr/share/cassandra
然后我安装了cassandra,一切都工作了:)
在/etc/cassandra/cassandra.yaml中查找native_transport_port默认值为9842。
native_transport_port: 9842
对于使用cqlsh连接到localhost,此端口适用于我。
cqlsh 127.0.0.1 9842
如果服务器正在运行,最好检查cassandra日志。我得到完全相同的消息,无法做任何事情,然后我发现日志中有错误,系统实际上无法正常工作。
傻,我知道,但可能会发生......
尝试将native_transport_protocol
改为port 9160
(如果设置为9160
以外的任何东西;它可能指向9042
)。检查您的日志,看看cassandra正在侦听CQL客户端的端口?
事实证明,该服务根本没有运行。检查
service cassandra status
如果你得到了与我相同的错误或其他类型的错误,那么搞乱IP地址根本无法解决你的问题。
我得到的错误:
cassandra dead but pid file exists
编辑:这是我的问题的解决方案:https://stackoverflow.com/a/46743119/3881406