서버 모니터링과 메시 네트워크
CreateYourVPN이 서버 상태를 어떻게 지켜보는지: 자가 점검, 서버 간 상호 점검을 하는 메시 네트워크, 그리고 접속 불가능한 서버를 사용자에게 자동으로 숨기는 방식.
서버는 가장 최악의 순간에 여러분을 실망시킬 수 있습니다: 서비스가 죽거나, 호스팅 업체가 머신을 재시작하거나 — 더 나쁘게는, 특정 국가에서 서버가 차단되어 기술적으로는 살아 있어도 접속이 안 되는 상태가 될 수도 있습니다. 사용자는 이런 일을 절대 눈치채면 안 됩니다. 이번 강의에서는 CreateYourVPN이 서버를 어떻게 지켜보는지, 그리고 서버에 문제가 생기면 어떤 일이 일어나는지 다룹니다.
두 겹의 점검
시스템은 모든 서버를 두 가지 관점에서 바라봅니다.
1. 서버가 스스로를 점검한다
몇 분마다 한 번씩 각 서버가 상태를 보고합니다: 443번 포트의 트래픽 리스너가 살아 있는지, VPN 서비스가 실행 중인지. 3강에서 다룬 메트릭도 같은 보고와 함께 도착합니다. 보고 내용이 "몸이 안 좋다"면 서버는 "서버 이용 불가" 상태가 됩니다. 보고 자체가 아예 끊기면 상태는 "서버에서 데이터 없음"이 됩니다 — 이 경우 머신이 꺼져 있거나 네트워크가 끊겼을 수 있습니다.
2. 서버들이 서로 "문을 두드린다"
자가 점검으로는 가장 교묘한 경우를 잡아낼 수 없습니다: 서버 자신은 건강하다고 믿지만, 외부에서는 접속이 안 되는 경우입니다 — 예를 들어 해당 서버의 IP가 차단된 경우입니다. 그래서 여러분의 모든 서버는 상호 점검 메시 네트워크로 연결되어 있습니다: 각 서버는 주기적으로 모든 이웃 서버에 접속을 시도합니다 — 사용자의 앱이 접속하는 것과 똑같은 방식으로요.
여기서부터는 "투표"가 작동합니다.
- 한 번의 접속 실패는 아무 의미가 없습니다 — 그저 네트워크가 잠깐 흔들렸을 수도 있으니까요. 오직 지속적으로 이어지는 실패만 의미를 가집니다.
- 서버가 "내 서버에서 접근 불가" 상태로 표시되는 것은 여러 개의 독립적인 서버가 일관되게 접속에 실패했을 때뿐입니다 — 서버 한 대의 의견만으로는 판정이 내려지지 않습니다.
- "신뢰할 수 없는 증인"에 대한 보호 장치도 있습니다: 어떤 서버가 갑자기 이웃의 절반을 볼 수 없다고 주장한다면, 문제는 십중팔구 그 서버 자신에게 있는 것이므로 그 서버의 투표는 무시됩니다.
바로 이 구조가 차단을 잡아냅니다: 만약 어떤 서버가 여러분의 다른 서버들이 위치한 나라에서 차단당하면, 그 나라에 있는 이웃 서버들이 빠르게 접속에 실패하기 시작하고, 정족수가 채워지면 시스템은 그 서버를 접근 불가로 표시합니다. 한편 차단이 없는 나라의 서버들은 계속 정상적으로 접속에 성공하며, 이 의견 차이 덕분에 상황이 명확하게 드러납니다.
서버 두 대 사이의 연결 확인이 통과하지 않을 때
투표는 접속을 막은 국가 안에 서버가 여러 대 있을 때 차단을 잡아냅니다. 그러나 대개 그곳에는 정확히 한 대만 있습니다. 그 서버는 해외 서버를 보지 못하게 되지만, 해외 서버끼리는 서로를 잘 봅니다. 이런 상황에서는 정족수가 결코 모이지 않습니다.
그래도 저희는 이를 알아차리지만, 모르는 것은 솔직하게 말씀드립니다. 「A가 B를 보지 못한다」에서 누구의 주소가 차단되었는지는 알 수 없습니다. 이는 두 서버 사이 경로에 대한 하나의 동일한 진술이며, 밖에서 보면 두 경우가 똑같아 보이기 때문입니다. 그래서:
- 기본적으로 저희는 누구도 지목하지 않습니다. 확인이 닿지 않는 쪽의 접속 지점을 「도달 불가」로 표시하고, 양방향 모두 통과하지 않으면 양쪽의 접속 지점을 표시합니다. 사유에는 두 서버가 모두 이름으로 나옵니다(서버 카드에서 접속 지점을 열면 보입니다). 어느 서버를 교체할지는 고객님의 판단입니다. 보통은 고객의 사용자들이 접속하지 못하는 서버입니다.
- 둘 중 어느 쪽도 숨기지 않습니다. 쌍을 통째로 숨기면 멀쩡한 서버까지 구독에서 빠집니다. 사용자에게는 두 서버의 접속 지점이 계속 전달되고, 부하 분산은 경로에 정상 서버가 있으면 그쪽을 우선할 뿐입니다.
확인용 서버
「둘 중 하나」가 아니라 명확한 답을 받으려면, 판단을 신뢰할 수 있는 서버를 지정하세요. 서버 카드 → 「이 서버로 다른 서버의 차단 여부를 확인」.
이후 규칙은 간단합니다. 확인용 서버가 일반 서버를 보지 못하게 되면 일반 서버의 주소가 차단된 것으로 간주하고, IP 변경을 권하는 메일을 보내드리며, 경로에 대안이 있는 동안에는 그 서버의 접속 지점을 사용자에게 제공하지 않습니다. 반대의 경우, 즉 일반 서버가 확인용 서버를 보지 못하는 것은 아무 의미가 없습니다.
가장 좋은 확인용 서버는 고객의 사용자와 같은 국가에 있는 서버입니다. 그 관점이 사용자 앱이 보는 것과 가장 가깝기 때문입니다. 여러 대를 지정할 수도 있습니다. 다만 모든 서버를 지정하면 방향은 다시 사라집니다. 판단할 쪽이 남지 않아 쌍은 기본 동작으로 돌아갑니다. 참고로 확인용 서버 자체는 이 신호로 더 이상 표시되지 않습니다. 판단을 그 서버의 관점에서 하므로, 그 서버를 판단할 쪽이 남지 않기 때문입니다.
문제가 있는 서버에는 무슨 일이 일어나는가
이 상태들은 곧바로 부하 분산에 반영됩니다: "서버 이용 불가"와 "내 서버에서 접근 불가" 상태의 서버는 순환에서 제외됩니다 — 새 연결이 그쪽으로 가지 않으며, 사용자 구독에서는 같은 라우트에 있는 정상 서버가 그 자리를 대신합니다. 유일한 예외는 확인용 서버가 없는 끊긴 쌍입니다. 거기서는 접속 지점이 표시되지만, 어느 것도 제외되지 않습니다.
동시에 시스템은 신중하게 동작합니다 — "해를 끼치지 않는다"는 원칙 위에서 만들어졌습니다.
- 라우트가 완전히 비게 되는 일은 없습니다. 어떤 라우트의 모든 서버가 "문제 있음"으로 판정되더라도, 시스템은 빈 목록을 보여주는 대신 그나마 가장 나은 옵션을 사용자에게 제공합니다 — 그렇지 않으면 앱이 서버가 아예 사라졌다고 판단해 목록에서 지워버릴 수 있기 때문입니다.
- 침묵은 판정이 아닙니다. "서버에서 데이터 없음" 상태는 그 자체만으로는 서버를 순환에서 제외하지 않습니다: 최신 데이터가 없으면 시스템은 섣부른 행동을 하지 않습니다.
모든 것은 스스로 치유됩니다
어떤 상태도 영구히 "고정"되지 않습니다 — 상태는 항상 최신 데이터로부터 다시 계산됩니다.
- 서버가 다시 정상 보고를 보내면 → "서버 이용 불가" 상태가 해제됩니다;
- 이웃 서버들이 다시 접속에 성공하기 시작하면 → 실패 카운트가 초기화되고 "내 서버에서 접근 불가" 표시가 사라집니다;
- 보고가 재개되면 → "서버에서 데이터 없음" 표시가 사라집니다.
서버를 고치거나(혹은 차단이 풀리기를 기다리거나) 하면 — 서버는 스스로 다시 서비스에 복귀합니다. 수동으로 "다시 켜기"를 할 필요가 없습니다.
패널의 어디에서 확인할 수 있는가
아무 사용자의 카드를 열어 그 사용자의 서버 목록을 확인하세요: 각 서버 옆에 상태 표시 점이 있고, 문제가 있을 때는 이유가 적힌 캡션이 함께 표시됩니다: "서버 이용 불가", "내 서버에서 접근 불가"(여러분의 서버 중 몇 대가 접속할 수 없는지 포함), 또는 "서버에서 데이터 없음". 서버 카드에서도 간접적인 신호를 볼 수 있습니다: 메트릭에 붙는 "오래된 데이터" 배지와 "데이터 없음 — 에이전트가 응답하지 않습니다".
메시 점검은 매우 검소하게 이루어집니다: 하루 사용량에 엄격한 상한이 걸린 아주 작은 프로브 접촉일 뿐이라, 여러분 서버의 트래픽이나 성능에 전혀 영향을 주지 않습니다.
핵심 요약
- 두 겹의 통제: 서버가 스스로를 점검하고, 메시 이웃 서버들이 외부에서 그 서버를 점검합니다.
- 차단은 여러 서버의 "투표"로 잡아냅니다 — 한 번의 일시적 문제로는 소동이 일어나지 않습니다.
- 문제가 있는 서버는 순환에서 빠지고, 사용자는 조용히 정상 서버로 옮겨집니다.
- 모든 것은 스스로 치유됩니다: 서버가 되살아나는 순간 자동으로 다시 합류합니다.
- 서버 한 쌍 사이의 연결 확인이 통과하지 않고 확인용 서버가 지정되지 않았다면, 도달하지 못하는 쪽의 접속 지점(양방향 모두 통과하지 않으면 양쪽의 접속 지점)을 표시하고 어느 것도 숨기지 않습니다. 판단은 고객님의 몫입니다.
다음으로
인프라는 스스로 고치는 법을 알고 있지만, 따로 지켜야 할 것이 하나 있습니다 — 바로 여러분의 사용자 기반입니다.