阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

MongoDB 4.0 Sharded Cluster部署

156次阅读
没有评论

共计 11164 个字符,预计需要花费 28 分钟才能阅读完成。

本文基于 MongoDB 4.0 介绍如何搭建 shard 集群服务,环境如下表所示:
MongoDB 4.0 Sharded Cluster 部署

1、创建相关目录

在三个节点分别创建以下目录:

[root@hdp06 ~]# mkdir -p /data/mongo/{config,router,shard}
[root@hdp06 ~]# mkdir -p /data/mongo/config/{data,logs}
[root@hdp06 ~]# mkdir -p /data/mongo/router/logs
[root@hdp06 ~]# mkdir -p /data/mongo/shard/{data,logs}
[root@hdp06 ~]# mkdir -p /data/mongo/shard/data/{shard1,shard2,shard3}
[root@hdp06 ~]# chown -R mongod:mongod /data

2、配置 Configsvr 服务

2.1 创建配置文件

[root@hdp06 ~]# vi /data/mongo/config/mongodb.config 
net:
  bindIp: 0.0.0.0
  port: 27017
processManagement:
  fork: "true"
replication:
  replSetName: configRS
sharding:
  clusterRole: configsvr
storage:
  dbPath: /data/mongo/config/data
systemLog:
  destination: file
  path: /data/mongo/config/logs/mongodb.log

2.2 同步配置文件

[root@hdp06 ~]# scp /data/mongo/config/mongodb.config hdp07:/data/mongo/config
[root@hdp06 ~]# scp /data/mongo/config/mongodb.config hdp08:/data/mongo/config

2.3 启动 configsvr 服务

[root@hdp06 ~]# mongod -f /data/mongo/config/mongodb.config 
[root@hdp07 ~]# mongod -f /data/mongo/config/mongodb.config 
[root@hdp08 ~]# mongod -f /data/mongo/config/mongodb.config 

2.4 初始化集群

在一个节点上执行集群初始化操作:

