MongoDB支持在多个机器中通过异步复制达到故障转移和实现冗余。多机器中同一时刻只有一台机器是用于写操作,正因为如此,MongoDB提供了数据一致性的保障。而担当primary角色的机器,可以把读的操作分发给slave。

MongoDB高可用分两种:

  Master-Slave 主从复制

只需要在某一个服务启动时加上–master 参数,而另一个服务加上–slave 与–source 参数,即可实现同步。MongoDB 的最新版本已不再推荐此方案。

Replica Sets 复制集

MonoDB在1.6版本上开发了新功能Replica Sets,这比之前的replication功能要强大一些,增加了故障自动切换和自动修复成员节点,各个DB之间数据完全一致,大大降低了维护成本。auto shard 已经明确说明不支持replication paris,建议使用replica set。

Replica Sets的结构非常类似一个集群。是的,你完全可以把它当作一个集群,因为它实现的功能和集群是一样的,其中一个节点如果出现故障,其它节点马上会将业务接过来,而无需停机操作。

节点的类型:

standard:常规节点,它存储一份完整的数据副本,参与选举投票,有可能成为primary节点。

passive:存储了完整的数据副本,参与投票,不能成为primary节点。

arbiter:仲裁节点,只参与投票,不接收复制的数据,也不能成为primary节点。

一个repica sets节点数量最好为奇数(odd)。

 配置实例(三节点)

    两个standard节点(这两个节点直接可以互切primary secondary)。

    一个arbiter节点,它手中握着一张选票,决定上面两个standard节点中的哪一个可以成为primay。

图例:

配置步骤:

1、启动三个节点

启动第一个standard节点(ip:192.168.0.11)

/mongodb/bin/mongod --dbpath=/mongodb/mongodb_date --logpath=/mongodb/mongodb_log/mongod.log --port 27017 --replSet test/192.168.0.12:27017 --maxConns=2000  --logappend

启动第二个standard节点 (ip:192.168.0.12)

/mongodb/bin/mongod --dbpath=/mongodb/mongodb_date --logpath=/mongodb/mongodb_log/mongod.log --port 27017 --replSet test/192.168.0.11:27017 --maxConns=2000  --logappend

启动arbiter节点,也就是仲裁节点 (ip:192.168.0.13)。注意!--replSet test/后面写的是两个standard节点的ip和端口

/mongodb/bin/mongod --dbpath=/mongodb/mongodb_date --logpath=/mongodb/mongodb_log/mongod.log --port 27017 --replSet test/192.168.0.11:27017,192.168.0.12:27017  --logappend

参数说明:

--dbpath   数据文件路径

--logpath  日志文件路径

--port        端口号,默认是27017.我这里使用的也是这个端口号.

--replSet   复制集的名字,一个replica sets中的每个节点的这个参数都要用一个复制集名字,这里是test.

--replSet test/  这个后面跟的是其他standard节点的ip和端口

--maxConns   最大连接数

--fork       后台运行

--logappend   日志文件循环使用,如果日志文件已满,那么新日志覆盖最久日志。

2、很关键的一步,配置完上面,下面开始初始化各个节点。在第二个启动的节点上,运行mongo

 db.runCommand({"replSetInitiate" : {
"_id" : "test",
"members" : [
{
"_id" : 0,
"host" : "192.168.0.11:27017"
},
{
"_id" : 1,
"host" : "192.168.0.12:27017"
}
]}})

  3、加入arbiter节点

PRIMARY> rs.addArb("192.16.0.13:27017");

注意!!!

添加新节点前,一定要配置好防火墙,开放对应的IP及PORT.

添加普通数据节点:

PRIMARY> rs.add("ip:port")

删除节点

PRIMARY> rs.remove("ip:port")

显示当前谁是primary

PRIMARY> rs.isMaster()

将一个普通数据节点修改为passive节点

除了仲裁节点,其他每个节点都有个优先权,我们可以通过设置优先权来决定谁的成为primay的权重最大。MongoDB replica sets中通过设置priority的值来决定优先权的大小,这个值的范围是0--100,值越大,优先权越高。如果值是0,那么不能成为primay。

1、通过rs.conf()命令查看出节点列表

 PRIMARY> rs.conf()
{
"_id" : "test",
"version" : 22,
"members" : [
{
"_id" : 3,
"host" : "192.168.22.36:27017"
},
{
"_id" : 5,
"host" : "192.168.22.10:27017"
},
{
"_id" : 6,
"host" : "192.168.22.12:27017",
"priority" : 0,
"arbiterOnly" : true
},
{
"_id" : 7,
"host" : "192.168.22.115:27017"
}
]
}

2、将上面红色的192.168.22.10节点的priority值修改成0,让它只接收数据,不参与成为primary的竞争。

命令格式如下:

 cfg = rs.conf()
cfg.members[0].priority = 0.5
cfg.members[1].priority = 2
cfg.members[2].priority = 2
rs.reconfig(cfg)

红色中括号中的数字是执行rs.conf()得出的节点顺序,第一个节点在这里写0,第二个节点写1,依次类推。

执行命令

 cfg = rs.conf()
cfg.members[1].priority = 0
rs.reconfig(cfg)

