도커를 이용하여 MongoDB cluster(sharding)를 만드는 작업을 하고 있었다.
shard 역할을 하는 mongo container 2 개를 만들고
config server 역할을 하는 mongo config server 1개를 만들고
router 역할을 하는 mongo router 1개를 만들었음.
sudo docker network create my-mongo-cluster
sudo docker run -d --name mongo-1 --network my-mongo-cluster mongo mongod --shardsvr --port 27017
sudo docker run -d --name mongo-2 --network my-mongo-cluster mongo mongod --shardsvr --port 27017
sudo docker run -d --name mongo-cnf --network my-mongo-cluster mongo mongod --configsvr --port 27017
sudo docker run -d --name mongo-router --net my-mongo-cluster -p 27017:27017 mongo mongos --configdb mongo-cnf:27017 --bind_ip_all
근데 이상하게 mongo router 만 만들면 계속 docker가 Exited 되는거라
이상하게 생각해서 MongoDB 문서를 검색해 봄.
https://docs.mongodb.com/manual/sharding/#sharded-cluster
Sharded ClusterA MongoDB sharded cluster consists of the following components: - shard: Each shard contains a subset of the sharded data. Each shard can be deployed as a replica set.
- mongos: The
mongos acts as a query router, providing an interface between client applications and the sharded cluster. - config servers: Config servers store metadata and configuration settings for the cluster. As of MongoDB 3.4, config servers must be deployed as a replica set (CSRS).
|
즉, MongoDB 3.4 버전 이상부터, config server 는 무조건 replica set 이어야 한다.
standalone mode 는 더 이상 지원되지 않는다.
그래서 config server를 replica set 으로 만들고 다시 mongo cluster 를 만들어보았다.
sudo docker network create my-mongo-cluster
sudo docker run -d --name mongo-1 --network my-mongo-cluster mongo mongod --shardsvr --port 27017
sudo docker run -d --name mongo-2 --network my-mongo-cluster mongo mongod --shardsvr --port 27017
sudo docker run -d --name mongo-cnf --network my-mongo-cluster mongo mongod --replSet cnf-serv --configsvr --port 27017
docker exec -it mongo-cnf mongo
rs.initiate( {
_id: "cnf-serv",
configsvr: true,
members: [
{ "_id": 0, "host": "mongo-cnf:27017" }]
} )
sudo docker run -d --name mongo-router --net my-mongo-cluster -p 27017:27017 mongo mongos --configdb cnf-serv/mongo-cnf:27017 --bind_ip_all
mongo-cnf 를 run 할 때 --replSet [레플리카 이름] 옵션을 넣는다.
위에선 cnf-serv 를 이름으로 사용함.
mongo-cnf 의 mongo 로 들어가서 위에처럼 initiate 해준다.
mongo router를 run 할 때 --configdb [레플리카 이름]/mongo-cnf:27017 옵션을 넣는다.
만약 레플리카를 더 넣고 싶다면 아래처럼 하면 된다.
sudo docker network create my-mongo-cluster
sudo docker run -d --name mongo-1 --network my-mongo-cluster mongo mongod --shardsvr --port 27017
sudo docker run -d --name mongo-2 --network my-mongo-cluster mongo mongod --shardsvr --port 27017
sudo docker run -d --name mongo-cnf-1 --network my-mongo-cluster mongo mongod --replSet cnf-serv --configsvr --port 27017
sudo docker run -d --name mongo-cnf-2 --network my-mongo-cluster mongo mongod --replSet cnf-serv --configsvr --port 27017
sudo docker run -d --name mongo-cnf-3 --network my-mongo-cluster mongo mongod --replSet cnf-serv --configsvr --port 27017
docker exec -it mongo-cnf mongo
rs.initiate( {
_id: "cnf-serv",
configsvr: true,
members: [
{ "_id": 0, "host": "mongo-cnf-1:27017" },
{ "_id": 1, "host": "mongo-cnf-2:27017" },
{ "_id": 2, "host": "mongo-cnf-3:27017" }]
} )
sudo docker run -d --name mongo-router --net my-mongo-cluster -p 27017:27017 mongo mongos --configdb cnf-serv/mongo-cnf-1:27017, mongo-cnf-2:27017, mongo-cnf-3:27017 --bind_ip_all
<no value>
response on a Mac using Fig/Boot2Docker – cevaris Nov 24 '14 at 14:57{{ .NetworkSettings.Networks.$network.IPAddress }}
. The default appears to be bridge, but under docker-compose this will be a specific name that depends on the name of your app (I think from the --project-name flag, though that's also going to depend on what type of networking config you have set up). I wrote a full answer in an answer here stackoverflow.com/questions/17157721/… – Dunk Feb 10 '16 at 15:46docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' ${CID}
– Kasun Gajasinghe Jul 8 '16 at 6:45