千家信息网

Mongodb 分片集群部署

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,Mongodb分片集群介绍分片(sharding)是指将数据库拆分,将其分散在不同的机器上的过程。将数据分散到不同的机器上,不需要功能强大的服务器就可以存储更多的数据和处理更大的负载。基本思想就是将集
千家信息网最后更新 2026年11月01日Mongodb 分片集群部署

Mongodb分片集群介绍

分片(sharding)是指将数据库拆分,将其分散在不同的机器上的过程。将数据分散到不同的机器上,不需要功能强大的服务器就可以存储更多的数据和处理更大的负载。基本思想就是将集合切成小块,这些块分散到若干片里,每个片只负责总数据的一部分,最后通过一个均衡器来对各个分片进行均衡(数据迁移)。通过一个名为mongos的路由进程进行操作,mongos知道数据和片的对应关系(通过配置服务器)。大部分使用场景都是解决磁盘空间的问题,对于写入有可能会变差,查询则尽量避免跨分片查询。使用分片的时机:
1,机器的磁盘不够用了。使用分片解决磁盘空间的问题。
2,单个mongod已经不能满足写数据的性能要求。通过分片让写压力分散到各个分片上面,使用分片服务器自身的资源。
3,想把大量数据放到内存里提高性能。和上面一样,通过分片使用分片服务器自身的资源。

服务器规划

下载 Mongodb

https://www.mongodb.com/download-center/community

wget -c https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.0.8.tgz

解压包 Mongodb 包

tar -zxvf mongodb-linux-x86_64-rhel70-4.0.7.tgz -C /usr/local/mongodb

添加环境变量

export MONGO_HOME=/usr/local/mongodbexport PATH=$PATH:$MONGO_HOME/bin

集群准备

新建 Mongodb 需要的目录

在192.168.2.177服务器上操作,以下配置操作均在192.168.2.177上进行

mkdir -p /wdata/mongodb/{data,logs,config,keys}mkdir -p /wdata/mongodb/data/{mongosrv,shard1}

将新建的目录发送到另外两台服务器

for i in 178 180; do scp -r /wdata/mongodb root@192.168.2.$i; done

生成分片集群的key文件

openssl rand -base64 90 -out /wdata/mongodb/keys/keyfile

修改key文件属性

chmod 600 /wdata/mongodb/keys/keyfile

注意:此处必须修改,否则可能报错

编辑 mongos.conf 文件

systemLog: destination: file#日志存储位置 path: /wdata/mongodb/logs/mongos.log logAppend: trueprocessManagement: #fork and run in background fork: true pidFilePath: /wdata/mongodb/data/mongos.pid#端口配置net: port: 30000 maxIncomingConnections: 500  unixDomainSocket:    enabled: true    #pathPrefix: /tmp    filePermissions: 0700  bindIp: 0.0.0.0security:  keyFile: /wdata/mongodb/keys/keyfile#将 confige server 添加到路由sharding:  configDB: configs/192.168.2.177:21000,192.168.2.178:21000,192.168.2.180:21000

编辑 mongosrv1.conf 文件

systemLog:  destination: file  logAppend: true  path: /wdata/mongodb/logs/mongosrv.log  storage:  dbPath: /wdata/mongodb/data/mongosrv  journal:    enabled: true  wiredTiger:    engineConfig:      directoryForIndexes: true      processManagement:# fork and run in background  fork: true# location of pidfile  pidFilePath: /wdata/mongodb/data/mongosrv/mongosrv.pid  net:  port: 21000  #bindIp: 0.0.0.0  # Enter 0.0.0.0,:: to bind to all IPv4 and IPv6 addresses or, alternatively, use the net.bindIpAll setting.  bindIpAll: true  maxIncomingConnections: 65535  unixDomainSocket:    enabled: true    filePermissions: 0700    security:  keyFile: /wdata/mongodb/keys/keyfile  authorization: enabled  replication:  replSetName: configssharding:  clusterRole: configsvr

说明:该文件在此环境需要3个,分布在3台服务器,这里仅配置1个

编辑 shard1.conf 文件

