/article/2019/05/17/mongodb-setup-config-replication/

Mongodb配置复制集(副本集)架构

  • 【作者】看不见我
  • 【分类】Service
  • 【发布】2019-05-17 14:16
  • 【更新】2019-06-21 14:20

Mongodb 配置复制集

在复制集环境中,一个复制集包含以下组件:

  • 主副本(Primary),数据读写主入口。
  • 备副本(Secendry),同步主副本数据及提供可读。
  • 仲裁(Arbiter),本身不存储数据,用于实现主备副本自动切换(可选组件)。

每个组件都为一个单独的mongod实例。

一个复制集一般配置3个及以上的mongod实例。其中组件总数必须为奇数, 否则mongodb在Primary实例出问题时不会实现自动切换副本。

配置mongodb复制集时,推荐对每个mongod示例的配置 都采用CNAMEs(hosts,DNS...)。

复制集配置说明

  1. 配置文件,创建复制集中每个副本的配置文件。
  2. 确认配置文件中各目录存在及权限正确。
  3. 启动mongod各个副本实例。
  4. 初始化复制集。
  5. 配置完成,可以直接使用。

配置步骤

1、配置文件参考下面的复制集配置文件

# 是否后台 #
processManagement:
    fork: true

# 网络配置 #
net:
    #bindIp: 127.0.0.1,10.8.0.10,192.168.4.24
    port: 27018

# 安全认证配置 #
#security:
    # 启用认证配置:enabled|disabled
    #authorization: enabled
    # 使用Internal Authentication
    #keyFile: /etc/mongodbConf/DBNAME/keyfile

#setParameter:
    # Local Exception配置,默认true
    #enableLocalhostAuthBypass: false

# mongo实例日志配置 #
systemLog:
    destination: file
    path: /data/mongodb/DBNAME/logs/RsDBNAME.log
    # 设置logAppend为true后,mongod/mongos在重启后只会在现有日
    # 志的尾部继续添加日志,不会覆盖已有日志文件。(默认:False)
    logAppend: true
    # 日志滚动配置rename(重命名日志文件)|reopen(关闭并重新打开此日志文件)
    # reopen使用linux日志rotate特性,如果配置reopen,也要设置logAppend: true
    logRotate: rename
    # (default)iso8601-local|iso8601-utc|ctime
    #timeStampFormat: iso8601-local

# mongodb数据存储配置 #
storage:
    # journal配置
    journal:
        # 如果是Arbiter,最好设置为false
        enabled: true
    # 数据文件存储位置
    dbPath: /data/mongodb/DBNAME/data/RsDBNAME
    # 是否一个库一个文件夹
    directoryPerDB: true
    # 数据引擎配置
    engine: wiredTiger
    # WT引擎配置
    wiredTiger:
        engineConfig:
            # WT最大使用cache(根据服务器实际情况调节)
            # arbiter可配置成1
            cacheSizeGB: 10
            # 是否将索引也按数据库名单独存储
            directoryForIndexes: true
        # 表压缩配置
        collectionConfig:
            # blockCompressor参数:none|zlib
            blockCompressor: zlib
        # 索引配置
        indexConfig:
            prefixCompression: true

# 副本配置 #
replication:
    # oplog大小。默认磁盘空间5%(1G-50G)
    #oplogSizeMB: 10240
    # 复制集名称
    replSetName: RsDBNAME

2、启动各个mongod副本实例后,连接至mongod初始化。

sudo -u mongodb mongod -f /etc/mongodbConf/DBNAME/RsDBNAME.conf

3、初始化时,只要连接到该复制集中的其中一个副本实例操作就可以了:

mongo 192.168.1.54:22001
use admin
db.runCommand(
    {
        "replSetInitiate":
        {
            "_id":"RsDBNAME",
            "members":
            [
                {
                    "_id":1,
                    "host":"192.168.1.54:22001",
                    "priority": 2
                },
                {
                    "_id":2,
                    "host":"192.168.1.53:22001"
                },
                {
                    "_id":3,
                    "host":"192.168.1.52:22001",
                    "arbiterOnly":true
                }
            ]
        }
    }
)
exit

以上操作就完成了这一个复制集的初始化。 这样初始化完的复制集连接到primary实例中就可以直接使用了。

备注:初始化命令不能在arbiter节点上执行,否则会初始化失败报错。

Top