본문 바로가기

01. operation/vii. High availability

HA를 구성하기위한 이야기..(스토리지)


블로그를 보시면 알겠지만, 저는 메일쪽을 관련하는 일을 하고 있는 엔지니어입니다.
메일 (simple mail transfer protocol) 이라고 하면 정말 단순 명확했으면 좋겠지만,
전혀 심플하지도 않고, 복잡하기만 합니다. (는 잡설이구요...)

자 오늘 해볼 이야기는 HA를 구성하면 가장 문제가 되어질수 있는 스토리지단입니다.
(흠 오늘글은 조금 즉흥적인글이니 양해를 부탁 드리겠습니다)

일본 헤테나를 예를 들면 NFS를 통해서 스토리지 공유를 한다...(라고 써 있더군요)
근데 이 스토리지라는게 정말 광범위해서 어떻게 쓰이느냐에 따라서 어떻게 구성을 해야할지가 정말 중요합니다.

만약! db서버 이중화를 한다면 db이중화도 결국은 스토리지를 이중화 할것이냐 (물론 db이중화가 스토리지:파일시스템 으로 이중화가 되어질수만 있다면 정말 획기적이겠지만 그렇지 못합니다) 이부분은 차츰 나중에 이야기를 해보도록 하겠습니다 (갑자기 db이중화 이야기가 나오니 어려워지는군요)

저는 엔지니어 커뮤니티 사이트를 운영하고 있습니다.
이것은 엔지니어들만의 공간으로 많은 자료를 담고 있는데 이제 운영을 하다보니 상당히 중요한 위치에 서게 되었습니다. 그러다보니, 자연스럽게 이중화 이야기가 나왔습니다.

자 서버는 있습니다. 하지만 A서버가 죽었을때 B서버에서 어떻게 해당 내용을 전달할것이냐가 문제입니다.

방법은 여러가지가 있습니다.
1. rsync로 주기적으로 동기화를 시킨다던지
2. lsync로 실시간으로 동기화를 시킨다던지....(rsync의 변형형태로 좁은범위내에서는 상당히 유용합니다. 단! rsync와 비슷하므로 100% 동기화라고 보장하지 못합니다)
3. 디스크를 공유시키던지 (NFS던 GFS던...무엇이든 파일 시스템을 만든다면)

여기서 가장 중요한건 A서버가 죽었을때 B서버는 놀고 있다는 의미입니다.
이런경우에는 1/2번이 가장 저렴한 방법으로 HA를 구성할수 있는 방법일것입니다.

하지만, A/B서버가 동시에 job을 처리한다면 2번과 3번을 예의 주시해야합니다.
2번과 같은경우는 network상황이나, 서버의 상황에 따라 틀리지만, 1분 이내 (사이즈가 작고 사용량이 없다면) 2번케이스를 사용이 가능할것입니다.

하지만 진심으로 한다면 무엇인가 다른 File System이 필요하다는 결론입니다.
HA가 Active-Stand by의 구조도 있지만 정말 고가용성이 되어지는 active-active구조가 되어질것입니다.

앞단 두대의 서버에는 레알(?) 서비스 데몬들만 올라가고 최소한의 디스크로 서비스가 되어집니다. (앞단 장비 퍼포먼스가 빵빵하겠지요? 저같으면 SSD넣겠습니다.) 그리고 이 서버들은 SAN, NAS등의 디스크를 서로 공유하여 사용합니다.

3번의 경우가 발생되었습니다.
이러한 경우에 파일시스템 선택과, 공유스토리지운영 방법이 이슈가 되어질것입니다.
그리고 앞서 말했던 DB이중화 이야기도 슬슬 나올수가 있습니다.

디스크는! 단순 데이터를 저장하는 매체입니다.
하지만 앞단 서비스가 단순 apache를 통해서 html만 보여주는것이라면 상관이 없겠지만, 뭔가를 양쪽 서버에서 동시 다발적 한 파일에 write를 해야합니다.

"응? 그까이꺼 그냥 write하면 되지?"

라고 생각하시면 안됩니다.
nfs서버에는 nfslock라는 데몬이 있습니다. 이것이 바로 file lock을 컨트롤 하는 녀석입니다. (NAS역시 동일하기때문에 생략합니다, 단 SAN은 네트워크 스토리이지 공유스토리지가 아님을 명심해야합니다)

그럼...............
A서버에서 서로 다른 데몬이 a.out의 파일에 write하는 경우의 kernel이 하는짓과
A서버 B서버에서 서로 다른 데몬이 공유스토리지에 a.out의 파일에 write하는짓의 차이점중 둘중 하나만 이해하시면 제가 말하고자 하는 스토리지와 파일 시스템의 정의가 무엇인지 알게 되어질것입니다.

(To Be continue)