systemLog:  destination: file  logAppend: true  path: /wdata/mongodb/logs/shard1.log  storage:  dbPath: /wdata/mongodb/data/shard1  journal:    enabled: true  wiredTiger:    engineConfig:      directoryForIndexes: true      processManagement:# fork and run in background  fork: true    pidFilePath:  /wdata/mongodb/data/mongosrv/mongosrv.pid  # location of pidfile# timeZoneInfo: /usr/share/zoneinfonet:  port: 27001  # bindIp: 0.0.0.0  # Enter 0.0.0.0,:: to bind to all IPv4 and IPv6 addresses or, alternatively, use the net.bindIpAll setting.  bindIpAll: true  maxIncomingConnections: 65535  unixDomainSocket:    enabled: true    # pathPrefix: /tmp/mongod1    filePermissions: 0700    security:  keyFile: /wdata/mongodb/keys/keyfile  authorization: enabled  replication:  replSetName: shard1sharding:  clusterRole: shardsvr

说明:shard在一台服务器上也可以配置多个,建不同的目录充当分片服务器,看需求而定

将配置文件到其他两台服务器

for i in 178 180; do scp -r /wdata/mongodb/config root@192.168.2.$i:/wdata/mongodb/; done

启动集群

在192.168.1.177上启动mongod -f /wdata/mongodb/config/mongosrv1.confmongod -f /wdata/mongodb/config/shard1.confmongos  -f  /wdata/mongodb/config/mongos.conf在192.168.1.178上启动mongod  -f  /wdata/mongodb/config/mongosrv1.confmongod -f /wdata/mongodb/config/shard1.confmongos -f /wdata/mongodb/config/mongos.conf在192.168.1.180上启动mongod  -f  /wdata/mongodb/config/mongosrv1.confmongod -f /wdata/mongodb/config/shard1.confmongos -f /wdata/mongodb/config/mongos.conf

分片集群创建副本集

在192.168.2.177上操作

[root@localhost mongodb]# mongo --port 27001MongoDB shell version v4.0.7connecting to: mongodb://127.0.0.1:27001/?gssapiServiceName=mongodbImplicit session: session { "id" : UUID("b56157d2-fbc7-4226-aeb4-4de0b79dfcda") }MongoDB server version: 4.0.7> use adminswitched to db admin> config = {_id: 'shard1', members: [{_id: 0, host: '192.168.2.177:27001'},{_id: 1, host: '192.168.2.178:27001'},{_id: 2, host:'192.168.2.180:27001'}]}{"_id" : "shard1","members" : [{"_id" : 0,"host" : "192.168.2.177:27001"},{"_id" : 1,"host" : "192.168.2.178:27001"},{"_id" : 2,"host" : "192.168.2.180:27001"}]}> rs.initiate(config){ "ok" : 1 }shard1:PRIMARY> rs.status(){"set" : "shard1","date" : ISODate("2019-04-03T10:08:16.477Z"),"myState" : 1,"term" : NumberLong(1),"syncingTo" : "","syncSourceHost" : "","syncSourceId" : -1,"heartbeatIntervalMillis" : NumberLong(2000),"optimes" : {"lastCommittedOpTime" : {"ts" : Timestamp(1554286090, 1),"t" : NumberLong(1)},"readConcernMajorityOpTime" : {"ts" : Timestamp(1554286090, 1),"t" : NumberLong(1)},"appliedOpTime" : {"ts" : Timestamp(1554286090, 1),"t" : NumberLong(1)},"durableOpTime" : {"ts" : Timestamp(1554286090, 1),"t" : NumberLong(1)}},"lastStableCheckpointTimestamp" : Timestamp(1554286040, 2),"members" : [{"_id" : 0,"name" : "192.168.2.177:27001","health" : 1,"state" : 1,"stateStr" : "PRIMARY","uptime" : 2657,"optime" : {"ts" : Timestamp(1554286090, 1),"t" : NumberLong(1)},"optimeDate" : ISODate("2019-04-03T10:08:10Z"),"syncingTo" : "","syncSourceHost" : "","syncSourceId" : -1,"infoMessage" : "could not find member to sync from","electionTime" : Timestamp(1554286040, 1),"electionDate" : ISODate("2019-04-03T10:07:20Z"),"configVersion" : 1,"self" : true,"lastHeartbeatMessage" : ""},{"_id" : 1,"name" : "192.168.2.178:27001","health" : 1,"state" : 2,"stateStr" : "SECONDARY","uptime" : 67,"optime" : {"ts" : Timestamp(1554286090, 1),"t" : NumberLong(1)},"optimeDurable" : {"ts" : Timestamp(1554286090, 1),"t" : NumberLong(1)},"optimeDate" : ISODate("2019-04-03T10:08:10Z"),"optimeDurableDate" : ISODate("2019-04-03T10:08:10Z"),"lastHeartbeat" : ISODate("2019-04-03T10:08:16.259Z"),"lastHeartbeatRecv" : ISODate("2019-04-03T10:08:15.440Z"),"pingMs" : NumberLong(6),"lastHeartbeatMessage" : "","syncingTo" : "192.168.2.177:27001","syncSourceHost" : "192.168.2.177:27001","syncSourceId" : 0,"infoMessage" : "","configVersion" : 1},{"_id" : 2,"name" : "192.168.2.180:27001","health" : 1,"state" : 2,"stateStr" : "SECONDARY","uptime" : 67,"optime" : {"ts" : Timestamp(1554286090, 1),"t" : NumberLong(1)},"optimeDurable" : {"ts" : Timestamp(1554286090, 1),"t" : NumberLong(1)},"optimeDate" : ISODate("2019-04-03T10:08:10Z"),"optimeDurableDate" : ISODate("2019-04-03T10:08:10Z"),"lastHeartbeat" : ISODate("2019-04-03T10:08:16.219Z"),"lastHeartbeatRecv" : ISODate("2019-04-03T10:08:15.440Z"),"pingMs" : NumberLong(4),"lastHeartbeatMessage" : "","syncingTo" : "192.168.2.177:27001","syncSourceHost" : "192.168.2.177:27001","syncSourceId" : 0,"infoMessage" : "","configVersion" : 1}],"ok" : 1}shard1:PRIMARY> exitbye

