mongodb相关(单实例、复制集、分片集)
发表于:2025-02-22 作者:千家信息网编辑
千家信息网最后更新 2025年02月22日,一、mongodb的单实例搭建1、下载包地址1、各个版本的下载地址https://www.mongodb.org/downloads2、本文安装最新版本3.6.5wget https://fastdl
千家信息网最后更新 2025年02月22日mongodb相关(单实例、复制集、分片集)
一、mongodb的单实例搭建
1、下载包地址
1、各个版本的下载地址https://www.mongodb.org/downloads2、本文安装最新版本3.6.5wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.6.5.tgz
2、安装
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=true
3、启动和关闭
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:27019
1、新增keyfile文件
1、vim keyfile123456all2、设置权限chmod 600 keyfile
2、配置文件,基于单实例的基础上额外增加
# /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_one
3、启动实例
/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.cnf
4、配置复制集
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:40013
1、配置文件
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文件内容文件内容(可更复杂设置)123456all
3、启动
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.cnf
4、配置分片
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安全错误
数据库的锁怎样保障安全
软件开发工程师日常工作
江苏服务器机柜哪家靠谱
如何提高服务器并发
服务器出生点怎么设计
软件开发公司长春
迪源平法软件开发
黑板报网络安全文字
网络安全实操训练
为什么财务软件有的需要数据库
08cms数据库
信息化网络安全要求
服务器配音什么时候恢复
南京点程互联网科技有限公司
二之国台服哪个服务器
泉州软件开发外包公司排行榜
sqlyog导入数据库
ftp服务器连不上
记事狗数据库
上海风虎AI人工智能服务器
互联网基金会网络安全
网络安全的新威胁
什么部门负责统筹网络安全
网络安全运行体系
linux 服务器负载
重新构筑主机存储数据库
网络安全法哪一年起实施
u8如何修复数据库
一台电脑不同的数据库可以安几个
交行总行软件开发
互联网基金会网络安全