基础环境: 三台:“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
在三个节点上分别执行如下操作开启副本集功能。
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
任选一个节点登录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”, 这个地方填写副本集名称。
执行结果显示初始化成功:
至此,一个基本的副本集环境就已搭建完成。
上文执行初始化成功后,副本集就已搭建完成。
但是,真正的生产环境,还要添加用户认证才行,具体过程如下:
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()