標籤:clust gre class 而不是 令行 鏡像 命令列 prim sign
建立佈建服務複製集
docker run --name configsvr0 -d mongo:3.6.2-jessie --configsvr --replSet "rs_configsvr" --bind_ip_alldocker run --name configsvr1 -d mongo:3.6.2-jessie --configsvr --replSet "rs_configsvr" --bind_ip_alldocker run --name configsvr2 -d mongo:3.6.2-jessie --configsvr --replSet "rs_configsvr" --bind_ip_all
$ docker psIMAGE COMMAND CREATED STATUS PORTS NAMESmongo:3.6.2-jessie "docker-entrypoint..." 8 seconds ago Up 6 seconds 27019/tcp configsvr2mongo:3.6.2-jessie "docker-entrypoint..." 9 seconds ago Up 7 seconds 27019/tcp configsvr1mongo:3.6.2-jessie "docker-entrypoint..." 19 seconds ago Up 16 seconds 27019/tcp configsvr0
通過 docker inspect 找到三個佈建服務執行個體的 IP。
比如 docker inspect configsvr0 | grep IPAddress,
又由於--configsvr 的預設連接埠為 27019。所以佈建服務的地址為
- configsvr0: 172.17.0.2:27019
- configsvr1: 172.17.0.3:27019
- configsvr2: 172.17.0.4:27019
初始化
docker exec -it configsvr0 bashmongo --host 172.17.0.2 --port 27019rs.initiate( { _id: "rs_configsvr", configsvr: true, members: [ { _id : 0, host : "172.17.0.2:27019" }, { _id : 1, host : "172.17.0.3:27019" }, { _id : 2, host : "172.17.0.4:27019" } ] })
連接字串為
mongodb://172.17.0.2:27019,172.17.0.3:27019,172.17.0.4:27019/test?replicaSet=rs_configsvr
建立分區複製集
與上面同理,不再贅述,直接上命令列。
docker run --name shardsvr00 -d mongo:3.6.2-jessie --shardsvr --replSet "rs_shardsvr0" --bind_ip_alldocker run --name shardsvr01 -d mongo:3.6.2-jessie --shardsvr --replSet "rs_shardsvr0" --bind_ip_alldocker run --name shardsvr02 -d mongo:3.6.2-jessie --shardsvr --replSet "rs_shardsvr0" --bind_ip_alldocker run --name shardsvr10 -d mongo:3.6.2-jessie --shardsvr --replSet "rs_shardsvr1" --bind_ip_alldocker run --name shardsvr11 -d mongo:3.6.2-jessie --shardsvr --replSet "rs_shardsvr1" --bind_ip_alldocker run --name shardsvr12 -d mongo:3.6.2-jessie --shardsvr --replSet "rs_shardsvr1" --bind_ip_all
通過 docker inspect 找到對應執行個體的 IP。
比如 docker inspect shardsvr00 | grep IPAddress,
又由於--shardsvr 的預設連接埠為 27018。所以地址為
- shardsvr00: 172.17.0.5:27018
- shardsvr01: 172.17.0.6:27018
- shardsvr02: 172.17.0.7:27018
由於後來才增加的 shardsvr1,所以 IP 末尾是 9 而不是 8。
- shardsvr10: 172.17.0.9:27018
- shardsvr11: 172.17.0.10:27018
- shardsvr12: 172.17.0.11:27018
$ docker exec -it shardsvr00 bashmongo --host 172.17.0.5 --port 27018> rs.initiate( { _id : "rs_shardsvr", members: [ { _id : 0, host : "172.17.0.5:27018" }, { _id : 1, host : "172.17.0.6:27018" }, { _id : 2, host : "172.17.0.7:27018" } ] })# 輸出 { "ok" : 1 }
mongo --host 172.17.0.9 --port 27018> rs.initiate( { _id : "rs_shardsvr1", members: [ { _id : 0, host : "172.17.0.9:27018" }, { _id : 1, host : "172.17.0.10:27018" }, { _id : 2, host : "172.17.0.11:27018" } ] })
連接字串為
mongodb://172.17.0.5:27018,172.17.0.6:27018,172.17.0.7:27018/test?replicaSet=rs_shardsvr0
mongodb://172.17.0.9:27018,172.17.0.10:27018,172.17.0.11:27018/test?replicaSet=rs_shardsvr1
串連 mongos 到分區叢集
由於鏡像的預設入口是 mongod,所以要通過 --entrypoint "mongos" 將其改為 mongos:
docker run --name mongos0 -d --entrypoint "mongos" mongo:3.6.2-jessie --configdb rs_configsvr/172.17.0.2:27019,172.17.0.3:27019,172.17.0.4:27019 --bind_ip_all
地址為 172.17.0.8:27017
增加分區到叢集
$ docker exec -it mongos bash$ mongo --host 172.17.0.8 --port 27017> sh.addShard("rs_shardsvr0/172.17.0.5:27018,172.17.0.6:27018,172.17.0.7:27018"){ "shardAdded" : "rs_shardsvr", "ok" : 1, "$clusterTime" : { "clusterTime" : Timestamp(1518405986, 8), "signature" : { "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="), "keyId" : NumberLong(0) } }, "operationTime" : Timestamp(1518405986, 8)}> sh.addShard("rs_shardsvr1/172.17.0.9:27018,172.17.0.10:27018,172.17.0.11:27018")
資料庫啟用分區
> sh.enableSharding("test"){ "ok" : 1, "$clusterTime" : { "clusterTime" : Timestamp(1518406101, 8), "signature" : { "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="), "keyId" : NumberLong(0) } }, "operationTime" : Timestamp(1518406101, 8)}
分區 Collection
對 test.order 的 _id 欄位進行雜湊分區:
> sh.shardCollection("test.order", {"_id": "hashed" }){ "collectionsharded" : "test.order", "collectionUUID" : UUID("12b22b5d-93d7-4ccf-b989-2a0e550e750f"), "ok" : 1, "$clusterTime" : { "clusterTime" : Timestamp(1518406317, 12), "signature" : { "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="), "keyId" : NumberLong(0) } }, "operationTime" : Timestamp(1518406317, 6)}
插入資料
use testfor (i = 1; i <= 1000; i=i+1){ db.order.insert({'price': 1})}
查看資料分布
mongos> db.order.find().count()1000rs_shardsvr0:PRIMARY> db.order.find().count()526rs_shardsvr1:PRIMARY> db.order.find().count()474
使用 Docker 部署 MongoDB 分區