메타데이터와 같은 레이블를 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 설명-인스턴스 --필터 이름=인스턴스-상태-이름,값=실행 중 | jq -r .예약[].인스턴스[].PublicDnsName` 에 대한 노드 in $publicIp do ssh -o StrictHostKeyChecking=아니요 -i ~/.ssh/아룬카우치베이스.pem 우분투@$노드 'curl -fsSL https://experimental.docker.com/ | sh' ssh -i ~/.ssh/아룬카우치베이스.pem 우분투@$노드 'sudo usermod -aG 도커 우분투' ssh -i ~/.ssh/아룬카우치베이스.pem 우분투@$노드 '도커 버전' 완료 |
이 스크립트에서는 다음과 같은 상황을 가정합니다. AWS CLI가 이미 설정되어 있습니다. 에 대해 다음 구성을 수행합니다. 모두 구성된 EC2에서 인스턴스 실행
계정으로 이동합니다:
- 각 인스턴스의 공용 IP 주소 가져오기
- 각 인스턴스에 대해
- 실험적 기능이 포함된 최신 Docker 릴리스를 설치하세요.
- 추가
우분투
사용자를도커
그룹에 추가합니다. 이렇게 하면 루트 사용자가 아닌 사용자로 Docker를 사용할 수 있습니다. - Docker 버전을 인쇄합니다.
이 간단한 스크립트는 세 인스턴스 모두에서 Docker 호스트를 설정합니다.
도커 데몬에 레이블 할당하기
레이블은 다음을 사용하여 정의할 수 있습니다. DOCKER_OPTS
. 우분투의 경우, 이것은 /etc/default/docker
파일에 추가합니다. 각 노드에 고유한 레이블을 할당해야 합니다. 예를 들어 couchbase.mds
키
그리고
색인
값입니다.
1 2 3 4 |
ssh -i ~/.ssh/아룬카우치베이스.pem 우분투@ 'sudo sed -i '/#DOCKER_OPTS/cDOCKER_OPTS="--label=couchbase.mds=index"'' /etc/default/docker'; ssh -i ~/.ssh/아룬카우치베이스.pem 우분투@ 'sudo 재시작 도커' ssh -i ~/.ssh/아룬카우치베이스.pem 우분투@ '도커 정보'; |
또한 도커 데몬을 다시 시작해야 합니다. 마지막으로 도커 정보
시스템 전체 정보를 표시합니다:
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 |
컨테이너: 0 실행 중: 0 일시 중지됨: 0 중지됨: 0 이미지: 0 서버 버전: 1.12.0-rc4 스토리지 드라이버: aufs 루트 Dir: /var/lib/도커/aufs 후원 파일 시스템: extfs Dirs: 0 Dirperm1 지원: false 로깅 드라이버: json-파일 Cgroup 드라이버: cgroupfs 플러그인: 볼륨: local 네트워크: null 호스트 bridge 오버레이 스웜: 비활성 런타임: runc 기본값 런타임: runc 보안 옵션: 앱어머 커널 버전: 3.13.0-74-일반 운영 시스템: 우분투 14.04.3 LTS OSType: 리눅스 아키텍처: x86_64 CPU: 1 합계 메모리: 992.5 MiB 이름: IP-172-31-14-15 ID: KISZ:RSMD:4YOZ:2FKL:GJTN:EVGC:U3GH:CHC3:XUJN:4UJ2:H3QF:GZFH Docker 루트 Dir: /var/lib/도커 Debug 모드 (클라이언트): false Debug 모드 (서버): false 레지스트리: https://index.docker.io/v1/ 레이블: 카우치베이스.mds=색인 실험적: true 안전하지 않음 레지스트리: 127.0.0.0/8 경고: 아니요 스왑 limit 지원 |
보시다시피 이 정보에 레이블이 표시됩니다. 두 번째 노드에는 다른 레이블을 할당합니다:
1 2 3 4 |
ssh -i ~/.ssh/아룬카우치베이스.pem 우분투@ 'sudo sed -i '/#DOCKER_OPTS/cDOCKER_OPTS="--label=couchbase.mds=data"' /etc/default/docker'; ssh -i ~/.ssh/아룬카우치베이스.pem 우분투@ 'sudo 재시작 도커' ssh -i ~/.ssh/아룬카우치베이스.pem 우분투@ '도커 정보'; |
두 번째 EC2 인스턴스의 IP 주소를 사용해야 합니다. 이 경우 Docker 데몬에 대한 업데이트된 정보가 표시됩니다:
1 2 |
레이블: 카우치베이스.mds=데이터 |
마지막으로 마지막 노드입니다:
1 2 3 4 |
ssh -i ~/.ssh/아룬카우치베이스.pem 우분투@ 'sudo sed -i '/#DOCKER_OPTS/cDOCKER_OPTS="--label=couchbase.mds=query"' /etc/default/docker'; ssh -i ~/.ssh/아룬카우치베이스.pem 우분투@ 'sudo 재시작 도커' ssh -i ~/.ssh/아룬카우치베이스.pem 우분투@ '도커 정보'; |
이 호스트의 Docker 데몬에 대한 업데이트된 정보가 표시됩니다:
1 2 |
레이블: 카우치베이스.mds=쿼리 |
저희의 경우, 운영 체제, CPU, 디스크, 메모리 용량 등 머신이 완전히 동일한 동종 클러스터가 만들어집니다. 실제 환경에서는 일반적으로 운영 체제는 동일하지만 디스크, CPU 및 메모리와 같은 인스턴스 용량은 실행하려는 Couchbase 서비스에 따라 달라질 수 있습니다. 이 경우 이러한 레이블은 완벽하게 이해되지만 여기서는 요점을 보여줍니다.
스웜 모드 활성화 및 클러스터 생성
스웜 모드를 활성화하고 매니저 노드 1개와 워커 노드 2개로 구성된 클러스터를 생성해 보겠습니다. 기본적으로 매니저는 워커 노드이기도 합니다. 첫 번째 노드에서 스웜을 초기화합니다:
1 |
ssh -i ~/.ssh/아룬카우치베이스.pem 우분투@ '도커 스웜 초기화 --비밀 내비밀 --듣기 주소 :2377' |
그러면 출력이 표시됩니다:
1 2 3 4 5 6 |
스웜 초기화: 현재 노드 (ezrf5ap238kpmyq5h0lf55hxi) 는 지금 a 관리자. To 추가 a worker 에 이 swarm, 실행 의 다음 명령: 도커 swarm join --비밀 mySecret --ca-해시 sha256:ebda297c36a9d4c772f9e7867c453da42f69fe37cdfb1ba087f073051593a683 IP-172-31-14-15.us-west-1.compute.internal:2377 |
다른 두 노드를 워커로 추가합니다:
1 2 |
ssh -i ~/.ssh/아룬카우치베이스.pem 우분투@ '도커 스웜 조인 --secret mySecret :2377' ssh -i ~/.ssh/아룬카우치베이스.pem 우분투@ '도커 스웜 조인 --secret mySecret :2377' |
이 경우 정확한 명령과 출력은 다음과 같습니다:
1 2 3 |
ssh -i ~/.ssh/아룬카우치베이스.pem 우분투@ec2-54-153-101-215.us-west-1.compute.amazonaws.com '도커 스웜 초기화 --secret mySecret --listen-addr ip-172-31-14-15.us-west-1.compute.internal:2377' ssh -i ~/.ssh/아룬카우치베이스.pem 우분투@ec2-52-53-223-255.us-west-1.compute.amazonaws.com '도커 스웜 조인 --secret mySecret ip-172-31-14-15.us-west-1.compute.internal:2377' ssh -i ~/.ssh/아룬카우치베이스.pem 우분투@ec2-52-53-251-64.us-west-1.compute.amazonaws.com '도커 스웜 조인 --secret mySecret ip-172-31-14-15.us-west-1.compute.internal:2377' |
이제 클러스터에 대한 전체 세부 정보를 얻을 수 있습니다:
1 |
ssh -i ~/.ssh/아룬카우치베이스.pem 우분투@ec2-54-153-101-215.us-west-1.compute.amazonaws.com '도커 정보' |
그리고 이것은 출력을 보여줍니다:
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 |
컨테이너: 0 실행 중: 0 일시 중지됨: 0 중지됨: 0 이미지: 0 서버 버전: 1.12.0-rc4 스토리지 드라이버: aufs 루트 Dir: /var/lib/도커/aufs 후원 파일 시스템: extfs Dirs: 0 Dirperm1 지원: false 로깅 드라이버: json-파일 Cgroup 드라이버: cgroupfs 플러그인: 볼륨: local 네트워크: bridge null 호스트 오버레이 스웜: 활성 NodeID: ezrf5ap238kpmyq5h0lf55hxi IsManager: 예 관리자: 1 노드: 3 CACertHash: sha256:ebda297c36a9d4c772f9e7867c453da42f69fe37cdfb1ba087f073051593a683 런타임: runc 기본값 런타임: runc 보안 옵션: 앱어머 커널 버전: 3.13.0-74-일반 운영 시스템: 우분투 14.04.3 LTS OSType: 리눅스 아키텍처: x86_64 CPU: 1 합계 메모리: 992.5 MiB 이름: IP-172-31-14-15 ID: KISZ:RSMD:4YOZ:2FKL:GJTN:EVGC:U3GH:CHC3:XUJN:4UJ2:H3QF:GZFH Docker 루트 Dir: /var/lib/도커 Debug 모드 (클라이언트): false Debug 모드 (서버): false 레지스트리: https://index.docker.io/v1/ 레이블: 카우치베이스.mds=색인 실험적: true 안전하지 않음 레지스트리: 127.0.0.0/8 경고: 아니요 스왑 limit 지원 |
관리자가 한 명인 3노드 클러스터가 생성되었음을 보여줍니다.
제약 조건으로 도커 서비스 실행
이제 서로 다른 제약 조건을 가진 세 개의 Couchbase 서비스를 실행해 보겠습니다. 각 Docker 서비스는 다음을 사용하여 제약 조건을 지정합니다.--constraint engine.labels.
형식에 앞서 노드에 대해 정의한 레이블과 일치하는 레이블이 있습니다. 각 서비스에는 개별적으로 확장할 수 있도록 고유한 이름이 부여됩니다. 모든 명령은 스웜 매니저로 전달됩니다:
1 2 3 |
ssh -i ~/.ssh/아룬카우치베이스.pem 우분투@ 'docker 서비스 생성 --name=cb-mds-index --constraint engine.labels.couch-base.mds==index couch-base' ssh -i ~/.ssh/아룬카우치베이스.pem 우분투@ '도커 서비스 생성 --이름=cb-mds-data --constraint engine.labels.couchbase.mds==데이터 카우치베이스' ssh -i ~/.ssh/아룬카우치베이스.pem 우분투@ 'docker 서비스 생성 --name=cb-mds-query --constraint engine.labels.couch-base.mds==query couch-base' |
이 경우의 정확한 명령은 다음과 같습니다:
1 2 3 4 5 |
> ssh -i ~/.ssh/아룬카우치베이스.pem 우분투@ec2-54-153-101-215.us-west-1.compute.amazonaws.com 'docker 서비스 생성 --name=cb-mds-index --constraint engine.labels.couch-base.mds==index couch-base' 34lcko519mvr32hxw2m8dwp5c > ssh -i ~/.ssh/아룬카우치베이스.pem 우분투@ec2-54-153-101-215.us-west-1.compute.amazonaws.com '도커 서비스 생성 --이름=cb-mds-data --constraint engine.labels.couchbase.mds==데이터 카우치베이스' 0drcucii08tnx5sm9prug30m1 > ssh -i ~/.ssh/아룬카우치베이스.pem 우분투@ec2-54-153-101-215.us-west-1.compute.amazonaws.com 'docker 서비스 생성 --name=cb-mds-query --constraint engine.labels.couch-base.mds==query couch-base' |
서비스 목록은 다음과 같이 확인할 수 있습니다:
1 |
ssh -i ~/.ssh/아룬카우치베이스.pem 우분투@ '도커 서비스 ls' |
출력은 다음과 같이 표시됩니다:
1 2 3 4 |
ID 이름 복제 이미지 COMMAND 0DRCUCII08TN cb-mds-데이터 1/1 카우치베이스 34LKKO519MVR cb-mds-색인 1/1 카우치베이스 bxjqjm6mashw cb-mds-쿼리 1/1 카우치베이스 |
그리고 각 서비스에 대한 작업 목록(기본적으로 해당 서비스 내의 컨테이너)을 다음과 같이 확인할 수 있습니다:
1 |
> ssh -i ~/.ssh/아룬카우치베이스.pem 우분투@ '도커 서비스 작업 ' |
그리고 우리의 경우의 결과물입니다:
1 2 3 4 5 6 7 8 9 |
> ssh -i ~/.ssh/아룬카우치베이스.pem 우분투@ec2-54-153-101-215.us-west-1.compute.amazonaws.com '도커 서비스 작업 cb-mds-index' ID 이름 서비스 이미지 LAST 상태 DESIRED 상태 NODE 58jxojx32nf66jwqwt7nyg3cf cb-mds-색인.1 cb-mds-색인 카우치베이스 실행 중 6 분 전 실행 중 IP-172-31-14-15 > ssh -i ~/.ssh/아룬카우치베이스.pem 우분투@ec2-54-153-101-215.us-west-1.compute.amazonaws.com '도커 서비스 작업 cb-mds-data' ID 이름 서비스 이미지 LAST 상태 DESIRED 상태 NODE af9zpuh6956fcih0sr70hfban cb-mds-데이터.1 cb-mds-데이터 카우치베이스 실행 중 6 분 전 실행 중 IP-172-31-14-14 > ssh -i ~/.ssh/아룬카우치베이스.pem 우분투@ec2-54-153-101-215.us-west-1.compute.amazonaws.com '도커 서비스 작업 cb-mds-query' ID 이름 서비스 이미지 LAST 상태 DESIRED 상태 NODE CEQAZA4XK02HA7T1UN60JXTEM cb-mds-쿼리.1 cb-mds-쿼리 카우치베이스 실행 중 6 분 전 실행 중 IP-172-31-14-13 |
이는 서비스가 여러 노드에 잘 분산되어 있음을 보여줍니다. 올바른 레이블이 있는 노드에서 작업이 실제로 예약되어 있는지 확인해 보세요. 모든 Couchbase 인스턴스를 클러스터로 구성하여 웹, 모바일 및 IoT 애플리케이션을 위한 완벽한 데이터베이스 솔루션을 제공할 수 있습니다. 자세히 알아보고 싶으신가요?
- 도커 스웜 모드
- 컨테이너의 카우치베이스
- 팔로우하기 @couchbasedev 또는 @couchbase
- 다음에 대해 질문하세요. 카우치베이스 포럼
[...] 영화 '인터스텔라' 제작을 위한 카우치베이스 블로그의 크기는 어떻게 되나요? 다차원 [...]