千家信息网

MongoDB分片集群部署

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,一、环境说明1、我们prod环境MongoDB的集群架构是做的分片集群的部署,但是目前我们没有分片,即所有数据都在一个分片上,后期如果数量大,需要分配,集群随时可以分片,对业务方透明2、各个角色的部署
千家信息网最后更新 2026年11月02日MongoDB分片集群部署

一、环境说明

1、我们prod环境MongoDB的集群架构是做的分片集群的部署,但是目前我们没有分片,即所有数据都在一个分片上,后期如果数量大,需要分配,集群随时可以分片,对业务方透明
2、各个角色的部署情况

角色IP端口复制集名称
mongos172.21.244.101,172.21.244.102,172.21.244.9427000无
config server172.21.244.101,172.21.244.102,172.21.244.9427100repl_configsvr
存储节点(shard)172.21.244.101,172.21.244.102,172.21.244.9427101shard1

3、MongoDB版本

mongos> db.version()4.0.4-62-g7e345a7

二、基础信息准备

0、系统优化

echo "never" >/sys/kernel/mm/transparent_hugepage/enabledecho "never" >/sys/kernel/mm/transparent_hugepage/defrag

1、下载MongoDB二进制文件

cd /chj/appwget ops.chehejia.com:9090/pkg/chj_mongodb_4.0.4.tar.gztar -zxvf chj_mongodb_4.0.4.tar.gz

2、相关目录建立

#建立base目录mkdir /chj/data/mongodb/chj_db#把MongoDB二进制文件移动到base目录下的bin文件夹mv chj_mongodb_4.0.4/bin /chj/data/mongodb/chj_db/bin#建立认证文件目录mkdir /chj/data/mongodb/chj_db/auth#建立配置文件目录mkdir /chj/data/mongodb/chj_db/conf#建立config server的data和日志目录mkdir /chj/data/mongodb/chj_db/config/data -pmkdir /chj/data/mongodb/chj_db/config/log#建立mongos的日志目录mkdir /chj/data/mongodb/chj_db/mongos/log -p#建立数据节点data和日志目录 mkdir /chj/data/mongodb/chj_db/shard1/data -pmkdir /chj/data/mongodb/chj_db/shard1/log

3、相关配置文件编写
A、mongos的配置文件编写

vim /chj/data/mongodb/chj_db/conf/mongos.confsystemLog:  destination: file  logAppend: true  path: /chj/data/mongodb/chj_db/mongos/log/mongos.logprocessManagement:  fork: true  # fork and run in background  pidFilePath: /chj/data/mongodb/chj_db/mongos/log/mongos.pid  # location of pidfile  timeZoneInfo: /usr/share/zoneinfonet:  port: 27000  bindIpAll: true  maxIncomingConnections: 1000  unixDomainSocket:    enabled: true    pathPrefix: /chj/data/mongodb/chj_db/mongos/log    filePermissions: 0700security:  keyFile: /chj/data/mongodb/chj_db/auth/keyfile.key#  authorization: enabled#replication:sharding:  configDB: repl_configsvr/172.21.244.101:27100,172.21.244.102:27100,172.21.244.94:27100

B、config server的配置文件编写

vim /chj/data/mongodb/chj_db/conf/config.confsystemLog:  destination: file  logAppend: true  path: /chj/data/mongodb/chj_db/config/log/congigsrv.logstorage:  dbPath: /chj/data/mongodb/chj_db/config/data  journal:    enabled: true  wiredTiger:    engineConfig:      directoryForIndexes: trueprocessManagement:  fork: true  # fork and run in background  pidFilePath: /chj/data/mongodb/chj_db/config/log/configsrv.pid  # location of pidfile  timeZoneInfo: /usr/share/zoneinfonet:  port: 27100  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: 1000  unixDomainSocket:    enabled: true    pathPrefix: /chj/data/mongodb/chj_db/config/data    filePermissions: 0700security:  keyFile: /chj/data/mongodb/chj_db/auth/keyfile.key  authorization: enabledreplication:  replSetName: repl_configsvrsharding:  clusterRole: configsvr

C、存储节点的配置文件编写

