mongoDB4.0副本集讲解及配置


layout: pages
title: mongoDB4.0副本集讲解及配置
date: 2018.09.27
tags: mongoDB


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
    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
  • 构建目录
for  i in 37017 37018 37019
    do 
      mkdir -p /mongodb/$i/conf  
      mkdir -p /mongodb/$i/data  
      mkdir -p /mongodb/$i/log
done 
  • 编辑配置文件
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
  • 复制配置文件
for i in 37018 37019
  do  
   \cp  /mongodb/37017/conf/mongod.conf  /mongodb/$i/conf/
done
  • 修改配置文件
for i in 37018 37019
  do 
    sed  -i  "s#37017#$i#g" /mongodb/$i/conf/mongod.conf
done
  • 启动服务
for i in 37018 37019
  do  
    mongod -f /mongodb/$i/conf/mongod.conf  --bind_ip_all
done

-配置副本集

./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

推荐阅读更多精彩内容