1.MongoDB执行js脚本

作为一个数据库,MongoDB有一个很大的优势—它使用js管理数据库,所以也能够使用js脚本进行复杂 的管理。

mongodb 的shell是javascript实现的,如果直接使用js实现相应的功能则显得很直观和简便。比如我们对一些数据进行 统计计算,除了使用mapreduce之外,直接使用js也是很好的选择。还有一些批处理,数据同步都可以使用js。

使用js脚本进行交互的优点与缺点

1)无需任何驱动或语言支持;

2)方便cron或管理员定时任务;

3)注意点:任然是数据格式的问题;

        js脚本一般会用来执行以下任务
                1)备份;
                2)调度map-reduce命令;
                3)离线报告,离线任务;
                4)管理员定时任务;

(1):mongodb shell 运行js脚本的四种方式

方法一: 1> 交互式 mongo shell

mongo
> use school
switched to db school
> db.student.findOne()
{ "_id" : ObjectId("5f1f8bdab36301cb281efc06"), "id" : 101, "name" : "张三", "gender" : "M" }

方法二:不进入交互模式,直接在 OS 的命令行下运行一段mongodb脚本。

> show dbs
admin    0.000GB
config   0.000GB
db1      0.000GB
local    0.000GB
student  0.000GB
> use db1;
switched to db db1
> exit
bye
[root@manager ~]# mongo db1 --eval "printjson(db.student.findOne())"
MongoDB shell version v4.4.16
connecting to: mongodb://127.0.0.1:27017/db1?compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("153bab25-60c1-49ce-bd9f-19a94ad716a2") }
MongoDB server version: 4.4.16
{"_id" : ObjectId("6329da7c5e81be318ba81363"),"id" : 1,"name" : "张三","sex" : "男","age" : 18
}
[root@manager ~]#
说明:
        通常使用两种方法打印获取到的结果:
        print() => 普通js
        printjson() => 格式化json打印,打印出来的格式会漂亮许多

方法三:在OS命令下,运行一个js文件;

[root@manager ~]# vim test.js
[root@manager ~]# mongo db1 test.js
MongoDB shell version v4.4.16
connecting to: mongodb://127.0.0.1:27017/db1?compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("44923f64-0fcc-4e78-8df4-07a46e830561") }
MongoDB server version: 4.4.16
{"_id" : ObjectId("6329da7c5e81be318ba81363"),"id" : 1,"name" : "张三","sex" : "男","age" : 18
}
[root@manager ~]# cat test.js
printjson(db.student.findOne())
[root@manager ~]# 

方法四:在mongo shell模式下,运行js脚本:

> use db1
switched to db db1
> load("/root/test.js")
{"_id" : ObjectId("6329da7c5e81be318ba81363"),"id" : 1,"name" : "张三","sex" : "男","age" : 18
}
true
> // 一定要选中数据库

2.MongoDB复制集(主从复制)

MongoDB复制是将数据同步到多个服务器的过程;

复制集提供了数据的冗余备份并提高了数据的可用性,通常可以保证数据的安全性;

复制集还允许您从硬件故障和服务中断中恢复数据。

(1):什么是复制集?

保障数据的安全性

数据高可用性 (24*7)

灾难恢复

无需停机维护(如备份,重建索引,压缩)

分布式读取数据

副本集对应用层是透明的

(2):MongoDB复制基本结构:

        基本的架构由3台服务器组成,一个三成员的复制集,由三个有数据,或者两个有数据,一个作为仲裁者。

一个主库:不存在arbiter结点时;

        两个从库组成,主库宕机时,这两个从库都可以被选为主库。
        当主库宕机后,两个从库都会进行竞选,其中一个变为主库,当原主库恢复后,作为从库加入当前的复制集群即可。
        
        当存在arbiter结点时,三台机器,有两个正常的主从,还有一台作为arbiter机器,用来选举主服务器,arbiter机器只有选举权,没有被选举权;    
        由于arbiter节点没有复制数据,因此这个架构中仅提供一个完整的数据副本。arbiter节点只需要更少的资源,代价是更有限的冗余和容错。
        当主库宕机时,将会选择从库成为主,主库修复后,将其加入到现有的复制集群中即可。
