mongodb replica sets复制集详解
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了mongodb replica sets复制集详解,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含4153字,纯文字阅读大概需要6分钟。
内容图文
和主从复制的原理一样,复制集也是通过读取oplog来进行数据传输.oplog是一个capped collection即固定表,创建表的时候可以指定其大小,当oplog满的时候会删除旧的数据.所以设置oplog的大小非常重要,如果oplog在primary节点被覆盖而尚未被secondary节点读取的话就要重新resync. 一般的使用replica sets复制集使用如下架构,一主一备,还有一个仲裁负责进行failover.仲裁主机不存放数据.复制集使用的异步同步方式,复制集成员直接每隔2s发送一次hearbeat(pings).当主节点与其它成员通信超时10s后,一个secondary节点将会被选举为primary节点.在新的版本中,如果存在多个secondary节点,当第一个节点被选举为primary后,其它的secondary节点将从它开始复制数据.
二.创建replica sets
下面是搭建一个一主两从三节点replica sets的具体步骤(1).添加replSet参数
在你所有节点的mongodb实例添加replSet参数,在一个group中的replSet参数需要一致,有点类似于oracle dg中的db_name参数. 然后启动所有节点的mongodb实例 例如我的主机名为mongodb1的配置文件:然后启动所有的实例:[root@mongodb1 ~]# cat /etc/mongod.conf
port=27017
dbpath=/data/db
logpath=/data/log/mongod.log
fork = true
oplogSize=500
replSet = rs0
[root@mongodb1 ~]# mongod -f /etc/mongod.conf
about to fork child process, waiting until server is ready for connections.
forked process: 2722
child process started successfully, parent exiting
(2).初始化replica set
使用rs.initiate()来初始化复制集,在一个节点而且只能在一个节点进行初始化,例如我们这里在mongodb1上进行初始化,那么这个节点将会成为primary节点. 这里我们没有配置config参数文件,那么系统会使用默认的配置文件.> rs.initiate()
{
"info2" : "no configuration specified. Using a default configuration for the set",
"me" : "mongodb1:27017",
"ok" : 1
}
rs0:OTHER>
当然你也可以先配置一个配置文件,然后使用rs.initiate(rsconf)来初始化,例如:
rsconf = {
_id: "rs0",
members: [
{
_id: 0,
host: "<hostname>:27017"
}
]
}
(3).检查初始化配置文件
使用rs.conf()来查看初始化配置文件:可以看到当前的members只有一个,即_id为0的,即我们刚刚初始化的这个节点.rs0:OTHER> rs.conf()
{
"_id" : "rs0",
"version" : 1,
"protocolVersion" : NumberLong(1),
"members" : [
{
"_id" : 0,
"host" : "mongodb1:27017",
"arbiterOnly" : false,
"buildIndexes" : true,
"hidden" : false,
"priority" : 1,
"tags" : {
},
"slaveDelay" : NumberLong(0),
"votes" : 1
}
],
"settings" : {
"chainingAllowed" : true,
"heartbeatIntervalMillis" : 2000,
"heartbeatTimeoutSecs" : 10,
"electionTimeoutMillis" : 10000,
"getLastErrorModes" : {
},
"getLastErrorDefaults" : {
"w" : 1,
"wtimeout" : 0
},
"replicaSetId" : ObjectId("575647b35e9005faa0e8d690")
}
}
(4).将剩下的成员添加到复制集
使用rs.add()方法将成员添加到复制集.你必须连接到primary节点来执行添加成员的操作.你可以使用rs.status()查看主节点信息:添加成员:rs0:PRIMARY> rs.status()
{
"set" : "rs0",
"date" : ISODate("2016-06-07T04:16:20.542Z"),
"myState" : 1,
"term" : NumberLong(1),
"heartbeatIntervalMillis" : NumberLong(2000),
"members" : [
{
"_id" : 0,
"name" : "mongodb1:27017",
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY",
"uptime" : 1184,
"optime" : {
"ts" : Timestamp(1465272244, 1),
"t" : NumberLong(1)
},
"optimeDate" : ISODate("2016-06-07T04:04:04Z"),
"electionTime" : Timestamp(1465272243, 2),
"electionDate" : ISODate("2016-06-07T04:04:03Z"),
"configVersion" : 1,
"self" : true
}
],
"ok" : 1
}
rs0:PRIMARY> rs.add("mongodb2:27017")
{ "ok" : 1 }
rs0:PRIMARY> rs.add("mongodb3:27017")
{ "ok" : 1 }
再次查看复制集配置,可以看到members有三个成员了.
rs0:PRIMARY> rs.conf()
{
"_id" : "rs0",
"version" : 3,
"protocolVersion" : NumberLong(1),
"members" : [
{
"_id" : 0,
"host" : "mongodb1:27017",
"arbiterOnly" : false,
"buildIndexes" : true,
"hidden" : false,
"priority" : 1,
"tags" : {
},
"slaveDelay" : NumberLong(0),
"votes" : 1
},
{
"_id" : 1,
"host" : "mongodb2:27017",
"arbiterOnly" : false,
"buildIndexes" : true,
"hidden" : false,
"priority" : 1,
"tags" : {
},
"slaveDelay" : NumberLong(0),
"votes" : 1
},
{
"_id" : 2,
"host" : "mongodb3:27017",
"arbiterOnly" : false,
<code class="languag 本文系统来源:http://blog.csdn.net/su377486/article/details/51606940
内容总结
以上是互联网集市为您收集整理的mongodb replica sets复制集详解全部内容,希望文章能够帮你解决mongodb replica sets复制集详解所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。