서로 다른 세 대의 컴퓨터(서버) 위에서 Docker Container MongoDB 클러스터를 구축하는 방법에 대해 설명한다.
1.
spark 이미지를 받는다.
sudo docker docker pull mongo
받는데 시간이 좀 걸림
아래 명령어로 image 가 잘 받아졌는지 확인한다.
sudo docker images
2.
네트워크를 만든다.
가장 마지막에 있는 "cw-net" 이 지금 만들고자 하는 네트워크의 이름이다.
sudo docker network create --subnet 11.11.11.0/24 cw-net
아래 명령어로 network 잘 만들어졌는지 확인한다.
sudo docker network ls
subnet 옵션으로, 8bit 네개로 구성된 ip 에서 얼마만큼의 범위로 ip 를 사용할 수 있는지 정할 수 있다.
뒤에 slash 다음에 나오는 숫자만큼, ip 의 앞단 범위가 고정되고, 나머지가 우리가 사용할 수 있는 ip 범위가 된다.
이를테면
11.11.11.0/8 는 11.11.11.0 bold 한 곳은 고정되고 나머지 부분이 사용가능하기 때문에,
11.11.11.1 ~ 11.255.255.254 만큼 사용 가능하다.
11.11.11.0/16 은 11.11.11.0 bold 한 곳은 고정되고 나머지 부분이 사용가능하기 때문에,
11.11.11.1 ~ 11.11.255.254 만큼 사용 가능하다.
11.11.11.0/24 은 11.11.11.0 bold 한 곳은 고정되고 나머지 부분이 사용가능하기 때문에,
11.11.11.1 ~ 11.11.11.254 만큼 사용 가능하다.
왜 11.11.11.0 ~ 11.11.11.255 가 아닐까?
왜냐면 사용 가능한 ip 중 가장 앞의 ip (11.11.11.0) 은 Network-ID 으로 사용되고,
사용 가능한 ip 중 가장 뒤의 ip (11.11.11.255) 는 Broadcast 에 사용되기 때문이다.
저 두 ip 는 특수 목적용이기 때문에, 우리 자체적으로 사용할 수 없음.
참고로 Docker swarm 을 한 상태에서 overlay network 를 만들고 싶다면 아래 명령어 참고
sudo docker network create -d=overlay --subnet 11.11.11.0/24 --attachable my-net
3.
router server 역할을 하는 mongo-router 와
config server 역할을 하는 mongo-cnf 를 아래처럼 만든다.
< mongo-cnf Container > sudo docker run -d --name mongo-cnf --network cw-net --ip 11.11.11.9 mongo mongod --replSet cnf-serv --configsvr --port 27017
< mongo-router Container >
|
4.
mongo-cnf 의 mongo shell 로 접속한 후 replica 를 등록.
실상 replica 는 여러 대가 될 수 있겠지만, 여기 포스트에서는 하나만 등록한다.
sudo docker exec -it mongo-cnf mongo
rs.initiate( {
|
등록 후 secondary 가 primary 로 바뀌는 것을 확인한다.
" cnf-serv:SECONDARY> " => " cnf-serv:PRIMARY> "
또한, "ok" : 1 란 응답이 와야 한다.
shell 에서 나가려면 Ctrl+C 를 누르거나 exit 을 타이핑한다.
5.
아래 명령어로 데이터를 분배할 shard node 를 3개 만든다.
sudo docker run -d --name mongo1 --network cw-net --ip 11.11.11.12 mongo mongod --shardsvr --port 27017 sudo docker run -d --name mongo2 --network cw-net --ip 11.11.11.13 mongo mongod --shardsvr --port 27017 sudo docker run -d --name mongo3 --network cw-net --ip 11.11.11.16 mongo mongod --shardsvr --port 27017
|
6.
mongo router server 에 접속한 후 5번에서 만든 shard node 들을 등록한다.
sudo docker exec -it mongo-router mongo
sh.addShard("mongo1:27017") sh.addShard("mongo2:27017") sh.addShard("mongo3:27017")
|
addShard 할 때마다 "ok" : 1 이란 응답이 와야한다.
모두 넣은 후,
sh.status()
우의 명령어를 통해 shards 에 3개의 mongo shards 가 잘 들어갔는지 확인한다.
지금까지 Docker 를 이용하여 MongoDB Cluster 를 만들어보았다.
간단한 예제 데이터를 넣고 쿼리를 한 번 날려보자.
MongoDB Sharding 하는 방법은 여기 참고.
1.
mongo router server 의 mongo shell 에 접속한다.
sudo docker exec -it mongo-router mongo |
2.
아래 명령어로 mydb 라는 이름의 database 를 사용하기로 한다.
use mydb |
3.
아래 명령어로 세 가지 데이터를 넣는다.
collection 의 이름은 mycoll 이다.
db.mycoll.insertOne({"name":"eyeballs","number":"010-0000-0000"}) db.mycoll.insertOne({"name":"chocolates","number":"010-1111-1111"}) db.mycoll.insertOne({"name":"bigdata","number":"010-2222-2222"})
|
4.
아래 명령어로 mycoll 을 전체 스캔 해본다.
_id 는 자동으로 추가되었다.
db.mycoll.find() |
5.
방금 만든 db 와 collections 이 잘 있는지 확인한다.
show dbs show collections
|
'MongoDB' 카테고리의 다른 글
[MongoDB] aggregate 쿼리로 WordCount 하기 (0) | 2019.12.09 |
---|---|
[MongoDB] import 속도 향상시키기 (0) | 2019.11.06 |
[MongoDB] Array split 배열 분할하여 새로운 필드명 주기 (0) | 2019.07.13 |
[MongoDB] collection 이름에 " . " dot 이 들어가는 경우 (0) | 2019.07.09 |
[MongoDB] hashed, ranged 샤딩 하는 방법 (0) | 2019.07.09 |