카우치베이스의 데이터센터 간 복제(XDCR) 는 한 클러스터에서 다른 클러스터로 데이터를 쉽게 복제할 수 있는 방법을 제공합니다. 클러스터는 일반적으로 지리적으로 가까운 곳에 설정됩니다.
다양한 데이터 센터에 분산되어 있습니다. 이를 통해 재해 복구 또는 사용자에게 더 가까운 곳에 데이터를 배치하여 더 빠르게 데이터에 액세스할 수 있습니다. 이 블로그에서 보여드리겠습니다:
- 도커 스웜을 사용하여 두 개의 데이터 센터 설정하기
- 도커 스웜의 각 노드에서 카우치베이스 컨테이너를 실행하세요.
- 각 Docker Swarm 클러스터에 Couchbase 클러스터 설정하기
- 두 개의 Couchbase 클러스터 간에 단방향 XDCR 구성
이 블로그의 목적상, 두 데이터 센터는 Docker Machine을 사용하여 로컬 머신에 설정됩니다.
이 블로그에 사용된 전체 코드는 다음 링크에서 확인할 수 있습니다: github.com/arun-gupta/couchbase-xdcr-docker.
영사 검색 서비스 만들기
도커 스웜의 각 노드에 등록해야 합니다. 검색 서비스. 이 블로그에서는 이를 위해 Consul을 사용할 것입니다. 그리고 Consul도 Docker 머신에서 실행할 것입니다. 일반적으로 다음을 실행합니다.
의 클러스터를 만들 수 있지만, 간단하게 하기 위해 단일 인스턴스를 시작합니다. Docker 머신을 생성하고 다음을 사용하여 Consul을 시작합니다. 이 스크립트:
1 2 3 4 5 6 7 8 9 10 11 |
영사용 # 도커 머신 도커-machine create -d 가상박스 영사-machine # 시작 컨설턴트 도커 $(도커-machine 구성 영사-machine) 실행 -d --다시 시작=항상 -p "8500:8500" -h "영사" 프로그리움/영사 -서버 -부트스트랩 |
도커 스웜 클러스터 생성
Docker Swarm을 사용하면 여러 Docker 호스트를 하나의 장치로 볼 수 있습니다. 이를 통해 멀티 컨테이너 애플리케이션을 여러 호스트에서 쉽게 실행할 수 있습니다. 도커 스웜은 동일한 원격 API 를 단일 호스트에서 제공하는 것으로 간주합니다. 이렇게 하면 기존 도구가 단일 호스트 또는 호스트 클러스터를 대상으로 할 수 있습니다. 두 Docker 스웜 클러스터는 모두 단일 검색 서비스에 등록됩니다. 이는 다음 값을 사용하여 달성할 수 있습니다.
--스웜 검색
:
1 |
영사://$(도커-머신 IP 컨설-머신):8500/v1/kv/ |
다음을 사용하여 도커 머신을 사용하여 도커 스웜 클러스터를 생성합니다. 이 스크립트:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
# 도커 스웜 마스터 도커-machine create -d 가상박스 --swarm --swarm-마스터 --swarm-발견="consul://$(도커-머신 아이피 consul-machine):8500/v1/kv/cluster$1" --엔진-opt="클러스터-스토어=컨설턴트://$(도커-머신 IP 컨설턴트-머신):8500/v1/kv/클러스터$1" --엔진-opt="cluster-advertise=eth1:2376" swarm-마스터-$1 # 도커 스웜 노드-01 도커-machine create -d 가상박스 --swarm --swarm-발견="consul://$(도커-머신 아이피 consul-machine):8500/v1/kv/cluster$1" --엔진-opt="클러스터-스토어=컨설턴트://$(도커-머신 IP 컨설턴트-머신):8500/v1/kv/클러스터$1" --엔진-opt="cluster-advertise=eth1:2376" swarm-노드-$1-01 # 도커 스웜 노드-02 도커-machine create -d 가상박스 --swarm --swarm-발견="consul://$(도커-머신 아이피 consul-machine):8500/v1/kv/cluster$1" --엔진-opt="클러스터-스토어=컨설턴트://$(도커-머신 IP 컨설턴트-머신):8500/v1/kv/클러스터$1" --엔진-opt="cluster-advertise=eth1:2376" swarm-노드-$1-02 # 도커 스웜 클러스터를 사용하도록 구성하기 평가 "$(도커-머신 환경-스웜 스웜 마스터-$1)" |
스크립트는 다음과 같이 호출해야 합니다:
1 2 |
./create-도커-swarm-클러스터.sh A ./create-도커-swarm-클러스터.sh B |
이렇게 하면 아래와 같이 하나의 "마스터"와 두 개의 "워커"로 구성된 두 개의 Docker Swarm 클러스터가 생성됩니다:
1 2 3 4 5 6 7 8 9 |
이름 ACTIVE 드라이버 상태 URL SWARM DOCKER 오류 영사-machine - 가상박스 실행 중 tcp://192.168.99.101:2376 v1.11.1 기본값 * 가상박스 실행 중 tcp://192.168.99.100:2376 v1.11.1 swarm-마스터-A - 가상박스 실행 중 tcp://192.168.99.102:2376 swarm-master-A (마스터) v1.11.1 swarm-마스터-B - 가상박스 실행 중 tcp://192.168.99.105:2376 swarm-master-B(마스터) v1.11.1 swarm-노드-A-01 - 가상박스 실행 중 tcp://192.168.99.103:2376 swarm-master-A v1.11.1 swarm-노드-A-02 - 가상박스 실행 중 tcp://192.168.99.104:2376 swarm-master-A v1.11.1 swarm-노드-B-01 - 가상박스 실행 중 tcp://192.168.99.106:2376 swarm-master-B v1.11.1 swarm-노드-B-02 - 가상박스 실행 중 tcp://192.168.99.107:2376 swarm-master-B v1.11.1 |
Consul이 IP 주소가 있는 Docker 머신에서 실행 중입니다. 192.168.99.101.
따라서 컨설턴트 UI는 http://192.168.99.101:8500 에서 액세스할 수 있습니다:
등록한 두 개의 Docker 스웜 클러스터가 표시됩니다. 각 클러스터의 정확한 노드 목록도 볼 수 있습니다. 노드 clusterA
가 표시됩니다:
의 노드 clusterB
가 표시됩니다:
Couchbase 컨테이너 실행
다음을 사용하여 Docker Swarm 클러스터의 각 노드에서 Couchbase 컨테이너를 실행합니다. 파일 작성.
1 2 3 4 5 6 7 8 9 10 |
버전: "2" 서비스: db: 이미지: arungupta/카우치베이스 네트워크 모드: "host" 포트: - 8091:8091 - 8092:8092 - 8093:8093 - 11210:11210 |
첫 번째 클러스터에 대해 Docker CLI를 구성하고 컨테이너 3개를 실행합니다:
1 2 |
평가 "$(도커-머신 환경-스웜 스웜-마스터-A)" 도커-작성 규모 db=3 |
실행 중인 컨테이너를 확인합니다:
1 2 3 4 5 |
> 도커 ps 컨테이너 ID 이미지 COMMAND 생성됨 상태 포트 이름 3ec0f15aaee0 arungupta/카우치베이스 "/entrypoint.sh /opt/" 3 시간 전 Up 3 시간 swarm-마스터-A/couchbasexdcrdocker_db_3 07af2ac53539 arungupta/카우치베이스 "/entrypoint.sh /opt/" 3 시간 전 Up 3 시간 swarm-노드-A-02/couchbasexdcrdocker_db_2 c94878f543fd arungupta/카우치베이스 "/entrypoint.sh /opt/" 3 시간 전 Up 3 시간 swarm-노드-A-01/couchbasexdcrdocker_db_1 |
두 번째 클러스터에 대해 Docker CLI를 구성하고 컨테이너 3개를 실행합니다:
1 2 |
평가 "$(도커-머신 환경-스웜 스웜 마스터-B)" 도커-작성 규모 db=3 |
실행 중인 컨테이너를 확인합니다:
1 2 3 4 5 6 |
> 평가 "$(도커-머신 환경-스웜 스웜 마스터-B)" > 도커 ps 컨테이너 ID 이미지 COMMAND 생성됨 상태 포트 이름 3e3a45480939 arungupta/카우치베이스 "/entrypoint.sh /opt/" 3 시간 전 Up 3 시간 swarm-마스터-B/couchbasexdcrdocker_db_3 1f31f23e337d arungupta/카우치베이스 "/entrypoint.sh /opt/" 3 시간 전 Up 3 시간 swarm-노드-B-01/couchbasexdcrdocker_db_1 1FEAB04C494C arungupta/카우치베이스 "/entrypoint.sh /opt/" 3 시간 전 Up 3 시간 swarm-노드-B-02/couchbasexdcrdocker_db_2 |
카우치베이스 클러스터 생성/재조정
CLI를 사용하여 카우치베이스 클러스터 확장 및 재조정하기 는 Couchbase 노드 클러스터를 생성하고 다음을 사용하여 기존 클러스터를 재조정하는 방법을 설명합니다. 카우치베이스 CLI.
다음을 사용하여 각 스웜 클러스터에 Couchbase 클러스터를 생성합니다. 이 스크립트.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
내보내기 COUCHBASE_CLI=/사용자/arungupta/도구/카우치베이스-서버-4.0.app/콘텐츠/리소스/카우치베이스-핵심/bin/카우치베이스-cli 에 대한 노드 in 01 02 do $COUCHBASE_CLI 서버-추가 --클러스터=$(도커-machine IP swarm-마스터-$1):8091 --사용자 관리자 --비밀번호 비밀번호 --서버-추가=$(도커-machine IP swarm-노드-$1-$노드) --서버-추가-사용자 이름=관리자 --서버-추가-비밀번호=비밀번호 완료 $COUCHBASE_CLI 설정-클러스터 --클러스터=$(도커-machine IP swarm-마스터-$1):8091 --사용자 관리자 --비밀번호 비밀번호 --클러스터-이름=클러스터$1 |
스크립트는 다음과 같이 호출해야 합니다:
1 |
./create-카우치베이스-클러스터.sh A |
이제 이 스크립트를 사용하여 이 클러스터의 밸런스를 재조정합니다:
1 2 3 4 5 6 7 8 |
내보내기 COUCHBASE_CLI=/사용자/arungupta/도구/카우치베이스-서버-4.0.app/콘텐츠/리소스/카우치베이스-핵심/bin/카우치베이스-cli $COUCHBASE_CLI 재조정 --클러스터=$(도커-machine IP swarm-마스터-$1):8091 --사용자 관리자 --비밀번호 비밀번호 --서버-추가-사용자 이름=관리자 --서버-추가-비밀번호=비밀번호 |
이 스크립트는 다음과 같이 호출됩니다:
1 |
./재조정-카우치베이스-클러스터.sh A |
카우치베이스 웹 콘솔 를 입력하면 클러스터의 모든 노드에 대한 출력이 표시됩니다:
이 스크립트를 호출하여 두 번째 Couchbase 클러스터를 다음과 같이 생성합니다:
1 |
./create-카우치베이스-클러스터.sh B |
이 클러스터의 밸런스를 다음과 같이 재조정합니다:
1 |
./재조정-카우치베이스-클러스터.sh B |
두 번째 클러스터의 모든 노드에 대한 Couchbase 웹 콘솔에 출력이 표시됩니다:
XDCR 설정
데이터센터 간 복제는 단방향, 양방향 또는 다방향으로 설정할 수 있습니다. 단방향은 소스 클러스터에서 대상 클러스터로 데이터를 복제할 수 있고, 양방향은 양방향으로 복제할 수 있으며, 다방향은 양방향으로 복제할 수 있습니다.
를 사용하면 모든 방향으로 구성할 수 있습니다. 다음을 사용하여 간단한 단방향 복제를 만들어 보겠습니다. 이 스크립트:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
내보내기 COUCHBASE_CLI=/사용자/arungupta/도구/카우치베이스-서버-4.0.app/콘텐츠/리소스/카우치베이스-핵심/bin/카우치베이스-cli $COUCHBASE_CLI xdcr-설정 --클러스터=$(도커-machine IP swarm-마스터-$1):8091 --사용자 관리자 --비밀번호 비밀번호 --create --xdcr-클러스터-이름=클러스터$1 --xdcr-호스트 이름=$(도커-machine IP swarm-마스터-$2):8091 --xdcr-사용자 이름=관리자 --xdcr-비밀번호=비밀번호 --xdcr-수요-암호화=0 $COUCHBASE_CLI xdcr-복제 --클러스터 $(도커-machine IP swarm-마스터-$1):8091 --xdcr-클러스터-이름=클러스터$1 --사용자 관리자 --비밀번호 비밀번호 --create --xdcr-에서-버킷=여행-샘플 --xdcr-에-버킷=여행-샘플 |
이 스크립트는 다음과 같이 호출됩니다:
1 |
./설정-xdcr.sh A B |
명령을 다시 실행하되 소스 클러스터와 대상 클러스터를 반대로 하면 양방향 복제를 쉽게 만들 수 있습니다. 소스 클러스터에 대한 Couchbase 웹 콘솔이 표시됩니다:
대상 클러스터에 대한 Couchbase 웹 콘솔이 표시됩니다:
즐기세요!
이 블로그에서는 Docker Machine, Docker Swarm 및 도커 컴포즈.
안녕하세요, 도커 스웜 모드를 사용하기 때문에 여기에 게시 된 게시물을 따라 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"}
이러한 오류가 발생하는 이유와 해결 방법을 알려주시겠습니까?
잘 부탁드립니다.