虚位以待(AD)
虚位以待(AD)
首页 > 数据库 > DB2数据库 > mongodb的分布式集群(2、副本集)

mongodb的分布式集群(2、副本集)
类别:DB2数据库   作者:码皇   来源:张青山 廊坊师范学院信息技术提高班 第九期     点击:

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

概述

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

部署图


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

 

副本集配置

    //启动服务器(登录每台服务器) 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();

Java客户端操作

要想实现副本集的读写分离,我们需要在java的客户端上进行相应的设置,下面是java客户端的核心代码,当然,首先,我们需要做的是下载相应的mongodb的java驱动
    //分布式集群(配置多个服务器,只要有一个可运行就行) List serverAddressList = new ArrayList();
    serverAddressList.add(new ServerAddress("192.168.24.1", 10000));
    serverAddressList.add(new ServerAddress("192.168.24.2", 10000));
    MongoClient mongoClient = new MongoClient(serverAddressList);

    //设置读写分离 ReadPreference readPreference = ReadPreference.secondaryPreferred();
    database.setReadPreference(readPreference);
    primary:默认参数,只从主节点上进行读取操作 primaryPreferred:大部分从主节点上读取数据,只有主节点不可用时从secondary节点读取数据 secondary:只从secondary节点上进行读取操作,存在的问题是secondary节点的数据会比primary节点数据“
    旧”
    secondaryPreferred:优先从secondary节点进行读取操作,secondary节点不可用时从主节点读取数据 nearest:不管是主节点、secondary节点,从网络延迟最低的节点上读取数据。
上面的代码不是完整的代码,是一些比较核心的代码,如果大家想要实现这个,可以先从单个服务器读写操作的写起,下面给出一个但服务器的简单的java客户端的实现例子,大家有兴趣的可以下载下来看一下。实例代码。该实例代码实现了对mongodb的固定集合和文件的操作。

 

副本集的优缺点

优点

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

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

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

缺点

只有集群,没有分布式

 

说明

副本集节点数

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

最多12个:复制成本高

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


相关热词搜索: 分布式 副本 集群