创建分片集群数据库和用户

[root@localhost mongodb]# mongo --port 27001MongoDB shell version v4.0.7connecting to: mongodb://127.0.0.1:27001/?gssapiServiceName=mongodbImplicit session: session { "id" : UUID("a4c12af4-85e2-49e3-9a02-dd481307bcda") }MongoDB server version: 4.0.7shard1:PRIMARY> use adminswitched to db adminshard1:PRIMARY> db.createUser({user:"admin",pwd:"123456",roles:[{role:"userAdminAnyDatabase",db:"admin"}]})Successfully added user: {"user" : "admin","roles" : [{"role" : "userAdminAnyDatabase","db" : "admin"}]}shard1:PRIMARY> db.auth("admin","123456")1shard1:PRIMARY> use testswitched to db testshard1:PRIMARY> db.createUser({user:"root",pwd:"123456",roles:[{role:"dbOwner",db:"test"}]})Successfully added user: {"user" : "root","roles" : [{"role" : "dbOwner","db" : "test"}]}shard1:PRIMARY> exitbye

配置 mongosrv 副本集

[root@localhost config]# mongo --port 21000MongoDB shell version v4.0.7connecting to: mongodb://127.0.0.1:21000/?gssapiServiceName=mongodbImplicit session: session { "id" : UUID("f9896034-d90f-4d52-bc55-51c3dc85aae9") }MongoDB server version: 4.0.7> config = {_id: 'configs', members: [{_id: 0, host: '192.168.2.177:21000'},{_id: 1, host: '192.168.2.178:21000'},{_id: 2, host: '192.168.2.180:21000'}]}{"_id" : "configs","members" : [{"_id" : 0,"host" : "192.168.2.177:21000"},{"_id" : 1,"host" : "192.168.2.178:21000"},{"_id" : 2,"host" : "192.168.2.180:21000"}]}> rs.initiate(config){"ok" : 1,"$gleStats" : {"lastOpTime" : Timestamp(1554288851, 1),"electionId" : ObjectId("000000000000000000000000")},"lastCommittedOpTime" : Timestamp(0, 0)}configs:SECONDARY> rs.status(config){"set" : "configs","date" : ISODate("2019-04-03T10:54:43.283Z"),"myState" : 1,"term" : NumberLong(1),"syncingTo" : "","syncSourceHost" : "","syncSourceId" : -1,"configsvr" : true,"heartbeatIntervalMillis" : NumberLong(2000),"optimes" : {"lastCommittedOpTime" : {"ts" : Timestamp(1554288879, 4),"t" : NumberLong(1)},"readConcernMajorityOpTime" : {"ts" : Timestamp(1554288879, 4),"t" : NumberLong(1)},"appliedOpTime" : {"ts" : Timestamp(1554288879, 4),"t" : NumberLong(1)},"durableOpTime" : {"ts" : Timestamp(1554288879, 4),"t" : NumberLong(1)}},"lastStableCheckpointTimestamp" : Timestamp(1554288864, 1),"members" : [{"_id" : 0,"name" : "192.168.2.177:21000","health" : 1,"state" : 1,"stateStr" : "PRIMARY","uptime" : 5454,"optime" : {"ts" : Timestamp(1554288879, 4),"t" : NumberLong(1)},"optimeDate" : ISODate("2019-04-03T10:54:39Z"),"syncingTo" : "","syncSourceHost" : "","syncSourceId" : -1,"infoMessage" : "could not find member to sync from","electionTime" : Timestamp(1554288863, 1),"electionDate" : ISODate("2019-04-03T10:54:23Z"),"configVersion" : 1,"self" : true,"lastHeartbeatMessage" : ""},{"_id" : 1,"name" : "192.168.2.178:21000","health" : 1,"state" : 2,"stateStr" : "SECONDARY","uptime" : 31,"optime" : {"ts" : Timestamp(1554288879, 4),"t" : NumberLong(1)},"optimeDurable" : {"ts" : Timestamp(1554288879, 4),"t" : NumberLong(1)},"optimeDate" : ISODate("2019-04-03T10:54:39Z"),"optimeDurableDate" : ISODate("2019-04-03T10:54:39Z"),"lastHeartbeat" : ISODate("2019-04-03T10:54:41.362Z"),"lastHeartbeatRecv" : ISODate("2019-04-03T10:54:41.906Z"),"pingMs" : NumberLong(0),"lastHeartbeatMessage" : "","syncingTo" : "192.168.2.177:21000","syncSourceHost" : "192.168.2.177:21000","syncSourceId" : 0,"infoMessage" : "","configVersion" : 1},{"_id" : 2,"name" : "192.168.2.180:21000","health" : 1,"state" : 2,"stateStr" : "SECONDARY","uptime" : 31,"optime" : {"ts" : Timestamp(1554288879, 4),"t" : NumberLong(1)},"optimeDurable" : {"ts" : Timestamp(1554288879, 4),"t" : NumberLong(1)},"optimeDate" : ISODate("2019-04-03T10:54:39Z"),"optimeDurableDate" : ISODate("2019-04-03T10:54:39Z"),"lastHeartbeat" : ISODate("2019-04-03T10:54:41.362Z"),"lastHeartbeatRecv" : ISODate("2019-04-03T10:54:41.597Z"),"pingMs" : NumberLong(0),"lastHeartbeatMessage" : "","syncingTo" : "192.168.2.177:21000","syncSourceHost" : "192.168.2.177:21000","syncSourceId" : 0,"infoMessage" : "","configVersion" : 1}],"ok" : 1,"operationTime" : Timestamp(1554288879, 4),"$gleStats" : {"lastOpTime" : Timestamp(1554288851, 1),"electionId" : ObjectId("7fffffff0000000000000001")},"lastCommittedOpTime" : Timestamp(1554288879, 4),"$clusterTime" : {"clusterTime" : Timestamp(1554288879, 4),"signature" : {"hash" : BinData(0,"VVM2Bsa9KiZy8Sew9Oa8CsbDBPU="),"keyId" : NumberLong("6675619852301893642")}}}configs:PRIMARY>

