MongoDB - Replica-set, Sharded Cluster Deployment Tutorial

김상헌·2023년 3월 7일
0

데이터베이스

목록 보기
5/6

로컬에 Replica-set 을 구축하는 방법, Sharded Cluster 배포하는 방법을 알 수 있습니다.

구축 환경

  • Mac OS

설치

  1. 다운로드 이후, 작업할 디렉토리 생성
mkdir -p ~/mongodb-folder
mkdir -p ~/mongodb-folder/mongodb/data{1,2,3}
mkdir -p ~/mongodb-folder/mongodb/config
mkdir -p ~/mongodb-folder/mongodb/log
  1. ~/mongodb-folder 로 압축을 풀어줍니다.

mongodb 실행

Terminal 3개를 열어서 각각 실행합니다.

# Terminal 1번
cd ~/mongodb-folder/mongodb-macos-x86_64-5.0.15/bin

./mongod --replSet rs1 --port 27017 --bind_ip "0.0.0.0" -dbpath ~/mongodb-folder/mongodb/data1 --oplogSize 128
# Terminal 2번
cd ~/mongodb-folder/mongodb-macos-x86_64-5.0.15/bin

./mongod --replSet rs1 --port 27018 --bind_ip "0.0.0.0" -dbpath ~/mongodb-folder/mongodb/data2 --oplogSize 128
# Terminal 3번
cd ~/mongodb-folder/mongodb-macos-x86_64-5.0.15/bin
./mongod --replSet rs1 --port 27019 --bind_ip "0.0.0.0" -dbpath ~/mongodb-folder/mongodb/data3 --oplogSize 128

각 mongodb server 는 port 27017, 27018, 27019 로 실행되며, 각 데이터베이스 데이터 저장 디렉토리는 data1, data2, data3 로 지정합니다.

Replica-set 으로 지정

replSet 옵션을 주어서 동작시켰지만, replica initiazation 이 안된 상황이라 다음과 같이 에러가 발생합니다. 정상입니다.

Terminal 하나 더 켜서 Shell 을 통해 MongoDB Server 에 접근합니다.

cd ~/mongodb-folder/mongosh-1.8.0-darwin-x64/bin
./mongosh "mongodb://localhost:27017"

접속이 되면 Replica-set 을 Initialize 합니다.

rs.initiate({
    _id: "rs1",
    members: [
        { _id: 0, host: "localhost:27017" },
        { _id: 1, host: "localhost:27018" },
        { _id: 2, host: "localhost:27019" },
    ],
});

rs.status;

  • Initiate 를 실행하는 Mongodb Server 는 최초 Secondary 이지만 곧 Primary 가 됩니다.

Sharded Cluster 배포

Ref : https://github.com/minhhungit/mongodb-cluster-docker-compose

Docker Compose 를 통해 Local 에 배포하도록 하겠습니다. Git Clone 을 ~/mongodb-folder 에 해줍니다.

cd ~/mongodb-folder
git clone https://github.com/minhhungit/mongodb-cluster-docker-compose.git
  1. docker compose up
cd ~/mongodb-folder/mongodb-cluster-docker-compose
docker compose up -d
  1. config server 와 shard 설정을 해줍니다.
docker-compose exec configsvr01 sh -c "mongosh < /scripts/init-configserver.js"

docker-compose exec shard01-a sh -c "mongosh < /scripts/init-shard01.js"
docker-compose exec shard02-a sh -c "mongosh < /scripts/init-shard02.js"
docker-compose exec shard03-a sh -c "mongosh < /scripts/init-shard03.js"
  1. router 초기화
docker-compose exec router01 sh -c "mongosh < /scripts/init-router.js"
  1. router 로 접속
docker-compose exec router01 mongosh --port 27017
  1. sh.status() 로 상태 확인

위처럼 구성해도 직접 sharding 을 활성화하지 않으면, partition 되어 데이터가 저장되지 않습니다. 따라서 직접 활성화를 해줘야 합니다.

  1. 데이터 베이스 생성 및 샘플 데이터 insert
use test
db.abc.insertOne({ a: 1, b:2})
sh.status()

test database 생성 후, abc 로 데이터를 하나 넣고, sh.status() 를 확인합니다.
database section 을 확인하면 아래에 빨간 영역이 false 로 되어있을겁니다.

  1. sharding 활성화
sh.enableSharding("test")
sh.status()

sharding 을 활성화하면 partitioned 가 true 로 변경된걸 확인할 수 있습니다. 데이터는 Collection 단위로 분산할 수 있고, Collection 에 대한 Sharding 도 설정해줘야 합니다.

  1. Collection Sharding 설정
db.abc.createIndex({a: 1})
sh.shardCollection("test.abc", {a: 1})

shard 를 설정하기 위해서는 index 가 필요합니다.
위처럼 Collection 에 Shard 를 지정하면 a 컬럼에 대한 range shard 로 설정이 됩니다.

profile
배움을 즐기는 개발자입니다.

0개의 댓글