카우치베이스의 데이터센터 간 복제(XDCR) 는 한 클러스터에서 다른 클러스터로 데이터를 쉽게 복제할 수 있는 방법을 제공합니다. 클러스터는 일반적으로 지리적으로 가까운 곳에 설정됩니다.
다양한 데이터 센터에 분산되어 있습니다. 이를 통해 재해 복구 또는 사용자에게 더 가까운 곳에 데이터를 배치하여 더 빠르게 데이터에 액세스할 수 있습니다. 이 블로그에서 보여드리겠습니다:

  • 도커 스웜을 사용하여 두 개의 데이터 센터 설정하기
  • 도커 스웜의 각 노드에서 카우치베이스 컨테이너를 실행하세요.
  • 각 Docker Swarm 클러스터에 Couchbase 클러스터 설정하기
  • 두 개의 Couchbase 클러스터 간에 단방향 XDCR 구성

이 블로그의 목적상, 두 데이터 센터는 Docker Machine을 사용하여 로컬 머신에 설정됩니다.
 swarm-xdcr-couchbase-overview
이 블로그에 사용된 전체 코드는 다음 링크에서 확인할 수 있습니다: github.com/arun-gupta/couchbase-xdcr-docker.

영사 검색 서비스 만들기

도커 스웜의 각 노드에 등록해야 합니다. 검색 서비스. 이 블로그에서는 이를 위해 Consul을 사용할 것입니다. 그리고 Consul도 Docker 머신에서 실행할 것입니다. 일반적으로 다음을 실행합니다.
의 클러스터를 만들 수 있지만, 간단하게 하기 위해 단일 인스턴스를 시작합니다. Docker 머신을 생성하고 다음을 사용하여 Consul을 시작합니다. 이 스크립트:

도커 스웜 클러스터 생성

Docker Swarm을 사용하면 여러 Docker 호스트를 하나의 장치로 볼 수 있습니다. 이를 통해 멀티 컨테이너 애플리케이션을 여러 호스트에서 쉽게 실행할 수 있습니다. 도커 스웜은 동일한 원격 API 를 단일 호스트에서 제공하는 것으로 간주합니다. 이렇게 하면 기존 도구가 단일 호스트 또는 호스트 클러스터를 대상으로 할 수 있습니다. 두 Docker 스웜 클러스터는 모두 단일 검색 서비스에 등록됩니다. 이는 다음 값을 사용하여 달성할 수 있습니다.
--스웜 검색:

다음을 사용하여 도커 머신을 사용하여 도커 스웜 클러스터를 생성합니다. 이 스크립트:

스크립트는 다음과 같이 호출해야 합니다:

이렇게 하면 아래와 같이 하나의 "마스터"와 두 개의 "워커"로 구성된 두 개의 Docker Swarm 클러스터가 생성됩니다:

Consul이 IP 주소가 있는 Docker 머신에서 실행 중입니다. 192.168.99.101. 따라서 컨설턴트 UI는 http://192.168.99.101:8500 에서 액세스할 수 있습니다:

swarm-xdcr-couchbase

등록한 두 개의 Docker 스웜 클러스터가 표시됩니다. 각 클러스터의 정확한 노드 목록도 볼 수 있습니다. 노드 clusterA 가 표시됩니다: swarm-xdcr-consul-clusterA

의 노드 clusterB 가 표시됩니다:
swarm-xdcr-consul-clusterB

Couchbase 컨테이너 실행

다음을 사용하여 Docker Swarm 클러스터의 각 노드에서 Couchbase 컨테이너를 실행합니다. 파일 작성.

첫 번째 클러스터에 대해 Docker CLI를 구성하고 컨테이너 3개를 실행합니다:

실행 중인 컨테이너를 확인합니다:

두 번째 클러스터에 대해 Docker CLI를 구성하고 컨테이너 3개를 실행합니다:

실행 중인 컨테이너를 확인합니다:

카우치베이스 클러스터 생성/재조정

