mongodb的分布式集群(2、副本集)

概述

       副本集是主从复制的一种,是一种自带故障转移功能的主从复制,解决了上述主从复制的缺点,实现主服务器发生故障后,不需人为介入,系统自动从新选举一个新的主服务器的功能。

部署图

       

       图是copy别人的,有兴趣的可以查看该人的博客,写的非常的棒

副本集配置

<strong>   </strong> //启动服务器(登录每台服务器)
    mongod --dbpath d:/data/ --replSet repset

    //初始化副本集(登录任意一台服务器)
    config = { _id:"repset", members:[                          //_id值 == replSet参数
        {_id:0, host:"192.168.1.136:27017"},
        {_id:1, host:"192.168.1.137:27017", priority:10},
        {_id:2, host:"192.168.1.138:27017", priority:20},
        //仲裁节点:仅用于投票,防止选不出主节点,仲裁和非仲裁(仅能在初始化设置)
        {_id:3, host:"192.168.1.139:27017", arbiterOnly:true}]
        }

    rs.initiate(config);

       副本集的配置也是非常的简单,如上面的配置就可以实现,在副本集中涉及到很多不同类型的节点,大家可以看相应的注释,有不明的可以再查一下,下面是一些关于副本集的其它方面的操作,大家可以尝试一下

节点操作
    rs.status();                        //查看集群节点状态(登录任意一台服务器)
    rs.add("192.168.1.140:27017");      //添加副本节点
    rs.remove("192.168.1.140:27017");   //删除节点
节点属性操作(登录主节点服务器)
    cfg=rs.conf();
    //隐藏节点:可投票,可备份数据,不可被客户端使用(不作主节点)
    cfg.members[1].priority=0;
    cfg.members[1].hidden=1;
    //延迟复制节点:用于备份,延迟从主节点同步数据,避免用户错误
    cfg.members[2].priority=0;
    cfg.members[2].slaveDelay=3600;
    //永副本节点:防止性能不高的节点成为主节点
    cfg.members[3].priority=0;
    //纯备份副本节点:无投票
    cfg.members[4].votes=0;
    rs.reconfig(cfg);
读写分离
    //设置副本节点可读(副本节点服务器)
    db.getMongo().setSlaveOk();

       配置好副本集后,我们是无法读取副本节点服务器的内容,需要我们进行如下设置,才可以实现读写分离,当然,上篇的主从服务器不需要进行这个设置就可以实现主从复制

    读写分离
    //设置副本节点可读(副本节点服务器)
    db.getMongo().setSlaveOk();<strong>
</strong>

Java客户端操作

要想实现副本集的读写分离,我们需要在java的客户端上进行相应的设置,下面是java客户端的核心代码,当然,首先,我们需要做的是下载相应的mongodb的java驱动

<span style="font-size:18px;">    //分布式集群(配置多个服务器,只要有一个可运行就行)
    List<ServerAddress> serverAddressList = new ArrayList<ServerAddress>();
    serverAddressList.add(new ServerAddress("192.168.24.1", 10000));
    serverAddressList.add(new ServerAddress("192.168.24.2", 10000));
    MongoClient mongoClient = new MongoClient(serverAddressList);
</span>
<span style="font-size:18px;">    //设置读写分离
    ReadPreference readPreference = ReadPreference.secondaryPreferred();
    database.setReadPreference(readPreference);

    primary:默认参数,只从主节点上进行读取操作
    primaryPreferred:大部分从主节点上读取数据,只有主节点不可用时从secondary节点读取数据
    secondary:只从secondary节点上进行读取操作,存在的问题是secondary节点的数据会比primary节点数据“旧”
    secondaryPreferred:优先从secondary节点进行读取操作,secondary节点不可用时从主节点读取数据
    nearest:不管是主节点、secondary节点,从网络延迟最低的节点上读取数据。
</span>

上面的代码不是完整的代码,是一些比较核心的代码,如果大家想要实现这个,可以先从单个服务器读写操作的写起,下面给出一个但服务器的简单的java客户端的实现例子,大家有兴趣的可以下载下来看一下。实例代码。该实例代码实现了对mongodb的固定集合和文件的操作。

副本集的优缺点

       优点

              读写分离:主节点数据读写,默认副本节点无法直接读写(可设置只读)

              数据备份:副本节点读取主节点的oplog(操作日志),执行

              故障转移:主节点宕机,系统会自动重选主节点(优先级0—100越大,备选机会越大)

       缺点

       只有集群,没有分布式

说明

副本集节点数

最好为奇数:避免选举不了主节点

最多12个:复制成本高

最多7个参与选举:增加选举时间

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-15 11:22:10

mongodb的分布式集群(2、副本集)的相关文章

搭建mongodb集群(副本集+分片)