vim /chj/data/mongodb/chj_db/conf/shard1.confsystemLog:  destination: file  logAppend: true  path: /chj/data/mongodb/chj_db/shard1/log/shard1.logstorage:  dbPath: /chj/data/mongodb/chj_db/shard1/data  journal:    enabled: true  wiredTiger:    engineConfig:      directoryForIndexes: trueprocessManagement:  fork: true  # fork and run in background  pidFilePath: /chj/data/mongodb/chj_db/shard1/log/shard1.pid  # location of pidfile  timeZoneInfo: /usr/share/zoneinfonet:  port: 27101  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: 1000  unixDomainSocket:    enabled: true    pathPrefix: /chj/data/mongodb/chj_db/shard1/data    filePermissions: 0700security:  keyFile: /chj/data/mongodb/chj_db/auth/keyfile.key  authorization: enabledreplication:  replSetName: shard1sharding:  clusterRole: shardsvr

4、生产key认证文件

echo "chj123456" >/chj/data/mongodb/chj_db/auth/keyfile.key
#设置文件的权限为400,不然服务无法启动
chmod 400 /chj/data/mongodb/chj_db/auth/keyfile.key

三、集群初始化
1、启动 config server 服务

/chj/data/mongodb/chj_db/bin/mongod -f /chj/data/mongodb/chj_db/conf/config.conf
2、初始化config server集群

#登录其中一个config server节点/chj/data/mongodb/chj_db/bin/mongo --port 27100#配置集群config = { _id:"repl_configsvr",members:[ {_id:0,host:"172.21.244.101:27100"}, {_id:1,host:"172.21.244.102:27100"}, {_id:2,host:"172.21.244.94:27100"}] }#初始化集群rs.initiate(config)PS:结果输出如下,说明集群初始化成功,可以通过rs.status()命令查看集群状态{        "ok" : 1,        "$gleStats" : {                "lastOpTime" : Timestamp(1557538260, 1),                "electionId" : ObjectId("000000000000000000000000")        },        "lastCommittedOpTime" : Timestamp(0, 0)}

3、启动存储节点服务

/chj/data/mongodb/chj_db/bin/mongod -f /chj/data/mongodb/chj_db/conf/shard1.conf
4、初始化存储集群

#登录你希望是主节点的服务器/chj/data/mongodb/chj_db/bin/mongo --port 27101#配置集群config = { _id:"shard1",members:[ {_id:0,host:"172.21.244.101:27101"}, {_id:1,host:"172.21.244.102:27101"},{_id:2,host:"172.21.244.94:27101",arbiterOnly:true}] }#初始化集群rs.initiate(config)PS:结果输出如下,说明集群初始化成功,可以通过rs.status()命令查看集群状态{ "ok" : 1 }

5、添加存储集群的管理账号

登录主节点/chj/data/mongodb/chj_db/bin/mongo --port 27101use admindb.createUser({user: "root",pwd: "123456",roles: [ { role: "root", db: "admin" } ]})

6、启动mongos 服务

/chj/data/mongodb/chj_db/bin/mongos -f /chj/data/mongodb/chj_db/conf/mongos.conf
7、添加config server的管理账号

登录任意一个mongos节点/chj/data/mongodb/chj_db/bin/mongo --port 27000use admindb.createUser({user: "root",pwd: "123456",roles: [ { role: "root", db: "admin" } ]})

8、把存储节点添加到mongos

登录任意一个mongos节点(如果是在上一步的窗口,需要退出重新登录)/chj/data/mongodb/chj_db/bin/mongo --port 27000use admindb.auth('root','123456')#添加分片sh.addShard('shard1/172.21.244.101:27101,172.21.244.102:27101,172.21.244.94:27101')#查看分片状态sh.status()

四、交付业务方
1、建立应用账号

登录任意一个mongos节点/chj/data/mongodb/chj_db/bin/mongo --port 27000use admindb.auth('root','123456')#切到业务数据库use chj_db#建立读写账号db.createUser({   user: "chj_db_rw",   pwd: "123456",   roles: [      { role: "readWrite", db: "chj_db" },      { role: "dbOwner", db: "chj_db" }   ]})#建立只读账号(根据业务需求确认是否需要)db.createUser({user: "chj_db_r",pwd: "123456",roles: [ { role: "read", db: "chj_db" } ]})

