분류

Couchbase C 클라이언트 라이브러리(libcouchbase)와 함께 제공되는 Couchbase 도구

이 블로그 게시물에서는 libcouchbase 클라이언트 라이브러리의 잘 알려지지 않은 기능 몇 가지를 소개합니다. 이 글에서는 총칭하여 아래에 있는 libcouchbase 도구에 대해 설명합니다. cbc는 원래 트론드 노비가 작성한 명령어입니다. 하이레벨 바인딩을 작성하거나 애플리케이션을 구현하는 데는 사용하지 않겠지만 여전히 여러모로 유용합니다. 진단 또는 디버그 도구로 유용하거나 스크립트에서도 사용할 수 있는 libcouchbase 사용의 좋은 예입니다.

현재 릴리스(1.0)의 libcouchbase와 다음 릴리스(1.1)의 개발자 프리뷰가 있으며, 이 글에서는 1.1 프리뷰에 대해 설명하고 현재 버전에서 액세스할 수 없는 기능에 대해 알려드리겠습니다.

[편집] 이 블로그는 libcouchbase 2.0과 함께 제공되는 도구의 새로운 기능에 대해 작성되었습니다. 최신 버전은 현재 3.0이며, 설치 방법은 다음에서 확인할 수 있습니다. https://docs.couchbase.com/c-sdk/3.0/hello-world/start-using-sdk.html 에서 최신 버전의 도구에 대해 자세히 알아보세요. https://docs.couchbase.com/c-sdk/3.0/hello-world/cbc.html#command-line

설치 후 cbc 명령을 사용할 수 있으며 설치된 버전을 확인할 수 있습니다:

$ cbc 버전
CBC 빌드 출처: 라이브러리카우치베이스 1.1.0DP8
libcouchbase를 사용합니다: 1.1.0dp8

이 글을 쓰는 시점에서 현재 릴리스된 버전은 1.1.0dp6이지만, 스냅샷 저장소를 통해 최신 빌드용 패키지를 사용할 수 있다는 점에 유의하세요. 이에 대한 자세한 내용은 마지막에 설명합니다.

를 사용하여 가능한 모든 하위 명령을 인쇄할 수 있습니다. 도움말하위 명령:

$ cbc 도움말
사용법: cbc 명령 [옵션]
명령이 될 수 있습니다:
도움말 이 도움말을 표시하거나 주어진 명령에 대해
cat 출력 키를 STDOUT으로
cp 저장소 파일을 클러스터에 추가합니다.
옵션으로 스토어 파일 만들기
플러시 클러스터에서 모든 키 제거
해시 키를 해시하고 유용한 정보를 인쇄합니다.
잠금 잠금 키
잠금 해제 키 잠금 해제
rm 키 제거
통계 표시
파일로 캐시에 있는 콘텐츠 확인
버전 표시 버전
'cbc 명령 -help'를 사용하여 옵션을 표시합니다.

"도움말" 명령은 명령 이름을 인수로 받아들이고 명령의 간단한 설명과 명령이 처리할 수 있는 모든 옵션을 표시합니다. CBC 도움말 CP.

이 명령은 최근에 추가되었으며 일부 버전에서는 제공되지 않을 수 있습니다. 설치한 모든 버전에서 여전히 명령 목록을 가져올 수 있습니다. cbc인자 없이 "cbc cp -help"를 입력합니다.

모든 명령은 하위 명령 또는 메인 바이너리에 대한 심볼릭 링크(예: "cbc cp" 및 "cbc-cp")로 액세스할 수 있습니다. 후자의 형식은 셸 스크립트에서 유용합니다.

클러스터에 연결

모든 명령은 다음과 같은 공통 인수 집합을 허용합니다. --호스트, --버킷, --user, --비밀번호--timeout. 이러한 인수는 버킷 이름이나 권한 부여와 같은 특수 연결 옵션이 필요한 클러스터와의 상호 작용이 필요한 모든 명령에 지정해야 합니다.

옵션 --enable-timings는 모든 작업에 대한 cbc 기록 타이밍을 설정한 다음 STDERR로 출력합니다.

기본적으로 다음을 사용합니다. localhost에 대한 --호스트, 기본값에 대한 --버킷아무것도 --user/--비밀번호그리고 마지막으로 2500000마이크로초 --timeout.

연결 설정이 기본값이 아닌데도 매번 입력하는 것이 귀찮다면 다음 주소의 파일에 모든 설정을 저장해 두면 됩니다. $HOME/.cbcrc를 사용하며 모든 libcouchbase 도구는 시작하기 전에 이 형식을 사용합니다. 형식은 매우 간단합니다. 모든 빈 줄과 줄이 #는 건너뜁니다. 다음은 구성 예시입니다:

# 이 구성은 연결 기본값을 변경하고 타임아웃을 3초로 설정합니다.
uri=example.com:8091,example.org:8091
사용자=관리자
비밀번호=s3cr3t
버킷=마이버킷
timeout=3000000

재정의하는 방법도 있습니다. .cbcrc값을 사용하지만 명령줄 인수인 환경 변수 설정을 존중합니다. Couchbase cbc 도구는 시작할 때 다음 변수를 확인합니다: 카우치베이스_클러스터_우리, 카우치베이스_클러스터_사용자, 카우치베이스_클러스터_암호, 카우치베이스_클러스터_버킷.

cbc-cpcbc-cp: 클러스터에 파일 복사

$ cbc 도움말 cp
사용법: cp [옵션] [인수]

-? 이 도움말 텍스트 인쇄(-help)
-h val 연결할 호스트 이름(-host)
-b val 사용할 버킷(-버킷)
-u val 나머지 포트의 사용자 이름(-user)
-P val 나머지 포트의 비밀번호(-password)
-T 명령 타이밍 사용(-enable-timings)
-t val 타임아웃 값 지정(-타임아웃)

이 명령은 키의 파일명을 사용하여 파일 내용을 지정된 클러스터에 복사합니다. 예를 들어 다음 명령은 JSON 파일의 내용을 저장합니다. buzz.json:

$ cbc cp buzz.json
저장된 "buzz.json" CAS:66f09fa920d0000

저장 후 표준 오류에 대한 상태가 표시됩니다. 명령 cbc-cp는 파일 이름을 키 이름으로, 파일 내용을 값으로 사용합니다. 이 명령은 작업을 파이프라인으로 처리하므로 여러 파일을 빠르게 저장할 수 있습니다:

$ cbc cp buzz.json barbie.json
저장된 "buzz.json" CAS:6c55a2eae30d0000
저장된 "barbie.json" CAS:bdf8a2eae30d0000

이 명령은 STDIN에서 파일 목록을 읽을 수도 있습니다. 예를 들어 ls명령을 cbc cp(파일 이름은 개행 문자로 구분해야 합니다):

$ ls *.json | cbc cp -
저장된 "barbie.json" CAS:8eb154e522020000
저장된 "buzz.json" CAS:95a67ee922020000

cbc-create: 특정 옵션으로 키 만들기

$ cbc 도움말 만들기
사용법: [옵션] [인수] 만들기

-? 이 도움말 텍스트 인쇄(-help)
-h val 연결할 호스트 이름(-host)
-b val 사용할 버킷(-버킷)
-u val 나머지 포트의 사용자 이름(-user)
-P val 나머지 포트의 비밀번호(-password)
-T 명령 타이밍 사용(-enable-timings)
-t val 타임아웃 값 지정(-타임아웃)
-f val 새 객체에 대한 플래그(-flag)
-e val 새 객체의 만료 시간(-exptime)
-개체가 존재하면 실패(-add)

이 명령은 만료 시간 등 주어진 옵션을 사용하여 클러스터에 항목을 만듭니다(--엑스타임), 플래그(--flag) 또는 강제로 ADD 명령(--추가), 키가 이미 클러스터에 있으면 실패합니다. 이 명령은 단일 키에 대해서만 작동한 다음 STDIN의 값을 기다립니다( ^D를 클릭하여 필요한 EOF를 삽입합니다.) 예를 들어

$ cbc create -f 3735928559 hello
안녕하세요, 카우치베이스!
저장된 "hello" CAS:b79b729f70070000

cbc-cat: STDOUT에 키 인쇄

$ cbc 도움말 고양이
사용법: cat [옵션] [인수]

-? 이 도움말 텍스트 인쇄(-help)
-h val 연결할 호스트 이름(-host)
-b val 사용할 버킷(-버킷)
-u val 나머지 포트의 사용자 이름(-user)
-P val 나머지 포트의 비밀번호(-password)
-T 명령 타이밍 사용(-enable-timings)
-t val 타임아웃 값 지정(-타임아웃)

이 명령은 단순히 모든 키의 내용을 유닉스 명령처럼 STDOUT에 기록합니다. cat(1). 또한 STDERR에 유용한 정보를 기록합니다. 예를 들어, 키 hello를 설정합니다:

$ cbc 고양이 안녕하세요
"hello" 크기 18 플래그:deadbeef CAS:853dcf95bc070000
안녕하세요, 카우치베이스!

cbc-rm: 키 제거

$ cbc 도움말 rm
사용법: rm [옵션] [인수]

-? 이 도움말 텍스트 인쇄(-help)
-h val 연결할 호스트 이름(-host)
-b val 사용할 버킷(-버킷)
-u val 나머지 포트의 사용자 이름(-user)
-P val 나머지 포트의 비밀번호(-password)
-T 명령 타이밍 사용(-enable-timings)
-t val 타임아웃 값 지정(-타임아웃)

