서버 이중화 관련 문제.. 이중화 구성 방안

hbsnow의 이미지

현재 제가 진행하고 있는 프로젝트가 하나 있는데
서버를 이중화로 갈것 같습니다.
이유는 당영히 안정적인 서비스를 위합이구요

먼저 대략적인 플로우를 말씀드리면

두대에 서버는 똑같이

1.모바일 스트리밍 서비스
2.웹서비스
3.dns 서비스
를 합니다

1.번은 카메라에서 보내오는 영상을 핸드폰에 보내주는 작업입니다
2.3.번은 웹과 일반어플리케이션에서 카메라의 영상을 볼수 있기 위해 dns 기능을 수행합니다

문제가 되는 중심적인 흐름을 말씀드리겠습니다.
1번 작업을 위해 핸드폰은 2개의 서버중에 첫번째 서버로 붙게되며 1번서버가 문제가 있을시 2번 서버로 붙어서 작업을 하게 됩니다.
어떻게 구성을 하면 좋을까요?
핸드폰스스로가 두개의 ip주소를 가지고 있어 1번으로 시도을 해보고 안돼면 2번으로 붙는다
아니면 1번 서버가 죽으면 2번서버로 자동으로 포워딩할수 있는 엔진을 둔다.. 어디다 두어야할지는 잘 모르겟지만...쩝

더 문제가 되는것은 2번 작업입니다.
2번 작업의 중심흐름은..
123kk.abc.co.kr 이렇게 주소단이나 어플리케이션 실행단에 도메인 네임을 주면
www.abc.co.kr를 dns 호스팅해준 회사 서버로 가서 매칭된 ip(1번서버)로 찾아가겠지요
그다음 해당 주소에 서버(1번서버)에는 dns 서버가 깔려있음으로 123kk.abc.co.kr를 찾아서 해당 ip주소에 켐에 연결이 되는 흐름입니다
그렇다면 1번 서버가 문제가 발생하면 2번 서버에서 이같은 일을 해주어야 하는데 어떻게 구성하면 좋을까요?
1번 서버가 문제가 발견됬다는걸 포착하게 되면 ddns 호스팅회사내에 www.abc.co.kr 도메인 네임을 기존 1번서버주소에서 2번서버 ip주소로 바꿔준다
이렇게 하면 케쉬가 update되는데 반나절이라는 문제가 추가로 발생하겠지만 얼추 될것 같긴 한데...
아직 이구상 저구상 중입니다.

이것땜에 머리가 엉망입니다.
또 이같은 고민은 프로그래머라면 언제가는 할법한 고민이고 방법도 여러가지 일것 같아 올립니다.

많은 의견이 있었으면 싶습니다.

지리즈의 이미지

hbsnow wrote:

1번 작업을 위해 핸드폰은 2개의 서버중에 첫번째 서버로 붙게되며 1번서버가 문제가 있을시 2번 서버로 붙어서 작업을 하게 됩니다.
어떻게 구성을 하면 좋을까요?
핸드폰스스로가 두개의 ip주소를 가지고 있어 1번으로 시도을 해보고 안돼면 2번으로 붙는다
아니면 1번 서버가 죽으면 2번서버로 자동으로 포워딩할수 있는 엔진을 둔다.. 어디다 두어야할지는 잘 모르겟지만...쩝

더 문제가 되는것은 2번 작업입니다.

2번 작업의 중심흐름은..
123kk.abc.co.kr 이렇게 주소단이나 어플리케이션 실행단에 도메인 네임을 주면
www.abc.co.kr를 dns 호스팅해준 회사 서버로 가서 매칭된 ip(1번서버)로 찾아가겠지요
그다음 해당 주소에 서버(1번서버)에는 dns 서버가 깔려있음으로 123kk.abc.co.kr를 찾아서 해당 ip주소에 켐에 연결이 되는 흐름입니다
그렇다면 1번 서버가 문제가 발생하면 2번 서버에서 이같은 일을 해주어야 하는데 어떻게 구성하면 좋을까요?
1번 서버가 문제가 발견됬다는걸 포착하게 되면 ddns 호스팅회사내에 www.abc.co.kr 도메인 네임을 기존 1번서버주소에서 2번서버 ip주소로 바꿔준다
이렇게 하면 케쉬가 update되는데 반나절이라는 문제가 추가로 발생하겠지만 얼추 될것 같긴 한데...
아직 이구상 저구상 중입니다.

이것땜에 머리가 엉망입니다.
또 이같은 고민은 프로그래머라면 언제가는 할법한 고민이고 방법도 여러가지 일것 같아 올립니다.

많은 의견이 있었으면 싶습니다.

장비를 추가로 구입해야 하는 단점은 있지만,
로드발랜싱을 구현하는 것이 가장 좋은 방법입니다.
로드발랜싱이라 해서... 로드발랜스를 하는 것이 주목적이 아니라,
장애 발생시 스위칭을 위한 방법으로 선택하는 거지요.
단순히 iptables만으로도 구현할 수 있습니다.

다른 편법적인 방법은 ip를 스위칭하는 겁니다.

일단 보통 요즘 서버는 nic가 두개정도 붙는것이 일반적이므로..
관리를 위해 고정되어지는 ip와 서비스를 위한 ip로 두개를 씁니다.
1번섭이 장애가 발생될 경우, 1번섭의 서비스ip는 내리고,
2번섭에 ip 얼라이싱을 사용하여. 두개의 ip를 할당하는 겁니다.
그럼... 자연히 2번섭으로 서비스가 넘어갑니다.
그사이 관리를 위한 아이피로 타고 들어가 신속히 1번섭을 복구해야죠.

다른 방법으로는 터널링을 이용한 방법도 있습니다.
1번섭에서 어떠한 이유로든지 서비스를 할 수 없는 상태가 되면...
서비스를 내리고, 2번섭으로 터널링을 만듭니다.
물론 1번섭이 완전히 죽는다면 해결할 수는 없지만, 로그가 풀나거나,
알수없는 메모리 문제로 1번섭의 서비스만 문제가 되는 거라면..
터널링으로 해결할 수 있습니다. 그렇게 되면 1번섭은
라우터와 비슷한 역할을 하게 되지요.
단 이 방식은 복구할 때도 좀 고생을 합니다.

비슷한 고민은 많이 하는데...
돈안들고 쉽게 해결하는 방법은 별로 없는 것 같더군요...

더 좋은 방법이 있다면 많이 답글좀 달아 주셨으면 좋겠네요.. ㅎㅎ

There is no spoon. Neo from the Matrix 1999.

neohwang의 이미지

L4 Switch 를 이용하시라고 권하고 싶습니다.

그렇게 되면 L4 Switch가 가상의 IP를 하나 가지고,
사용자는 이 가상의 IP로 접속하게 되면,
두 대의 서버중 한 곳으로 연결하게 됩니다.

Tony의 이미지

SGI의 Failsafe라는것과 Linux HA 등등 몇가지 방법이 있을듯.
잘 하려면 만만히 보긴 힘든 구성입니다. 대충하려면 얼마든지 대충.. ㅎㅎㅎ
L4만 하나 사면되겠죠?

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.