docker搭建mongodb分片集群

准备好mongodb镜像,网络,keyfile文件,在基础镜像mongo的基础上创建包含keyfile文件的镜像mongo:v1

目标是搭建一个6节点的分片集群,该集群由两个副本集构成,包括:一个配置服务器副本集(三节点),一个分片副本集(三节点),一个mongos

创建配置服务器副本集节点:

docker run -d --name mongo-cfg01 --network 10.0.0.0/24 --ip 10.0.0.211 -v /root/keyfile:/etc/keyfile -e MONGO_INITDB_ROOT_USERNAME=admin -e MONGO_INITDB_ROOT_PASSWORD=123.com mongo:v1 mongod --configsvr --replSet "cluster01" --bind_ip_all --keyFile /etc/keyfile
docker run -d --name mongo-cfg02 --network 10.0.0.0/24 --ip 10.0.0.212 -v /root/keyfile:/etc/keyfile -e MONGO_INITDB_ROOT_USERNAME=admin -e MONGO_INITDB_ROOT_PASSWORD=123.com mongo:v1 mongod --configsvr --replSet "cluster01" --bind_ip_all --keyFile /etc/keyfile
docker run -d --name mongo-cfg03 --network 10.0.0.0/24 --ip 10.0.0.213 -v /root/keyfile:/etc/keyfile -e MONGO_INITDB_ROOT_USERNAME=admin -e MONGO_INITDB_ROOT_PASSWORD=123.com mongo:v1 mongod --configsvr --replSet "cluster01" --bind_ip_all --keyFile /etc/keyfile

进入任一节点,比如,mongo-cfg01

连接数据库

mongo --port 27019 -u admin

初始化配置服务器副本集

rs.initiate(
  {
    _id: "cluster01",
    configsvr: true,
    members: [
      { _id : 0, host : "10.0.0.211:27019" },
      { _id : 1, host : "10.0.0.212:27019" },
      { _id : 2, host : "10.0.0.213:27019" }
    ]
  }
)

结果:

{
        "ok" : 1,
        "$gleStats" : {
                "lastOpTime" : Timestamp(1619790210, 1),
                "electionId" : ObjectId("000000000000000000000000")
        },
        "lastCommittedOpTime" : Timestamp(0, 0)
}

然后,使用rs.conf(),rs.status()等等查看副本集状态

创建分片副本集:

docker run -d --name mongo-rep01 --network 10.0.0.0/24 --ip 10.0.0.221 -v /root/keyfile:/etc/keyfile -e MONGO_INITDB_ROOT_USERNAME=admin -e MONGO_INITDB_ROOT_PASSWORD=123.com mongo:v1 mongod --shardsvr --replSet "cluster01" --bind_ip_all --keyFile /etc/keyfile
docker run -d --name mongo-rep02 --network 10.0.0.0/24 --ip 10.0.0.222 -v /root/keyfile:/etc/keyfile -e MONGO_INITDB_ROOT_USERNAME=admin -e MONGO_INITDB_ROOT_PASSWORD=123.com mongo:v1 mongod --shardsvr --replSet "cluster01" --bind_ip_all --keyFile /etc/keyfile
docker run -d --name mongo-rep03 --network 10.0.0.0/24 --ip 10.0.0.223 -v /root/keyfile:/etc/keyfile -e MONGO_INITDB_ROOT_USERNAME=admin -e MONGO_INITDB_ROOT_PASSWORD=123.com mongo:v1 mongod --shardsvr --replSet "cluster01" --bind_ip_all --keyFile /etc/keyfile

进入任一节点,比如:mongo-rep01,连接数据库

mongo --port 27018 -u admin

初始化分片副本集

rs.initiate(
  {
    _id : "cluster01",
    members: [
      { _id : 0, host : "10.0.0.221:27018" },
      { _id : 1, host : "10.0.0.222:27018" },
      { _id : 2, host : "10.0.0.223:27018" }
    ]
  }
)

结果:

{ "ok" : 1 }

为集群启动一个mongos

mongos --configdb cfg/10.0.0.211:27019,10.0.0.212:27019,10.0.0.213:27019 --keyFile /etc/keyfile

