2016-11-29 17 views
6

Próbuję zaimplementować to solution (na Win10 x64), ale z jakiegoś powodu wszystkie węzły SocketCluster nie komunikują się ze sobą.łączenie serwerów socketcluster

enter image description here

Sothis jest mój bież. Konfiguracja:

  • 1 StateServer [7777]
  • 1 BrokerServer [8888]
  • 2 serwery SocketCluster działające na portach [8000, 8001]
  • 1 LoadBalancer [2000] podzielić Trafic pomiędzy 2 węzły.

mogę zapewnić, że zarówno państwowe i Broker zrywa słuchania: (?)

TCP [::]:7777    [::]:0     LISTENING 
    TCP [::]:8888    [::]:0     LISTENING 

Z tego, co mam rozumieć tak daleko, BrokerServer wraz z SocketCluster węzłów powinny łączyć się z StatusServer

Mogłem z powodzeniem podłączyć BrokerServer do StateServer, ale za każdym razem, gdy próbuję połączyć którąkolwiek z usług SocketCluster, zgłaszane są błędy "zawieszone na gniazdach".

StateServer:

SC Cluster State Server is listening on port 7777 
Sever d08298c6-523f-4c1b-9fcc-efd4e92fab22 at address undefined on port 8888 joined the cluster 
Client 10612bde-514f-40d3-9340-7179a1901376 at address undefined joined the cluster 
Cluster state converged to active:["ws://[undefined]:8888"] 

SocketCluster instancja:

{ SocketProtocolError: Socket hung up 
    at Emitter.SCSocket._onSCClose (C:\Users\Alex\AppData\Roaming\npm\node_modules\sc-cluster-broker-client\node_modules\socketcluster-client\lib\scsocket.js:596:15) 
    at Emitter.<anonymous> (C:\Users\Alex\AppData\Roaming\npm\node_modules\sc-cluster-broker-client\node_modules\socketcluster-client\lib\scsocket.js:285:12) 
    at Emitter.emit (C:\Users\Alex\AppData\Roaming\npm\node_modules\sc-cluster-broker-client\node_modules\component-emitter\index.js:131:20) 
    at Emitter.SCEmitter.emit (C:\Users\Alex\AppData\Roaming\npm\node_modules\sc-cluster-broker-client\node_modules\sc-emitter\index.js:28:26) 
    at Emitter.SCTransport._onClose (C:\Users\Alex\AppData\Roaming\npm\node_modules\sc-cluster-broker-client\node_modules\socketcluster-client\lib\sctransport.js:175:30) 
    at WebSocket.wsSocket.onerror (C:\Users\Alex\AppData\Roaming\npm\node_modules\sc-cluster-broker-client\node_modules\socketcluster-client\lib\sctransport.js:104:12) 
    at WebSocket.onError (C:\Users\Alex\AppData\Roaming\npm\node_modules\sc-cluster-broker-client\node_modules\ws\lib\WebSocket.js:452:14) 
    at emitOne (events.js:96:13) 
    at WebSocket.emit (events.js:188:7) 
    at WebSocket.EventEmitter.emit (C:\Users\Alex\AppData\Roaming\npm\node_modules\socketcluster\node_modules\sc-domain\index.js:12:31) 
    name: 'SocketProtocolError', 
    message: 'Socket hung up', 
    code: 1006 } 
+0

Mam do czynienia z tym samym problemem na Linuksie z najnowszymi wersjami wersji stanu, brokera i repozytorium socketcluster. Czy znalazłeś jakieś obejście? – nagamanojv

+0

cóż, jak tylko przełączyłem się na Ubuntu, wszystko zaczęło działać. Jednak nie testowałem najnowszego repo. – Alexus

+0

Obecnie jestem tylko na ubuntu. To nie działa. Dunno, co jest nie tak. – nagamanojv

Odpowiedz

1

Okazało się, że skalowanie klaster poziomo nie działa prawidłowo w systemie operacyjnym Windows jeszcze (przy użyciu aktualnej wersji v.1.2. 1). Oba węzły: SocketCluster nie komunikują się z brokerServer z jakiegoś powodu.

1

Czy przypadkiem używasz tych wystąpień w kontenerach Docker?

Na podstawie wyniku dziennika, który otrzymujesz z serwera stanu (adres undefined), wygląda na to, że instancja stanu scc nie może odczytać adresów IP twoich instancji. Może się tak zdarzyć z kilku powodów. Na przykład uruchomienie instancji wewnątrz kontenera Docker może ukryć rzeczywisty adres IP tej instancji. Możliwe jest również, że uruchomienie SCC w systemie Windows może spowodować podobne problemy.

Rozwiązaniem tego problemu jest ustawienie zmiennej środowiskowej SCC_INSTANCE_IP podczas uruchamiania każdej instancji - Ta zmienna środowiskowa powinna zawierać adres IP instancji, z której mogą korzystać inne instancje (jeśli używa się Docker, można użyć docker inspect polecenie, aby znaleźć adres IP sieci prywatnej określonego kontenera).

SCC_INSTANCE_IP może być prywatnym adresem IP, publicznym adresem IP lub nazwą hosta.