본문 바로가기

프로그래밍/Database

Couchbase cluster with 2 vm

VM을 두대만 할당 받음으로써 한 VM에는 multi instance 구성이 필요했다. 

권장 사항은 아니지만 진행해보기로 했는데, 막히는 부분들이 많아 정리를 하게 되었다. 



아래의 문서들을 참고 했다. 

Installing Multiple Instances on Linux Platforms

Installing as non-root, non-sudo

Network and Firewall Requirements

Using user-defined ports

Initializing the Cluster


Running Couchbase Server Using Docker



VM 1)


우선 rpm을 받자.

$ wget https://packages.couchbase.com/releases/6.0.0/couchbase-server-community-6.0.0-centos7.x86_64.rpm


만약 wget이 없으면 설치해주자. 

$ sudo yum install wget


instance를 두개 띄워야 한다. 

rpm 패키지를 설치하는 것이 아니라 두개의 디렉토리를 생성하여 

$ mkdir inst1

$ mkdir inst2

$ cp --.rpm inst1/

$ mv --.rpm inst2/


각각 위치에서 압축을 풀어주자. 

$ cd inst1/

$ rpm2cpio couchbase-server-enterprise_version.rpm | cpio --extract --make-directories --no-absolute-filenames



하나는 디폴트 그대로 사용하기로 하고 나머지 하나의 인스턴스는 재정의가 필요하다.

inst2를 재정의하자.

user defined port를 추가하자.

$ cd inst2/opt/couchbase/

$ vi ect/couchbase/static-config


{rest_port, 9000}.

{mccouch_port, 8999}.

{memcached_port, 12000}.

{memcached_dedicated_port, 11999}.

{moxi_port, 12001}.

{moxi_port_internal, 12002}.

{short_name, "ns_inst2"}.

{ssl_rest_port,11000}.

{ssl_capi_port,11001}.

{ssl_proxy_downstream_port,11002}.

{ssl_proxy_upstream_port,11003}.


short_name를 ns_inst2로 설정했다.

bin/couchbase-server에서 디폴트로 ns_1으로 되어있는 것을 변경해줘야 한다. 

$ sed -i 's/ns_1/ns_inst2/g' bin/couchbase-server


또한 etc/couchdb/default.d/capi.ini에서 CAPI 포트를 변경해줘야 한다. 

8092 -> 8192


non-sudo install 방식이기 때문에 아래의 스크립트를 실행해줘야 한다. 

$ ./bin/install/reloc.sh `pwd`


이전 config 설정은 지워주자.

$ rm -r var/lib/couchbase/config/config.dat 


이제 서버를 가동시켜보자.

$ ./bin/couchbase-server \-- -noinput -detached


확인 

$ ps -ef | grep inst2

$ netstat -ntl | grep 9000


디폴트 서버도 띄워보자.

디폴트 short_name은 ns_1이고 포트는 8091이다. 

$ cd inst1/opt/couchbase

$ ./bin/install/reloc.sh `pwd`

$ ./bin/couchbase-server \-- -noinput -detached

$ ps -ef | grep ns_1

$ netstat -ntl | grep 8091




VM2)

rpm install로 진행했다. 


$ sudo rpm --install --.rpm

$ sudo systemctl start couchbase-server

$ ps -ef | grep couchbase

$ netstat -ntl | grep 8091


--> 아래와 같은 에러 메시지가 나타나서 non-sudo install 방식으로 변경해 보았다. -_-

Audit Write Failure. Attempt to write to audit log on node VM2


    // delete

    $ sudo systemctl stop couchbase-server

    $ sudo rpm -qa | grep couchbase

    $ sudo rpm -e couchbase-server-community-6.0.0-1693.x86_64

    $ sudo rm -rf /opt/couchbase/




------


세개의 인스턴스가 띄워졌음이 확인됐으면 Admin으로 가서 연결해줘보자.

연결하는 부분은 크게 막히는 부분이 없어서 couchbase 공식 문서를 보면서 진행해보면 될 것 같다.






------

결론적으로 docker를 활용하진 않았지만 메모용으로 몇줄 적는다. 


// 설치 및 hello-world!

$ sudo yum install -y yum-utils \

    device-mapper-persistent-data \

    lvm2


$ sudo yum-config-manager \

    --add-repo \

    https://download.docker.com/linux/centos/docker-ce.repo


$ sudo yum install docker-ce docker-ce-cli containerd.io

$ sudo systemctl start docker

$ sudo docker run hello-world


// 삭제하기
$ sudo docker kill db1

$ sudo docker rm db1

$ sudo docker rmi {image id}


// couchbase 데몬 돌리기

$ sudo docker run -d --name db1 couchbase:community-6.0.0

$ sudo docker run -d --name db2 -p 8091-8094:8091-8094 -p 11210:11210 couchbase:community-6.0.0

$ sudo docker logs db2

$ sudo docker inspect --format '{{ .NetworkSettings.IPAddress }}' db2


// for multi node

$ sudo docker run -d --name db -v ~/couchbase:/opt/couchbase/var --net=host couchbase:community-6.0.0



// local에 couchbase

$ docker exec -it {couchbase} /bin/bash

$ docker exec -it {couchbase} apt-get update   // vi가 없어서..

$ apt-get update

$ apt-get install vim





// local에 centos image 받아서 해보기

$ docker search centos

$ docker pull centos

$ docker run -d -it --name cb3 temp_commit bash

$ docker run -d -it --name cb3 -p 8091-9030:8091-9030 -p 12001:12001 temp_commit bash

$ docker exec -it cb3 /bin/bash


    $ yum update

    $ yum install -y net-tools

    $ yum install -y file

    $ yum install -y perl




// commit, save, load

$ docker commit -p  78727078a04b  container1

$ docker save -o ~/container1.tar container1

$ docker load -i /root/container1.tar

'프로그래밍 > Database' 카테고리의 다른 글

mongo + ec2 + springboot  (0) 2020.09.10
MySQL Locking Reads  (0) 2020.05.26
DBCP & Timeout  (0) 2019.04.05
NoSQL 정리  (0) 2019.03.21
Normalization & Denormalization 요약  (0) 2019.03.19