mongodb相关(单实例、复制集、分片集)
发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,一、mongodb的单实例搭建1、下载包地址1、各个版本的下载地址https://www.mongodb.org/downloads2、本文安装最新版本3.6.5wget https://fastdl
千家信息网最后更新 2026年10月31日mongodb相关(单实例、复制集、分片集)
一、mongodb的单实例搭建
1、下载包地址
1、各个版本的下载地址https://www.mongodb.org/downloads2、本文安装最新版本3.6.5wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.6.5.tgz2、安装
1、解压tar xf mongodb-linux-x86_64-3.6.5.tgz && mv mongodb-linux-x86_64-3.6.5 /usr/local/mongodb-3.6.52、创建相关目录mkdir -p /data/mongodb27017/{data,log,conf}3、参数文件配置,vim /data/mongodb27017/conf/mongodb-27017.cnfport=27017bind_ip=192.168.142.48,127.0.0.1dbpath=/data/mongodb27017/datalogpath=/data/mongodb27017/log/mongodb.logpidfilepath=/data/mongodb27017/mongodb.pidlogappend=truefork=trueauth=true3、启动和关闭
1、启动mongodb/usr/local/mongodb-3.6.5/bin/mongod -f /data/mongodb27017/conf/mongodb-27017.cnf2、客户端命令行首次进入/usr/local/mongodb-3.6.5/bin/mongo --port=270173、创建超管用户db.createUser({user: "admin",pwd: "123456",roles: [ { role: "root", db: "admin" } ]})4、客户端命令行再次进入/usr/local/mongodb-3.6.5/bin/mongo 192.168.142.48:27017/admin -u admin -p123456> db.getCollectionNames()[ "system.users", "system.version" ]5、关闭mongodb/usr/local/mongodb-3.6.5/bin/mongo 192.168.142.48:27017/admin -u admin -p123456> db.shutdownServer()二、 mongodb的复制集搭建
在单实例的基础上创建复制集(已经配置超管用户)
192.168.142.48:27017192.168.142.48:27018192.168.142.48:270191、新增keyfile文件
1、vim keyfile123456all2、设置权限chmod 600 keyfile2、配置文件,基于单实例的基础上额外增加
# /data/mongodb27017/conf/mongodb-27017.cnfkeyFile=/data/mongodb27017/keyfileoplogSize=1024replSet=rs_one# /data/mongodb27018/conf/mongodb-27018.cnfkeyFile=/data/mongodb27018/keyfileoplogSize=1024replSet=rs_one# /data/mongodb27019/conf/mongodb-27019.cnfkeyFile=/data/mongodb27019/keyfileoplogSize=1024replSet=rs_one3、启动实例
/usr/local/mongodb-3.6.5/bin/mongod -f /data/mongodb27017/conf/mongodb-27017.cnf/usr/local/mongodb-3.6.5/bin/mongod -f /data/mongodb27018/conf/mongodb-27018.cnf/usr/local/mongodb-3.6.5/bin/mongod -f /data/mongodb27019/conf/mongodb-27019.cnf4、配置复制集
1、任意一台命令行登录/usr/local/mongodb-3.6.5/bin/mongo 192.168.142.48:27017/admin -u admin -p1234562、配置复制集成员config = {"_id":"rs_one",members:[{"_id":0,host:"192.168.142.48:27017"},{"_id":1,host:"192.168.142.48:27018"},{"_id":2,host:"192.168.142.48:27019",arbiterOnly:true}]}3、初始化复制集rs.initiate(config)4、查看复制集状态rs.conf(),查看副本集的配置rs.status(),查看副本集的状态rs.printSlaveReplicationInfo(),查看各节点同步状态rs.printReplicationInfo(),查看同步事件概况db.isMaster(),查看当前复制集概况5、复制集的管理
1、添加副本集成员使用rs.add(HOST_NAME:PORT)添加新的副本集机器,例如:rs.add("192.168.142.48:27019")2、删除副本集成员使用rs.remove(HOST_NAME:PORT)删除副本集机器,例如:rs.remove("192.168.142.48:27019")3、副本集参数配置对于复杂的副本集配置,rs.reconfig函数修改比rs.add和rs.remove更有用 var a = rs.config() rs.reconfig(a)4、解决报错"not master and slaveOk=false" 1).本次生效 rs.slaveOk(); 2).永久生效 vim ~/.mongorc.js,增加一行rs.slaveOk(); 这样的话以后每次通过mongo命令进入从库都可以查询了5、对于仲裁节点修改为副本集普通成员 1、删除仲裁节点,rs.remove("192.168.142.48:27019") 2、重新启动仲裁节点所在实例(必须) 3、重新添加成员,rs.add("192.168.142.48:27019")6、手动降级主节点为普通节点PRIMARY> rs.stepDown()6、复制集选举节点原理
当一个备份节点无法与主节点联通时,他就联系并请求其他成员将自己选举为主节点,其他成员做几项理性的检查
1、自身是否能够与主节点联通2、希望被选举为主节点的备份节点的数据是否是最新3、有没有其他更高优先级的成员可以被选举为主节点发生主节点选举时,优先级priority最高的备份节点如果数据不是最新,必须使用复制将自己的数据更新为最新或最新之一,才能成为新的主节点
三、 mongodb的分片集搭建
分片集的原理
在复制集搭建的基础上创建分片集
复制集rs_one192.168.142.48:27017192.168.142.48:27018192.168.142.48:27019复制集rs_two192.168.142.49:27017192.168.142.49:27018192.168.142.49:27019复制集rs_three192.168.142.50:27017192.168.142.50:27018192.168.142.50:27019配置服务器config server复制集复制集rs_cfg192.168.142.48:40011192.168.142.48:40012192.168.142.48:400131、配置文件
1、rs_one,rs_two,rs_three涉及的实例配置文件需要(在复制集的基础上)额外添加shardsvr=true2、rs_cfg涉及的实例配置文件需要(在复制集的基础上)额外添加configsvr=true3、mongos的配置文件port=20000bind_ip=192.168.142.48,127.0.0.1logpath=/data/mongodb20000/log/mongodb.logpidfilepath=/data/mongodb20000/mongodb.pidkeyFile=/data/mongodb20000/keyfilelogappend=truefork=trueconfigdb=rs_cfg/192.168.142.48:40011,192.168.142.48:40012,192.168.142.48:40013note:其中rs_cfg/192.168.142.48:40011,192.168.142.48:40012,192.168.142.48:40013为config server复制集2、keyfile文件内容保持一致
复制集rs_one,rs_two,rs_three的keyfile文件内容config server复制集rs_cfg的keyfile文件内容mongos的keyfile文件内容文件内容(可更复杂设置)123456all3、启动
1、启动复制集rs_one 192.168.142.48rs_two 192.168.142.49rs_three 192.168.142.50分别启动复制集/usr/local/mongodb-3.6.5/bin/mongod -f /data/mongodb27017/conf/mongodb-27017.cnf/usr/local/mongodb-3.6.5/bin/mongod -f /data/mongodb27018/conf/mongodb-27018.cnf/usr/local/mongodb-3.6.5/bin/mongod -f /data/mongodb27019/conf/mongodb-27019.cnf2、启动config server复制集rs_cfgrs_cfg 192.168.142.48/usr/local/mongodb-3.6.5/bin/mongod -f /data/mongodb40011/conf/mongodb-40011.cnf/usr/local/mongodb-3.6.5/bin/mongod -f /data/mongodb40012/conf/mongodb-40012.cnf/usr/local/mongodb-3.6.5/bin/mongod -f /data/mongodb40013/conf/mongodb-40013.cnf3、启动mongos192.168.142.48/usr/local/mongodb-3.6.5/bin/mongos -f /data/mongodb20000/conf/mongodb-20000.cnf4、配置分片
1、命令行进入mongos/usr/local/mongodb-3.6.5/bin/mongo 192.168.142.48:20000/admin -u admin -p123456note:这里虽然搭建mongos无密码auth认证,但是必须使用密码认证登录才能添加分片,密码和config server保持一致2、将副本集加入集群中sh.addShard("rs_one/192.168.142.48:27017,192.168.142.48:27018,192.168.142.48:27019")sh.addShard("rs_two/192.168.142.49:27017,192.168.142.49:27018,192.168.142.49:27019")sh.addShard("rs_three/192.168.142.50:27017,192.168.142.50:27018,192.168.142.50:27019")3、查看集群状态sh.status()4、配置表的分片策略db.runCommand({enablesharding:"wang"})db.runCommand({shardcollection:"wang.t1",key:{id:1}})5、查看表状态use wangfor(var i=0;i<100000;i++) db.t1.insert({"id":i,uname:'wdw'+i});db.t1.stats()5、报错解决,添加addShard冲突
1、报错信息mongos> sh.addShard("rs_one/192.168.142.48:27017,192.168.142.48:27018,192.168.142.48:27019"){ "ok" : 0, "errmsg" : "E11000 duplicate key error collection: admin.system.version index: _id_ dup key: { : \"shardIdentity\" }", "code" : 11000, "codeName" : "DuplicateKey", ......}2、解决,连接rs_one主节点,删除admin.system.version集合中记录rs_one:PRIMARY> db.system.version.remove({"_id":"shardIdentity"})WriteResult({ "writeError" : { "code" : 13, "errmsg" : "not authorized on admin to execute command { delete: \"system.version\", ordered: true, $clusterTime: { clusterTime: Timestamp(1528280178, 1), signature: { hash: BinData(0, 914ECCE14D194F41251247EAB282E1F346D4C7D0), keyId: 6563852648502525972 } }, $db: \"admin\" }" }})报错由于admin用户的角色是root,不具有修改admin.system.version的权限,添加对应权限db.grantRolesToUser("admin", [ { role: "__system", db: "admin" } ])3、再次删除rs_one:PRIMARY> db.system.version.remove({"_id":"shardIdentity"})WriteResult({ "nRemoved" : 0, "writeError" : { "code" : 40070, "errmsg" : "cannot delete shardIdentity document while in --shardsvr mode" }})删除时报错,意思是说不能在分片模式下删除这张表中的这条记录,然后我们关闭rs_one,然后以非shardsvr的方式启动,删除这条记录后,再以shardsvr方式启动4、以非shardsvr的方式启动,删除这条记录,再以shardsvr方式启动 1)配置文件注释掉 #shardsvr=true 2)重新启动实例 3)删除system.version对应记录,db.system.version.remove({"_id":"shardIdentity"}) 4)配置文件开启 shardsvr=true 5)重新启动实例5、重新addShardongos> sh.addShard("rs_one/192.168.142.48:27017,192.168.142.48:27018,192.168.142.48:27019"){ "shardAdded" : "rs_one", "ok" : 1, "$clusterTime" : { "clusterTime" : Timestamp(1528284663, 7), "signature" : { "hash" : BinData(0,"qLejzYtJDR1Bpt84+Hapdi1w1/I="), "keyId" : NumberLong("6563903792973086740") } }, "operationTime" : Timestamp(1528284663, 7)}
节点
配置
文件
实例
副本
内容
基础
成员
状态
选举
命令
方式
备份
密码
数据
权限
用户
仲裁
复杂
普通
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
互联网科技公司经营范围
江苏根荣互联网科技
互联网科技公司的优势
互联网科技的
小马过河互联网科技
米客互联网科技
上游互联网科技
深圳艾佳互联网科技
华脉科技工业互联网产品
恒银科技与互联网金融
以后互联网后是啥科技
港股科技和互联网
四川慕妮娅互联网科技有限公司
众安科技工业互联网合作
美国互联网科技实力
互联网与数字科技关系
互联网科技企业商标注意事项
亚光科技低轨卫星互联网
东风日产互联网科技公司叫什么
利用互联网等科技手段
南京欣网互联网络科技
科技创新与互联网经济
美国互联网科技
互联网科技公司电话
时间互联网络科技
丰台科技园 互联网公司
华中科技有哪些互联网大佬
互联网科技产品
工业互联网科技成果转化
东风日产互联网科技公司叫什么