3.查看结果,192.168.22.10的优先权变为0.

 PRIMARY> rs.conf()
{
"_id" : "test",
"version" : 22,
"members" : [
{
"_id" : 3,
"host" : "192.168.22.36:27017"
},
{
"_id" : 5,
"host" : "192.168.22.10:27017"
"priority" : 0
},
{
"_id" : 6,
"host" : "192.168.22.12:27017",
"priority" : 0,
"arbiterOnly" : true
},
{
"_id" : 7,
"host" : "192.168.22.115:27017"
}
]
}

MongoDB整理笔记のReplica Sets的更多相关文章

  1. MongoDB整理笔记のReplica Sets + Sharding

    MongoDB Auto-Sharding 解决了海量存储和动态扩容的问题,但离实际生产环境所需的高可靠.高可用还有些距离,所以有了"Replica Sets + Sharding" ...

  2. MongoDB整理笔记のReplica oplog

    主从操作日志oplog MongoDB的Replica Set架构是通过一个日志来存储写操作的,这个日志就叫做"oplog".oplog.rs是一个固定长度的capped coll ...

  3. MongoDB整理笔记の增加节点

    MongoDB Replica Sets 不仅提供高可用性的解决方案,它也同时提供负载均衡的解决方案,增减Replica Sets 节点在实际应用中非常普遍,例如当应用的读压力暴增时,3 台节点的环境 ...

  4. MongoDB整理笔记の管理Replica Sets

    一.读写分离 从库能进行查询,这样可以分担主库的大量的查询请求.   1.先向主库中插入一条测试数据 [root@localhost bin]# ./mongo --port 28010 MongoD ...

  5. MongoDB学习笔记——Replica Set副本集

    副本集 可以将MongoDB中的副本集看作一组服务器集群由一个主节点和多个副本节点等组成,相对于之前讲到的主从复制提供了故障自动转移的功能 副本集实现数据同步的方式依赖于local数据库中的oplog ...

  6. MongoDB整理笔记のSharding分片

    这是一种将海量的数据水平扩展的数据库集群系统,数据分表存储在sharding 的各个节点上,使用者通过简单的配置就可以很方便地构建一个分布式MongoDB 集群.MongoDB 的数据分块称为 chu ...

  7. MongoDB整理笔记のMapReduce

    MongDB的MapReduce相当于MySQL中的“group by”,所以在MongoDB上使用Map/Reduce进行并行“统计”很容易. 使用MapReduce要实现两个函数Map函数和Red ...

  8. MongoDB整理笔记のCapped Collection

    1.简单介绍 capped collections 是性能出色的有着固定大小的集合,以LRU(Least Recently Used 最近最少使用)规则和插入顺序进行age-out(老化移出)处理,自 ...

  9. MongoDB整理笔记のjava MongoDB分页优化

    最近项目在做网站用户数据新访客统计,数据存储在MongoDB中,统计的数据其实也并不是很大,1000W上下,但是公司只配给我4G内存的电脑,让我程序跑起来气喘吁吁...很是疲惫不堪. 最常见的问题莫过 ...

随机推荐

  1. 监控文件的watchdog

    watchdog用来监控指定目录/文件的变化,如添加删除文件或目录.修改文件内容.重命名文件或目录等,每种变化都会产生一个事件,且有一个特定的事件类与之对应,然后再通过事件处理类来处理对应的事件,怎么 ...

  2. 【转】wireshark抓包工具详细说明及操作使用

      wireshark是非常流行的网络封包分析软件,功能十分强大.可以截取各种网络封包,显示网络封包的详细信息.使用wireshark的人必须了解网络协议,否则就看不懂wireshark了. 为了安全 ...

  3. log4net 使用总结- (2)在ASP.NET MVC 中使用

    log4net在ASP.NET MVC中的配置,还有一种配置方式,即不在web.config中,而是单独新建一个log4net.config 在根目录下   第一.引用log4net.dll   第二 ...

  4. 使用原生js自定义内置标签

    使用原生js自定义内置标签 效果图 代码 <!DOCTYPE html> <html lang="en"> <head> <meta ch ...

  5. selenium 获取某元素的 某属性 的值

    selenium  获取某元素的 某属性的值 1 先通过元素定位,获得此元素的 WebElement; WebElement   yuansu = driver.findElement(By.clas ...

  6. GridView导出成Excel字符"0"丢失/数字丢失的处理方式 收藏

    GridView导出成Excel字符"0"丢失/数字丢失的处理方式 收藏 GridView 导出成Excel文件,这个代码在网上比较多.但是发现存在一个问题,导出的数据中如果有&q ...

  7. Window setInterval() 方法

    Window 对象 转自:https://www.w3cschool.cn/jsref/met-win-setinterval.html 定义和用法 setInterval() 方法可按照指定的周期( ...

  8. angularJS笔记之Promise

    Promise是一种模式,以同步操作的流程形式来操作异步事件,避免了层层嵌套,可以链式操作异步事件. 我们知道,在编写javascript异步代码时,callback是最最简单的机制,可是用这种机制的 ...

  9. Hadoop IO 特性详解(1)

    本文结合hadoop : the definitive guide精心而作,包含作者的心血,希望可以帮助大家理解一点hdfs的皮毛,足矣.(charles@xingbod.cn) hadoop本身自带 ...

  10. MapReduce和YARN框架

    MapReduce组件如图