MongoDB数据库 : 管道,用户管理,副本集等

发布时间:2018-12-17  栏目:NoSQL  评论:0 Comments

聚合(aggregate): db.集合.aggregate([{管道:{表达式}}])

版本:3.6 

db.集合.aggregate([
{管道1:{表达式1}},
{管道2:{表达式2}},
… …
])

相同、以单机情势启动成员节点

偶尔是因为珍视的消,需要为单机情势启动某个节点而无是一个合本集成员身价。

1).首先查询服务器命令行参数

db.serverCmdLineOpts()

manbet手机客户端3.0 1

2).关闭时副本

3).以单机形式启动副本

此处用指定副本原先的db路径,为了制止或的旁连接此处可以指定一个初的port启动;也足以直接下原来的配置文件启动单独需要注释掉“replSet”参数即可。

mongod --port 27000 --bind_ip 192.168.137.10,127.0.0.1 --dbpath /mongos27012/data/db4

4).维护了事后再一次因副本成员身价启动时服务器。

管道1之结果当管道2的输入.

第二、检查写入是否成功

getLastError命令检查写入是否中标

db.runCommand({"getLastError":1,"w":2,"wtimeout":1000});

getLastErrorDefaults默认配置值

conf = rs.config();

conf.settings = {"getLastErrorDefaults" : {

                            "w" : 1,

                            "wtimeout" : 0

                            }

                            };

rs.reconfig(conf);

wtimeout:等待超时时长,假使跨越这么些时刻MongoDB无法在指定时间外用写副操作复制到“w”个成员,再次来到超时。

w的多独价值:

majority:向来等候保证大多数分子都施行了了写入操作

number(数字):w值包含主节点,如若安1那单纯包主节点写副成功,假若指望被复制到N个节点,那么相应以“w”设置为N+1

$group:分组 {$group:{
_id:’$gender’,
count:{$sum:1}
}}

老三、自定义复制保证规则,设置成员标签

$match:过滤(年龄过19) {$match:{age:{$gt:19}}}

1.设置成员标签

conf = rs.config();

conf.members[0].tags={"dc" : "dc01"};

conf.members[1].tags={"dc" : "dc01"};

conf.members[2].tags={"dc" : "dc02"};

rs.reconfig(conf);

点操作设置了有限独组,分别是dc01和dc02;

注意:

1.tags因而来叫各国一个节点成员设置标签,它是一个集合所以可以像集合一样包含两个价,比如

{“dc”: “rack1″, disk:”ssd”, ssd: “installed”}

2.如尽管开首化tags必须先行先河化settings.getLastErrorModes

$project:投影(和find第二组参数一样,1突显,0非亮)
{$project:{_id:0,counter:1}}

2.部署规则,应用于settings选项

因而安排getLastErrorMode字段实现,每条规则之模式为:“name”:{“key”:number}.其中name是平整之名,自己得,key就是上边tags的标识,number代表复制操作至少复制到小只分组上,每个分组内至少一台机械上.

conf = rs.config();

conf.settings.getLastErrorModes={"eachDC":{"dc":2}                                                }

rs.reconfig(conf);

初始化getLastErrorModes

conf = rs.config();

conf.settings.getLastErrorModes={}

rs.reconfig(conf);

manbet手机客户端3.0,$sort:排序(和sort一样,1升序,-1降序) {$sort:{_id:-1}}

3.安插入记录并动用规则

db.users.insert( { id: "xyz", status: "A" }, { writeConcern: { w:"eachDC" } } );

小心:要是无思念数据复制到某某节点,可以免为此节点配置标签,这样该成员即便藏身成员。

conf = rs.config();

conf.members[1].tags={};

rs.reconfig(conf);

$skip(跳了小条文档,和skip一样) {$skip:2}

4.注意事项

conf = rs.conf()

conf.members[0].tags = { "dc": "east", "production": "node-1" }

conf.members[1].tags = { "dc": "east", "production": "node-2" }

conf.members[2].tags = { "dc": "east", "production": "node-3" }

rs.reconfig(conf)

下面的规则可以创建成功,因为标签production拥有三个不同的组

conf.settings = {

    getLastErrorModes: {

        productionWriteConcern : { "production": 3 }

    }

}

下面的规则不能创建成功,因为标签dc只有一个唯一的组

conf.settings = {

    getLastErrorModes: {

        dcWriteConcern : { "dc": 3 }

    }

}

