mongodb相关(单实例、复制集、分片集)
发表于:2024-10-02 作者:千家信息网编辑
千家信息网最后更新 2024年10月02日,一、mongodb的单实例搭建1、下载包地址1、各个版本的下载地址https://www.mongodb.org/downloads2、本文安装最新版本3.6.5wget https://fastdl
千家信息网最后更新 2024年10月02日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安全错误
数据库的锁怎样保障安全
常用数据库管理软件官方完整版
海口 软件开发公司
软件开发和管理的论文
微型互联网科技
软件开发从头到上线的过程
网络安全七个方面PPT
中专网络安全试卷
久诺网络技术
阿里开发的数据库
达梦数据库超时
PHP自带数据库吗
苹果手机服务器连不上
网络安全生态问题及其建设
初中网络安全教育记录
珠海金融软件开发哪家好
深圳软件开发阮
重庆非间互联网科技有限公司
推荐好玩的服务器手机版
软件开发综合面试常见问题
网络安全联络员表
java服务器集群
网络技术的国内现状
北京网络安全报名时间
2018网络安全主题内容
四川计算机基础数据库系统
宁波新麦互联网科技
方舟原始恐惧服务器教程
宁夏海思网络技术有限公司招聘
ibm的服务器风扇太响了
杭州通信网络技术报价