레이블이 couchbase인 게시물을 표시합니다. 모든 게시물 표시
레이블이 couchbase인 게시물을 표시합니다. 모든 게시물 표시

couchbase 포트 변경

# 커스텀 포트 설정
https://docs.couchbase.com/server/6.5/install/install-ports.html
# 포트 변경은 클러스터 구성전 초기설정에 수행해야 한다.
# 그렇지 않으면 노드의 데이터도 모두 삭제되기 때문의 주의해야 한다.
# port 설정 파일을 열어 8091 -> 9000 포트를 변경
vi /opt/couchbase/etc/couchbase/static_config
{rest_port, 9000}.

# 기존 설정된 파일 삭제
rm -rf /opt/couchbase/var/lib/couchbase/config/config.dat

# couchbase 재시작
sudo systemctl restart couchbase-server


#####


# tls 연결
# Couchbase 는 기본 8091 외 2.5 버전 이상 부터
# gocb 와 같은 SDK 에서 11201 포트(노드의 memcached protocol사용)로
# 클러스터 맵 정보를 파악한다.
# 하지만 연결 자체가 암호되어 있지 않다.
# 다음 설명을 보면 enterprise 버전에서만 인증서 기능을 제공하는것으로 보임
https://docs.couchbase.com/server/6.5/manage/manage-security/configure-server-certificates.html

Couchbase Server Enterprise Edition supports X.509 certificates, for the encryption of communications between the server and networked clients.

# community vs enterprise 기능 비교
https://www.couchbase.com/products/editions

couchbase migration

# couchbase cli tool 로 couchbase -> couchbase migration
# 로컬(mac 기준) couchbase 앱 설치
# 6.0 에는 cbxxx 툴이 없다.
# 6.0 실행후 6.5 로 업데이트해야 툴이 생긴다.
brew cask install couchbase-server-community

# cli 툴 위치로 이동
cd '/Applications/Couchbase Server.app/Contents/Resources/couchbase-core/bin'


#####


# bucket 이동(자세한 설명은 ./cbtransfer -h 참고)
# destination 에 dest_bucket1 버킷을 생성해둬야 한다.
./cbtransfer http://ysoftman-cb1:8091 http://ysoftman-cb2:8091 -u ysoftman -p password -b src_bucket1 -B dest_bucket1

# 로컬에 백업 받아 이동하기
# /Users/ysoftman/workspace/zzz 디렉토리를 생성해둬야 한다.
./cbtransfer http://ysoftman-cb1:8091/ couchstore-files:////Users/ysoftman/workspace/zzz -u ysoftman -p password -b src_bucket1 -B dest_bucket1

./cbtransfer couchstore-files:////Users/ysoftman/workspace/zzz http://ysoftman-cb2:8091/ -u ysoftman -p password -b src_bucket1 -B dest_bucket1

# 만약 local -> ysoftman-cb2 바로 접근이 되지 않는 상황이라면
# (ysoftman-cb2:11210 포트로 접근이 되어야 한다.)
# ysoftman-cb2 장비에 백업 파일을 올리고
rsync -avz ./zzz/ ysoftman@ysoftman-cb2:~/zzz

# ysoftman-cb2 장비에 접속해
ssh ysoftman@ysoftman-cb2

# 백업 파일을 ysoftman-cb2 로 올린다.
/opt/couchbase/bin/cbtransfer couchstore-files:////home/ysoftman/zzz http://ysoftman-cb2:8091/ -u ysoftman -p password -b src_bucket1 -B dest_bucket1


#####


# bucket 단위로 export/import
# cbexport(자세한 설명은 ./cbexport json -h 참고)
# document id 는 디폴트로 export 되지 않아
# --include-key 옵션으로 doc___id 필드에 document id 저장
# --include-key 를 사용하면 value {} 필드안에 값이 저장된다.
./cbexport json -c couchbase://ysoftman-cb1 -u ysoftman -p password -b bucket1 -o bucket1.json -f lines -t 4 --include-key doc___id

# cbimport(자세한 설명은 ./cbimport json -h 참고)
# 신규 cb 에 버킷이 존재해야 한다.
# doc___id 필드의 값을 document id 로 사용
./cbimport json -c couchbase://ysoftman-cb2 -u ysoftman -p password -b bucket1 -d file:///Applications/Couchbase\ Server.app/Contents/Resources/couchbase-core/bin/bucket1.json -f lines -t 4 -g %doc___id%

# 필드 삭제
# --include-key doc___id 를 사용시
# 다음과 같이 import 하기 때문에 필요시 doc___id, value 부분을 삭제해야 한다.
doc___id : "문서id"
value : {
문서내용
}

# 필드 쿼리를 위해 버킷1 에 대한 query 메뉴에서 인덱스 추가
create primary index `#primary` on `bucket1`