CLI를 사용하여 카우치베이스 클러스터 확장 및 재조정하기 는 Couchbase 노드 클러스터를 생성하고 다음을 사용하여 기존 클러스터를 재조정하는 방법을 설명합니다. 카우치베이스 CLI.
다음을 사용하여 각 스웜 클러스터에 Couchbase 클러스터를 생성합니다. 이 스크립트.

스크립트는 다음과 같이 호출해야 합니다:

이제 이 스크립트를 사용하여 이 클러스터의 밸런스를 재조정합니다:

이 스크립트는 다음과 같이 호출됩니다:

카우치베이스 웹 콘솔 를 입력하면 클러스터의 모든 노드에 대한 출력이 표시됩니다:
swarm-xdcr-couchbase-clusterA

이 스크립트를 호출하여 두 번째 Couchbase 클러스터를 다음과 같이 생성합니다:

이 클러스터의 밸런스를 다음과 같이 재조정합니다:

두 번째 클러스터의 모든 노드에 대한 Couchbase 웹 콘솔에 출력이 표시됩니다: swarm-xdcr-couchbase-clusterB

XDCR 설정

데이터센터 간 복제는 단방향, 양방향 또는 다방향으로 설정할 수 있습니다. 단방향은 소스 클러스터에서 대상 클러스터로 데이터를 복제할 수 있고, 양방향은 양방향으로 복제할 수 있으며, 다방향은 양방향으로 복제할 수 있습니다.
를 사용하면 모든 방향으로 구성할 수 있습니다. 다음을 사용하여 간단한 단방향 복제를 만들어 보겠습니다. 이 스크립트:

이 스크립트는 다음과 같이 호출됩니다:

명령을 다시 실행하되 소스 클러스터와 대상 클러스터를 반대로 하면 양방향 복제를 쉽게 만들 수 있습니다. 소스 클러스터에 대한 Couchbase 웹 콘솔이 표시됩니다:
swarm-xdcr-couchbase-clusterA-xdcr

대상 클러스터에 대한 Couchbase 웹 콘솔이 표시됩니다:
swarm-xdcr-couchbase-clusterB-xdcr

즐기세요!

이 블로그에서는 Docker Machine, Docker Swarm 및 도커 컴포즈.

작성자

게시자 Arun Gupta, 개발자 지원 부문 부사장, Couchbase

아룬 굽타는 Couchbase의 개발자 지원 담당 부사장입니다. 그는 Sun, Oracle, Red Hat에서 10년 이상 개발자 커뮤니티를 구축하고 이끌었습니다. 그는 콘텐츠, 마케팅 캠페인 및 프로그램의 전략, 계획 및 실행을 개발 및 실행하는 교차 기능 팀을 이끄는 데 있어 깊은 전문성을 보유하고 있습니다. 그 전에는 Sun에서 엔지니어링 팀을 이끌었으며 Java EE 팀의 창립 멤버입니다. Gupta는 기술에 관한 블로그 게시물을 2,000개 이상 작성했습니다. 40여 개국에서 수많은 주제에 대해 광범위한 강연 경험을 가지고 있으며, 3년 연속 JavaOne Rock Star로 선정되었습니다. 또한 미국에서 Devoxx4Kids 지부를 설립하여 어린이를 대상으로 한 기술 교육을 지속적으로 장려하고 있습니다. 기술에 관한 여러 권의 책을 저술했으며, 열렬한 마라토너이자 지구를 횡단하는 사람, Java 챔피언, JUG 리더, NetBeans 드림팀 멤버, Docker 캡틴이기도 한 그는 @arungupta에서 쉽게 만나볼 수 있습니다.

