MongoDB学习(六):集群之复制集

本文详细介绍了MongoDB复制集的概念、配置方法和工作原理,包括oplog机制和心跳机制,阐述了复制集在高可用性和一致性方面的作用,以及客户端如何连接集群。同时,讨论了复制集在不同场景下的适用性和局限性。
摘要由CSDN通过智能技术生成

目录

1 概念

2 配置

3 原理

1)oplog

2)心跳机制

4 客户端连接集群


MongoDB学习(一):安装&基础概念&数据类型&部分shell操作曾经提到过,MongoDB有复制集(副本集)和分片集的概念。

1 概念

复制集是主从机制的扩展与改进,例如:

  • 容灾机制:主节点(Primary)down之后,自动通过选举机制提升从节点(Secondary)为新的主节点,保证集群可用性
  • 一致性:事务提交需要经过50%以上节点确认方可成功,否则将回滚

好处有:

  • 高可用、高一致性
  • 防止误操作:主从节点数据同步有一定延时,通过数据冗余,可以一定程度上避免删库跑路
  • 负载均衡:通过将读操作均匀分配给各节点,避免过多请求冲击导致的宕机

复制集不适用于以下场景:

  • 硬件不足:例如数据量大于内存时,就必须使用硬盘上的虚拟内存进行数据交换,导致I/O下降,此时集群并不比单机快多少,最好先使用分片对数据进行分割
  • 写多读少:此时主节点不但要承担大量的写操作,还需要频繁进行数据同步,反而降低了效率
  • 持续读:由于从节点并不是实时同步数据的,要么读取的数据存在过期的风险,要么需要将每次写入的数据进行同步,导致较大的延时

关于选举方式等,可以参考Paxos算法。在MongoDB 3.0中,复制集最多支持50个节点。

2 配置

上面提到,复制集事务提交需要超过50%节点确认,因此推荐配置奇数个节点,最少3个(如果仅有2个节点,那么每个结点都不能down,这样的配置意义不大),这三个节点可以都存放数据(一主两从),也可以配置一个仲裁节点(一主一从)。仲裁节点的作用是,当集群由于网络问题出现了两个节点数相等的分区时,它可以强制进行选举以维持服务。

一个包括主节点、从节点和仲裁节点的复制集​​​​

我们在本地进行模拟。

首先创建三个文件夹:

root@Ubuntu:~# mkdir ~/primary
root@Ubuntu:~# mkdir ~/secondary
root@Ubuntu:~# mkdir ~/arbiter

然后基于这三个文件夹启动mongod:

 mongod --replSet test --dbpath ~/primary --port 9000
 mongod --replSet test --dbpath ~/secondary --port 9001
 mongod --replSet test --dbpath ~/arbiter --port 9002

然后连接主节点并初始化:

mongo --port 9000
> rs.initiate()
{
        "info2" : "no configuration specified. Using a default configuration for the set",
        "me" : "localhost:9000",
        "ok" : 1,
        "operationTime" : Timestamp(1549627807, 1),
        "$clusterTime" : {
                "clusterTime" : Timestamp(1549627807, 1),
                "signature" : {
                        "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
                        "keyId" : NumberLong(0)
                }
        }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值