Primary选举
        复制集通过replSetInitiate命令(或mongo shell的rs.initiate())进行初始化,初始化后各个成员间开始发送心跳消息,并发起Priamry选举操作,获得『大多数』成员投票支持的节点,会成为 Primary,其余节点成为Secondary。
Priority 0节点:
        作为一个辅助可以作为一个备用。在一些复制集中,可能无法在合理的时间内添加新成员的时候。备用成员保持数据的当前最新数据能够替换不可用的成员。
Hidden 节点(隐藏节点):
        客户端将不会把读请求分发到隐藏节点上,即使我们设定了 复制集读选项 。
这些隐藏节点将不会收到来自应用程序的请求。我们可以将隐藏节点专用于报表节点或是备份节点。 延时节点也应该是一个隐藏节点。
Delayed 节点(延时节点)
        延时节点的数据集是延时的,因此它可以帮助我们在人为误操作或是其他意外情况下恢复数据。
        举个例子,当应用升级失败,或是误操作删除了表和数据库时,我们可以通过延时节点进行数据恢复。
配置:需要在所有结点中进行配置;
修改配置,启动两台机器mongod服务端:
[root@localhost ~]# vim /etc/mongod.conf
bindIp: 0.0.0.0 #监听网卡 #需要增加的内容即复制集设置中的内容
repliocation: oplogSizeMB: 1024 replSetName: myRS

实打实