이 명령은 클러스터에서 지정된 키를 제거합니다:

$ cbc rm hello
"안녕하세요" 제거

cbc-hash: 해시 계산 수행

$ cbc 도움말 해시
사용법: 해시 [옵션] [인수]

-? 이 도움말 텍스트 인쇄(-help)
-h val 연결할 호스트 이름(-host)
-b val 사용할 버킷(-버킷)
-u val 나머지 포트의 사용자 이름(-user)
-P val 나머지 포트의 비밀번호(-password)
-T 명령 타이밍 사용(-enable-timings)
-t val 타임아웃 값 지정(-타임아웃)

이 명령은 현재 클러스터 구성을 사용하여 키의 해시값을 계산하고 키를 저장해야 하는 서버를 찾습니다. 또한 키를 담당하는 vbucket, 해당 vbucket의 주소, Couchbase 보기 요청에 대한 엔드포인트 및 복제 노드 목록에 대한 유용한 정보를 기록합니다.

$ cbc 해시 푸 바 바즈
"foo" vBucket: 115, Server: "172.16.16.193:12000", Couch API: "https://172.16.16.193:9500/default", Replicas: “127.0.0.1:11210”, “172.16.16.193:12000”, “172.16.16.193:12003”
"bar" vBucket: 767, Server: "172.16.16.193:12009", Couch API: "https://172.16.16.193:9503/default", Replicas: “127.0.0.1:11210”, “172.16.16.193:12000”, “172.16.16.193:12003”
"baz" vBucket: 36, Server: "172.16.16.193:12000", Couch API: "https://172.16.16.193:9500/default", Replicas: “127.0.0.1:11210”, “172.16.16.193:12000”, “172.16.16.193:12003”

cbc-stats: 클러스터 통계 덤프

$ cbc 도움말 통계
사용법: 통계 [옵션] [인수]

-? 이 도움말 텍스트 인쇄(-help)
-h val 연결할 호스트 이름(-host)
-b val 사용할 버킷(-버킷)
-u val 나머지 포트의 사용자 이름(-user)
-P val 나머지 포트의 비밀번호(-password)
-T 명령 타이밍 사용(-enable-timings)
-t val 타임아웃 값 지정(-타임아웃)

이 명령은 서버 통계의 탭으로 구분된 튜플을 반환합니다. 먼저 포트가 포함된 노드 호스트 이름, 통계 키 및 통계 값이 반환됩니다.

간단한 스크립팅 예시를 보여드리기 위해 전체 클러스터(이 클러스터에는 5개의 노드가 있음)에서 사용된 메모리를 계산하는 방법을 보여드리겠습니다:

$ cbc stats | awk '/mem_used/ { print($1 ": " $3); sum += $3 }' END {print("total:" sum)}'
192.168.1.3:12000: 20369582
192.168.1.3:12003: 22086752
192.168.1.3:12006: 21664064
127.0.0.1:11210: 27053336
192.168.1.3:12009: 22086752
합계: 113260486

통계 출력에는 라이브 클러스터의 통계뿐만 아니라 구성 매개변수도 포함됩니다. 키 잠금의 최대 및 기본 시간(초 단위)을 확인할 수 있습니다(곧 알려드릴 예정입니다):

$ cbc 통계 | grep getl
127.0.0.1:11210 ep_getl_default_timeout 15
127.0.0.1:11210 ep_getl_max_timeout 30
192.168.1.3:12000 ep_getl_default_timeout 15
192.168.1.3:12000 ep_getl_max_timeout 30
192.168.1.3:12003 ep_getl_default_timeout 15
192.168.1.3:12003 ep_getl_max_timeout 30
192.168.1.3:12009 ep_getl_default_timeout 15
192.168.1.3:12009 ep_getl_max_timeout 30
192.168.1.3:12006 ep_getl_default_timeout 15
192.168.1.3:12006 ep_getl_max_timeout 30

cbc-lock: 잠금 키

$ cbc 도움말 잠금
사용법: 잠금 [옵션] [인수]

-? 이 도움말 텍스트 인쇄(-help)
-h val 연결할 호스트 이름(-host)
-b val 사용할 버킷(-버킷)
-u val 나머지 포트의 사용자 이름(-user)
-P val 나머지 포트의 비밀번호(-password)
-T 명령 타이밍 사용(-enable-timings)
-t val 타임아웃 값 지정(-타임아웃)
-e val 잠금의 만료 시간(-exptime)

이 명령은 지정된 키를 잠그고 모든 변경 요청이 오류를 생성하도록 합니다. 이 명령은 만료 시간("-exptime")을 지정할 수 있습니다. 위에서 설명한 대로 "cbc-stats" 명령으로 클러스터 기본 및 최대 시간 초과를 검사할 수 있습니다.

