/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...)。
复制集配置说明
- 配置文件,创建复制集中每个副本的配置文件。
- 确认配置文件中各目录存在及权限正确。
- 启动mongod各个副本实例。
- 初始化复制集。
- 配置完成,可以直接使用。
配置步骤
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节点上执行,否则会初始化失败报错。