메타데이터와 같은 레이블를 Docker 데몬에 연결할 수 있습니다. 레이블은 키/값 쌍으로, Docker 호스트가 컨테이너의 대상이 될 수 있도록 합니다. 레이블의 의미는 애플리케이션에 의해 완전히 정의됩니다. 새로운 Docker 제약 조건 는 특정 호스트의 작업을 대상으로 서비스를 생성하는 동안 지정할 수 있습니다. 실제 애플리케이션에서 Docker의 레이블과 제약 조건을 사용하는 방법을 살펴보겠습니다.
다차원 스케일링을 사용하는 카우치베이스 (또는 MDS)를 사용하면 인덱스, 데이터, 쿼리 및 전체 텍스트 검색 서비스를 분할할 수 있습니다.
를 여러 노드에서 사용할 수 있습니다. 각 서비스에 대한 요구 사항은 다릅니다. 예를 들어 쿼리는 CPU를 많이 사용하고, 인덱스는 디스크 집약적이며, 데이터는 SSD와 같은 메모리와 빠른 읽기/쓰기가 혼합되어 있습니다. MDS를 사용하면 애플리케이션 요구 사항의 변화에 따라 하드웨어 리소스를 노드별로 독립적으로 할당하고 최적화할 수 있습니다.
자세히 알아보기 다차원 스케일링.
다음을 사용하여 3노드 클러스터에서 이 작업을 쉽게 수행할 수 있는 방법을 살펴보겠습니다. 도커 스웜 모드.
Ubuntu 인스턴스 시작
Ubuntu Server 14.04 LTS(HVM)의 EC2에서 3개의 인스턴스를 시작하십시오(AMI ID: ami-06116566). 보안 그룹을 제외한 모든 경우에서 기본값을 사용합니다. 스웜 모드에는 다음 세 가지가 필요합니다. 호스트 간 포트 개방:
- TCP 포트 2377 클러스터 관리 커뮤니케이션용
- TCP 그리고 UDP 포트 7946 노드 간 통신을 위한
- TCP 그리고 UDP 포트 4789 오버레이 네트워크 트래픽에 대한
이러한 규칙을 사용하여 새 보안 그룹을 만들어야 합니다:

인스턴스가 프로비저닝될 때까지 몇 분 정도 기다리세요.
우분투에서 도커 설정
스웜 모드는 Docker 1.12에 도입되었습니다. 이 글을 작성하는 시점에 1.12 RC4가 최신 후보입니다. 다음 스크립트를 사용하여 실험적 기능이 포함된 RC4 릴리스를 설치하세요:
|
1 2 3 4 5 6 7 |
publicIp=`aws ec2 describe-instances --filters Name=instance-state-name,Values=running | jq -r .Reservations[].Instances[].PublicDnsName` for node in $publicIp do ssh -o StrictHostKeyChecking=no -i ~/.ssh/aruncouchbase.pem ubuntu@$node 'curl -fsSL https://experimental.docker.com/ | sh' ssh -i ~/.ssh/aruncouchbase.pem ubuntu@$node 'sudo usermod -aG docker ubuntu' ssh -i ~/.ssh/aruncouchbase.pem ubuntu@$node 'docker version' done |
이 스크립트에서는 다음과 같은 상황을 가정합니다. AWS CLI가 이미 설정되어 있습니다. 에 대해 다음 구성을 수행합니다. 모두 구성된 EC2에서 인스턴스 실행
계정으로 이동합니다:
- 각 인스턴스의 공용 IP 주소 가져오기
- 각 인스턴스에 대해
- 실험적 기능이 포함된 최신 Docker 릴리스를 설치하세요.
- 추가
우분투사용자를도커그룹에 추가합니다. 이렇게 하면 루트 사용자가 아닌 사용자로 Docker를 사용할 수 있습니다. - Docker 버전을 인쇄합니다.
이 간단한 스크립트는 세 인스턴스 모두에서 Docker 호스트를 설정합니다.
도커 데몬에 레이블 할당하기
레이블은 다음을 사용하여 정의할 수 있습니다. DOCKER_OPTS. 우분투의 경우, 이것은 /etc/default/docker 파일에 추가합니다. 각 노드에 고유한 레이블을 할당해야 합니다. 예를 들어 couchbase.mds 키
그리고
색인 값입니다.
|
1 2 3 4 |
ssh -i ~/.ssh/aruncouchbase.pem ubuntu@ 'sudo sed -i '/#DOCKER_OPTS/cDOCKER_OPTS="--label=couchbase.mds=index"' /etc/default/docker'; ssh -i ~/.ssh/aruncouchbase.pem ubuntu@ 'sudo restart docker' ssh -i ~/.ssh/aruncouchbase.pem ubuntu@ 'docker info'; |
또한 도커 데몬을 다시 시작해야 합니다. 마지막으로 도커 정보 시스템 전체 정보를 표시합니다:
|
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 34 35 36 37 38 |
Containers: 0 Running: 0 Paused: 0 Stopped: 0 Images: 0 Server Version: 1.12.0-rc4 Storage Driver: aufs Root Dir: /var/lib/docker/aufs Backing Filesystem: extfs Dirs: 0 Dirperm1 Supported: false Logging Driver: json-file Cgroup Driver: cgroupfs Plugins: Volume: local Network: null host bridge overlay Swarm: inactive Runtimes: runc Default Runtime: runc Security Options: apparmor Kernel Version: 3.13.0-74-generic Operating System: Ubuntu 14.04.3 LTS OSType: linux Architecture: x86_64 CPUs: 1 Total Memory: 992.5 MiB Name: ip-172-31-14-15 ID: KISZ:RSMD:4YOZ:2FKL:GJTN:EVGC:U3GH:CHC3:XUJN:4UJ2:H3QF:GZFH Docker Root Dir: /var/lib/docker Debug Mode (client): false Debug Mode (server): false Registry: https://index.docker.io/v1/ Labels: couchbase.mds=index Experimental: true Insecure Registries: 127.0.0.0/8 WARNING: No swap limit support |
보시다시피 이 정보에 레이블이 표시됩니다. 두 번째 노드에는 다른 레이블을 할당합니다:
|
1 2 3 4 |
ssh -i ~/.ssh/aruncouchbase.pem ubuntu@ 'sudo sed -i '/#DOCKER_OPTS/cDOCKER_OPTS="--label=couchbase.mds=data"' /etc/default/docker'; ssh -i ~/.ssh/aruncouchbase.pem ubuntu@ 'sudo restart docker' ssh -i ~/.ssh/aruncouchbase.pem ubuntu@ 'docker info'; |
두 번째 EC2 인스턴스의 IP 주소를 사용해야 합니다. 이 경우 Docker 데몬에 대한 업데이트된 정보가 표시됩니다:
|
1 2 |
Labels: couchbase.mds=data |
마지막으로 마지막 노드입니다:
|
1 2 3 4 |
ssh -i ~/.ssh/aruncouchbase.pem ubuntu@ 'sudo sed -i '/#DOCKER_OPTS/cDOCKER_OPTS="--label=couchbase.mds=query"' /etc/default/docker'; ssh -i ~/.ssh/aruncouchbase.pem ubuntu@ 'sudo restart docker' ssh -i ~/.ssh/aruncouchbase.pem ubuntu@ 'docker info'; |
이 호스트의 Docker 데몬에 대한 업데이트된 정보가 표시됩니다:
|
1 2 |
Labels: couchbase.mds=query |
저희의 경우, 운영 체제, CPU, 디스크, 메모리 용량 등 머신이 완전히 동일한 동종 클러스터가 만들어집니다. 실제 환경에서는 일반적으로 운영 체제는 동일하지만 디스크, CPU 및 메모리와 같은 인스턴스 용량은 실행하려는 Couchbase 서비스에 따라 달라질 수 있습니다. 이 경우 이러한 레이블은 완벽하게 이해되지만 여기서는 요점을 보여줍니다.
스웜 모드 활성화 및 클러스터 생성
스웜 모드를 활성화하고 매니저 노드 1개와 워커 노드 2개로 구성된 클러스터를 생성해 보겠습니다. 기본적으로 매니저는 워커 노드이기도 합니다. 첫 번째 노드에서 스웜을 초기화합니다:
|
1 |
ssh -i ~/.ssh/aruncouchbase.pem ubuntu@ 'docker swarm init --secret mySecret --listen-addr :2377' |
그러면 출력이 표시됩니다:
|
1 2 3 4 5 6 |
Swarm initialized: current node (ezrf5ap238kpmyq5h0lf55hxi) is now a manager. To add a worker to this swarm, run the following command: docker swarm join --secret mySecret --ca-hash sha256:ebda297c36a9d4c772f9e7867c453da42f69fe37cdfb1ba087f073051593a683 ip-172-31-14-15.us-west-1.compute.internal:2377 |
다른 두 노드를 워커로 추가합니다:
|
1 2 |
ssh -i ~/.ssh/aruncouchbase.pem ubuntu@ 'docker swarm join --secret mySecret :2377' ssh -i ~/.ssh/aruncouchbase.pem ubuntu@ 'docker swarm join --secret mySecret :2377' |
이 경우 정확한 명령과 출력은 다음과 같습니다:
|
1 2 3 |
ssh -i ~/.ssh/aruncouchbase.pem ubuntu@ec2-54-153-101-215.us-west-1.compute.amazonaws.com 'docker swarm init --secret mySecret --listen-addr ip-172-31-14-15.us-west-1.compute.internal:2377' ssh -i ~/.ssh/aruncouchbase.pem ubuntu@ec2-52-53-223-255.us-west-1.compute.amazonaws.com 'docker swarm join --secret mySecret ip-172-31-14-15.us-west-1.compute.internal:2377' ssh -i ~/.ssh/aruncouchbase.pem ubuntu@ec2-52-53-251-64.us-west-1.compute.amazonaws.com 'docker swarm join --secret mySecret ip-172-31-14-15.us-west-1.compute.internal:2377' |
이제 클러스터에 대한 전체 세부 정보를 얻을 수 있습니다:
|
1 |
ssh -i ~/.ssh/aruncouchbase.pem ubuntu@ec2-54-153-101-215.us-west-1.compute.amazonaws.com 'docker info' |
그리고 이것은 출력을 보여줍니다:
|
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 34 35 36 37 38 39 40 41 42 43 |
Containers: 0 Running: 0 Paused: 0 Stopped: 0 Images: 0 Server Version: 1.12.0-rc4 Storage Driver: aufs Root Dir: /var/lib/docker/aufs Backing Filesystem: extfs Dirs: 0 Dirperm1 Supported: false Logging Driver: json-file Cgroup Driver: cgroupfs Plugins: Volume: local Network: bridge null host overlay Swarm: active NodeID: ezrf5ap238kpmyq5h0lf55hxi IsManager: Yes Managers: 1 Nodes: 3 CACertHash: sha256:ebda297c36a9d4c772f9e7867c453da42f69fe37cdfb1ba087f073051593a683 Runtimes: runc Default Runtime: runc Security Options: apparmor Kernel Version: 3.13.0-74-generic Operating System: Ubuntu 14.04.3 LTS OSType: linux Architecture: x86_64 CPUs: 1 Total Memory: 992.5 MiB Name: ip-172-31-14-15 ID: KISZ:RSMD:4YOZ:2FKL:GJTN:EVGC:U3GH:CHC3:XUJN:4UJ2:H3QF:GZFH Docker Root Dir: /var/lib/docker Debug Mode (client): false Debug Mode (server): false Registry: https://index.docker.io/v1/ Labels: couchbase.mds=index Experimental: true Insecure Registries: 127.0.0.0/8 WARNING: No swap limit support |
관리자가 한 명인 3노드 클러스터가 생성되었음을 보여줍니다.
제약 조건으로 도커 서비스 실행
이제 서로 다른 제약 조건을 가진 세 개의 Couchbase 서비스를 실행해 보겠습니다. 각 Docker 서비스는 다음을 사용하여 제약 조건을 지정합니다.--constraint engine.labels. 형식에 앞서 노드에 대해 정의한 레이블과 일치하는 레이블이 있습니다. 각 서비스에는 개별적으로 확장할 수 있도록 고유한 이름이 부여됩니다. 모든 명령은 스웜 매니저로 전달됩니다:
|
1 2 3 |
ssh -i ~/.ssh/aruncouchbase.pem ubuntu@ 'docker service create --name=cb-mds-index --constraint engine.labels.couchbase.mds==index couchbase' ssh -i ~/.ssh/aruncouchbase.pem ubuntu@ 'docker service create --name=cb-mds-data --constraint engine.labels.couchbase.mds==data couchbase' ssh -i ~/.ssh/aruncouchbase.pem ubuntu@ 'docker service create --name=cb-mds-query --constraint engine.labels.couchbase.mds==query couchbase' |
이 경우의 정확한 명령은 다음과 같습니다:
|
1 2 3 4 5 |
> ssh -i ~/.ssh/aruncouchbase.pem ubuntu@ec2-54-153-101-215.us-west-1.compute.amazonaws.com 'docker service create --name=cb-mds-index --constraint engine.labels.couchbase.mds==index couchbase' 34lcko519mvr32hxw2m8dwp5c > ssh -i ~/.ssh/aruncouchbase.pem ubuntu@ec2-54-153-101-215.us-west-1.compute.amazonaws.com 'docker service create --name=cb-mds-data --constraint engine.labels.couchbase.mds==data couchbase' 0drcucii08tnx5sm9prug30m1 > ssh -i ~/.ssh/aruncouchbase.pem ubuntu@ec2-54-153-101-215.us-west-1.compute.amazonaws.com 'docker service create --name=cb-mds-query --constraint engine.labels.couchbase.mds==query couchbase' |
서비스 목록은 다음과 같이 확인할 수 있습니다:
|
1 |
ssh -i ~/.ssh/aruncouchbase.pem ubuntu@ 'docker service ls' |
출력은 다음과 같이 표시됩니다:
|
1 2 3 4 |
ID NAME REPLICAS IMAGE COMMAND 0drcucii08tn cb-mds-data 1/1 couchbase 34lcko519mvr cb-mds-index 1/1 couchbase bxjqjm6mashw cb-mds-query 1/1 couchbase |
그리고 각 서비스에 대한 작업 목록(기본적으로 해당 서비스 내의 컨테이너)을 다음과 같이 확인할 수 있습니다:
|
1 |
> ssh -i ~/.ssh/aruncouchbase.pem ubuntu@ 'docker service tasks ' |
그리고 우리의 경우의 결과물입니다:
|
1 2 3 4 5 6 7 8 9 |
> ssh -i ~/.ssh/aruncouchbase.pem ubuntu@ec2-54-153-101-215.us-west-1.compute.amazonaws.com 'docker service tasks cb-mds-index' ID NAME SERVICE IMAGE LAST STATE DESIRED STATE NODE 58jxojx32nf66jwqwt7nyg3cf cb-mds-index.1 cb-mds-index couchbase Running 6 minutes ago Running ip-172-31-14-15 > ssh -i ~/.ssh/aruncouchbase.pem ubuntu@ec2-54-153-101-215.us-west-1.compute.amazonaws.com 'docker service tasks cb-mds-data' ID NAME SERVICE IMAGE LAST STATE DESIRED STATE NODE af9zpuh6956fcih0sr70hfban cb-mds-data.1 cb-mds-data couchbase Running 6 minutes ago Running ip-172-31-14-14 > ssh -i ~/.ssh/aruncouchbase.pem ubuntu@ec2-54-153-101-215.us-west-1.compute.amazonaws.com 'docker service tasks cb-mds-query' ID NAME SERVICE IMAGE LAST STATE DESIRED STATE NODE ceqaza4xk02ha7t1un60jxtem cb-mds-query.1 cb-mds-query couchbase Running 6 minutes ago Running ip-172-31-14-13 |
이는 서비스가 여러 노드에 잘 분산되어 있음을 보여줍니다. 올바른 레이블이 있는 노드에서 작업이 실제로 예약되어 있는지 확인해 보세요. 모든 Couchbase 인스턴스를 클러스터로 구성하여 웹, 모바일 및 IoT 애플리케이션을 위한 완벽한 데이터베이스 솔루션을 제공할 수 있습니다. 자세히 알아보고 싶으신가요?
- 도커 스웜 모드
- 컨테이너의 카우치베이스
- 팔로우하기 @couchbasedev 또는 @couchbase
- 다음에 대해 질문하세요. 카우치베이스 포럼
[...] 영화 '인터스텔라' 제작을 위한 카우치베이스 블로그의 크기는 어떻게 되나요? 다차원 [...]