使用 Docker 部署 MongoDB 分區

來源:互聯網
上載者:User

標籤: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 分區

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.