forcemax's

Reference : https://storm.apache.org/documentation/Fault-tolerance.html


Apache Storm(이하 Storm) Cluster를 Production 단계에서 사용하기 위해 고려하다보면 Nimbus의 SPoF(Single Point of Failure) 여부에 대해서 고민하지 않을 수 없다. 자세하게 Storm Cluster의 Fault Tolerance에 대해서 살펴보면 다음과 같다.


1. Worker가 Down되면?

Worker는 Supervisor에 의해서 관리되며 Worker가 Down될 경우 Supervisor가 Worker를 재기동(restart)한다. 그러나 Worker가 기동되는 단계에서 지속적으로 문제가 발생해서 기동에 실패하면, Nimbus에 의해서 다른 Supervisor에게 넘긴다.


2. Node가 Down되면?

여기서 Node는 장비(Machine)을 칭하며, Supervisor가 구동중인 장비로 규정한다. Node가 Down될 경우 Nimbus가 이를 감지하고 해당 Supervisor에서 동작된던 task를 다른 Supervisor로 넘긴다. 이 경우 다른 Supervisor에서 Worker가 새로 기동될 수도 있고, 현재 기동되어 있는 Worker에 task를 할당하기도 한다.


3. Nimbus 또는 Supervisor가 Down되면?

Nimbus와 Supervisor는 Storm에서 제공하는 문서에 의하면 Fail-Fast & Stateless 디자인이다. monit이나 daemontools와 같은 툴을 사용해서 process가 종료되면 자동으로 재기동 되도록 구성하는 것이 좋다. 좋은 정도가 아니라 꼭 이렇게 하라고 한다. 상태 정보가 Zookeeper 또는 디스크에 저장되어 있으므로 재기동시에 이를 읽어들여 기존 상태와 같이 구성한다.


4. Nimbus는 SPoF인가?

Nimbus node가 Down되더라도 다른 Node에서 동작중이던 Worker는 영향이 없다. 만약 다른 Node에서 동작중이던 Worker가 Down되더라도 해당 Node에서 동작중인 Supervisor에 의해서 재기동된다. 그러나 Worker가 재기동될 때 지속적으로 문제가 발생해서 기동에 실패한다면, 해당 Worker는 Down상태로 남는다.

그러므로 "Nimbus는 SPoF인가?"라는 물음에 대답은 "Nimbus는 일종의 SPoF로 볼 수 있다."이다. 그러나, 실제로 Nimbus node가 Down되어 있는 중에 비극적인 일(Worker가 막 Down된다던지...)만 발생하지 않는다면 큰 문제는 아니다. 향후 Nimbus의 HA를 지원할 계획은 갖고 있다.


결과적으로,

Nimbus Node(Nimbus process가 아니라)가 Down 되더라도 다른 Node(Supervisor Node)들은 정상적으로 Topology를 실행하고 있는 상태이다. 그러나, 정상적인 상태로 복구하기 위해서는 Nimbus Node를 복구해야한다.

여기서 Nimbus Node를 복구하는 방법에 두가지 경우가 있을 수 있다.

1. Nimbus Node가 상태 정보 데이터(in Disk)를 가지고 복구되는 경우 : Nimbus가 상태 정보를 디스크에서 읽어 들일 수 있으므로, 기존 상태 정보를 가지고 기동된다.

2. Nimbus Node에 상태 정보 데이터(in Disk)를 가지고 복구 되지 않는 경우 : 기존 정보가 없으므로 Storm Cluster가 새로 기동되는 상태이다. 이 경우 기존 동작중인 Supervisor가 새로운 Nimbus에 연결되면서 기존 Worker를 제거한다. 그러므로, Topology를 다시 Submit해야 한다.


PS. Storm 1.0.0 부터는 HA Nimbus가 지원됩니다~~