MongoDB——集群搭建

Mongodb的三种集群方式的搭建:Replica Set / Sharding / Master-Slaver
官方已经不推荐Master-Slaver集群方式

一、Mongodb的副本集(Replica Set)集群节点角色介绍及选举过程

一个副本集ReplicaSet一般由一组mongod实例组成,这组mongod实例协调配合工作,共同向外提供高可用的数据库访问服务。副本集中的不同节点虽然都是mongod实例,但是角色上却有不同,一般分为三种:主节点、副本节点和仲裁者节点。

  • 主节点:负责所有的数据库写操作,默认情况下,主节点也负责处理所有的数据库读操作;

  • 副本节点:负责同步主节点的数据操作日志更新本地数据库,从而保证副本节点的数据和主节点上的数据的一致性;副本节点的从某种意义上来讲有点像赛跑,永远在追赶主节点的数据操作;

  • 仲裁节点:不负责保存具体的数据,只是在副本集进行主节点选举时提供自己的一个选票而已。

除了上面三个角色的节点外,还有几种其他节点,下面简单描述一下:

  • Secondary-Only:和副本节点一样保存了主节点的数据副本,但是在任何情况下都成为不了Primary主节点;

  • Hidden:这种类型的节点对于客户端程序是不可见的,同样不能成为Primary主节点,但是可以参与投票;

  • Delayed:这种类型的节点可以通过人为的设置,可以指定一个时间来延迟从主节点同步数据,Delayed成员主要用于从一些误操作中恢复旧数据,并且肯定不能成为主节点而且是Hidden的;

一般情况下,一个最小化的副本集由一个主节点、一个副本节点和一个仲裁节点组成,但是在实际使用过程中,大多数采用的是由一个主节点和两个副本节点组成的。

1. 一个最小化副本集的结构图如下所示:
在这里插入图片描述
在上图中,副本集中的主节点负责处理来自客户端的所有读写操作,并将所有的修改数据库的操作以日志Oplog的方式记录在本地;副本节点按照一定的频率主动异步的从主节点同步操作日志并作用于自己本机的数据库上,从而保证副本节点和主节点的数据一致性。副本集中的各个节点之间每2秒进行一个心跳请求,查询副本集中的其他节点的状态。
在这里插入图片描述
2. 如何操作读写分离

正常情况下,读写操作是操作在主节点上,写操作我们是无法进行控制的,只能作用在主节点上,但是对于读操作我们确实可以控制的(从副本节点上读取数据,从而达到读写分离),这时候我们就需要了解ReadPreference了,下面简单列下都有哪些模式可以供我们选择:

read preference是replica set中才会涉及到的概念,用于指定怎么读取数据。官方对read preference的解释是:
Read preference describes how MongoDB clients route read operations to the members of a replica set

1> primary:默认方式,所有的读操作都从主节点获取;

2> primaryPerferred:在大多数场景下直接从主节点进行读操作,如果主节点读操作不可用时,则从副本节点进行读取;

3> secondary:所有的读操作都只从副本节点进行读取;

4> secondaryPreferred:在大多数场景下,读操作都从副本节点进行读操作,如果副本节点不可用,那么考虑从主节点进行读取;

5> nearest:所有的读操作从网络延迟最小的节点上进行读操作;

3. 配置ReadPreference的方式

第一种:uri中配置
可以在uri中拼接readPreference=primaryPreferred
代码示例如下:

@Bean
    public MongoClient mongoClient() {
   
        String uriString = "mongodb://username:password@cluster0-shard-00-00-75shm.gcp.mongodb.net:27017,"
                + "cluster0-shard-00-01-75shm.gcp.mongodb.net:27017,"
                + "cluster0-shard-00-02-75shm.gcp.mongodb.net:27017/?"
                + "ssl=true&replicaSet=Cluster0-shard-0&authSource=admin"
                + "&retryWrites=true&readPreference=primaryPreferred";
        MongoClientURI uri = new MongoClientURI</
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值