如何通过192.168.x.x ip地址连接到cassandra集群?

时间:2014-11-13 08:35:17

标签: java windows-7 cassandra ip datastax-java-driver

这是一个用于测试连接到cassandra的简单程序:

package testJava.db.cassandra;

import com.datastax.driver.core.Cluster;
import com.datastax.driver.core.Session;

public class ConnectionTester {
    public static void main (String[] args) {
        Session session = null;
        try {
            Cluster cluster = Cluster.builder().addContactPoint("192.168.1.2").build();
            session = cluster.connect("myspace");
            System.out.println(session.getState());
        } catch (Exception ex) {
            ex.printStackTrace();
        } finally {
            if (session != null) {
                session.close();
            }
        }
    }
}

当我打电话时,我得到:

com.datastax.driver.core.exceptions.NoHostAvailableException: All host(s) tried for query failed (tried: /192.168.1.2:9042 (com.datastax.driver.core.TransportException: [/192.168.1.2:9042] Cannot connect))
    at com.datastax.driver.core.ControlConnection.reconnectInternal(ControlConnection.java:199)
    at com.datastax.driver.core.ControlConnection.connect(ControlConnection.java:80)
    at com.datastax.driver.core.Cluster$Manager.init(Cluster.java:1199)
    at com.datastax.driver.core.Cluster.init(Cluster.java:154)
    at com.datastax.driver.core.Cluster.connect(Cluster.java:230)
    at com.datastax.driver.core.Cluster.connect(Cluster.java:263)
    at testJava.db.cassandra.ConnectionTester.main(ConnectionTester.java:11)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:134)

当我将localhost更改为192.168.1.2时,每件事情都有效。 另外ipconfig windows命令返回:

Ethernet adapter Local Area Connection:

   Description . . . . . . . . . . . . . : Realtek PCIe GBE Family Controller
   Physical Address. . . . . . . . . . . : 40-61-86-7C-4B-0F
   DHCP Enabled. . . . . . . . . . . . . : Yes
   Autoconfiguration Enabled . . . . . . : Yes
   IPv4-address. . . . . . . . . . . . . : 192.168.1.2(Preffered)
   Subnet Mask . . . . . . . . . . . . . : 255.255.255.0
   Default gateway . . . . . . . . . . . : 192.168.1.1
   DHCP-Server . . . . . . . . . . . . . : 192.168.1.1
   DNS-Servers . . . . . . . . . . . . . : 192.168.1.1

很明显,我的IP地址是192.168.1.2

重要

是的,我可以与localhost127.0.0.1保持联系,但我知道为什么我上面的例子不起作用。此外,当我指定192.168.1.2地址并在虚拟机上运行应用程序时,它也不起作用,即使ping命令有效。

1 个答案:

答案 0 :(得分:2)

在cassandra.yaml中配置您的rpc_address,指向客户端用于连接Cassandra的地址。

这些是cassandra.yaml中可配置的3个地址。

监听地址 - 这是其他Cassandra节点将用于与此节点通信的IP地址。如果您在云端,那么内部IP地址就可以提高性能。

RPC地址 - 这是您的客户端连接到的地址,可能是您要配置为可从客户端计算机访问的IP的地址。

广播地址 - 如果您使用多个数据中心或AWS区域,则并非所有节点都可以通过内部IP相互访问。您可以为不同数据中心中的节点指定外部IP地址,但仍可以相互通信。在许多情况下,您根本不需要此设置,它将默认为您的收听地址。