《mongodb权威指南》读书笔记-集群配置

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_29994609/article/details/52396271

mongodb的“副本集”集群方式介绍

  Mongodb(M)表示主节点,Mongodb(S)表示备节点,Mongodb(A)表示仲裁节点。主备节点存储数据,仲裁节点不存储数据。客户端同时连接主节点与备节点,不连接仲裁节点。有且只会有一个主节点。最多只能使用一个仲裁节点。
  默认设置下,主节点提供所有增删查改服务,备节点不提供任何服务。但是可以通过设置使备节点提供查询服务,这样就可以减少主节点的压力。
  当客户端进行数据查询时,请求自动转到备节点上。这个设置叫做RPM(Read Preference Modes),同时Java客户端提供了简单的配置方式,可以不必直接对数据库进行操作。
  仲裁节点是一种特殊的节点,它本身并不存储数据,主要的作用是决定哪一个备节点在主节点挂掉之后提升为主节点,所以客户端不需要连接此节点。这里虽然只有一个备节点,但是仍然需要一个仲裁节点来提升备节点级别。当节点数为奇数时,若主节点失效,选举算法能很好的选举出下一个主节点,当节点数为偶数时,节点算法可能失效(一般节点投票给A,另一半给B),此时就需要启用仲裁节点执行仲裁,选举主节点。


如何配置集群

第一步:通过配置启动多个mongodb

  1. 下载mongodb
  2. 编写配置文件mongodb.conf,配置文件参数:http://www.cnblogs.com/skyblue/p/5522710.html
  3. 若要配置集群,必须配置配置文件中的参数replSet,replSet:使用此设置来配置复制副本集,指定一个副本集名称作为参数,所有主机都必须有相同的名称作为同一个副本集。
  4. 进入下载文件的bin目录
  5. 通过配置文件启动mongodb:./mongod -f(–config) mongodb.conf

第二部:将启动了的mongodb建立集群关系

1.任意选择一个mongodb并通过命令进入:./mongo IP地址:端口号
2.构造集群参数

var cfg=
{
    "_id":"testrs",//与replSet相同,表示集群签名
    "members":[//集群成员
        {
            "_id":0,//ID不同即可
            "host":"10.10.148.130:27017",//成员地址:IP:端口
            "priority":2//优先级:数字越大,优先级越高,用于确定主节点,优先级为0不可能成为主节点。
        },
        {
            "_id":1,
            "host":"10.10.148.131:27017",
            "priority":1
        },
        {
            "_id":2,
            "host":"10.10.148.132:27017",
            "arbiterOnly":true//仲裁节点,当有此参数时,表示此节点为仲裁节点。
        }
    ]
}

3.执行集群参数,使集群生效:rs.initiate(cfg)
4.主从配置成功后,主节点提示符会显示:PRIMARY,从节点提示符会显示:SECONDARY,仲裁节点提示符会显示:ARBITER。
5.可以使用命令db.isMaster()查看主从节点情况。
6.从节点默认是不可以执行读写的,若想要执行读,可以设置命令db.setSlaveOk(),但此命令是针对连接的,不是针对数据库的,不同的连接需要重新设置此命令。
7.关闭副本集命令:replicaSet.stopSet()

第三步:动态添加或删除节点

  1. 初始化集群,必须使用两个以上的节点。
  2. 当集群初始化完成后,只有主节点能够动态添加或删除节点。
  3. 进入主节点后可以使用,添加节点命令:rs.add(“IP地址:端口号”),删除节点命令:rs.remove(“IP地址:端口号”),添加仲裁节点命令:rs.add(“IP地址:端口号”)
  4. 可以使用rs.config()命令查看集群当前使用的配置信息,每次修改version会加1。
  5. 可以使用 var config=rs.config();然后通过JS的方式修改config值,然后通过rs.reconfig(config);进行集群配置修改

其他信息

隐藏成员

  1. 优先级为0,且menber属性下制定属性hidden:true的节点才能被隐藏。
  2. 客户端不会向隐藏成员发送请求,隐藏成员也不会成为复制源。
  3. rs.isMaster()无法查看隐藏成员,rs.status()rs.config()能够查看隐藏成员。

延迟备份节点

延迟备份节点的数据会比主节点延迟指定时间,单位是秒。若主数据库遭受毁灭性破坏,可以用此延迟备份节点进行数据还原。
优先级为0,且menber属性下制定属性slaveDelay:时间的节点才能被设置为备份节点。

java客户端支持集群与故障转移

MongoClient mongoClient = new MongoClient(
Arrays.asList(new ServerAddress("127.0.0.1", 27018),
        new ServerAddress("127.0.0.1", 27019),
        new ServerAddress("127.0.0.1", 27020)));
MongoDatabase hyq = mongoClient.getDatabase("hyq");
MongoIterable<String> names = hyq.listCollectionNames();
MongoCursor<String> nameIterator = names.iterator();
while (nameIterator.hasNext()) {
    String name = nameIterator.next();
    System.out.println(name);
}

以上是mongodb-java-driver的使用,当我关闭主服务器时,mongodb集群自动将某个备库选举为主库,此时代码依旧可以运行,且会提示某个机器拒绝连接。说明此客户端支持集群与故障转移。

猜你喜欢

转载自blog.csdn.net/qq_29994609/article/details/52396271
今日推荐