$limit(获取多少条文档,和limit一样) {$limit:2}

季、副本集配置

称本集的布当local.system.replSet集合中。副本集中具有成员的的欠文档记录依然同之。

rs.:副本命令,是replSet是缩写,代表称本集。

db.:数据库命令,比如db.printReplicationInfo(),db.printSlaveReplicationInfo()

rs.status:查看成员的复制状态,可以在随意节点执行。

rs.config():可以博时副本的布,修改配置文件,然后用改后底安排文件传递让                     
reconfig、initiate命令。

rs.reconfig()(replSetReconfig):修改副本集的配置。rs.reconfig(conf,{“force”:true})

rs.initiate():会初阶化配置,只待针对副本集中的一个成员调用rs.initiate就可以(一般主节点),收到initiate命令的成员会自动将配置文件传递让副本集中之另成员

$unwind(可以拿数组拆分成单长文档) {$unwind:’$xxx’}

1.开立副本集

1).登入

mongo --port 27010

2).切换admin数据库

use admin

3).验证权限

db.auth("dba","dba")

4).开始化复制集,默认会创设当前节点为主节点的适合本集

rs.initiate()

5).重开当前节点

db.shutdownServer()

目录(1:升序索引,2:降序索引):db.集合.ensureIndex({属性1:1,属性2:1})

2.窜副本集成员

1).添加新成员,在主节点执行:

rs.add("192.168.137.10:27011")
可以在添加成员的时设定成员配置,也就是rs.conf中member的参数:
rs.add("_id":1,"host":"192.168.137.10:27011", "priority" : 0, "hidden" : true)

2)删除成员

rs.remove("192.168.137.10:27012");

修改副本集成员配置时之范围:

1、不克改改_id;

2、不能以眼前推行rs.reconfig命令的积极分子的预级设置为 0;

3、不克以仲裁者成员成为非仲裁者成员,反正亦然;

4、不能将buildIndexes由false改为 true;

查阅文档索引 db.集合.getIndex()

3.保证主节点不切换

将兼具的备份节点的priority和votes都安装为0;这样只有主节点发出投票权所以不管备份节点是否是都无相会造成主节点之状态由primary变成other。

conf=rs.config()

conf.members[1].priority=0

conf.members[1].votes=0

rs.reconfig(conf)

去除索引 db.集合.dropIndex(‘索引名称’)

4.强制重新配置

若符合本集无法选出新的主节点,这时急需重新配置副本集。可以在备份节点上调用rs.reconfig(conf,{“force”:ture})强制重新配置副本集。注意conf必须是没错、有效之布。而且只是允许在备份节点执行强制重新配置。

备份节点收到新的部署文件之后,就会师改自身之布局,并且将新的布置发送给副本集中之任何成员。副本集的其他成员接受新的布文件从此,会咬定配置文件的发送者是否是它们当前配备中的一个成员,假设是,才会用心的配置文件对友好进行重新配置。所以,如若新的布修改了少数成员的主机名,则当关闭被修改主机名的节点,并为单机模式启动,手动修改locak.system.replset文档,然后为适合本集的方还起动。

角色: root 只以admin数据库可用,一级账号
Read:允许用户读取指定数据库
readWrite:允许用户读写指定数据库

5.修改成员状态

1).把主节点化备份节点,在主节点实施

rs.stepDown()

rs.stepDown(60):让主节点退化为备份节点,并维持60秒。假使这段时日内无新的主节点被选举出来,那么当前节点可以要求重与实行选。

2).阻止选举

使要针对主节点举行保障操作,然则未期待这段时内其他成员选举为主节点,可以于每个备份节点上实施freeze命令,以强制其一直处在备份节点的状态。命令以秒为单位。

rs.freeze(3600):保持1个小时处于备份节点状态。

rs.freeze(0):再次在备份节点执行且将时间指定为0就是“释放”备份节点。

只顾:倘若以退位的备份节点上推行rs.freeze(0),可以给退位的备份节点重新成为主节点。

创超级管理员:
db.createUser({user:’admin’,pwd:’123′,roles:[{role:’root’,db:’admin’}]})

6.禁就此复制链

1).查看复制源

询问节点打哪个节点处复制。在备份节点上运行。

db.adminCommand({"replSetGetStatus":1})['syncingTo'];

manbet手机客户端3.0 2

啊堪运行rs.status(),查看”syncingTo”字段消息。

2.)复制链