댓글 하나

  1. 안녕하세요, 도커 스웜 모드를 사용하기 때문에 여기에 게시 된 게시물을 따라 2 개의 카우치베이스 클러스터 3 노드를 설정했습니다:
    https://www.couchbase.com/docker-service-swarm-mode-couchbase-cluster/

    도커 스웜 모드와 함께 vagrant를 사용했습니다. 잘 작동하는 것 같았습니다. 하지만 WebUI를 통해 XDCR을 구성하려고 할 때 다음과 같은 오류가 발생했습니다:

    주의 - 2017-04-07 15:13:09 10.0.0.6:CheckpointMgr:파이프라인 690841985e8189a6c431bd9f25faf8a7/test-xdcr/test-xdcr-903583530에 대한 시작 시퀀스를 얻지 못했습니다.
    주의 - 2017-04-07 15:13:02 10.0.0.3:CheckpointMgr:파이프라인 690841985e8189a6c431bd9f25faf8a7/test-xdcr/test-xdcr-908871718에 대한 시작 시퀀스를 얻지 못했습니다.
    주의 - 2017-04-07 15:12:58 10.0.0.5:CheckpointMgr:파이프라인 690841985e8189a6c431bd9f25faf8a7/test-xdcr/test-xdcr-259497001에 대한 시작 시퀀스를 얻지 못했습니다.

    goxdcr.log를 살펴보니 이런 것을 발견했습니다 :

    GenericPipeline 2017-04-07T15:14:07.863Z [DEBUG] 690841985e8189a6c431bd9f25faf8a7/test-xdcr/test-xdcr-413659460 설정=map[VBTimestamps:map[300:[vbno=300, uuid=0, seqno=0, sn_start=0, sn_end=0]]로 런타임 컨텍스트에서 업데이트 설정 생성자 호출])]
    GenericSupervisor 2017-04-07T15:14:07.863Z [DEBUG] 파이프라인 슈퍼바이저에서 설정 업데이트 중 PipelineSupervisor_690841985e8189a6c431bd9f25faf8a7/test-xdcr/test-xdcr. settings=map[pipeline_loglevel:Debug]
    CheckpointManager 2017-04-07T15:14:07.864Z [DEBUG] 파이프라인에 대한 체크포인트 관리자 설정 업데이트 중 690841985e8189a6c431bd9f25faf8a7/test-xdcr/test-xdcr. settings=map[checkpoint_interval:1800]
    StatisticsManager 2017-04-07T15:14:07.864Z [DEBUG] 통계 관리자에서 설정 업데이트 중. settings=map[publish_interval:1000]
    CheckpointManager 2017-04-07T15:14:07.864Z [DEBUG] 690841985e8189a6c431bd9f25faf8a7/test-xdcr/test-xdcr vb=300에 대한 VBTimestamp 설정 완료됨
    GenericSupervisor 2017-04-07T15:14:07.864Z [오류] 오류 보고 수신: map[CheckpointMgr:파이프라인 690841985e8189a6c431bd9f25faf8a7/test-xdcr/test-xdcr-413659460]에 대한 시작 seqno 획득 실패]
    복제 관리자 2017-04-07T15:14:07.864Z [정보] 수퍼바이저 파이프라인 수퍼바이저_690841985e8189a6c431bd9f25faf8a7/test-xdcr/test-xdcr 유형의 *supervisor.일반 슈퍼바이저가 오류 맵을 보고했습니다[CheckpointMgr:파이프라인 690841985e8189a6c431bd9f25faf8a7/test-xdcr/test-xdcr-413659460]에 대한 시작 seqno를 얻지 못했습니다.
    파이프라인 관리자 2017-04-07T15:14:07.865Z [INFO] 파이프라인 업데이터 690841985e8189a6c431bd9f25faf8a7/test-xdcr/test-xdcr이 retry_interval=10으로 실행 중입니다.
    CheckpointManager 2017-04-07T15:14:07.865Z [INFO] SetVBTimestamps로 완료되었습니다.
    PipelineManager 2017-04-07T15:14:07.865Z [INFO] err_list=[{"time":"2017-04-07T15:14:07.865641343Z","errMsg":"CheckpointMgr:파이프라인 690841985e8189a6c431bd9f25faf8a7/test-xdcr/test-xdcr-413659460″}]
    PipelineManager 2017-04-07T15:14:07.865Z [INFO] 업데이터 690841985e8189a6c431bd9f25faf8a7/test-xdcr/test-xdcr이 0에서 1로 이동했습니다.
    Dcp노즐 2017-04-07T15:14:07.892Z [DEBUG] dcp_690841985e8189a6c431bd9f25faf8a7/test-xdcr/test-xdcr_10.0.0.3:11210_0 vb=100, 불투명=38204에 대한 vb 스트림을 시작하는 중입니다.
    Dcp노즐 2017-04-07T15:14:07.892Z [DEBUG] dcp_690841985e8189a6c431bd9f25faf8a7/test-xdcr/test-xdcr_10.0.0.3:11210_0 vb=0, 불투명=38204에 대한 vb 스트림을 시작하는 중입니다.
    _time=2017-04-07T15:14:07.893+00:00 _level=INFO _msg=UPR_STREAMREQ for vb 100 성공
    _time=2017-04-07T15:14:07.893+00:00 _level=INFO _msg=UPR_STREAMREQ for vb 0 성공
    Dcp노즐 2017-04-07T15:14:07.908Z [DEBUG] dcp_690841985e8189a6c431bd9f25faf8a7/test-xdcr/test-xdcr_10.0.0.3:11210_1 vb=300, 불투명=38205용 vb 스트리밍 시작 중
    Dcp노즐 2017-04-07T15:14:07.908Z [DEBUG] dcp_690841985e8189a6c431bd9f25faf8a7/test-xdcr/test-xdcr_10.0.0.3:11210_1 vb=200, 불투명=38205용 vb 스트리밍 시작 중
    _time=2017-04-07T15:14:07.909+00:00 _level=INFO _msg=UPR_STREAMREQ for vb 300 성공
    _time=2017-04-07T15:14:07.909+00:00 _level=INFO _msg=UPR_STREAMREQ for vb 200 성공
    GenericSupervisor 2017-04-07T15:14:08.074Z [DEBUG] 심장 박동 비동기 호출
    GenericSupervisor 2017-04-07T15:14:08.074Z [DEBUG]가 2017-04-07 15:14:08.074118904 +0000 UTC에 보낸 하트비트에 응답했습니다.
    StatisticsManager 2017-04-07T15:14:08.564Z [INFO] 파이프라인이 더 이상 실행되지 않습니다, 종료합니다.
    StatisticsManager 2017-04-07T15:14:08.564Z [INFO] expvar=파이프라인 통계 690841985e8189a6c431bd9f25faf8a7/test-xdcr/test-xdcr-413659460 {"Errors": "[{\"time\":\"2017-04-07T15:14:07.865641343Z\",\"errMsg\":\"CheckpointMgr:파이프라인 690841985e8189a6c431bd9f25faf8a7/test-xdcr/test-xdcr-413659460\"}]", "Overview": {"": 0, "대역폭_사용량": 0, "changes_left": 1, "data_replicated": 0, "DCP_DATACH_LENGTH": 0, "dcp_dispatch_time": 0, "DELETION_DOCS_WRITEN": 0, "DELETION_FAILED_CR_SOURCE": 0, "DELETION_FILTERED": 0, "DELETION_RECEived_From_DCP": 0, "docs_checked": 0, "docs_failed_cr_source": 0, "docs_filtered": 0, "docs_opt_repd": 0, "docs_processed": 0, "docs_received_from_dcp": 0, "docs_rep_queue": 0, "docs_written": 0, "expiry_docs_written": 0, "expiry_failed_cr_source": 0, "expiry_filtered": 0, "expiry_received_from_dcp": 0, "num_checkpoints": 0, "num_failedckpts": 0, "rate_doc_checks": 0, "rate_doc_opt_repd": 0, "rate_received_from_dcp": 0, "rate_replicated": 0, "resp_wait_time": 0, "set_docs_written": 0, "SET_FAILED_CR_SOURCE": 0, "SET_FILTERED": 0, "set_received_from_dcp": 0, "size_rep_queue": 0, "time_committing": 0, "wtavg_docs_latency": 0, "wtavg_meta_latency": 0}, "Progress": "오류 보고서 수신 : map[CheckpointMgr:파이프라인 690841985e8189a6c431bd9f25faf8a7/test-xdcr/test-xdcr-413659460]", "Status": "Pending"}

    이러한 오류가 발생하는 이유와 해결 방법을 알려주시겠습니까?

    잘 부탁드립니다.

댓글 남기기