到此mongodb分片集群部署完成后,后面附上 Mongodb 常见操作指令

show dbs                  #查看所有数据库db                        #查看当前所在的数据库sh.status()             #查看集群的信息sh.enableSharding("dba")  #对数据库启用分片db.help()                 #查看帮助db.account.stats()        #查看数据集合的分布情况db.createUser()           #新建用户use databasename          #进入或者新建数据库db.shutdownServer()       #关闭数据库db.dropDatabase()         #删除数据库(必须先切换到该数据库)


数据 服务器 服务 数据库 集群 文件 配置 不同 机器 目录 磁盘 均衡 副本 性能 环境 用户 空间 资源 路由 问题 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网科技公司起名 互联网科技工作委员会毛军 科技创新与互联网经济 重庆互联网络科技 科技与互联网发展 顺玮阁互联网科技 伴你行互联网科技有限公司 科技与互联网的利与弊 广州恒生互联网科技有限 湖北码尼互联网科技有限公司电话 智腾互联网科技有限公司 互联网科技的全部知识 深圳艾果互联网通讯科技 云南省自由互联网科技有限公司 信承诺互联网科技有限公司 互联网时代科技型公司的机会 同城互联网络科技 互联网科技大会大佬 互联网科技创新方面的资料 六子台科技互联网展会 广东万易互联网科技有限公司惠州分公司 互联网巨头科技公司 美国互联网科技 互联网金融监管科技 搜狐科技互联网 西安小鹰速贷互联网科技有限公司 广州梦谷互联网科技有限公司领导 全球科技与互联网公司市值变化 马化腾互联网科技教学 承德科技产业互联网平台
0