MongoDB分片集群部署详解
发表于:2025-11-15 作者:千家信息网编辑
千家信息网最后更新 2025年11月15日,一、环境说明1、我们prod环境MongoDB的集群架构是做的分片集群的部署,但是目前我们没有分片,即所有数据都在一个分片上,后期如果数量大,需要分配,集群随时可以分片,对业务方透明2、各个角色的部署
千家信息网最后更新 2025年11月15日MongoDB分片集群部署详解
一、环境说明
1、我们prod环境MongoDB的集群架构是做的分片集群的部署,但是目前我们没有分片,即所有数据都在一个分片上,后期如果数量大,需要分配,集群随时可以分片,对业务方透明
2、各个角色的部署情况
| 角色 | IP | 端口 | 复制集名称 |
|---|---|---|---|
| mongos | 172.21.244.101,172.21.244.102,172.21.244.94 | 27000 | 无 |
| config server | 172.21.244.101,172.21.244.102,172.21.244.94 | 27100 | repl_configsvr |
| 存储节点(shard) | 172.21.244.101,172.21.244.102,172.21.244.94 | 27101 | shard1 |
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安全错误
数据库的锁怎样保障安全
数据库秒读
2020长沙网络安全大会
蚂蚁金服云服务器安全吗
为什么老是服务器无响应
网络安全课前三分钟教育
中山保姆行业软件开发哪家专业
洋县开展网络安全
网络安全专家谈人才
数据库管理工具跟数据库
徐州软件开发公资
艾尔登法环服务器更新时间
停课不停学网络安全
如何查看服务器上的源代码
三德量热仪数据库如何下载导出
云狗数据库
屏幕共享软件开发什么时候好
三菱服务器数字报警
网络安全桔皮书指的是什么
想学软件开发好学吗
每秒几万请求写入数据库
徐州软件开发的平台
设数据库
程序设计软件开发实训周周记
空调控制器可以连到服务器吗
美国网络安全法有哪些特点
服务器远程操作
丽水企业软件开发工程师
服务器漏洞安全
数据库查第几页第几行
易语言 编辑数据库