2013-07-12 3 views
3

연락처 노드가 죽었을 때 카산드라가 어떻게 작동합니까? Cassandra는 "n"노드의 링 구조를 가지고 있습니다. 클라이언트가 첫 번째 노드에 액세스하려고하지만 그것이 죽었 으면 말입니다. 첫 번째 노드는 Java 클라이언트에 지정됩니다. 오류 처리를 이해할 수 없습니다. 어느 누구도 나를 도울 수 있습니까?카산드라 클러스터링 실패 처리

답변

1

그것은 따라 달라집니다 클라이언트에서는 다른 클라이언트가이 문제를 처리하기 위해 여러 가지 작업을 수행하지만 대부분의 드라이버에서는 여러 개의 접점을 제공 할 수 있습니다.

Astyanax은 토큰 검색을 사용하여 클러스터의 다양한 노드를 추적합니다. Full docs here.

호스트 공급자는 연결 풀을 동적 호스트 레지스트리에 연결합니다. 연결 풀은이 공급 업체를 현재 호스트 목록에 대해 자주 폴링하고 새 호스트 나 제거 된 호스트를 고려하여 내부 호스트 연결 풀을 업데이트합니다.

이것은 당신이 당신의 컨텍스트를 설정할 때 중 구성됩니다

AstyanaxContext<Keyspace> context = new AstyanaxContext.Builder() 
    ... 
    .withAstyanaxConfiguration(new AstyanaxConfigurationImpl()  
     .setDiscoveryType(NodeDiscoveryType.RING_DESCRIBE) 
     .setConnectionPoolType(ConnectionPoolType.TOKEN_AWARE) 
    ) 
... 
context.start(); 

DataStax 자바 드라이버가 아니라 당신이 여러 접점을 제공 한으로 실패를 처리합니다. 3 개의 노드 중 하나가 살아있는 한 질의 할 수있는 것보다 복제 및 복제 계수가 3 인 노드가 3 개 (모든 데이터가 모든 노드에 있습니다.)합니다.

Cluster cluster = Cluster.builder() 
         .addContactPoint("127.0.0.1") 
         .addContactPoint("127.0.0.2") 
         .addContactPoint("127.0.0.3") 
         .build(); 
Session session = cluster.connect(); 
+0

감사합니다. 따라서 클러스터링을 사용하는 경우 분명히 연결 풀을 사용하여 오류를 관리해야합니다. 나 라이트 야? – Veera

+0

@ user2560319 나는 아직도 당신이 사용하고있는 클라이언트를 모른다. 그리고 Astyanax와 DataStax 드라이버는 연결 풀링을 처리한다. 헥터는 오래된 운전자이기 때문에 나는 그것을 피할 것이다. DataStax의 드라이버는 실패를 처리하는 데 가장 좋을 것이므로 Thrift 프로토콜을 사용해야하는 경우가 아니라면 권장 할 것입니다. –

+0

죄송합니다. Hector Client를 사용하고 있습니다. 예를 들어, 실패를 처리하는 데 가장 적합한 드라이버를 작성하고 지원 기능이있는 기반 시스템을 만들려고한다면? – Veera

2

노드가 하나만 있거나 하나의 노드 만 지정하고 해당 노드가 작동 중지 된 경우 클라이언트는 연결할 수 없습니다 (분명히). 하지만 일반적으로 Hector와 같은 클라이언트 라이브러리는 노드 그룹을 지정하고 연결 풀을 유지 관리 할 수있게 해줍니다.

헥터 documentation 좀 더 세부 사항에 간다, 그러나 여러 노드를 지정하는 가장 간단한 방법은 클러스터 생성 할 때 CassandraHostConfigurator에있는 호스트의 쉼표로 구분 된 목록을 통과하는 것입니다 :

String hosts = "node1.example.com:9160, node2.example.com:9160, node3.example.com:9160"; 
Cluster cluster = HFactory.getOrCreateCluster(CLUSTER_NAME, new CassandraHostConfigurator(hosts)); 
+0

Hector Client를 사용하여 연결 풀을 만들 수 있습니까? Hector를 사용하는 연결 풀에 대한 정보를 제공하는 자습서가 있습니까? – Veera