# 필드 제거 query
update bucket1 unset doc___id

# 필드 제거 확인 query
select * from bucket1

couchbase cli 사용하기

# couchbase 설치된 곳에 /opt/couchbase/bin/couchbase-cli 을 사용해
# 다양한 작업을 실행할 수 있다.
# 참고로 아래 예시는 couchbase 6.0 기준 이고 버전에 따라 조금 다를 수 있다.

# administrator 비번 변경
# administrator 는 couchbase 설치시 생성한것(이름은 이때 정함)으로 1개만 있다.
# sudo 를 사용하는 이유는 암호 변경을 위해서는
# 토큰(/opt/couchbase/var/lib/couchbase/localtoken)파일로 인증하는데
# couchbase 사용자,그룹만 권한이 있어서다.
sudo /opt/couchbase/bin/couchbase-cli reset-admin-password --new-password ysoftman

# 서버(노드) 추가
# 노드가 수십개 이상일 경우 어드민툴(:8091)->servers->add server 하기보다
# couchbase-cli 를 이용한 쉘 스크립트를 실행하면 편한다.
for ((i=1;i<=10;i++)); do
target="ysoftman-couchbase-$i"
echo "${target}"
/opt/couchbase/bin/couchbase-cli server-add -c ysoftman-couchbase-1 -u admin -p ysoftman --server-add-username=admin --server-add-password=ysoftman --server-add=${target}
done
/opt/couchbase/bin/couchbase-cli rebalance -c ysoftma-couchbase-1 -u admin -p ysoftman

# 서버 리스트 확인
/opt/couchbase/bin/couchbase-cli server-list -c ysoftman-couchbase-1 -u admin -p ysoftman

couchbase cluster in kubernetes

# kubernetes(k8s) 노드가 다음과 같이 구성되어 있다고 가정하고 설치한다.
1 maser
3 worker
1 ingress

# k8s couchbase 설치 참고
# https://kubernetes.io/blog/2016/08/create-couchbase-cluster-using-kubernetes/

# couchbase-cluster-master.yaml 내용
apiVersion: v1
kind: ReplicationController
metadata:
  name: couchbase-master-rc
spec:
  replicas: 1
  selector:
    app: couchbase-master-pod
  template:
    metadata:
      labels:
        app: couchbase-master-pod
    spec:
      containers:
      - name: couchbase-master
        image: couchbase:community-6.0.0
        env:
          - name: TYPE
            value: MASTER
        ports:
        - containerPort: 8091

---

apiVersion: v1
kind: Service
metadata:
  name: couchbase-master-service
  labels:
    app: couchbase-master-service
spec:
  ports:
    - port: 8091
  selector:
    app: couchbase-master-pod
  # type: LoadBalancer

# couchbase-cluster-worker.yaml 내용
apiVersion: v1
kind: ReplicationController
metadata:
  name: couchbase-worker-rc
spec:
  replicas: 3
  selector:
    app: couchbase-worker-pod
  template:
    metadata:
      labels:
        app: couchbase-worker-pod
    spec:
      containers:
      - name: couchbase-worker
        image: couchbase:community-6.0.0
        env:
          - name: TYPE
            value: "WORKER"
          - name: COUCHBASE_MASTER
            value: "couchbase-master-service"
          - name: AUTO_REBALANCE
            value: "false"
        ports:
        - containerPort: 8091

# couchbase-cluster-ingress.yaml 내용
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: couchbase-ingress
  namespace: default
  annotations:
    ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
  - host: ysoftman-couchbase-server
    http:
      paths:
      - path: /
        backend:
          serviceName: couchbase-master-service
          servicePort: 8091

# couchbase 클러스터 master, worker, service, ingress 생성
kubectl apply -f couchbase-cluster-master.yaml
kubectl apply -f couchbase-cluster-worker.yaml
kubectl apply -f couchbase-cluster-ingress.yaml

# service, pod 확인
kubectl get all

# ingress 확인
kubectl get ingress

# ysoftman-couchbase-server 도메인을 만들면 ingress에서 처리해
# 외부에서 접속 할 수 있다.
http://ysoftman-couchbase-server

# couchbase 클러스터 구성
# worker pod 들의 ip 를 파악해서
kubectl get pod -o wide

# couchbase admin 페이지에서 서버 ip 를 추가한다.
http://ysoftman-couchbase-server -> servers -> add server 로 추가 -> rebalance

golang couchbase 사용

테스트 내용

JSON document DB

JSON document 를 저장하고 싶은데 CouchDB, Elasticsearch, MongoDB 어떤것을 선택해야 할까?
https://db-engines.com/en/system/CouchDB%3BElasticsearch%3BMongoDB