2、交付开发人员信息

连接地址:172.21.244.101:27000,172.21.244.102:27000,172.21.244.94:27000库名:chj_db账号:chj_db_rw密码:123456

五、数据库启用分片

如果后期业务量大,需要开启分片,配置如下#指定需要分片的数据库mongos> sh.enableSharding("chj_db")  {        "ok" : 1,        "operationTime" : Timestamp(1557546835, 3),        "$clusterTime" : {                "clusterTime" : Timestamp(1557546835, 3),                "signature" : {                        "hash" : BinData(0,"bkrrr8Kxrr9j9udrDc/hURHld38="),                        "keyId" : NumberLong("6689575940508352541")                }        }}#在chj_db数据库和users集合中创建了name和age为升序的片键mongos> sh.shardCollection("chj_db.users",{name:1,age:1})  {        "collectionsharded" : "chj_db.users",        "collectionUUID" : UUID("59c0b99f-efff-4132-b489-f6c7e3d98f42"),        "ok" : 1,        "operationTime" : Timestamp(1557546861, 12),        "$clusterTime" : {                "clusterTime" : Timestamp(1557546861, 12),                "signature" : {                        "hash" : BinData(0,"UBB1A/YODnmXwG5eAhgNLcKVzug="),                        "keyId" : NumberLong("6689575940508352541")                }        }}#查看分片情况mongos> sh.status()  --- Sharding Status ---  sharding version: {        "_id" : 1,        "minCompatibleVersion" : 5,        "currentVersion" : 6,        "clusterId" : ObjectId("5cd625e0da695346d740f749")  }  shards:        {  "_id" : "shard1",  "host" : "shard1/172.21.244.101:27101,172.21.244.102:27101",  "state" : 1 }  active mongoses:        "4.0.4-62-g7e345a7" : 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" : "chj_db",  "primary" : "shard1",  "partitioned" : true,  "version" : {  "uuid" : UUID("82088bc7-7b98-4033-843d-7058d8d959f6"),  "lastMod" : 1 } }                chj_db.users                        shard key: { "name" : 1, "age" : 1 }                        unique: false                        balancing: true                        chunks:                                shard1  1                        { "name" : { "$minKey" : 1 }, "age" : { "$minKey" : 1 } } -->> { "name" : { "$maxKey" : 1 }, "age" : { "$maxKey" : 1 } } on : shard1 Timestamp(1, 0)        {  "_id" : "config",  "primary" : "config",  "partitioned" : true }                config.system.sessions                        shard key: { "_id" : 1 }                        unique: false                        balancing: true                        chunks:                                shard1  1                        { "_id" : { "$minKey" : 1 } } -->> { "_id" : { "$maxKey" : 1 } } on : shard1 Timestamp(1, 0)
集群 文件 节点 目录 配置 登录 数据 账号 存储 业务 服务 数据库 日志 状态 成功 二进制 信息 可以通过 命令 情况 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 中关村互联网 科技集团 圆梦互联网科技 互联网金融与金融科技 上海互联网科技有限公司 金融科技与互联网金融 科技互联网创业计划书 互联网科技英文翻译 青海省互联网新科技 银川新华互联网科技学校地址 茂名市互联网科技产业园 厦门千工互联网科技有限公司 米聚互联网科技南京有限公司排面 科技赋能视角下互联网保险发展 中科明德北京互联网科技 上海钢联属于互联网科技股吗 启辰互联网科技 广州燕处互联网科技有限公司 西安有哪些互联网高科技企业 互联网领先科技活动 互联网科技品牌 深圳九邦互联网科技有限公司 互联网的科技创新 无线互联网科技 中国互联网有什么科技含量 燊美集互联网科技有限公司 爱医互联网络科技 用友工业互联网科技发展 南通创西澳互联网科技有限公司 互联网风格科技公司名称 长沙渺峰互联网科技有限公司
0