MongoDB副本集配置过程

1 环境准备

基础环境: 三台:“centos 6.6 + MongoDB 3.6.1”
三台服务器IP配置:

节点 IP
SERVER-1 192.168.6.31
SERVER-2 192.168.6.32
SERVER-3 192.168.6.33

初始环境暂时不要开启MongoDB用户认证,等初始化副本集后再开启认证。
初始情况下Mongod启动配置(三个节点配置相同):

dbpath = /home/mongodb/data/db
logpath = /home/mongodb/app/mongodb-3.6/mongodb.log

port = 27017
bind_ip = 0.0.0.0

fork = true                             # run background
#nohttpinterface = true

#replSet = rs
#oplogSize = 2048                       #2G

#auth = true
#keyFile = /home/mongodb/app/mongodb-3.6/keyfile

2 开启副本集功能

在三个节点上分别执行如下操作开启副本集功能。

2.1 修改Mongod启动配置文件

1) 添加:“replSet = 自定义副本集名称

2) 添加:“oplogSize = 指定日志大小”,单位:MB
  这是一个可选项,也可以不指定。
  不指定的情况下,MongoDB会根据系统情况自己配置大小。
  Linux为磁盘剩余空间的5%

修改后的配置文件

dbpath = /home/mongodb/data/db
logpath = /home/mongodb/app/mongodb-3.6/mongodb.log

port = 27017
bind_ip = 0.0.0.0

fork = true                             # run background
#nohttpinterface = true

replSet = rs
oplogSize = 2048                        #2G

#auth = true
#keyFile = /home/mongodb/app/mongodb-3.6/keyfile

2.2 重启Mongod使配置生效

3 初始化副本集

任选一个节点登录mongodb,执行如下初始化命令

rs.initiate(
  {
     "_id" : "rs", 
     "members" : [
       {"_id" : 0, "host" : "192.168.6.31:27017"},
       {"_id" : 1, "host" : "192.168.6.32:27017"},
       {"_id" : 2, "host" : "192.168.6.33:27017"}
     ]
  }
)

“_id” : “rs”, 这个地方填写副本集名称。
执行结果显示初始化成功:
MongoDB副本集配置过程_第1张图片
至此,一个基本的副本集环境就已搭建完成。

4 添加用户认证

上文执行初始化成功后,副本集就已搭建完成。
但是,真正的生产环境,还要添加用户认证才行,具体过程如下:
1) 在主节点上添加"用户管理员"和"数据库管理员"用户

use admin

db.createUser(
  {
    user: "useradmin",
    pwd: "useradmin",
    roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
  }
)

db.createUser(
  {
    user: "dbadmin",
    pwd: "dbadmin",
    roles: [ 
      { role : "dbAdminAnyDatabase", db : "admin"},
      { role : "readWriteAnyDatabase", db : "admin"},
      { role : "clusterAdmin", db : "admin"} 
    ]
  }
)

2) 创建副本集认证文件:“keyFile”

  单节点认证是不需要"keyFile"文件的,
  但是副本集(replica set)或分片集群(sharded cluster)要开启认证的话,就必须指定"keyFile"。
  所有节点必须使用同一份"keyFile",因而需要在一个节点生成”keyFile“文件,再拷贝到其它节点。
  "keyFile"文件通过"openssl"工具生成;且文件生成后,必须将属性改为:“600”

openssl rand -base64 90 -out ./keyfile
chmod 600 keyfile

将生成的keyfile文件拷贝到其它节点。

3) 修改每个节点的mongod启动配置文件,增加以下两个配置项,启用认证

auth = true
keyFile = /home/mongodb/app/mongodb-3.6/keyfile

重启mongod生效

4) 验证用户登录
  连接单节点:

mongo 192.168.6.32/admin -u dbadmin -p
MongoDB shell version v3.6.11
Enter password: 
connecting to: mongodb://192.168.6.32:27017/admin?gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("c231555e-783c-41db-bad3-d328d0be9bfe") }
MongoDB server version: 3.6.11
rs:PRIMARY> 

  连接副本集(无论节点怎么切换,总能连接到主节点)

mongo --host rs/192.168.6.31:27017,192.168.6.32:27017,192.168.6.33:27017 admin -u dbadmin -p dbadmin

  连接测试成功!

至此,mongodb副本集环境搭建完成。

附:最终的mongod.conf配置

dbpath = /home/mongodb/data/db 
logpath = /home/mongodb/app/mongodb-3.6/mongodb.log 

port = 27017
bind_ip = 0.0.0.0

fork = true                             # run background
#nohttpinterface = true

replSet = rs
oplogSize = 2048                        #2G

auth = true
keyFile = /home/mongodb/app/mongodb-3.6/keyfile

补充:
1) secondary节点默认不可读,可通过如下命令使其可读,方便维护

SECONDARY> rs.slaveOk()

你可能感兴趣的:(MongoDB)