Vert.x 3.0 cluster 구축하기

개요

vert.x 3.0에서 클러스터 사용의 주된 목적은 이벤트 버스와 자료구조(map, counter, ...)를 이용해 분산처리를 쉽게 구현하기 위함이다.

이벤트 버스와 자료구조는 서버간 공유된다.

실행방법은 간단하다. cluster.xml을 환경에 맞게 설정하고, 실행 할 때 -cluster 인자를 붙이면 된다.

java -jar your.jar -cluster


구성

맴버 서버 3대를 구성한다고 치고, cluster.xml을 설정했다.

주로 수정할 부분은 <group>태그 부분과 <member-list>태그 부분이다.

맴버 서버는 3대이지만, cluster.xml의 member list를 보면 두 대만 추가했다.

모든 맴버를 추가해도 되지만, 맴버가 유연하게 줄었다 늘어난다고 하면, 고정 맴버만 등록하는 게 좋을 것 같다.





cluster.xml 고급 속성 리스트


실험

마스터는 누구인가

cluster 모드로 실행하고, 맴버 연결이 이루어지면, 맴버 정보가 출력되는데,

맴버 중 첫 번째가 마스터이다.

예)

Members [2] {

        Member [192.168.199.129]:5701

        Member [192.168.199.128]:5701 this

}



맴버 리스트 서버가 모두 켜지지 않은 상황에서 서버들이 켜졌을 때

맴버 리스트 서버에 연결을 시도하고, 실패하면 해당 주소를 블랙리스트에 등록하여 맴버 리스트 서버가 켜졌다 하더라도 재연결을 하지 않는다. 정상적으로 동작하려면 맴버 리스트 서버 하나는 살아 있어야 한다.

맴버 리스트에 <required-member>192.168.199.128</required-member> 를 등록하면, 해당 서버에 연결될 때까지 시도 한다.


맴버 외 서버가 맴버 리스트 서버에 연결된 이후 맴버 리스트 서버가 재시작 하면

맴버 외 서버는 맴버 리스트 서버에 연결을 시도한다.


맴버 리스트 서버가 하나만 켜졌을 때

정상적으로 모든 서버들이 연결되며, 이후에 서버가 켜지면 연결되어 있던 모든 서버에 추가된다.


마스터 서버가 꺼지면

연결되어 있던 맴버 중 하나가 마스터가 된다. 

cluster.xml 맴버 리스트에 추가되지 않은 맴버도 마스터가 된다.


이 경우에 문제가 발생할 수 있다.

맴버 리스트 서버가 모두 꺼져있고, 맴버 리스트 외 서버가 마스터가 된 상태를 그룹1로 보자.

맴버 리스트 서버가 다시 켜지고, 맴버 리스트 외 서버(그룹1 서버가 아닌)가 새롭게 연결된 상태를 그룹2로 보자.

그룹1과 그룹2는 서로 연결되지 않은 채 따로 동작한다. 즉 공유 데이터가 분리된다.

그룹1과 그룹2가 서로 연결되었을 때, 그룹2의 공유 데이터로 덮어진다.


이벤트 버스에 이벤트를 등록한 서버와 등록하지 않은 서버가 있는 상황을 만들고, publish했을 때,

이벤트 등록된 서버에만 메시지가 전달되어, 네트워크 트래픽이 등록된 서버에만 발생한다.