$ cbc 만들기 안녕하세요
안녕하세요
저장된 "hello" CAS:57fa8b8c01020000
$ cbc rm hello
"안녕하세요"를 제거하지 못했습니다:
잘못된 인수
$ 수면 20
$ cbc rm hello
"안녕하세요" 제거

그리고 cbc-lock명령은 여러 개의 키를 허용합니다.

CBC-언락: 잠금 해제 키

$ cbc 도움말 잠금 해제
사용법: [옵션] [인수] 잠금 해제

-? 이 도움말 텍스트 인쇄(-help)
-h val 연결할 호스트 이름(-host)
-b val 사용할 버킷(-버킷)
-u val 나머지 포트의 사용자 이름(-user)
-P val 나머지 포트의 비밀번호(-password)
-T 명령 타이밍 사용(-enable-timings)
-t val 타임아웃 값 지정(-타임아웃)

이 명령은 주어진 키를 잠금 해제합니다. 이 명령은 키와 CAS 값의 쌍을 허용합니다. 쌍이 일치하면 서버가 잠금을 해제합니다.

$ cbc lock -e 30 *.json > /dev/null
"barbie.json" 크기:139 플래그:0 CAS:900ccb8ea2030000
"buzz.json" 크기:93 플래그:0 CAS:e79acb8ea2030000
$ 씨비씨 잠금 해제 바비.json 900ccb8ea2030000 버즈.json e79acb8ea2030000
잠금 해제된 "barbie.json"
잠금 해제된 "buzz.json"

cbc-verify: 키 확인

$ cbc 도움말 확인
사용법: 확인 [옵션] [인수]

-? 이 도움말 텍스트 인쇄(-help)
-h val 연결할 호스트 이름(-host)
-b val 사용할 버킷(-버킷)
-u val 나머지 포트의 사용자 이름(-user)
-P val 나머지 포트의 비밀번호(-password)
-T 명령 타이밍 사용(-enable-timings)
-t val 타임아웃 값 지정(-타임아웃)

이 명령은 키의 일관성을 확인합니다. 키의 내용을 해당 파일과 비교합니다. 모든 것이 정상이면 종료 시 0 코드를 반환하고 아무것도 출력하지 않습니다. 뭔가 잘못되었을 때 더 흥미롭습니다. 제거해 봅시다. buzz.json를 클릭하고 barbie.json:

$ cbc cp *.json
저장된 "barbie.json" CAS:59c1a52165050000
저장된 "buzz.json" CAS:e17da62165050000
$ cbc rm buzz.json
"buzz.json" 제거
$ 에코 "쓰레기" >> barbie.json
$ cbc verify *.json
크기가 잘못되었습니다: "barbie.json"
"buzz.json"을 가져오는 데 실패했습니다: 해당 키가 없습니다.
$ 에코 $?
1
보시다시피 "cbc"에는 매우 유용한 유틸리티가 많이 있습니다. 훌륭한 UNIX 전통에 따라 자신만의 스크립트와 로직으로 이를 기반으로 구축할 수 있습니다. 물론 모두 오픈 소스로 제공되므로 자유롭게 코드를 살펴보고 새로운 아이디어를 제공하실 수도 있습니다. github.
최신 코드가 통과된 직후에 최신 코드를 받으려면 다음과 같이 하세요. 코드 검토이 글을 쓰는 시점에서 이 블로그에 표시되는 모든 내용을 포함하여, 우리의 스냅샷 리포지토리 를 클릭하고 libcouchbase 패키지를 업데이트하세요.
고마워요!
이 문서 공유하기
받은 편지함에서 카우치베이스 블로그 업데이트 받기
이 필드는 필수 입력 사항입니다.

Author

Posted by 세르게이 아브제예프, SDK 엔지니어, 카우치베이스

세르게이 아브제예프는 Couchbase의 SDK 엔지니어입니다. 세르게이 아브제예프는 Couchbase 복제 프로토콜인 DCP를 구현하는 기본 라이브러리와 Kafka 커넥터의 개발을 담당하고 있습니다. 또한 Couchbase용 PHP SDK를 유지 관리합니다.

댓글 남기기

카우치베이스 카펠라를 시작할 준비가 되셨나요?

구축 시작

개발자 포털에서 NoSQL을 살펴보고, 리소스를 찾아보고, 튜토리얼을 시작하세요.

카펠라 무료 사용

클릭 몇 번으로 Couchbase를 직접 체험해 보세요. Capella DBaaS는 가장 쉽고 빠르게 시작할 수 있는 방법입니다.

연락하기

카우치베이스 제품에 대해 자세히 알고 싶으신가요? 저희가 도와드리겠습니다.