[root@hdp06 ~]# mongo
>rs.initiate(
  {
    _id: "configRS",
    configsvr: true,
    members: [{ _id : 0, host : "hdp06.thinkjoy.tt:27017"},
      {_id : 1, host : "hdp07.thinkjoy.tt:27017"},
      {_id : 2, host : "hdp08.thinkjoy.tt:27017"}
    ]
  }
)
-- 输出结果如下
{
        "ok" : 1,
        "operationTime" : Timestamp(1534816254, 1),
        "$gleStats" : {"lastOpTime" : Timestamp(1534816254, 1),
                "electionId" : ObjectId("000000000000000000000000")
        },
        "lastCommittedOpTime" : Timestamp(0, 0),
        "$clusterTime" : {"clusterTime" : Timestamp(1534816254, 1),
                "signature" : {"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
                        "keyId" : NumberLong(0)
                }
        }
}
-- 其他节点验证
[root@hdp07 ~]# mongo
......
configRS:SECONDARY> rs.status()
{
        "set" : "configRS",
        "date" : ISODate("2018-08-21T01:52:59.734Z"),
        "myState" : 2,
        "term" : NumberLong(1),
        "syncingTo" : "hdp06.thinkjoy.tt:27017",
        "syncSourceHost" : "hdp06.thinkjoy.tt:27017",
        "syncSourceId" : 0,
        "configsvr" : true,
        "heartbeatIntervalMillis" : NumberLong(2000),
        "optimes" : {
                "lastCommittedOpTime" : {"ts" : Timestamp(1534816364, 1),
                        "t" : NumberLong(1)
                },
                "readConcernMajorityOpTime" : {"ts" : Timestamp(1534816364, 1),
                        "t" : NumberLong(1)
                },
                "appliedOpTime" : {"ts" : Timestamp(1534816364, 1),
                        "t" : NumberLong(1)
                },
                "durableOpTime" : {"ts" : Timestamp(1534816364, 1),
                        "t" : NumberLong(1)
                }
        },
        "lastStableCheckpointTimestamp" : Timestamp(1534816327, 1),
        "members" : [
                {
                        "_id" : 0,
                        "name" : "hdp06.thinkjoy.tt:27017",
                        "health" : 1,
                        "state" : 1,
                        "stateStr" : "PRIMARY",
                        "uptime" : 115,
                        "optime" : {"ts" : Timestamp(1534816364, 1),
                                "t" : NumberLong(1)
                        },
                        "optimeDurable" : {"ts" : Timestamp(1534816364, 1),
                                "t" : NumberLong(1)
                        },
                        "optimeDate" : ISODate("2018-08-21T01:52:44Z"),
                        "optimeDurableDate" : ISODate("2018-08-21T01:52:44Z"),
                        "lastHeartbeat" : ISODate("2018-08-21T01:52:57.945Z"),
                        "lastHeartbeatRecv" : ISODate("2018-08-21T01:52:59.093Z"),
                        "pingMs" : NumberLong(0),
                        "lastHeartbeatMessage" : "","syncingTo":"",
                        "syncSourceHost" : "","syncSourceId": -1,"infoMessage":"",
                        "electionTime" : Timestamp(1534816265, 1),
                        "electionDate" : ISODate("2018-08-21T01:51:05Z"),
                        "configVersion" : 1
                },
                {
                        "_id" : 1,
                        "name" : "hdp07.thinkjoy.tt:27017",
                        "health" : 1,
                        "state" : 2,
                        "stateStr" : "SECONDARY",
                        "uptime" : 320,
                        "optime" : {"ts" : Timestamp(1534816364, 1),
                                "t" : NumberLong(1)
                        },
                        "optimeDate" : ISODate("2018-08-21T01:52:44Z"),
                        "syncingTo" : "hdp06.thinkjoy.tt:27017",
                        "syncSourceHost" : "hdp06.thinkjoy.tt:27017",
                        "syncSourceId" : 0,
                        "infoMessage" : "","configVersion": 1,"self": true,"lastHeartbeatMessage":""
                },
                {
                        "_id" : 2,
                        "name" : "hdp08.thinkjoy.tt:27017",
                        "health" : 1,
                        "state" : 2,
                        "stateStr" : "SECONDARY",
                        "uptime" : 115,
                        "optime" : {"ts" : Timestamp(1534816364, 1),
                                "t" : NumberLong(1)
                        },
                        "optimeDurable" : {"ts" : Timestamp(1534816364, 1),
                                "t" : NumberLong(1)
                        },
                        "optimeDate" : ISODate("2018-08-21T01:52:44Z"),
                        "optimeDurableDate" : ISODate("2018-08-21T01:52:44Z"),
                        "lastHeartbeat" : ISODate("2018-08-21T01:52:57.945Z"),
                        "lastHeartbeatRecv" : ISODate("2018-08-21T01:52:57.944Z"),
                        "pingMs" : NumberLong(0),
                        "lastHeartbeatMessage" : "","syncingTo":"hdp06.thinkjoy.tt:27017","syncSourceHost":"hdp06.thinkjoy.tt:27017","syncSourceId": 0,"infoMessage":"",
                        "configVersion" : 1
                }
        ],
        "ok" : 1,
        "operationTime" : Timestamp(1534816364, 1),
        "$gleStats" : {"lastOpTime" : Timestamp(0, 0),
                "electionId" : ObjectId("000000000000000000000000")
        },
        "lastCommittedOpTime" : Timestamp(1534816364, 1),
        "$clusterTime" : {"clusterTime" : Timestamp(1534816364, 1),
                "signature" : {"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
                        "keyId" : NumberLong(0)
                }
        }
}

3、配置 Sharded 服务

3.1 创建配置文件

root@hdp06 ~]# vi /data/mongo/shard/data/shard1/mongod.shard1
net:
  bindIp: 0.0.0.0
  port: 27019
processManagement:
  fork: "true"
replication:
  replSetName: myShard_1
sharding:
  clusterRole: shardsvr
storage:
  dbPath: /data/mongo/shard/data/shard1
systemLog:
  destination: file
  path: /data/mongo/shard/logs/shard1/mongodbs1.log
[root@hdp06 ~]# vi /data/mongo/shard/data/shard2/mongod.shard2
net:
  bindIp: 0.0.0.0
  port: 27020
processManagement:
  fork: "true"
replication:
  replSetName: myShard_2
sharding:
  clusterRole: shardsvr
storage:
  dbPath: /data/mongo/shard/data/shard2
systemLog:
  destination: file
  path: /data/mongo/shard/logs/shard2/mongodbs2.log
[root@hdp06 ~]# vi /data/mongo/shard/data/shard3/mongod.shard3
net:
  bindIp: 0.0.0.0
  port: 27021
processManagement:
  fork: "true"
replication:
  replSetName: myShard_3
sharding:
  clusterRole: shardsvr
storage:
  dbPath: /data/mongo/shard/data/shard3
systemLog:
  destination: file
  path: /data/mongo/shard/logs/shard3/mongodbs3.log

3.2 同步配置文件

[root@hdp06 ~]# scp -r /data/mongo/shard/data/* hdp07:/data/mongo/shard/data/
[root@hdp06 ~]# scp -r /data/mongo/shard/data/* hdp08:/data/mongo/shard/data/

3.3 启动 sharded 服务

