Mongodb 配置复制集,并启用安全校验

    Mongodb 在正式使用时为了实现高可用,最简单的办法就是配置复制集,当主节点发生故障时,能够自动切换节点,从而尽可能的减少应用的故障时间。典型的复制集架构由3个或以上具有投票权的节点组成,包括:
• 一个主节点(PRIMARY):接受写入操作和投票选举;
• 两个(或多个)从节点(SECONDARY):复制主节点上的数据和投票选举;
当一个修改操作到达主节点时,它对数据的操作被记录为 oplog ,从节点根据 oplog 更新自身的数据。
    接下来介绍下如何搭建一个最基本的复制集,一个主节点和两个从节点,为了方便,在一台机器上根据端口号区分不同的 mongodb 服务,在正式使用时,尽量在不同的服务器上部署,避免机器出现问题,导致全部节点失效。mongodb 的安装可以参考我的博文,传送门。下面的操作在 Centos7 中完成。

1. 建立数据存储目录

/var 目录中创建 mongodb 文件夹,mongodb 目录下创建 db_28017, db_28018, db_28019分别存储三个节点的配置文件,日志文件和数据文件等。

$ mkdir -p /var/mongodb/db_{28017,28018,28019}

在三个节点的目录下创建配置文件,日志文件和数据文件夹

$ cd /var/mongodb/db_28017/ && mkdir data && touch mongod.log mongod.conf
$ cd /var/mongodb/db_28018/ && mkdir data && touch mongod.log mongod.conf
$ cd /var/mongodb/db_28019/ && mkdir data && touch mongod.log mongod.conf

2. 编辑配置文件

配置文件示例:

# 系统日志配置
systemLog:
  destination: file
  logAppend: true
  path: /var/mongodb/db_*/mongod.log

# 存储数据的配置
storage:
  dbPath: /var/mongodb/db_*/data
  journal:
    enabled: true

#进程运行配置
processManagement:
  fork: true 
  pidFilePath: /var/mongodb/db_*/mongod.pid  
  timeZoneInfo: /usr/share/zoneinfo

# 网络配置
net:
  port: 28017
  bindIp: 127.0.0.1 

#复制集名称
replication:
  replSetName: rs0

编辑三个节点的配置文件,修改上方包含 path 的配置项到正确的目录,以及端口号。

3. 启动节点

由于是在同一个机器上运行,所以我们需要指定配置文件启动mongo服务

# 启动服务
$ mongod -f  /var/mongodb/db_28017/mongod.conf
$ mongod -f  /var/mongodb/db_28018/mongod.conf
$ mongod -f  /var/mongodb/db_28019/mongod.conf

Mongodb 配置复制集,并启用安全校验

4. 配置节点

这里以端口号为 28017 的 mongo 为主节点,进入 mongo cli

# 连接 mongo 服务
$ mongo --port 28017

Mongodb 配置复制集,并启用安全校验
查看状态
Mongodb 配置复制集,并启用安全校验
添加从节点
Mongodb 配置复制集,并启用安全校验

5. 配置安全校验

mongo 默认不启用安全校验,任何人在服务器上可以进行任何操作,这是非常危险的,由于这种机制,发生了很多的数据泄露的事故。因此,安全校验是必不可少的,我们仅仅设置最简单的用户名和密码就可以避免掉大多数的攻击。在复制集中,只设置用户名和密码会导致从节点和主节点连接失败,最简单的方式就是创建一个 keyFile,就可以解决问题。

# 在 /var/mongodb 目录下创建keyFile,由于 mongo 对 keyFile 的内容有要求,这里我们使用 openssl 创建 base64 编码的字符
$ openssl rand -base64 745 > /var/mongodb/keyFile
# 权限修改为600
$ chmod 600  /var/mongodb/keyFile

在三个节点的配置文件中追加配置内容

security:
  keyFile: /var/mongodb/keyFile

在配置 keyFile 后需要创建管理员用户,我们在主节点中进行配置。
root角色为mongo中的超级管理员角色
Mongodb 配置复制集,并启用安全校验
配置后,重新进入mongo cli
Mongodb 配置复制集,并启用安全校验
不使用用户名和密码可以连接到 mongo,但是不能进行任何的操作,使用 auth 可以进行验证,验证通过后,可以正常操作。
Mongodb 配置复制集,并启用安全校验

6. 开启从节点读

从节点在配置完成后,主节点的数据变化后,从节点还不能读取到变化。
在主节点插入一条数据
Mongodb 配置复制集,并启用安全校验
在从节点读取数据,会发生错误,没有读取的权限
Mongodb 配置复制集,并启用安全校验
开启读权限 rs.slaveOk(), 读取正常
Mongodb 配置复制集,并启用安全校验
End!

本作品采用《CC 协议》,转载必须注明作者和本文链接
Hesunfly
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!