前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >mongodb4.0高可用之副本集

mongodb4.0高可用之副本集

作者头像
lyb-geek
发布2019-09-10 16:15:12
1.3K0
发布2019-09-10 16:15:12
举报
文章被收录于专栏:Linyb极客之路Linyb极客之路

mongodb副本集的定义

副本集(Replica Set)是一组MongoDB实例组成的集群,由一个主(Primary)服务器和多个备份(Secondary)服务器构成。通过Replication,将数据的更新由Primary推送到其他实例上,在一定的延迟之后,每个MongoDB实例维护相同的数据集副本。通过维护冗余的数据库副本,能够实现数据的异地备份,读写分离和自动故障转移

副本集角色

主节点(Primary)

接收所有的写请求,然后把修改同步到所有Secondary。一个Replica Set只能有一个Primary节点,当Primary挂掉后,其他Secondary或者Arbiter节点会重新选举出来一个主节点。默认读请求也是发到Primary节点处理的,可以通过修改客户端连接配置以支持读取Secondary节点。

副本节点(Secondary)

与主节点保持同样的数据集。当主节点挂掉的时候,参与选主。

仲裁者(Arbiter)

不保有数据,不参与选主,只进行选主投票。使用Arbiter可以减轻数据存储的硬件需求,Arbiter几乎没什么大的硬件资源需求,但重要的一点是,在生产环境下它和其他数据节点不要部署在同一台机器

副本集特征

· N 个节点的集群 · 任何节点可作为主节点 · 所有写入操作都在主节点上 · 自动故障转移 · 自动恢复

搭建副本集的注意点

  1. 最小构成是:primary,secondary,arbiter,一般部署是:primary,2 secondary。
  2. 成员数应该为奇数,如果为偶数的情况下添加arbiter,arbiter不保存数据,只投票。
  3. mongodb4.0+版本,最大50 members,但是只能有 7 voting members,其他是non-voting members。

副本集架构图

由图可以看到客户端连接到整个副本集,不关心具体哪一台机器是否挂掉。主服务器负责整个副本集的读写,副本集定期同步数据备份,一但主节点挂掉,副本节点就会选举一个新的主服务器,这一切对于应用服务器不需要关心。我们看一下主服务器挂掉后的架构:

副本集中的副本节点在主节点挂掉后通过心跳机制检测到后,就会在集群内发起主节点的选举机制,自动选举一位新的主服务器。

使用场景

  • 数据冗余,用做故障恢复使用,当发生硬件故障或者其它原因造成的宕机时,可以使用副本进行恢复。
  • 读写分离,读的请求分流到副本上,减轻主节点的读压力

副本集搭建

为了快速搭建,我是采用docker-compose来构建mongodb副本集,在用docker-compose构建之前,需要安装一下docker和docker-compose。默认在centos7安装 1、docker安装教程可以查看如下链接

https://www.cnblogs.com/qingyunzong/p/9011006.html

2、docker-compose安装教程可以查看如下链接

https://docs.docker.com/compose/install/

3、docker-compose常用命令 通过docker-compose --help来查看

4、编写docker-compose.yml

代码语言:javascript
复制
version: '2.1'
services:
  master:
    image: docker.io/mongo
    container_name: master
    restart: always
    privileged: true
    ports:
    - 27017:27017
    volumes:
    - ./data/master:/data/db
    command:  mongod --dbpath /data/db --replSet rs --oplogSize 128
  slave1:
    image: docker.io/mongo
    container_name: slave1
    restart: always
    privileged: true
    ports:
    - 27018:27017
    volumes:
    - ./data/slave1:/data/db
    command: mongod --dbpath /data/db --replSet rs --oplogSize 128
  slave2:
    image: docker.io/mongo
    container_name: slave2
    restart: always
    privileged: true
    ports:
    - 27019:27017
    volumes:
    - ./data/slave2:/data/db
    command: mongod --dbpath /data/db --replSet rs --oplogSize 128

5、在 docker-compose.yml 所在路径下执行该命令 compose 就会自动构建镜像并使用镜像启动容器

docker-compose up -d // 后台启动并运行容器

以上就是使用docker-compose构建mongodb副本集的过程,如果对docker-compose不熟的朋友,也可以使用如下链接,直接通过shell操作搭建

https://www.linuxidc.com/Linux/2017-11/148740p3.htm。

或者可以直接通过docker来搭建,具体教程可以参考如下链接

https://blog.csdn.net/dengzhongmingabc/article/details/81188613

副本集的一些操作

代码语言:javascript
复制
rs.status()   //查看成员的运行状态等信息

rs.config()    //查看配置信息

rs.slaveOk()  //允许在SECONDARY节点上进行查询操作,默认从节点不具有查询功能

rs.isMaster()  //查询该节点是否是主节点

rs.add({})   //添加新的节点到该副本集中

rs.remove()   //从副本集中删除节点

总结

本文简要论述mongodb副本集一些基本概念和搭建,写这篇文章的目的,主要是为了下篇文章springboot实战之mongodb事务支持做铺垫。因为mongodb4.0+才支持副本集事务,也就意味着如果想在springboot启用mongodb事务,其mongodb的版本至少要>=4,而且其架构是使用了副本集。不过4.0的事务存在最大修改16MB、事务执行时间不能过长的限制。在我写这篇文章的时候,我发现mongodb的最新版本4.2,已经可以支持分布式事务,包括分片事务,而不仅仅局限于多文档副本集事务,感兴趣的朋友可以关注下

https://docs.mongodb.com/manual/core/transactions/

参考文档

https://docs.mongodb.com/manual/replication/

mongodb副本集的原理及命令

https://blog.csdn.net/caiqiandu/article/details/89928151

mongodb副本集高可用架构

https://www.cnblogs.com/littleatp/p/8562842.html

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-09-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Linyb极客之路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • mongodb副本集的定义
  • 副本集角色
  • 副本集特征
  • 搭建副本集的注意点
  • 副本集架构图
  • 使用场景
  • 副本集搭建
  • 副本集的一些操作
  • 总结
  • 参考文档
相关产品与服务
容器镜像服务
容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档