结果滚动显示如下内容:

{"t":{"$date":"2021-04-30T15:00:27.378+00:00"},"s":"I",  "c":"SH_REFR",  "id":24105,   "ctx":"ConfigServerCatalogCacheLoader-1","msg":"Collection has found to be unsharded after refresh","attr":{"namespace":"config.system.sessions","durationMillis":0}}
{"t":{"$date":"2021-04-30T15:00:27.379+00:00"},"s":"I",  "c":"CONTROL",  "id":20714,   "ctx":"LogicalSessionCacheRefresh","msg":"Failed to refresh session cache, will try again at the next refresh interval","attr":{"error":"NamespaceNotSharded: Collection config.system.sessions is not sharded."}}
{"t":{"$date":"2021-04-30T15:00:27.379+00:00"},"s":"I",  "c":"SH_REFR",  "id":24105,   "ctx":"ConfigServerCatalogCacheLoader-1","msg":"Collection has found to be unsharded after refresh","attr":{"namespace":"config.system.sessions","durationMillis":0}}
{"t":{"$date":"2021-04-30T15:00:27.380+00:00"},"s":"I",  "c":"CONTROL",  "id":20712,   "ctx":"LogicalSessionCacheReap","msg":"Sessions collection is not set up; waiting until next sessions reap interval","attr":{"error":"NamespaceNotSharded: Collection config.system.sessions is not sharded."}}
{"t":{"$date":"2021-04-30T15:00:35.473+00:00"},"s":"I",  "c":"SHARDING", "id":20997,   "ctx":"Uptime-reporter","msg":"Refreshed RWC defaults","attr":{"newDefaults":{}}}
{"t":{"$date":"2021-04-30T15:00:45.994+00:00"},"s":"I",  "c":"SHARDING", "id":20997,   "ctx":"Uptime-reporter","msg":"Refreshed RWC defaults","attr":{"newDefaults":{}}}
{"t":{"$date":"2021-04-30T15:00:57.478+00:00"},"s":"I",  "c":"SHARDING", "id":20997,   "ctx":"Uptime-reporter","msg":"Refreshed RWC defaults","attr":{"newDefaults":{}}}

添加分片集到集群

通过mongo连接到运行mongos的节点,连接数据库,并执行如下命令添加分片集到集群:

sh.addShard( "cluster01/10.0.0.221:27018,10.0.0.222:27018,10.0.0.223:27018")

结果:

mongos> sh.addShard( "cluster01/10.0.0.221:27018,10.0.0.222:27018,10.0.0.223:27018")
{
        "shardAdded" : "cluster01",
        "ok" : 1,
        "operationTime" : Timestamp(1619794806, 3),
        "$clusterTime" : {
                "clusterTime" : Timestamp(1619794806, 3),
                "signature" : {
                        "hash" : BinData(0,"LfNdXcSRkS5TyA1rh9qJrdZzOt0="),
                        "keyId" : NumberLong("6956960684298993673")
                }
        }
}

查看分片集状态:

mongos> sh.status()
--- Sharding Status --- 
  sharding version: {
        "_id" : 1,
        "minCompatibleVersion" : 5,
        "currentVersion" : 6,
        "clusterId" : ObjectId("608c16e2c27b8b7491ff6915")
  }
  shards:
        {  "_id" : "cluster01",  "host" : "cluster01/10.0.0.221:27018,10.0.0.222:27018,10.0.0.223:27018",  "state" : 1 }
  active mongoses:
        "4.4.5" : 1
  autosplit:
        Currently enabled: yes
  balancer:
        Currently enabled:  yes
        Currently running:  no
        Failed balancer rounds in last 5 attempts:  0
        Migration Results for the last 24 hours: 
                No recent migrations
  databases:
        {  "_id" : "config",  "primary" : "config",  "partitioned" : true }
                config.system.sessions
                        shard key: { "_id" : 1 }
                        unique: false
                        balancing: true
                        chunks:
                                cluster01       1024
                        too many chunks to print, use verbose if you want to force print


上一篇:每日总结


下一篇:Docker安装MongoDB