千家信息网

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