블로그로 돌아가기

MongoDB 복제 및 자동 장애 조치 구성 방법

MongoDB 복제 및 자동 장애 조치 구성 방법

A replica set은 노드 간에 복제 및 자동 장애 조치(failover)가 구성된 여러 노드의 데이터베이스 클러스터로 정의됩니다. PRIMARY 데이터베이스가 올바르게 선출되도록 하려면 세트에 홀수 개의 멤버가 포함되어야 합니다(Arbiter 노드 포함 또는 제외).

선택된 데이터베이스는 모든 주요 작업을 담당합니다. 들어오는 쓰기 작업을 처리하고 해당 정보를 oplog에 저장합니다. 이 정보는 SECONDARY 복제 멤버가 액세스하고 복제하여 자체 데이터 세트에 적용할 수 있습니다. 결과적으로 세트의 모든 서버는 동일한 콘텐츠를 나타내고 가용성을 보장합니다:

How to Configure MongoDB Replication and Automated Failover 1-Replica set- graphic

이제 예기치 않은 문제(하드웨어 또는 연결 오류 등)로 인해 기본(primary) 데이터베이스에 다운타임이 발생하는 상황을 생각해 보십시오. 이러한 경우 시스템은 수동 개입 없이 정상적인 기능을 복구하기 위해 자동으로 새로운 선출 프로세스를 시작합니다. 이러한 시스템의 장점은 replication의 이점(가용성 증가, 장애 조치 중복성, 재해 복구 등)을 여러 데이터베이스를 개별적으로 관리하는 것에 대해 걱정할 필요 없이 누릴 수 있다는 것입니다.

유사한 시스템을 도입하고 싶다면, 이 튜토리얼에서는 CloudSigma PaaS를 사용하여 MongoDB 복제 세트를 구성하는 방법을 보여줍니다. 이 가이드에서 볼 수 있듯이, 대부분의 일반적인 애플리케이션에서 I/O 작업을 처리하기에 충분한 정보 안전성과 처리량을 제공하는 데 일반적으로 충분한 3개의 멤버를 사용할 것입니다. 실제 복제 구성과 함께 환경을 준비하는 방법, DB 노드 간의 인증을 설정하는 방법, 작업이 성공적으로 완료되었는지 확인하는 방법도 배웁니다.

1단계: 새 환경 만들기

시작하려면 복제 세트 구성을 시작하기 위해 최소 3개의 MongoDB 노드가 필요합니다. 이제 다음과 같이 새 환경을 생성하십시오:

2-Create an Environment How to Configure MongoDB Replication and Automated Failover

이 예제에서는 4.0.2 버전의 모든 MongoDB 인스턴스를 동일한 환경에 할당합니다. 필요한 경우 제공된 공간에서 Environment Name 을 변경하고 설치 프로세스를 계속 진행할 수 있습니다.

프로세스의 다음 단계는 인증 키 파일을 사용하여 이러한 노드 간의 통신 보안을 처리하는 것입니다.

2단계: 인증 키 파일 추가

인증은 모든 복제의 중요한 구성 요소입니다. 고유한 인증 키 파일로 자신을 올바르게 식별한 후에만 복제 세트 멤버에게 액세스 권한을 부여하는 보안 보증 프로세스입니다. 이를 통해 원치 않는 엿보기 및 제3자로부터 데이터를 안전하게 보호할 수 있습니다. 자신만의 인증 키 파일을 생성하는 방법은 다음과 같습니다:

  1. 데이터베이스 노드 중 하나의 Web SSH 옵션을 클릭하고 로그인합니다:

3- Web SSH How to Configure MongoDB Replication and Automated Failover

2. 다음으로, 자신만의 키 파일을 입력하거나 다음 명령을 사용하여 openssl로 새 키 파일을 생성할 수 있습니다:

이 명령에서 741 은 바이트 단위의 키 크기를 나타내며, my.key 은 키의 이름입니다.

3. 이제 새 키 파일을 모든 MongoDB 인스턴스에 배포할 차례입니다. 방법은 다음과 같습니다:

  • 다음을 통해 File Manager를 엽니다. 아무 데이터베이스 노드 옆에 있는 Config 버튼을 클릭하십시오:

4-Click on the Config

  • 구성 탭의 다음 경로에서 my.key 파일을 찾습니다: /home/jelastic/my.key. 파일을 열고 내용을 복사합니다:

5- configuration tab How to Configure MongoDB Replication and Automated Failover

  • 다음 경로 아래에서 /var/lib/jelastic/keys you will find the keys 디렉토리를 찾을 수 있습니다. MongoDB 인스턴스가 서로의 신원을 인증하는 데 사용할 New File을 생성합니다. 이 예제에서는 다음과 같은 이름의 파일을 생성합니다: mongo-set.key:

6-keys directory

  • 이 파일에 이전에 복사한 내용을 붙여넣고, 모든 인스턴스에 대해 Save를 클릭하여 변경 사항을 적용합니다:

7-Paste the clipboard content

이 프로세스의 결과로, mongo-set.key 파일이 모든 MongoDB 노드에 배포되었습니다.

3단계: MongoDB 복제 구성

이제 인스턴스의 보안을 확보했으므로 실제로 복제 세트를 구성하는 단계로 넘어갈 수 있습니다. 시작하겠습니다:

  1. 먼저 MongoDB 노드의 구성 탭으로 이동하여 다음 파일을 엽니다: mongo.conf 파일, 위치: etc 폴더. 복제(replication) 섹션을 찾을 때까지 아래로 스크롤합니다. 주석 처리를 해제하고 복제 세트의 고유한 이름과 함께 다음 문자열을 추가합니다. 이 예제에서는 다음과 같이 이름을 지정합니다. db-replication:
      2. 다음으로, 다음과 같은 새 매개변수를 추가합니다. keyFile (위치: security 섹션). 이는 현재 다음 경로에 있는 키 파일의 경로를 지정하는 역할을 합니다: /var/lib/jelastic/keys/mongo-set.key:

8-Add parameter keyFile

      3. 적절한 버튼을 클릭하여 저장합니다. 변경 사항은 모든 인스턴스에 적용됩니다(에디터 창). 

      4. 이제 재시작해야 합니다. 모든 DB 노드를 새 구성 매개변수를 적용하기 위해:

9-Restart your DB nodes How to Configure MongoDB Replication and Automated Failover

한 가지 명심해야 할 점은 복제 세트 구성이 완료되고 모든 노드 또는 PRIMARY 노드를 재시작할 때, 재시작 중에 새로운 PRIMARY 데이터베이스 선출 프로세스가 시작된다는 것입니다.

     5. PRIMARY로 사용할 MongoDB 서버를 선택하고 SSH 프로토콜을 사용하여 접속합니다:

10-access the MongoDB server How to Configure MongoDB Replication and Automated Failover

주의: PRIMARY 데이터베이스가 선출되면 다른 복제 세트 멤버는 더 이상 직접 쓰기 작업을 위해 액세스할 수 없습니다. 즉, 모든 변경 및 구성은 현재 PRIMARY 노드에서만 수행되고 적용될 수 있습니다. 따라서 사전에 우선순위(priorities), 를 설정하지 않았다면, 애플리케이션의 연결 문자열을 새로운 PRIMARY 노드로 변경해야 합니다.

     6. 다음으로, 각각의 자격 증명을 사용하여 복제된 데이터베이스에 접속합니다:

11-Access the database How to Configure MongoDB Replication and Automated Failover

이 명령에서:

  • {user} –이메일로 전송될 관리자 사용자 이름을 나타냅니다(기본값은 보통 admin입니다).
  • {password} –해당 사용자 이름과 함께 이메일로 전송된 비밀번호입니다.
  • {DB_name}- 이 복제 세트에서 복제하려는 데이터베이스의 이름을 나타냅니다(이 예제에서는 기본값인 admin을 사용합니다).

새로운 선출이 발생하는 경우, 동일한 admin 사용자 자격 증명을 사용하여 새로운 PRIMARY 데이터베이스에 로그인할 수 있습니다.

     7. 연결이 설정되었으므로, 다음 줄을 실행하여 현재 MongoDB 노드의 매개변수를 정의하고 복제 세트를 시작해야 합니다:

위의 줄에서 대괄호 안의 값을 해당하는 자체 데이터로 대체합니다:

  • {replica_set} – 이 섹션의 시작 부분에서 지정한 복제 데이터베이스 그룹의 이름입니다. 이 예제에서는 db-replication이었습니다.
  • {current_db_ip} – 선택한 데이터베이스 컨테이너의 IP 주소를 나타냅니다:

12-initiate your replica set How to Configure MongoDB Replication and Automated Failover

이 예제에서 실행된 줄은 다음과 같습니다:

13-config

14-rs.initiate()

        8. 다음으로, 나머지 모든 데이터베이스에 대해 다음 명령을 실행합니다:

여기서, {db_ip} 는 각 데이터베이스의 IP 주소를 나타냅니다:

15-rs.add(

       9. 모든 복제 멤버를 추가하면 완전히 작동하는 복제 세트가 생성됩니다. 프로세스가 끝날 때 모든 것이 올바르게 구성되었는지 확인하는 것이 좋습니다. 확인하려면 다음 명령을 실행하십시오: rs.status(). 이렇게 하면 다음과 같이 복제 세트에 대한 전체 정보가 표시됩니다:

16-execute the rs.status()

4단계: 복제 세트 중재자(Arbiter) 설정

특정 상황에서는 중재자(Arbiter) 노드를 사용하는 것을 권장합니다. 중재자(Arbiter) 노드란 무엇일까요? 일반적으로 복제 세트에 홀수 개의 노드가 포함되어 있을 때 복제가 더 안정적입니다. 따라서 현재 세트에 짝수 개의 노드가 있는 경우, 중재자(Arbiter) 노드를 추가하여 세트 내 다른 멤버의 하트비트 및 선출 요청에 응답함으로써 정족수(quorum)를 유지할 수 있습니다. 다음은 중재자(Arbiter) 노드에 대한 몇 가지 세부 정보입니다:

  • 아비터는 데이터를 저장하지 않으며, 다른 노드에 장애가 발생한 경우 선거에서 투표만 수행합니다.
  • 매우 가볍고 리소스를 많이 소모하지 않습니다.
  • 암호화된 복제본 간에 사용자 자격 증명을 교환했습니다.
  • 최고의 가용성을 유지하려면 아비터를 별도의 노드에서 실행해 보세요.

복제 세트에 아비터 노드를 추가하는 방법은 다음과 같습니다:

  1. 먼저, 수평 확장을 수행하고 클러스터에 노드를 추가하겠습니다:

17-ReplicaSet Arbiter

18-Scale out database cluster

2. 노드가 추가되었으므로 새 키 파일이 필요합니다. 다음으로 이동합니다: keys 디렉터리에서 다음 키 파일을 만듭니다: mongo-set.key. 이전에 구성된 데이터베이스 노드 중 하나에서 키 내용을 복사하여 이전과 같이 여기에 모두 붙여넣습니다.

3. 다음으로 이동합니다: mongod.conf 구성 파일. replication 섹션의 주석을 해제하고 다음을 추가합니다: repISetName (우리 예시에서는 db-replication 입니다). 또한, 다음으로 이동합니다: security 섹션에서 다음 매개변수를 추가합니다: keyFile 매개변수 ( /var/lib/jelastic/keys/mongo-set.key 입니다).

4. 마지막으로, 이 새로운 구성 매개변수를 적용하기 위해 새 노드를 재시작합니다:

19- Restart newly

이 시점에서 클러스터의 모든 노드를 재시작할 필요는 없다는 점을 기억하는 것이 중요합니다. 새로 추가된 아비터 노드만 재시작하세요. 모든 노드를 재시작하면 새로운 PRIMARY 선거가 발생합니다(특정 데이터베이스 노드를 PRIMARY로 선택하도록 우선순위를 지정하지 않은 경우).

 5. 마지막으로, 아비터를 복제 세트에 추가할 수 있습니다. 이를 위해 PRIMARY 노드에서 다음 명령을 실행합니다:

여기서 {db_ip} 은(는) 새 노드의 IP 주소입니다:

20-IP address of a newly added node

 6. 이제 새 노드가 아비터가 되었는지 확인할 수 있습니다. SSH를 사용하여 새 노드에 로그인하고, 노드 생성 시 이메일로 받은 자격 증명으로 MongoDB 인스턴스에 연결하여 이를 수행할 수 있습니다:

21-connect MongoDB instance

이는 방금 클러스터에 추가한 새 노드가 다음의 아비터 역할을 하고 있음을 보여줍니다: db-replication. 이는 어떤 상황에서도 쿼럼을 보장하여 복제 세트를 더 안정적으로 만듭니다.

단계 5: 데이터베이스 클러스터 가용성 테스트

다음으로, 원격으로 연결하여 작업을 수행하도록 MongoDB 클러스터를 설정할 수 있습니다. 다음 예시에서는 간단한 PHP 애플릿을 사용하여 연결하고 몇 가지 점검 명령을 실행해 보겠습니다.

이를 위해서는 다음과 같은 애플리케이션 서버가 필요합니다: Apache. 저희가 했던 것처럼 환경에 하나를 추가하거나 별도의 환경에 새로 생성할 수 있습니다.

  1. 먼저 다음을 클릭하여 시작합니다: Change Environment Topology 그리고 서버를 추가합니다:

22-Press Change Environment Topology

23-Press Change Environment Topology button

    2. 다음을 엽니다: Configuration Manager 탭 (대상: Apache 서버). 아래와 같이 Config 버튼을 클릭하십시오:

3. 다음 파일을 찾아 엽니다: index.php 파일 (위치: /var/www/webroot/ROOT 디렉터리)을 열고 기본 콘텐츠 대신 다음 코드를 붙여넣습니다:

위 코드의 다음 값들을 각각의 데이터로 대체해야 합니다:

  • {replica_set_name} – 복제 세트 이름을 입력합니다.
  • {db_username} – 선택한 기본 데이터베이스의 관리자 사용자를 추가합니다 (기본값은 admin입니다).
  • {db_password} – 관리자 사용자의 비밀번호를 입력합니다.
  • {NodeID} – 해당 노드의 식별 번호를 기재합니다. 이는 다음에서 찾을 수 있습니다: CloudSigma PaaS dashboard.
  • {environment_domain} – 환경 도메인을 추가합니다. 이 역시 CloudSigma PaaS 대시보드에서 찾을 수 있습니다:

복제 세트에 있는 모든 노드의 ID를 적절한 mongodbConnectionURI 섹션에 지정해야 합니다.

해당 값을 입력하고 코드를 실행하면 다음과 유사한 문자열 세트가 표시됩니다:

이 시점에서 반드시 파일을 Save 해야 합니다!

4. Apache가 MongoDB 서버와 상호 작용하려면 특별한 모듈이 필요합니다. 이 모듈은 다음 내에서 추가할 수 있습니다: configs. etc 폴더로 이동하여 php.ini 파일을 엽니다. [mongodb] 섹션을 찾습니다. 여기서 이 확장을 활성화하려면 extension=mongodb.so 라인 앞의 세미콜론을 제거하기만 하면 됩니다:

      5. 에디터 창에서 Save 을 클릭하여 새 구성을 적용합니다. 항상 그렇듯이 변경 사항을 적용하려면 노드를 다시 시작해야 합니다. Restart Nodes 버튼을 클릭하십시오. Application Server 옆에 있는 버튼입니다:

    6. 이제 Open in Browser 버튼을 클릭하여 테스트해 보십시오:

이 아이콘을 클릭하면 다음과 같이 복제 세트 멤버/노드 및 해당 접근성에 대한 모든 정보를 보여주는 새 브라우저 탭이 열립니다:

다음 명령을 사용했기 때문에 ping (다음 파일의 6번째 줄 index.php ), 첫 번째 줄에는 복제 세트의 가용성을 확인한 결과가 표시됩니다:

이는 복제 세트가 성공적으로 테스트되었음을 의미합니다. 

결과의 다음 블록은 복제 세트 호스트에 대한 자세한 정보를 보여줍니다. 이 데이터는 다음 함수 덕분에 획득됩니다: getServers 함수 (다음 파일의 11번째 줄 index.php). 마찬가지로 이 복제 세트를 생성하는 과정에서 할당된 일부 값도 확인할 수 있습니다:

  • host – 특정 데이터베이스의 IP 주소입니다.
  • port – 현재 복제 멤버의 포트입니다.
  • [“is_primary”] [“is_secondary”] – 서버 상태를 나타내는 매개변수입니다. 선택한 기본 MongoDB 서버에 해당하는 값은 각각 true, false이고 다른 두 MongoDB 서버의 경우 false, true입니다.

Additionally, you can start and stop database nodes at any time to track changes. You can also refresh the page to do the same. This allows you to ensure that your MongoDB cluster is always available, up, and running as you configured it.

CloudSigma PaaS를 사용하면 사용자는 구성 및 백엔드 측면에 대해 너무 걱정하지 않고 복제 세트 사용의 이점을 활용할 수 있습니다. 이 튜토리얼은 몇 가지 간단한 단계만으로 자신만의 MongoDB 클러스터를 설정하는 것이 얼마나 간단한지 보여줍니다. 다음에 대해 자세히 알아볼 수 있습니다: MongoDB, Ubuntu용으로 설정하는 방법 또는 public cloud servers뿐만 아니라 CloudSigma PaaS가 제공하는 다른 고급 기능에 대해서도 알아볼 수 있습니다. 또한 체험판을 실행하여 무료로 PaaS를 경험하고 dashboardmarketplace와 그 제공 사항에 익숙해지기를 권장합니다. 

7일 동안 무료로 PaaS 체험하기

author

Preslav Dobrev

작성자 · CloudSigma

Preslav Dobrev는 CloudSigma의 크리에이티브 디자이너로서, 전통적이고 혁신적인 마케팅 채널을 활용하여 일관된 비즈니스 정체성을 구축하는 데 중점을 두고 있습니다. 그는 영향력 있는 브랜드 내러티브를 창출하기 위해 예술적 비전과 전략적 마케팅을 결합하는 데 능숙합니다.

댓글

아직 댓글이 없습니다. 첫 번째로 작성해 보세요.