mongodb相关(单实例、复制集、分片集)
发表于:2025-11-06 作者:千家信息网编辑
千家信息网最后更新 2025年11月06日,一、mongodb的单实例搭建1、下载包地址1、各个版本的下载地址https://www.mongodb.org/downloads2、本文安装最新版本3.6.5wget https://fastdl
千家信息网最后更新 2025年11月06日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安全错误
数据库的锁怎样保障安全
网络安全目标包含哪些内容
c 本地数据库连接sql
天津铁路公安处网络安全部门
手机网游服务器端
数据库实施不包括
软件开发中修改成本高
软件开发适合中专生吗
网络安全与执法硕士点
软件开发有限公司是干什么的
电信卡5g接入点服务器设置
数据库两边同时更新一个表
星之辰服务器多少钱
数据库设计分析阶段任务
网络技术要考的证书
关系型数据库理论
数据库接口逻辑是怎样的
软件开发工程师英文怎么翻译
无纸化系统管理服务器
golang数据库分析工具
网络安全问题小结
鄢陵租房软件开发
制造业数字化转型中的网络安全
国家网络安全检查专家委员会
国外偏重材料类的一个数据库
抓包 数据库
盐城企业网络安全准入控制系统
广播电视网络安全制度
网络技术应用辅导
嘉定区正规金融网络技术服务优势
网络安全 映射