MongoDB--- 客户端操作 与 复制集
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() => 普通jsprintjson() => 格式化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--- 客户端操作 与 复制集相关推荐
- mongodb踩坑:复制集(尤其是单台服务器多个mongo服务的)服务节点挂载问题
如果帮助了你,希望可以点赞.评论,你的点赞与评论是我最大的创作动力! 问题 我在一台服务器上开了3个mongo服务组成一个mongo的复制集,这也是网上常见的教授搭建复制集的方式.然后我再另一台服务器 ...
- mongodb客户端操作常用命令
一启动mongodb数据库 mongod --dbpath E:\mongo\data\db(这里些自己的mongodb数据库存放目录) 二客户端操作 1.显示数据库集合 show dbs 2.新建数 ...
- mongodb客户端操作(MongoRepository)
文章目录 orm jpa MongoRepository springboot 整合 curd基本操作 自定义扩展 官方文档 orm jpa MongoRepository springboot 整合 ...
- 配置MongoDB复制集
什么是复制集? 复制集是额外的数据副本,是跨多个服务器同步数据的过程,复制集提供了冗余并增加了数据可用性,通过复制集可以对硬件故障和中断的服务进行恢复. 复制集的优势如下: 让数据更安全 高数据可用性 ...
- mongodb 复制集部署(主从升级版)
前言: 有一个使用 mongodb 做数据库的项目要上生产了,所以在生产环境规划了两台机器用于搭建数据库主从,但是调研搭建的过程中发现主从模式还是有些缺陷,mongodb 提供了另一种复制模式替代主从 ...
- 数据库应用----Mongodb 4.0 版本 基础操作---复制集,选举方法、部署认证 (二)
Mongodb 4.0 版本 基础操作-复制集,选举方法.部署认证 (二) 文章目录 Mongodb 4.0 版本 基础操作---复制集,选举方法.部署认证 (二) 一.MongoDB 复制集 二.部 ...
- MongoDB复制集(Replication Sets)介绍
近年来,随着大数据越来越火,非关系型数据库的重要性被越来越多的人所认知,越来越多的开发者逐渐加入到NoSQL的阵营中.我们知道NoSQL是Not Only SQL的意思,既然如此,很多关系型数据库所支 ...
- mongodb 复制集 维护小结
副本集成员最多12个成员,其中只有7个成员拥有投票权.这是为了减少 心跳请求的网络流量和选举话费的时间.心跳每2秒发送一次. 一.新增副本集成员 1.登录primary 2.use admin > ...
- mongoDB研究笔记:复制集概述
自我学习,仅供参考: 数据库总是会遇到各种失败的场景,如网络连接断开.断电等,尽管journaling日志功能也提供了数据恢复的功能,但journaling通常是针对单个节点来说的,只能保证单节点数据 ...
最新文章
- linux文件操作函数程序,linux 文件操作函数
- Maven安装和配置及eclipse创建Maven项目
- iOS开发(1)写在前面的话
- SQL Server Reporting Services(简称SSRS)
- Apache引起的wampserver安装好第二次使用无法启动问题
- GPL以及Copyleft协议使用率下降明显
- 一个小白的转行Python的经历!
- 网工年薪100w+,你在哪个阶段?
- redis value最大值_Redis基础知识整理
- python编程入门指南-Python入门学习指南
- Unity音频可视化插件
- 多媒体视频开发_(30)使用ffmpeg在视频中进行抽帧
- 玩转HANA数据库的备份与恢复(2020 刘欣)
- 【计算机网络】 2019年-中国计算机学会推荐国际学术会议和期刊目录(二)
- 这些优质的教育类公众号您知道么,非常实用!
- 3D模型欣赏:人形武器 古代兵器 【3D游戏建模教程】
- 第31讲:永久存储:腌制一缸美味的泡菜
- 设计模式原则——SOLID
- Zotero6.0来了,内容丰富,适合初学者(插件安装,翻译器更新)
- 【电子技术】如何抑制共模、差模噪声?