2013-05-28 35 views
22

Trong khi kết nối với khách hàng sử dụng Cassandra lái xe java cho Cannsandra bởi DataStax, nó được ném lỗi sau ..Lỗi khi kết nối với Cassandra sử dụng Java driver cho Apache Cassandra 1,0 từ com.example.cassandra

Exception in thread " chính" com.datastax.driver.core.exceptions.NoHostAvailableException: Tất cả máy chủ (s) đã cố gắng cho truy vấn thất bại (thử: [/127.0.0.1])

Xin gợi ý cho ...

Cảm ơn!

mã java của tôi là như thế này:

package com.example.cassandra; 

import com.datastax.driver.core.Cluster; 
import com.datastax.driver.core.Host; 
import com.datastax.driver.core.Metadata; 

public class SimpleClient { 

private Cluster cluster; 

public void connect(String node){ 

    cluster = Cluster.builder().addContactPoint(node).build(); 
    Metadata metadata = cluster.getMetadata(); 
    System.out.println(metadata.getClusterName()); 
} 


public void close() 
{ 
cluster.shutdown(); 
} 

public static void main(String args[]) { 

SimpleClient client = new SimpleClient(); 
client.connect("127.0.0.1"); 
client.close(); 
} 
+1

Chỉ để thêm rõ ràng hơn: Tôi chắc chắn rằng tôi được kết nối với cassandra. Nó vẫn hiển thị lỗi này –

Trả lời

4

Đến thư mục conf Apache Cassandra của bạn và cho phép giao thức nhị phân

Cassandra giao thức nhị phân Người tài xế Java sử dụng giao thức nhị phân đã được giới thiệu trong Cassandra 1.2. Nó chỉ hoạt động với một phiên bản của Cassandra lớn hơn hoặc bằng 1.2. Hơn nữa, máy chủ giao thức nhị phân không được bắt đầu với tệp cấu hình mặc định trong Cassandr a 1.2. Bạn phải chỉnh sửa tệp cassandra.yaml cho mỗi nút:

start_native_transport: true 

Sau đó khởi động lại nút.

10

Trong trường hợp của tôi, tôi gặp sự cố này khi tôi sử dụng cổng RPC mặc định là 9160 trong khi kết nối. Người ta có thể tìm thấy một cổng khác nhau cho CQL trong cassandra.yaml -

start_native_transport: true 
# port for the CQL native transport to listen for clients on 
native_transport_port: 9042 

Khi tôi đã thay đổi mã để sử dụng cổng 9042 là nỗ lực kết nối thành công -

public BinaryDriverTest(String cassandraHost, int cassandraPort, String keyspaceName) { 
    m_cassandraHost = cassandraHost; 
    m_cassandraPort = cassandraPort; 
    m_keyspaceName = keyspaceName; 

    LOG.info("Connecting to {}:{}...", cassandraHost, cassandraPort); 
    cluster = Cluster.builder().withPort(m_cassandraPort).addContactPoint(cassandraHost).build(); 
    session = cluster.connect(m_keyspaceName); 
    LOG.info("Connected."); 
} 

public static void main(String[] args) { 
    BinaryDriverTest bdt = new BinaryDriverTest("127.0.0.1", 9042, "Tutorial"); 
} 
2

Trong trường hợp của tôi đây là một vấn đề cảng, mà tôi quên để cập nhật

cổng

Cũ RPC là 9160
cổng nhị phân mới là 9042

5

Tôi có vấn đề này và nó đã được sắp xếp bằng cách thiết lập ReadTimeout trong SocketOptions:

Cluster cluster = Cluster.builder().addContactPoint("localhost").build(); 
cluster.getConfiguration().getSocketOptions().setReadTimeoutMillis(HIGHER_TIMEOUT); 
3

Chỉ cần đăng này đối với những người có thể có cùng một vấn đề như tôi đã làm, khi tôi nhận được thông báo lỗi. Hóa ra cây phụ thuộc phức tạp của tôi đã mang về một phiên bản cũ của com.google.collections, đã phá vỡ trình điều khiển CQL. Loại bỏ sự phụ thuộc này và dựa hoàn toàn vào ổi đã giải quyết được vấn đề của tôi.

+1

Cảm ơn gợi ý của bạn, nó đã giải quyết được vấn đề của tôi – Harsha

3

Tôi đã gặp sự cố tương tự khi thử nghiệm một cụm mới với một nút.

Sau khi loại bỏ điều này từ những người xây dựng Cụm tôi đã có thể kết nối:

.withLoadBalancingPolicy(new DCAwareRoundRobinPolicy("US_EAST")) 

Đó là khả năng kết nối.

4

Tôi cũng gặp vấn đề tương tự. Tôi đã cài đặt Cassandra trong một máy tính Linux riêng biệt và cố gắng kết nối thông qua Window pc. Tôi không được phép tạo kết nối.

Nhưng khi chúng tôi chỉnh sửa cassandra.YAML, thiết lập linux địa chỉ pc ip của tôi để rpc_address và khởi động lại, nó cho phép tôi để kết nối thành công,

# The address or interface to bind the Thrift RPC service and native transport 
# server to. 
# 
# Set rpc_address OR rpc_interface, not both. Interfaces must correspond 
# to a single address, IP aliasing is not supported. 
# 
# Leaving rpc_address blank has the same effect as on listen_address 
# (i.e. it will be based on the configured hostname of the node). 
# 
# Note that unlike listen_address, you can specify 0.0.0.0, but you must also 
# set broadcast_rpc_address to a value other than 0.0.0.0. 
#rpc_address: localhost 
rpc_address: 192.168.0.10 
2

tôi cũng gặp phải vấn đề này, và nó được gây ra bởi một lỗi đơn giản trong báo cáo rằng đã được gửi .

session.prepare(null); 

Rõ ràng, thông báo lỗi là gây hiểu nhầm.

1

Sửa

/etc/cassandra/cassandra.yaml 

và thay đổi

rpc_address-0.0.0.0, broadcast_rpc_address và listen_address đến địa chỉ IP của cluster.

0

Kiểm tra dưới điểm:

i) máy chủ kiểm tra ip

ii) kiểm tra nghe cổng

iii) dữ liệu-stack phụ thuộc khách hàng phải phù hợp với phiên bản máy chủ.

Về file YAML, phiên bản mới nhất có dưới đây tính được kích hoạt:

start_native_transport: true 
    native_transport_port: 9042 
0

Giả sử bạn có cấu hình mặc định tại chỗ, kiểm tra khả năng tương thích phiên bản trình điều khiển. Không phải tất cả các phiên bản trình điều khiển đều tương thích với tất cả các phiên bản của Cassandra, mặc dù chúng yêu cầu khả năng tương thích ngược. Vui lòng xem liên kết dưới đây.

http://docs.datastax.com/en/developer/java-driver/3.1/manual/native_protocol/

Tôi chạy vào một vấn đề tương tự & thay đổi phiên bản driver giải quyết vấn đề của tôi.

Lưu ý: Hy vọng rằng, bạn đang sử dụng Maven (hoặc một cái gì đó tương tự) để giải quyết các phụ thuộc. Nếu không, bạn có thể phải tải xuống rất nhiều phụ thuộc cho các phiên bản cao hơn của trình điều khiển.

Các vấn đề liên quan