mongo
#shell内输入
MongoDB Enterprise > use admin
switched to db admin
#查看当前的ReplSet的状态
MongoDB Enterprise > rs.status() { "info" : "run rs.initiate(...) if not yet done for the set", "ok" : 0, "errmsg" : "no replset config has been received", "code" : 94, "codeName" : "NotYetInitialized" }
#初始化ReplSet复制集
MongoDB Enterprise > rs.initiate({_id:'myRS',members:[{_id:1,host:'192.168.150.11:27017'}]})
{ "ok" : 1 }
# 也可以使用下面方法初始化
config = {_id: 'my_repl', members: [ {_id: 0, host: '192.168.150.11:27017'}, {_id: 1, host: '192.168.150.12:27017'}, {_id: 2, host: '192.168.150.13:27017'}] }
# 然后初始化这个配置
> rs.initiate(config)
#查看ReplSet复制集状态
myRS:PRIMARY> rs.status()
{"set" : "myRS","date" : ISODate("2022-09-21T15:59:17.104Z"),"myState" : 1,"term" : NumberLong(1),"syncSourceHost" : "","syncSourceId" : -1,"heartbeatIntervalMillis" : NumberLong(2000),"majorityVoteCount" : 2,"writeMajorityCount" : 2,"votingMembersCount" : 3,"writableVotingMembersCount" : 3,"optimes" : {"lastCommittedOpTime" : {"ts" : Timestamp(1663775948, 1),"t" : NumberLong(1)},"lastCommittedWallTime" : ISODate("2022-09-21T15:59:08.815Z"),"readConcernMajorityOpTime" : {"ts" : Timestamp(1663775948, 1),"t" : NumberLong(1)},"readConcernMajorityWallTime" : ISODate("2022-09-21T15:59:08.815Z"),"appliedOpTime" : {"ts" : Timestamp(1663775948, 1),"t" : NumberLong(1)},"durableOpTime" : {"ts" : Timestamp(1663775948, 1),"t" : NumberLong(1)},"lastAppliedWallTime" : ISODate("2022-09-21T15:59:08.815Z"),"lastDurableWallTime" : ISODate("2022-09-21T15:59:08.815Z")},"lastStableRecoveryTimestamp" : Timestamp(1663775938, 1),"electionCandidateMetrics" : {"lastElectionReason" : "electionTimeout","lastElectionDate" : ISODate("2022-09-21T15:29:07.326Z"),"electionTerm" : NumberLong(1),"lastCommittedOpTimeAtElection" : {"ts" : Timestamp(0, 0),"t" : NumberLong(-1)},"lastSeenOpTimeAtElection" : {"ts" : Timestamp(1663774147, 1),"t" : NumberLong(-1)},"numVotesNeeded" : 1,"priorityAtElection" : 1,"electionTimeoutMillis" : NumberLong(10000),"newTermStartDate" : ISODate("2022-09-21T15:29:07.340Z"),"wMajorityWriteAvailabilityDate" : ISODate("2022-09-21T15:29:07.361Z")},"members" : [{"_id" : 1,"name" : "192.168.188.127:27017","health" : 1,"state" : 1,"stateStr" : "PRIMARY","uptime" : 2096,"optime" : {"ts" : Timestamp(1663775948, 1),"t" : NumberLong(1)},"optimeDate" : ISODate("2022-09-21T15:59:08Z"),"lastAppliedWallTime" : ISODate("2022-09-21T15:59:08.815Z"),"lastDurableWallTime" : ISODate("2022-09-21T15:59:08.815Z"),"syncSourceHost" : "","syncSourceId" : -1,"infoMessage" : "","electionTime" : Timestamp(1663774147, 2),"electionDate" : ISODate("2022-09-21T15:29:07Z"),"configVersion" : 3,"configTerm" : 1,"self" : true,"lastHeartbeatMessage" : ""},{"_id" : 2,"name" : "192.168.188.128:27017","health" : 1,"state" : 2,"stateStr" : "SECONDARY","uptime" : 1672,"optime" : {"ts" : Timestamp(1663775948, 1),"t" : NumberLong(1)},"optimeDurable" : {"ts" : Timestamp(1663775948, 1),"t" : NumberLong(1)},"optimeDate" : ISODate("2022-09-21T15:59:08Z"),"optimeDurableDate" : ISODate("2022-09-21T15:59:08Z"),"lastAppliedWallTime" : ISODate("2022-09-21T15:59:08.815Z"),"lastDurableWallTime" : ISODate("2022-09-21T15:59:08.815Z"),"lastHeartbeat" : ISODate("2022-09-21T15:59:16.841Z"),"lastHeartbeatRecv" : ISODate("2022-09-21T15:59:16.841Z"),"pingMs" : NumberLong(1),"lastHeartbeatMessage" : "","syncSourceHost" : "192.168.188.127:27017","syncSourceId" : 1,"infoMessage" : "","configVersion" : 3,"configTerm" : 1},{"_id" : 3,"name" : "192.168.188.129:27017","health" : 1,"state" : 2,"stateStr" : "SECONDARY","uptime" : 1617,"optime" : {"ts" : Timestamp(1663775948, 1),"t" : NumberLong(1)},"optimeDurable" : {"ts" : Timestamp(1663775948, 1),"t" : NumberLong(1)},"optimeDate" : ISODate("2022-09-21T15:59:08Z"),"optimeDurableDate" : ISODate("2022-09-21T15:59:08Z"),"lastAppliedWallTime" : ISODate("2022-09-21T15:59:08.815Z"),"lastDurableWallTime" : ISODate("2022-09-21T15:59:08.815Z"),"lastHeartbeat" : ISODate("2022-09-21T15:59:16.841Z"),"lastHeartbeatRecv" : ISODate("2022-09-21T15:59:16.839Z"),"pingMs" : NumberLong(0),"lastHeartbeatMessage" : "","syncSourceHost" : "192.168.188.128:27017","syncSourceId" : 2,"infoMessage" : "","configVersion" : 3,"configTerm" : 1}],"ok" : 1,"$clusterTime" : {"clusterTime" : Timestamp(1663775948, 1),"signature" : {"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),"keyId" : NumberLong(0)}},"operationTime" : Timestamp(1663775948, 1)
}
myRS:PRIMARY>

# :可以先初始化一个,再添加成员:

MongoDB Enterprise myRS:PRIMARY> rs.add("192.168.150.12:27017");
{ "ok" : 1 }
MongoDB Enterprise myRS:PRIMARY> rs.status()

#:所有statstr所对应的状态:

        - STARTUP:刚加入到复制集中,配置还未加载;
        - STARTUP2:配置已加载完,初始化状态;
        - RECOVERING:正在恢复,不适用读;
        - ARBITER: 仲裁者;
        - DOWN:节点不可到达;
        - UNKNOWN:未获取其他节点状态而不知是什么状态,一般发生在只有两个成员的架构,脑裂;
        - REMOVED:移除复制集;
        - ROLLBACK:数据回滚,在回滚结束时,转移到RECOVERING或SECONDARY状态
        - FATAL:出错。查看日志grep “replSet FATAL”找出错原因,重新做同步;
        - PRIMARY:主节点;
        - SECONDARY:备份节点;
测试主从数据:
// 主库
myRS:PRIMARY> use test1
switched to db test1
myRS:PRIMARY> for(var i=0; i<4; i++){db.test1.insert({userName:"my"+i,age:i})}
WriteResult({ "nInserted" : 1 })
myRS:PRIMARY> db.test1.find({},{_id:0})
{ "userName" : "my0", "age" : 0 }
{ "userName" : "my1", "age" : 1 }
{ "userName" : "my2", "age" : 2 }
{ "userName" : "my3", "age" : 3 }
myRS:PRIMARY>
myRS:PRIMARY> db.getCollection(test1).find({},{_id:0})
uncaught exception: ReferenceError: test1 is not defined :
@(shell):1:1
myRS:PRIMARY> db.getCollection("test1").find({},{_id:0})
{ "userName" : "my0", "age" : 0 }
{ "userName" : "my1", "age" : 1 }
{ "userName" : "my2", "age" : 2 }
{ "userName" : "my3", "age" : 3 }
myRS:PRIMARY>注:在mongodb复制集当中,默认从库不允许读写。
注意:严禁在从库做任何修改操作在从库打开配置(危险)
// 从库
myRS:SECONDARY> rs.slaveOk()
WARNING: slaveOk() is deprecated and may be removed in the next major release. Please use secondaryOk() instead.
myRS:SECONDARY> db.getCollection("test1").find({},{_id:0})
{ "userName" : "my0", "age" : 0 }
{ "userName" : "my1", "age" : 1 }
{ "userName" : "my2", "age" : 2 }
{ "userName" : "my3", "age" : 3 }
myRS:SECONDARY>
第六步:如主节点掉线,是否会故障转移
        现时是
        192.168.150.11主
        192.168.150.12 副
        192.168.150.13 副
        模拟关闭主节点,在主节点,使用db.shutdownServer()命令
myRS:PRIMARY> use admin
switched to db admin
myRS:PRIMARY> db.shutdownServer()
server should be down...
>

#:主关闭服务之后,会在从中选择一个最为新的主;

myRS:PRIMARY> rs.status()
{"set" : "myRS","date" : ISODate("2022-09-14T21:15:57.483Z"),"myState" : 1,"term" : NumberLong(2),"syncSourceHost" : "","syncSourceId" : -1,"heartbeatIntervalMillis" : NumberLong(2000),"majorityVoteCount" : 2,"writeMajorityCount" : 2,"votingMembersCount" : 3,"writableVotingMembersCount" : 3,"optimes" : {"lastCommittedOpTime" : {"ts" : Timestamp(1663777930, 12),"t" : NumberLong(2)},"lastCommittedWallTime" : ISODate("2022-09-14T21:15:52.713Z"),"readConcernMajorityOpTime" : {"ts" : Timestamp(1663777930, 12),"t" : NumberLong(2)},"readConcernMajorityWallTime" : ISODate("2022-09-14T21:15:52.713Z"),"appliedOpTime" : {"ts" : Timestamp(1663777930, 12),"t" : NumberLong(2)},"durableOpTime" : {"ts" : Timestamp(1663777930, 12),"t" : NumberLong(2)},"lastAppliedWallTime" : ISODate("2022-09-14T21:15:52.713Z"),"lastDurableWallTime" : ISODate("2022-09-14T21:15:52.713Z")},"lastStableRecoveryTimestamp" : Timestamp(1663777930, 9),"electionCandidateMetrics" : {"lastElectionReason" : "stepUpRequestSkipDryRun","lastElectionDate" : ISODate("2022-09-14T21:14:22.587Z"),"electionTerm" : NumberLong(2),"lastCommittedOpTimeAtElection" : {"ts" : Timestamp(1663777930, 1),"t" : NumberLong(1)},"lastSeenOpTimeAtElection" : {"ts" : Timestamp(1663777930, 1),"t" : NumberLong(1)},"numVotesNeeded" : 2,"priorityAtElection" : 1,"electionTimeoutMillis" : NumberLong(10000),"priorPrimaryMemberId" : 1,"numCatchUpOps" : NumberLong(0),"newTermStartDate" : ISODate("2022-09-14T21:14:22.643Z"),"wMajorityWriteAvailabilityDate" : ISODate("2022-09-14T21:14:22.745Z")},"members" : [{"_id" : 1,"name" : "192.168.188.127:27017","health" : 0,"state" : 8,"stateStr" : "(not reachable/healthy)","uptime" : 0,"optime" : {"ts" : Timestamp(0, 0),"t" : NumberLong(-1)},"optimeDurable" : {"ts" : Timestamp(0, 0),"t" : NumberLong(-1)},"optimeDate" : ISODate("1970-01-01T00:00:00Z"),"optimeDurableDate" : ISODate("1970-01-01T00:00:00Z"),"lastAppliedWallTime" : ISODate("2022-09-21T16:32:10.461Z"),"lastDurableWallTime" : ISODate("2022-09-21T16:32:10.461Z"),"lastHeartbeat" : ISODate("2022-09-14T21:15:57.216Z"),"lastHeartbeatRecv" : ISODate("2022-09-14T21:14:23.152Z"),"pingMs" : NumberLong(0),"lastHeartbeatMessage" : "Error connecting to 192.168.188.127:27017 :: caused by :: Connection refused","syncSourceHost" : "","syncSourceId" : -1,"infoMessage" : "","configVersion" : 3,"configTerm" : 1},{"_id" : 2,"name" : "192.168.188.128:27017","health" : 1,"state" : 1,"stateStr" : "PRIMARY","uptime" : 4154,"optime" : {"ts" : Timestamp(1663777930, 12),"t" : NumberLong(2)},"optimeDate" : ISODate("2022-09-21T16:32:10Z"),"lastAppliedWallTime" : ISODate("2022-09-14T21:15:52.713Z"),"lastDurableWallTime" : ISODate("2022-09-14T21:15:52.713Z"),"syncSourceHost" : "","syncSourceId" : -1,"infoMessage" : "","electionTime" : Timestamp(1663777930, 2),"electionDate" : ISODate("2022-09-21T16:32:10Z"),"configVersion" : 3,"configTerm" : 2,"self" : true,"lastHeartbeatMessage" : ""},{"_id" : 3,"name" : "192.168.188.129:27017","health" : 1,"state" : 2,"stateStr" : "SECONDARY","uptime" : 3695,"optime" : {"ts" : Timestamp(1663777930, 12),"t" : NumberLong(2)},"optimeDurable" : {"ts" : Timestamp(1663777930, 12),"t" : NumberLong(2)},"optimeDate" : ISODate("2022-09-21T16:32:10Z"),"optimeDurableDate" : ISODate("2022-09-21T16:32:10Z"),"lastAppliedWallTime" : ISODate("2022-09-14T21:15:52.713Z"),"lastDurableWallTime" : ISODate("2022-09-14T21:15:52.713Z"),"lastHeartbeat" : ISODate("2022-09-14T21:15:57.134Z"),"lastHeartbeatRecv" : ISODate("2022-09-14T21:15:56.090Z"),"pingMs" : NumberLong(0),"lastHeartbeatMessage" : "","syncSourceHost" : "192.168.188.128:27017","syncSourceId" : 2,"infoMessage" : "","configVersion" : 3,"configTerm" : 2}],"ok" : 1,"$clusterTime" : {"clusterTime" : Timestamp(1663777930, 12),"signature" : {"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),"keyId" : NumberLong(0)}},"operationTime" : Timestamp(1663777930, 12)
}
myRS:PRIMARY>

#:此时,128成为了新的主结点,129成为了128的从节点,127不可达;

#:重启127,查看状态,会发现127不会抢占主服务器,它会变成128的从服务器;

myRS:SECONDARY> rs.status()
{"set" : "myRS","date" : ISODate("2022-09-21T16:38:24.243Z"),"myState" : 2,"term" : NumberLong(2),"syncSourceHost" : "192.168.188.129:27017","syncSourceId" : 3,"heartbeatIntervalMillis" : NumberLong(2000),"majorityVoteCount" : 2,"writeMajorityCount" : 2,"votingMembersCount" : 3,"writableVotingMembersCount" : 3,"optimes" : {"lastCommittedOpTime" : {"ts" : Timestamp(1663777930, 39),"t" : NumberLong(2)},"lastCommittedWallTime" : ISODate("2022-09-14T21:20:22.915Z"),"readConcernMajorityOpTime" : {"ts" : Timestamp(1663777930, 39),"t" : NumberLong(2)},"readConcernMajorityWallTime" : ISODate("2022-09-14T21:20:22.915Z"),"appliedOpTime" : {"ts" : Timestamp(1663777930, 39),"t" : NumberLong(2)},"durableOpTime" : {"ts" : Timestamp(1663777930, 39),"t" : NumberLong(2)},"lastAppliedWallTime" : ISODate("2022-09-14T21:20:22.915Z"),"lastDurableWallTime" : ISODate("2022-09-14T21:20:22.915Z")},"lastStableRecoveryTimestamp" : Timestamp(1663777930, 1),"members" : [{"_id" : 1,"name" : "192.168.188.127:27017","health" : 1,"state" : 2,"stateStr" : "SECONDARY","uptime" : 9,"optime" : {"ts" : Timestamp(1663777930, 39),"t" : NumberLong(2)},"optimeDate" : ISODate("2022-09-21T16:32:10Z"),"lastAppliedWallTime" : ISODate("2022-09-14T21:20:22.915Z"),"lastDurableWallTime" : ISODate("2022-09-14T21:20:22.915Z"),"syncSourceHost" : "192.168.188.129:27017","syncSourceId" : 3,"infoMessage" : "","configVersion" : 3,"configTerm" : 2,"self" : true,"lastHeartbeatMessage" : ""},{"_id" : 2,"name" : "192.168.188.128:27017","health" : 1,"state" : 1,"stateStr" : "PRIMARY","uptime" : 7,"optime" : {"ts" : Timestamp(1663777930, 39),"t" : NumberLong(2)},"optimeDurable" : {"ts" : Timestamp(1663777930, 39),"t" : NumberLong(2)},"optimeDate" : ISODate("2022-09-21T16:32:10Z"),"optimeDurableDate" : ISODate("2022-09-21T16:32:10Z"),"lastAppliedWallTime" : ISODate("2022-09-14T21:20:22.915Z"),"lastDurableWallTime" : ISODate("2022-09-14T21:20:22.915Z"),"lastHeartbeat" : ISODate("2022-09-21T16:38:23.364Z"),"lastHeartbeatRecv" : ISODate("2022-09-21T16:38:24.160Z"),"pingMs" : NumberLong(1),"lastHeartbeatMessage" : "","syncSourceHost" : "","syncSourceId" : -1,"infoMessage" : "","electionTime" : Timestamp(1663777930, 2),"electionDate" : ISODate("2022-09-21T16:32:10Z"),"configVersion" : 3,"configTerm" : 2},{"_id" : 3,"name" : "192.168.188.129:27017","health" : 1,"state" : 2,"stateStr" : "SECONDARY","uptime" : 7,"optime" : {"ts" : Timestamp(1663777930, 39),"t" : NumberLong(2)},"optimeDurable" : {"ts" : Timestamp(1663777930, 39),"t" : NumberLong(2)},"optimeDate" : ISODate("2022-09-21T16:32:10Z"),"optimeDurableDate" : ISODate("2022-09-21T16:32:10Z"),"lastAppliedWallTime" : ISODate("2022-09-14T21:20:22.915Z"),"lastDurableWallTime" : ISODate("2022-09-14T21:20:22.915Z"),"lastHeartbeat" : ISODate("2022-09-21T16:38:23.364Z"),"lastHeartbeatRecv" : ISODate("2022-09-21T16:38:23.010Z"),"pingMs" : NumberLong(1),"lastHeartbeatMessage" : "","syncSourceHost" : "192.168.188.128:27017","syncSourceId" : 2,"infoMessage" : "","configVersion" : 3,"configTerm" : 2}],"ok" : 1,"$clusterTime" : {"clusterTime" : Timestamp(1663777930, 39),"signature" : {"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),"keyId" : NumberLong(0)}},"operationTime" : Timestamp(1663777930, 39)
}
myRS:SECONDARY>
#:副本集角色切换(不要人为随便操作)
     150.129暂停30s不参与选举
MongoDB Enterprise myRS:SECONDARY> rs.freeze(30)
{ "ok" : 1 }

此时,129在30秒内无法选举,所以主节点的身份回到127上;

# :127交出主节点位置,维持从节点状态不少于60秒,等待30秒使主节点和从节点日志同步

MongoDB Enterprise myRS:PRIMARY> rs.stepDown(60,30)

操作:

// # 查看整体复制集状态
rs.status();  // # 查看当前是否是主节点
rs.isMaster(); // # 新增从节点
rs.add("ip:port");// # 新增仲裁节点
rs.addArb("ip:port");// # 删除一个节点
rs.remove("ip:port");// 配置延时节点(一般延时节点也配置成hidden)
cfg=rs.conf()
cfg.members[2].priority=0
cfg.members[2].slaveDelay=120
cfg.members[2].hidden=true// 重写复制集配置
rs.reconfig(cfg)// 也可将延时节点配置为arbiter节点
cfg.members[2].arbiterOnly=true// 配置成功后,通过以下命令查询配置后的属性
rs.conf();// 查看副本集的配置信息
my_repl:PRIMARY> rs.config()// 查看副本集各成员的状态
my_repl:PRIMARY> rs.status()

MongoDB--- 客户端操作 与 复制集相关推荐

  1. mongodb踩坑:复制集(尤其是单台服务器多个mongo服务的)服务节点挂载问题

    如果帮助了你,希望可以点赞.评论,你的点赞与评论是我最大的创作动力! 问题 我在一台服务器上开了3个mongo服务组成一个mongo的复制集,这也是网上常见的教授搭建复制集的方式.然后我再另一台服务器 ...

  2. mongodb客户端操作常用命令

    一启动mongodb数据库 mongod --dbpath E:\mongo\data\db(这里些自己的mongodb数据库存放目录) 二客户端操作 1.显示数据库集合 show dbs 2.新建数 ...

  3. mongodb客户端操作(MongoRepository)

    文章目录 orm jpa MongoRepository springboot 整合 curd基本操作 自定义扩展 官方文档 orm jpa MongoRepository springboot 整合 ...

  4. 配置MongoDB复制集

    什么是复制集? 复制集是额外的数据副本,是跨多个服务器同步数据的过程,复制集提供了冗余并增加了数据可用性,通过复制集可以对硬件故障和中断的服务进行恢复. 复制集的优势如下: 让数据更安全 高数据可用性 ...

  5. mongodb 复制集部署(主从升级版)

    前言: 有一个使用 mongodb 做数据库的项目要上生产了,所以在生产环境规划了两台机器用于搭建数据库主从,但是调研搭建的过程中发现主从模式还是有些缺陷,mongodb 提供了另一种复制模式替代主从 ...

  6. 数据库应用----Mongodb 4.0 版本 基础操作---复制集,选举方法、部署认证 (二)

    Mongodb 4.0 版本 基础操作-复制集,选举方法.部署认证 (二) 文章目录 Mongodb 4.0 版本 基础操作---复制集,选举方法.部署认证 (二) 一.MongoDB 复制集 二.部 ...

  7. MongoDB复制集(Replication Sets)介绍

    近年来,随着大数据越来越火,非关系型数据库的重要性被越来越多的人所认知,越来越多的开发者逐渐加入到NoSQL的阵营中.我们知道NoSQL是Not Only SQL的意思,既然如此,很多关系型数据库所支 ...

  8. mongodb 复制集 维护小结

    副本集成员最多12个成员,其中只有7个成员拥有投票权.这是为了减少 心跳请求的网络流量和选举话费的时间.心跳每2秒发送一次. 一.新增副本集成员 1.登录primary 2.use admin > ...

  9. mongoDB研究笔记:复制集概述

    自我学习,仅供参考: 数据库总是会遇到各种失败的场景,如网络连接断开.断电等,尽管journaling日志功能也提供了数据恢复的功能,但journaling通常是针对单个节点来说的,只能保证单节点数据 ...

最新文章

  1. linux文件操作函数程序,linux 文件操作函数
  2. Maven安装和配置及eclipse创建Maven项目
  3. iOS开发(1)写在前面的话
  4. SQL Server Reporting Services(简称SSRS)
  5. Apache引起的wampserver安装好第二次使用无法启动问题
  6. GPL以及Copyleft协议使用率下降明显
  7. 一个小白的转行Python的经历!
  8. 网工年薪100w+,你在哪个阶段?
  9. redis value最大值_Redis基础知识整理
  10. python编程入门指南-Python入门学习指南
  11. Unity音频可视化插件
  12. 多媒体视频开发_(30)使用ffmpeg在视频中进行抽帧
  13. 玩转HANA数据库的备份与恢复(2020 刘欣)
  14. 【计算机网络】 2019年-中国计算机学会推荐国际学术会议和期刊目录(二)
  15. 这些优质的教育类公众号您知道么,非常实用!
  16. 3D模型欣赏:人形武器 古代兵器 【3D游戏建模教程】
  17. 第31讲:永久存储:腌制一缸美味的泡菜
  18. 设计模式原则——SOLID
  19. Zotero6.0来了,内容丰富,适合初学者(插件安装,翻译器更新)
  20. 【电子技术】如何抑制共模、差模噪声?

热门文章

  1. 射频工程师该知道的功率放大器知识
  2. iphone5g信号测试软件,不用担心信号了!iPhone12网速惊人,5G频段碾压华为
  3. day01_Java语言概述
  4. 正交变换不改变矩阵F-范数、2-范数的证明
  5. 信息安全意识培训详解
  6. 第七届ACM趣味编程循环赛 Round #1 - ldq 的遗产题解
  7. 5G时代,视频会议的未来
  8. 【samba】Ubuntu16安装samba服务器
  9. MPU6500模块调试
  10. 安卓卡android不卡,安卓手机用久了卡顿,到底哪些东西是可以删掉的?