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

Fork me on Gitee

HDIS-Framework

fork star

HDIS-Framework是一个基于SpringBoot、Kubernetes、阿里云服务,编写的一个用于支撑微服务的极速开发框架。

其文档详尽,Demo全面,设计合理,开箱即用,节省开发时间,提升开发效率。

配套的docker、Kubernetes教程已踩过各种坑,让你的微服务无障碍的顺畅运行起来。

HDIS与Kubernetes或SpringCloud配合使用,能达到最佳效果。

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集群自动将某个备库选举为主库,此时代码依旧可以运行,且会提示某个机器拒绝连接。说明此客户端支持集群与故障转移。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值