`

mongodb副本集的搭建

阅读更多

一、问题引出

       假设我们生产上的mongodb是单实例在跑,如果此时发生网络发生问题或服务器上的硬盘发生了损坏,那么这个时候我们的mongodb就使用不了。此时我们就需要我们的mongodb实现高可用,当一个mongod实例出现问题后,其余的mongod实例可以继续提供服务,即自动故障转移。mongodb的复制集(replica set)就可以实现我们的这个需求。

 

二、什么是复制集

        mongodb的复制集指的是一组拥有相同实例的mongod实例所组成的集群。其中有一台服务器充当主节点(Primary Node),主节点可以实现数据的写入和读取操作。其余的节点可以充当备份节点(Secondary Node),备份节点用于保存主节点的数据备份,如果主节点挂了,那么Secondary Node会被选举中Primary Node。在mongodb 中还存在一种仲裁节点(Arbiter Node),仲裁节点只是用于进行投票选举Primary Node,不进行数据的存储。

 

三、复制集小知识点

     1、在复制集中,主节点(primary Node)是唯一的,但是它是不固定的,当主节点宕机后,会重新选举出新的主节点。

     2、仲裁节点(Arbiter Node)无法进行存储数据,只是用于充当选举的

     3、当复制集中的节点 <= 1/2 时集群只可以读,不可进行写入。

     4、对于同一个复制集而言,其配置参数 replSet 的值必须是一样的。

     5、数据目录必须要先存在,否则会报错。

     6、在window 上使用 --config 指定启动mongod的配置文件路径,liunx上使用 -f

     7、复制集的初始化必须要在admin集合上进行操作。

     8、仲裁节点只可以存在一个。

     9、从节点默认不可查询数据,需要 执行  rs.slaveOk(true) 命令后,才可以查询出数据。

     10、如果复制集中有某一台机器的性能明显比别的机器好,那么我们希望该节点成为主节点的概率大一些,此时我们就需要设置 priority(0-1000) 属性的值大一些,该值是复制集的参数选项,见下方表格中复制集的初始化。(注意:如果a节点的priority值最大,此时它宕机了,主节点被b节点获取到了,过一段时间a节点恢复了,那么a节点就会再次获取到主节点,b节点变成从节点。)

      11、隐藏节点: priority=0 && hidden=true 该节点拥有和主节点一样的数据,但是不可以被客户端程序发现,使用rs.isMaster()方法无法查询到此节点,rs.status() 可以看到此节点。

      12、延时节点 priority=0 && hidden=true && slaveDelay=3600 表示和主节点的数据延时3600秒,即该节点的数据和主节点的数据会存在一个小时的延时。

      13、如果要对复制集的某个节点进行维护,那么可以先将这个节点关闭,然后注释掉这个节点中的配置文件中的replSet属性,以单节点的方式启动,维护好后,关闭节点,恢复这个属性,然后再以复制集进行启动。

 

四、复制集节点数量

     在mongodb的复制集中,如果要一个复制集是可用的,那么存活的节点数必须要 > 1/2 的总节点数,即当有一个4个节点的复制集和3个节点的复制集,当复制集不可用时,都是有2个节点挂掉,此时存活的节点会降级成从节点。所以我们复制集一般使用奇数个几点,假设我们没有那么多的机器,那么我们可以添加一个仲裁节点。

     大多数原则当集群中的存活的节点数量小于集群总数的 1/2时,集群不可用。

     大多数原则举例:假设我们有2个机房,上海机房和北京机房,总共署了7个节点,其中上海机房有4个mongod节点,北京机房有3个mongod节点,主节点在上海机房此时北京机房的网络发生问题无法连接到上海的机房,如果没有大多数原则,那么北京机房将发生master选举,此时就会存在mongodb集群中就会存在2个主节点。如果存在大多数原则,因为总节点是7个,北京机房只有3个节点,3个节点小于总节点的1/2,因此不会发生master选举。

 

五、创建一个复制集(此处创建一个主节点,2个备份节点的复制集)

机器(host) mongodb端口(port) 配置文件(etc)
192.168.244.1  28001 D:\Program Files\MongoDB\rs\rs-study\etc\28001.conf
192.168.244.1 28002 D:\Program Files\MongoDB\rs\rs-study\etc\28002.conf
192.168.244.1 28003 D:\Program Files\MongoDB\rs\rs-study\etc\28003.conf

  ** 配置文件的内容

28001.conf

#mongodb端口

port=28001

#绑定ip,只有这个ip才可以访问上mongodb
bind_ip=192.168.244.1

# 日志文件的路径
logpath=D:\Program Files\MongoDB\rs\rs-study\log\28001.log

# 数据文件的目录
dbpath=D:\Program Files\MongoDB\rs\rs-study\data\28001

#日志以追加的方式存在
logappend=true

# mongodb进程的pid的值将存入此文件
pidfilepath=D:\Program Files\MongoDB\rs\rs-study\data\28001.pid
# fork=true linux以后台方式启动,在window上没有用
# 此参数较大比较好,单位是 MB,默认是磁盘可用空间的 5%
oplogSize=1024
# 复制集的名称,同一个复制集的名称必须要相同
replSet=rs-study

28002.conf

port=28002
bind_ip=192.168.244.1
logpath=D:\Program Files\MongoDB\rs\rs-study\log\28002.log
dbpath=D:\Program Files\MongoDB\rs\rs-study\data\28002\
logappend=true
pidfilepath=D:\Program Files\MongoDB\rs\rs-study\data\28002.pid
oplogSize=1024
replSet=rs-study

28003.conf port=28003
bind_ip=192.168.244.1
logpath=D:\Program Files\MongoDB\rs\rs-study\log\28003.log
dbpath=D:\Program Files\MongoDB\rs\rs-study\data\28003\
logappend=true
pidfilepath=D:\Program Files\MongoDB\rs\rs-study\data\28003.pid
oplogSize=1024
replSet=rs-study

 注意:

         1、三个配置文件的 replSet 的值必须是一致的。         2、dbpath这个目录必须要先存在。

         3、oplogSize的值但是是MB,这个值最好大一些,这个值决定了主节点上local数据库中oplog这个固定集合的大小,从节点从这个固定集合中实现数据的复制。

          4、oplog的默认大小:(对于windows和unix系统,默认是系统磁盘可用的5%,不同的引擎存在不同的上下限)

 

 

  ** 启动mongodb

28001 mongod --config "D:\Program Files\MongoDB\rs\rs-study\etc\28001.conf"
28002 mongod --config "D:\Program Files\MongoDB\rs\rs-study\etc\28002.conf"
28003 mongod --config "D:\Program Files\MongoDB\rs\rs-study\etc\28003.conf"

 

  ** 连上28001,执行复制集的初始化

连上: mongo 192.168.244.1:28001
初始化: use admin

rs.initiate({
    _id : "rs-study",
    members : [
        {_id : 0,host : "192.168.244.1:28001","priority":10},
        {_id : 1,host : "192.168.244.1:28002"},
        {_id : 2,host : "192.168.244.1:28003"}
    ]
});

注意:

       1、在连上mongod时,必须要指定 192.168.244.1,因为这个参数是在mongodb的配置文件2800*.conf中的bind_ip指定的。

       2、复制集的初始化必须要先使用 use admin,即必须要在admin集合上进行操作。

       3、最外层 _id 的值为复制集中 replSet 的值,里面members中的 _id 的值不可重复。

       4、priority(0-1000)属性的默认值为1,此值越大越有可能成为主节点。

 ** 初始化副本集

 
 

六、复制集的基本操作方法

方法 作用

描述

rs.initiate({}) 初始化复制集

1、use admin

2、执行此方法

rs.reconfig() 重新初始化复制集

1、进入到主节点

2、只有该节点可能成为主节点的节点上才可以进行此方法

3、执行此方法会有一瞬间会断开连接,如果此时主库有写操作会有问题

rs.isMaster() 返回副本集的配置和状态子集  
rs.status() 查看副本集的状态  
rs.config() 查看副本集的配置  
rs.stepDown(秒1,秒2) 将主节点变成从节点  
rs.add({}) 添加复制集成员

1、rs.add("host:port")

2、rs.add({"host":"",....})

3、rs.add("host:port",true) 添加仲裁节点

rs.addArb("host:port") 添加仲裁成员  
rs.remove("host:port") 删除复制集成员

1、建议先将需要删除的复制集成员关闭,然后再删除。

2、该命令会短暂的断开并强制重连

rs.slaveOk(true) 允许复制集上的该成员读取数据  

 

  • 大小: 33.1 KB
  • 大小: 4.7 MB
分享到:
评论

相关推荐

    mongodb副本集搭建

    MongoDB 副本集搭建 MongoDB 副本集搭建是 MongoDB 的高可用性解决方案之一,它可以提供数据的冗余存储和自动故障转移,确保数据的高可用性和可靠性。下面将详细介绍 MongoDB 副本集搭建的步骤和过程。 一、安装...

    MongoDB副本集搭建及运维.txt

    MongoDB副本集搭建及运维

    MongoDB副本集搭建

    MongoDB副本集搭建课件

    MongoDB搭建副本集教程

    MongoDB 副本集搭建教程 MongoDB 副本集是 MongoDB 中的一种高可用性解决方案,它可以提供高性能、可扩展性和高可用性。通过搭建副本集,用户可以确保数据的安全和高可用性。 一、 MongoDB 副本集环境搭建攻略 1....

    mongodb 复制集搭建实例

    MongoDB复制集搭建实例 MongoDB是一个高性能、开源、无模式的文档型数据库,它以其灵活性、可扩展性和丰富的功能而被广泛应用于大数据处理、Web应用、内容管理系统等多个领域。复制集是MongoDB中的一个重要特性,它...

    MongoDB4.2分片及副本集群搭建

    MongoDB4.2分片及副本集群搭建 MongoDB集群 MongoDB分片 MongoDB副本 MongoDB副本集群

    K8s 部署 MongoDB(副本集)

    MongoDB中的副本集(Replica Set)是一组维护相同数据集的mongod服务。 副本集可提供冗余和高可用性,是所有生产部署的基础。也可以说,副本集类似于有自动故障恢复功能的主从集群。通俗的讲就是用多台机器进行同一...

    Mongodb 副本集搭建问题总结及解决办法

    在搭建MongoDB副本集时,可能会遇到多种问题。首先,配置文件中的端口设置是关键。如果新人操作时配置了错误的端口,需要及时修正。更改端口通常有两种方法:一是直接修改副本集配置,二是通过rs.reconfig命令。第一...

    k8s 安装 mongodb 分片(Sharding)+ 副本集(Replica Set)

    k8s 安装 MongoDB 分片(Sharding)+ 副本集(Replica Set) k8s 安装 MongoDB 分片(Sharding)+ 副本集(Replica Set)是结合 Kubernetes(k8s)和 MongoDB 实现高可用性和高性能的解决方案。本解决方案通过使用 ...

    Mongodb分片副本集集群搭建

    MongoDB分片副本集集群搭建的知识点包含了以下几个方面: 1. MongoDB分片架构的基本组成:MongoDB分片架构由mongos(路由服务器)、config-server(配置服务器)和shard(分片服务器)三部分组成。mongos负责作为...

    mongodb4.22分片及副本集搭建

    mongodb4.22分片及副本集搭建

    CentOS 6.4创建Mongodb副本集

    创建MongoDB副本集是为了实现数据的冗余和故障转移,当集群中的某个节点出现问题时,其他节点可以接管服务,保证业务连续性。在CentOS 6.4上设置MongoDB副本集的步骤如下: 1. **设置hostname**:首先,确保在副本...

    MongoDB安装及副本、集群搭建

    #### 二、MongoDB副本集搭建 **1. 节点信息准备** - 在进行副本集搭建之前,需要准备好所有节点的信息。 **2. 安装MongoDB副本集** - 按照上述安装步骤,在三台服务器上分别安装好MongoDB。每个节点的`...

    MongoDB企业级分片集群搭建视频.zip

    7 MongoDB副本集的搭建.mp4 8 MongoDB副本集故障自动切换.mp4 9 MongoDB副本集各实例的优先级设置.mp4 10 MongoDB副本集的伸缩.mp4 11 MongoDB数据的备份和恢复.mp4 12 Python简单操作MongoDB.mp4 13 Python获取...

    mongodb 4.0副本集搭建的全过程

    近期有同学问mongodb副本集难不难部署,我的回答是不难,很快,几分钟搞定,比mysql MHA简单的不止一点半点。 那么到底如何部署呢?请看下文。 1. 准备工作 1.1 下载软件 选择版本并下载mongodb的软件,注意操作...

    MongoDB副本集集群

    副本集集群的搭建步骤包括成员的初始化、配置副本集的配置文件、启动副本集成员服务、加入副本集以及副本集功能扩展。副本集工作机制包括主从复制机制和选举机制等。分片功能是MongoDB用于实现大数据量自动分片,...

    Mongodb3.0.5 副本集搭建及spring和java连接副本集配置详细介绍

    二、搭建mongodb副本集: 1、 分别在三台linux系统机上安装mongodb,(为避免和机器上原有的mongodb端口冲突,这里设为57017): 192.168.0.160 192.168.0.211(192.168.0.33上的虚拟机) 192.168.0.213(192.168.0

Global site tag (gtag.js) - Google Analytics