OopStorm

mongoDB4.0副本集讲解及配置

2018/09/27 Share

1.副本集的作用

  • 复制提供了冗余并增加了数据可用性。在不同的数据库服务器上有多个数据副本,复制提供了对单个数据库服务器丢失的容错能力。
  • 副本集可以支持客户端读取,增加了mongo的读能力,且可以为灾难恢复和报告等提供特殊的副本。

简单的理解可以将mongo的副本集比作主从。
官方解释:

image.png

2.副本集架构描述

  • 副本集仅有一个主节点,其它均为次节点,次节点可为多个,主节点可写可读,次节点仅可读,次节点会根据oplog同步主的数据,如下图:

image.png

image.png

  • 当一个主节点挂掉了以后,次节点会进行选举,选举出一个新的主节点(关于副本集的选举)
    image.png

  • 读操作,默认是读主节点,但是客户端可以通过设置读偏好来决定,可以对副本集进行读取(关于读偏好的设置和说明)

  • 事务,mongo4.0以后支持了副本集多文档事务,如果使用副本集事务必须将读偏好设置为primary,一次事务操作必须要路由到同一个节点。

  • Change Streams,mongo3.6以后提供了changeStreams,可以用来订阅集合上的数据变更,不用像以前一样使用oplog去监听变更了,降低了复杂度和风险。(change streams详细说明)

    3.副本集的配置

  • 准备工作 我们将37017,37018,37019做为一组副本集
  • 首先要安装mongodb

    1
    2
    3
    4
    5
    6
    mkdir /mongodb/bin
    cd /mongodb
      wget http://downloads.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.0.2.tgz
    tar xf mongodb-linux-x86_64-rhel70-4.0.2.tgz
    cd mongodb-linux-x86_64-rhel70-4.0.2.tgz/bin/
    cp * /mongodb/bin
  • 构建目录

1
2
3
4
5
6
for  i in 37017,37018,37019
do
mkdir -p /mongodb/$i/conf
mkdir -p /mongodb/$i/data
mkdir -p /mongodb/$i/log
done
  • 编辑配置文件

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    cat >>/mongodb/37017/conf/mongod.conf<<'EOF'
    systemLog:
    destination: file
    path: /mongodb/37017/log/mongodb.log
    logAppend: true
    storage:
    journal:
    enabled: true
    dbPath: /mongodb/37017/data
    directoryPerDB: true
    wiredTiger:
    engineConfig:
    directoryForIndexes: true
    collectionConfig:
    blockCompressor: zlib
    indexConfig:
    prefixCompression: true
    processManagement:
    fork: true
    net:
    port: 37017
    replication:
    oplogSizeMB: 2048
    replSetName: rep1
    EOF
  • 复制配置文件

    1
    2
    3
    4
    for i in 37018 37019
    do
    \cp /mongodb/37017/conf/mongod.conf /mongodb/$i/conf/
    done
  • 修改配置文件

    1
    2
    3
    4
    for i in 37018 37019
    do
    sed -i "s#37017#$i#g" /mongodb/$i/conf/mongod.conf
    done
  • 启动服务

    1
    2
    3
    4
    for i in 37018 37019
    do
    mongod -f /mongodb/$i/conf/mongod.conf --bind_ip_all
    done
  • 配置副本集

    1
    2
    3
    4
    5
    6
    7
    ./mongo --port 37017
    config = {_id: 'rep1', members: [
    {_id: 0, host: 'ip:37017'},
    {_id: 1, host: 'ip:38018'},
    {_id: 2, host: 'ip:39019'}]
    }
    rs.initiate(config)

完毕,欢迎大家评论与指正。

参考文档
[1]https://docs.mongodb.com/manual/replication
[2]https://www.cnblogs.com/clsn/p/8214345.html

CATALOG
  1. 1. 1.副本集的作用
  2. 2. 2.副本集架构描述
  3. 3. 3.副本集的配置