完整的搭建mongodb集群(副本集+分片)的例子... 准备四台机器,分别是bluejoe1,bluejoe2,bluejoe3,以及bluejoe0 副本集及分片策略确定如下: 将创建3个副本集,命名为shard1,shard2,shard3: 以上3个副本集作为3个分片: 每个副本集包含2个副本(主.辅): 副本分开存储,即shard1存在bluejoe1和bluejoe2上各一份...以此类推 将创建3个配置库实例,一台机器一个 bluejoe0上配置一个mongos(mongos一般可

MongoDB集群搭建-副本集

MongoDB集群搭建-副本集 概念性的知识,可以参考本人博客地址: http://www.cnblogs.com/zlp520/p/8088169.html 一.Replica Set方案(副本集或复制集): 1.搭建副本集有两种办法: 其一:在一台服务器上,通过文件的方式及端口号的方式来区分: 其二:找最少三台服务器,每台服务器都通过如下的配置: ip规划每台服务器担任的工作: 192.168.0.100:27017 主机 192.168.0.101:27017 副本集 192.168.0.

Mongodb集群之副本集

上篇咱们遗留了几个问题 1主节点是否能自己主动切换连接? 眼下须要手动切换 2主节点读写压力过大怎样解决 3从节点每一个上面的数据都是对数据库全量拷贝,从节点压力会不会过大 4数据压力达到机器支撑不了时候是否能自己主动扩展? Nosql的产生是为了解决大数据量.高扩展,高性能,灵活数据模型.高可用性.可是光通过主从模型的架构是远远达不到上面几点的.因此.mongodb设计了副本集和分片的功能.咱们以下就来说说副本集 mongodb官方已经不建议使用主从模式,而是副本集进行取代. IMPORTAN

MongoDB健壮集群——用副本集做分片

1.    MongoDB分片+副本集 健壮的集群方案 多个配置服务器 多个mongos服务器  每个片都是副本集 正确设置w 架构图 说明: 1.   此实验环境在一台机器上通过不同port和dbpath实现启动不同的mongod实例 2.   总的9个mongod实例,分别做成shard1.shard2.shard3三组副本集,每组1主2从 3.   Mongos进程的数量不限,建议把mongos配置在每个应用服务器本机上,这样每个应用服务器就与自身的mongos进行通信,如果服务器不工作了

MongoDB学习笔记~Mongo集群和副本集

一些概念 对于Mongo在数据容灾上,推荐的模式是使用副本集模式,它有一个对外的主服务器Primary,还有N个副本服务器Secondary(N>=1,当N=1时,需要有一台仲裁服务器Arbiter,当N>1时不需要Arbiter),它们之前是通过内部机制实现同步的,并且当Primary挂了后,它会通过内部的心跳机制,选举别一台Secondary成为一个Primary,与外界(Route)进行通讯. 工业标准 在标准上,我们的副本集推荐使用奇数个服务器(3,5,7,9),但经过我的测试,只要大

Mongodb集群部署以及集群维护命令

Mongodb集群部署以及集群维护命令 http://lipeng200819861126-126-com.iteye.com/blog/1919271 mongodb分布式集群架构及监控配置 http://freeze.blog.51cto.com/1846439/884925/ 见文中: 七.监控配置:      早在去年已经出现MongoDB和Redis的Cacti模板,使用它,你可以对你的MongoDB和Redis服务进行流量监控.cacti的模板一直在更新,若企业已经用到nosql这种

分布式缓存技术redis学习系列(四)——redis高级应用(集群搭建、集群分区原理、集群操作)

本文是redis学习系列的第四篇,前面我们学习了redis的数据结构和一些高级特性,点击下面链接可回看 <详细讲解redis数据结构(内存模型)以及常用命令> <redis高级应用(主从.事务与锁.持久化)> 本文我们继续学习redis的高级特性--集群.本文主要内容包括集群搭建.集群分区原理和集群操作的学习. Redis集群简介 Redis 集群是3.0之后才引入的,在3.0之前,使用哨兵(sentinel)机制(本文将不做介绍,大家可另行查阅)来监控各个节点之间的状态.Redi

MongoDB之分片集群与复制集

分片集群 1.1.概念 分片集群是将数据存储在多台机器上的操作,主要由查询路由mongos.分片.配置服务器组成. ●查询路由根据配置服务器上的元数据将请求分发到相应的分片上,本身不存储集群的元数据,只是缓存在内存中. ●分片用来存储数据块.数据集根据分片键将集合分割为数据块,存储在不同的分片上.在生产环境下,通常一个分片由一个复制集组成. ●配置服务器存储集群的元数据,包括数据与分片的映射关系,配置服务器一旦挂掉,集群将无法工作. 注意: ●当mongos重启时,会从配置服务器读取元数据更新自

redis高级应用(集群搭建、集群分区原理、集群操作)

文章主目录 Redis集群简介 Redis集群搭建 Redis集群分区原理 集群操作 参考文档 本文是redis学习系列的第四篇,前面我们学习了redis的数据结构和一些高级特性,点击下面链接可回看 <详细讲解redis数据结构(内存模型)以及常用命令> <redis高级应用(主从.事务与锁.持久化)> 本文我们继续学习redis的高级特性--集群.本文主要内容包括集群搭建.集群分区原理和集群操作的学习. 回到顶部 Redis集群简介 Redis 集群是3.0之后才引入的,在3.0

Redis集群演变和集群部署

Redis系列: Redis安装和配置 Redis基本数据结构 Redis核心原理 Redis集群演变和集群部署 Redis高可用集群之水平扩展 一.Redis集群方案比较 哨兵模式 在redis3.0以前的版本要实现集群一般是借助哨兵sentinel工具来监控master节点的状态,如果master节点异常,则会做主从切换,将某一台slave作为master,哨兵的配置略微复杂,并且性能和高可用性等各方面表现一般,特别是在主从切换的瞬间存在访问瞬断的情况,而且哨兵模式只有一个主节点对外提供服务