MongoDB分片集群部署详解
发表于:2025-02-03 作者:千家信息网编辑
千家信息网最后更新 2025年02月03日,一、环境说明1、我们prod环境MongoDB的集群架构是做的分片集群的部署,但是目前我们没有分片,即所有数据都在一个分片上,后期如果数量大,需要分配,集群随时可以分片,对业务方透明2、各个角色的部署
千家信息网最后更新 2025年02月03日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安全错误
数据库的锁怎样保障安全
网络安全宣传周 南京
Fiery服务器添加IP
面向对象数据库的主要特点
伍百万互联网科技
图书馆自制的特色数据库
2018网络技术三级
科技互联网标识雕塑
数据库报错14649
为什么需要工业服务器
金盾信安网络安全知识图谱
上海网络技术服务有哪些
网络安全视频教程2017
数据库中 代替什么
网络安全意识形态简报
马金龙网络安全
数据库删不掉说正在使用
计算机网络技术什么人学不了
数据库文件所在的选项卡是
软件开发在加拿大工资
深圳市网络技术有限公司笔试题
中国湿地科学数据库网站
sql数据库怎么创建序列
b站服务器2021
软件开发费用会计分录
电力公司网络安全性评价
软件开发员工技能评价表
将登录链接数据库
汇丰软件开发公司部门
外国数据库的展望
网络安全不容忽视主题班会