MongoDB依照ping时间采取同步源,一个分子为其他一个成员发送心跳请求,就亮心跳请求所消耗的流年(rs.status()中的”pingMs”记录了成员到相关成员的所花的平分时间)。MongosDB维护着不同成员间要的平分花费时间。采取并源时,会选用一个距自己于接近而数量较自己初的成员。可是同样数据主导的分子或相会起同数据基本的另成员处复制,而未是起在另一个多少主题的主节点处复制(这样可减小网络流量),所以会见并发复制链的状态,复制链越长会招致主节点之操作复制到拥有的服务器所消费的流年越长。这对急需从副本中读取数据的需求这种情况是休指望见到的。

manbet手机客户端3.0 3

3).修改复制源

db.adminCommand({"replSetSyncFrom":"192.168.137.10:27011"});

4).禁用复制链

conf = rs.conf()
conf.settings.chainingAllowed = false
rs.reconfig(conf)

当主副本中执行

启用验证 修改/etc/mongodb.conf:

7.计量延迟

1).查看当前副本集oplog状态

rs.printReplicationInfo()

configured oplog size:oplog配置的大大小小

log length start to end:oplog包含的操作时长。

oplog first event time:oplog第一修操作的时。

oplog last event time:oplog最终一久操作的时空。

now:当前岁月。

注意:oplog中首先长操作和终极一漫长操作的日子不一就是操作日志的长短。

2).查看复制延迟

rs.printSlaveReplicationInfo()

相会显得当前抱有的备份节点同步时间,和倒退主节点之时长。

security:
authorization: enabled

8.调整oplog大小

1)  假设是主节点,将主节点变成备份节点。

2)  将oplog中的终极一长达insert操作保存到外集合中。

use local

var lastinsert = db.oplog.rs.find({"op":{$in:["i"]}}).sort({"wall":-1}).limit(1).next();

db.tempLastOp20180330.save(lastinsert)

db.tempLastOp20180330.find()

3)   关闭时服务器

4)   以单机形式启动

mongod --port 27000 --bind_ip 192.168.137.10,127.0.0.1 --dbpath /mongos27012/data/db

5)   删除时oplog

db.oplog.rs.drop();

6)   创制新的oplog

db.createCollection("oplog.rs",{"capped":true,"size":1048576})

7)  将最后一长达insert记录写回oplog

var tempLastOp=db.tempLastOp20180330.find().next()
db.oplog.rs.insert(tempLastOp)
db.oplog.rs.find()

8)  以副本成员身份启动时服务器

或者 auth=true

五、复制集监督

1.复制集状态查询:rs.status()

2.查看时副本集oplog状态:rs.printReplicationInfo()

3.翻复制延迟:rs.printSlaveReplicationInfo()

4.查看服务状态详情:db.serverStatus()

5.询问符合本集配置:rs.conf()

6.主副本查询:db.isMaster()

 

副本配置:https://docs.mongodb.com/manual/reference/replica-configuration/#rsconf.settings.getLastErrorDefaults

 

 

 

备注:

    作者:pursuer.chen

    博客:http://www.cnblogs.com/chenmh

本站点所有随笔都是原创,欢迎大家转载;但转载时必须注明文章来源,且在文章开头明显处给明链接,否则保留追究责任的权利。

《欢迎交流讨论》

 

用一级管理员成立普通用户:
db.createUser({user:’user1′,pwd:’123′,roles:[{role:’readWrite’,db:’students’}]})

登陆: mongo -u user1 -p 123 –authenticationDatabase students

入本集:数据备份等:
mongod –bind_ip x.x.x.x –porx 27018 –dbpath ~/Desktop/t1 –replSet
rs0
mongod –bind_ip x.x.x.x –porx 27019 –dbpath ~/Desktop/t2 –replSet
rs0

连接 mongo –host x.x.x.x –port 27018

初步化主服务器: >rs.initiate() 查看状态 rs.status()

增长合本集: rs.add(‘x.x.x.x:27019′)’)
删除副本集:rs.remove(‘x.x.x.x:27019′)’)

在从服务器碰到读取操作需要装 rs.slaveOk()

自动主从切换:一个服务器关闭其他一个机动切换成主服务器.

数据库备份:mongodump -u user1 -p 123 –authenticationDatabase 数据库名
-d 备份数据库 -o 存放地点

数据库復苏: mongorestore -h 服务器地址 -d 需要还原的数据库 –dir
备份数据库地方

留下评论

网站地图xml地图