2017-12-05 15 views
0

를 호스팅하지 않는 종자 노드를 만드는 것입니다은 괜찮 내가있는 3 노드 클러스터를 가지고있는 파편 또는 proxyShard

1 S1 - 씨 노드 2 S2 - S1가있는 샤드 SRD를 (호스팅하는 노드 S1 단지 actorsystem을 만들고 여기

구성에서 시드 노드)로 S1을 가지고 S2 (호스팅 샤드의 프록시 샤드 호스트, 아무것도

을하는 노드 - 3 S3 구성에서 시드 노드)로서

클러스터를 시작할 때 (S1 먼저, S2와 S3) 그리고 S3가 샤드 SRD에 메시지를 보내려고 할 때 (proxyshar D 배우 심판), 그것은 불평 :

WARN akka.cluster.sharding.ShardRegion - Trying to register to coordinator at [Some(ActorSelection[Anchor(akka.tcp://[email protected]l:2551/), 
Path(/system/sharding/CallEntityCoordinator/singleton/coordinator)])], but no acknowledgement. Total [1] buffered messages. 

여기에 - akka-0.akka-svc.default.svc.cluster.local이 씨 노드입니다!, 왜 (시드 노드에 연락하는하지 않습니다 조각 대신에) S2 대신에?

답변

2

기본적으로 akka-cluster-sharding 샤드 및 샤드 프록시는 해당 지역이 클러스터의 모든 노드에 있다고 가정합니다. 당신은 그러나 그에 제약 조건을 적용 할 수 있습니다 - 모두 샤드 지역 및 프록시 클러스터 role을 지정할 수 있습니다, 즉 :

# HOCON config 
akka.cluster.roles = [ "sharding" ] 
akka.cluster.sharding.role = "sharding" 

또한 수동으로 지정할 수 있습니다

// shard region - current cluster node must have that role 
ClusterSharding(system).start(
    typeName = "Counter", 
    entityProps = Props[Counter], 
    settings = ClusterShardingSettings(system).withRole("sharding"), 
    extractEntityId = extractEntityId, 
    extractShardId = extractShardId) 

// shard region proxy - current cluster node doesn't need to have that role 
ClusterSharding(system).startProxy(
    typeName = "Counter", 
    role = "sharding", 
    dataCenter = Some("B"), 
    extractEntityId = extractEntityId, 
    extractShardId = extractShardId) 

을가 구성된 경우, 클러스터 샤딩은 role이 지정된 클러스터 노드에서만 샤드 영역을 찾습니다. 이 메커니즘을 사용하여 노드 목록에서 시드 노드를 제외하면 클러스터 샤딩이 접촉을 시도합니다.

+0

shardRegion이있는 노드가 shardRegionProxy가있는 노드보다 먼저 나오는지 확인해야합니까? 물론 메시지를 보내려면 샤드 지역을 알아야합니다. 지역 정보가 필요합니다. 다만 올라오고 적절한 클러스터에있는 경우 주문이 있습니까? – Anand