[root@hdp06 ~]# mongod -f /data/mongo/shard/data/shard1/mongod.shard1
[root@hdp06 ~]# mongod -f /data/mongo/shard/data/shard2/mongod.shard2
[root@hdp06 ~]# mongod -f /data/mongo/shard/data/shard3/mongod.shard3
[root@hdp07 ~]# mongod -f /data/mongo/shard/data/shard1/mongod.shard1
[root@hdp07 ~]# mongod -f /data/mongo/shard/data/shard2/mongod.shard2
[root@hdp07 ~]# mongod -f /data/mongo/shard/data/shard3/mongod.shard3
[root@hdp08 ~]# mongod -f /data/mongo/shard/data/shard1/mongod.shard1
[root@hdp08 ~]# mongod -f /data/mongo/shard/data/shard2/mongod.shard2
[root@hdp08 ~]# mongod -f /data/mongo/shard/data/shard3/mongod.shard3

3.4 初始化 sharded 服务

在任意一个节点执行初始化服务。

[root@hdp06 ~]# mongod --port 27019
> rs.initiate({_id:"myShard_1",members:[{_id:1,host:"hdp06.thinkjoy.tt:27019",priority:2},{_id:2,host:"hdp07.thinkjoy.tt:27019"},{_id:3,host:"hdp08.thinkjoy.tt:27019"}]})
{
        "ok" : 1,
        "operationTime" : Timestamp(1534818896, 1),
        "$clusterTime" : {"clusterTime" : Timestamp(1534818896, 1),
                "signature" : {"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
                        "keyId" : NumberLong(0)
                }
        }
}
[root@hdp06 ~]# mongod --port 27020
> rs.initiate({_id:"myShard_2",members:[{_id:1,host:"hdp06.thinkjoy.tt:27020",priority:2},{_id:2,host:"hdp07.thinkjoy.tt:27020"},{_id:3,host:"hdp08.thinkjoy.tt:27020"}]})
{"operationTime" : Timestamp(1534818908, 2),
        "ok" : 0,
        "errmsg" : "already initialized",
        "code" : 23,
        "codeName" : "AlreadyInitialized",
        "$clusterTime" : {"clusterTime" : Timestamp(1534818908, 2),
                "signature" : {"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
                        "keyId" : NumberLong(0)
                }
        }
}
[root@hdp06 ~]# mongod --port 27021
> rs.initiate({_id:"myShard_3",members:[{_id:1,host:"hdp06.thinkjoy.tt:27021",priority:2},{_id:2,host:"hdp07.thinkjoy.tt:27021"},{_id:3,host:"hdp08.thinkjoy.tt:27021"}]})
{"operationTime" : Timestamp(1534818928, 1),
        "ok" : 0,
        "errmsg" : "already initialized",
        "code" : 23,
        "codeName" : "AlreadyInitialized",
        "$clusterTime" : {"clusterTime" : Timestamp(1534818928, 1),
                "signature" : {"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
                        "keyId" : NumberLong(0)
                }
        }
}

4、配置 Mongos 服务

[root@hdp06 ~]# vi /data/mongo/router/mongod.router
net:
  bindIp: 0.0.0.0
  port: 27018
processManagement:
  fork: "true"
sharding:
  configDB: configRS/hdp06.thinkjoy.tt:27017,hdp07.thinkjoy.tt:27017,hdp08.thinkjoy.tt:27017
systemLog:
  destination: file
  path: /data/mongo/router/logs/mongo_router.log
[root@hdp06 ~]# scp /data/mongo/router/mongod.router hdp07:/data/mongo/router
[root@hdp06 ~]# scp /data/mongo/router/mongod.router hdp08:/data/mongo/router
[root@hdp06 ~]# mongos -f /data/mongo/router/mongod.router
[root@hdp07 ~]# mongos -f /data/mongo/router/mongod.router
[root@hdp08 ~]# mongos -f /data/mongo/router/mongod.router

配置分片,将主片添加至集群,如下:

[root@hdp06 ~]# mongo --port 27018
mongos> show dbs
admin   0.000GB
config  0.000GB
mongos> use admin
switched to db admin
mongos> db.runCommand({"addShard":"myShard_1/hdp06.thinkjoy.tt:27019" ,"maxsize":1024})
{
        "shardAdded" : "myShard_1",
        "ok" : 1,
        "operationTime" : Timestamp(1534819816, 6),
        "$clusterTime" : {"clusterTime" : Timestamp(1534819816, 6),
                "signature" : {"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
                        "keyId" : NumberLong(0)
                }
        }
}
mongos> db.runCommand({"addShard":"myShard_2/hdp06.thinkjoy.tt:27020" ,"maxsize":1024})
{
        "shardAdded" : "myShard_2",
        "ok" : 1,
        "operationTime" : Timestamp(1534819823, 5),
        "$clusterTime" : {"clusterTime" : Timestamp(1534819823, 5),
                "signature" : {"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
                        "keyId" : NumberLong(0)
                }
        }
}
mongos> db.runCommand({"addShard":"myShard_3/hdp06.thinkjoy.tt:27021" ,"maxsize":1024})
{
        "shardAdded" : "myShard_3",
        "ok" : 1,
        "operationTime" : Timestamp(1534819830, 5),
        "$clusterTime" : {"clusterTime" : Timestamp(1534819830, 5),
                "signature" : {"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
                        "keyId" : NumberLong(0)
                }
        }

Shard cluster 状态查询:

mongos> sh.status()
--- Sharding Status --- 
  sharding version: {
        "_id" : 1,
        "minCompatibleVersion" : 5,
        "currentVersion" : 6,
        "clusterId" : ObjectId("5b7b700b1cfaf6f26d2d0284")
  }
  shards:
        {"_id" : "myShard_1",  "host" : "myShard_1/hdp06.thinkjoy.tt:27019,hdp07.thinkjoy.tt:27019,hdp08.thinkjoy.tt:27019",  "state" : 1}
        {"_id" : "myShard_2",  "host" : "myShard_2/hdp06.thinkjoy.tt:27020,hdp07.thinkjoy.tt:27020,hdp08.thinkjoy.tt:27020",  "state" : 1}
        {"_id" : "myShard_3",  "host" : "myShard_3/hdp06.thinkjoy.tt:27021,hdp07.thinkjoy.tt:27021,hdp08.thinkjoy.tt:27021",  "state" : 1}
  active mongoses:
        "4.0.1" : 3
  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" : "MyDB",  "primary" : "myShard_2",  "partitioned" : true,  "version" : {  "uuid" : UUID("202a1d72-aa92-403d-a2a6-c7c3aa273323"),  "lastMod" : 1 } }
                MyDB.chapter
                        shard key: {"id" : 1, "subjectId" : 1}
                        unique: false
                        balancing: true
                        chunks:
                                myShard_2     1
                        {"id" : { "$minKey" : 1}, "subjectId" : {"$minKey" : 1} } -->> {"id" : { "$maxKey" : 1}, "subjectId" : {"$maxKey" : 1} } on : myShard_2 Timestamp(1, 0) 
                MyDB.question_knowledge_basic_id
                        shard key: {"knowledge_basic_id" : 1, "question_id" : 1}
                        unique: false
                        balancing: true
                        chunks:
                                myShard_2     1
                        {"knowledge_basic_id" : { "$minKey" : 1},
                                "question_id" : {"$minKey" : 1}
                        } -->> {"knowledge_basic_id" : { "$maxKey" : 1},
                                "question_id" : {"$maxKey" : 1}
                        } on : myShard_2 Timestamp(1, 0) 
        {"_id" : "config",  "primary" : "config",  "partitioned" : true}
                config.system.sessions
                        shard key: {"_id" : 1}
                        unique: false
                        balancing: true
                        chunks:
                                myShard_1     1
                        {"_id" : { "$minKey" : 1} } -->> {"_id" : { "$maxKey" : 1} } on : myShard_1 Timestamp(1, 0) 

5、对库启用分片

这里创建了一个 mydb 库,使用以下命令对其启用分片功能。

mongos>sh.enableSharding("MyDB")
{
        "ok" : 1,
        "operationTime" : Timestamp(1534837173, 2214),
        "$clusterTime" : {"clusterTime" : Timestamp(1534837173, 2408),
                "signature" : {"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
                        "keyId" : NumberLong(0)
                }
        }
}

下面对 mydb 的 chapter 启用分片技术:

-- 创建一个索引
mongos> use MyDB
switched to db MyDB
mongos> db.chapter.createIndex({"id" : 1,"subjectId" : 1},{"name" : "new_idx"})
-- 对表进行分片
mongos> sh.shardCollection('MyDB.chapter',{id:1,subjectId:1})
{
        "collectionsharded" : "MyDB.chapter",
        "collectionUUID" : UUID("a5f3b95c-ced6-4ae5-82d8-06d36176cbef"),
        "ok" : 1,
        "operationTime" : Timestamp(1535077873, 13),
        "$clusterTime" : {"clusterTime" : Timestamp(1535077873, 13),
                "signature" : {"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
                        "keyId" : NumberLong(0)
                }
        }
}

6、Shard 集群监控

针对 MongoDB 的监控除了使用第三方软件外,强烈推荐是官方提供的 Ops Manager,如下图所示:
MongoDB 4.0 Sharded Cluster 部署
MongoDB 4.0 Sharded Cluster 部署
MongoDB 4.0 Sharded Cluster 部署
MongoDB 4.0 Sharded Cluster 部署

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-22发表,共计11164字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中