部署说明:三台机器192.168.1.100,192.168.1.101,192.168.1.102
配置副本集(一个Master节点+两个个SECONDARY节点)+用户认证
每台机器安装好mongodb,mongodb.conf配置文件内容相同,如下
systemLog:
destination: file
path: /usr/local/mongodb/logs
logAppend: true
storage:
dbPath: /usr/local/mongodb/data
replication:
replSetName: "rs0"
net:
bindIp: 0.0.0.0
port: 27017
processManagement:
fork: true
setParameter:
enableLocalhostAuthBypass: false
maxTransactionLockRequestTimeoutMillis: 3600
transactionLifetimeLimitSeconds: 600
#security:
# authorization: enabled
# clusterAuthMode: "keyFile"
# keyFile: /usr/local/mongodb/keyfile
# 在192.168.1.100上执行rs.initiate() (也可以选择其他机器)
rs.initiate({id:‘rs0‘,members:[{id:1,host:‘192.168.1.100:27017‘}]});
# 创建admin用户
use admin;
db.createUser({
user:"root",pwd:"123456",
roles: [{role:"userAdminAnyDatabase",db:"admin"},{role:"clusterAdmin",db:"admin"},{role:"root",db:"admin"}, "readWriteAnyDatabase" ]
});
db.auth("root","123456");
注意:副本集需要clusterAdmin角色权限,如果之前没有配置,可以后面追加授权db.grantRolesToUser("admin",[{role:"clusterAdmin",db:"admin"}]);
# 配置副本集keyFile认证文件
[root@localhost mongodb]# openssl rand -base64 666 > /usr/local/mongodb/keyfile
[root@localhost mongodb]# chmod 600 keyfile
[root@localhost mongodb]# scp keyfile root@192.168.1.101:/usr/local/mongodb
[root@localhost mongodb]# scp keyfile root@192.168.1.102:/usr/local/mongodb
# 关闭mongodb 修改配置文件mongodb.conf打开security认证,然后重启mongodb
# 通过rs.add增加SECONDARY节点
(也可以通过rs.addArb()增加仲裁节点,主要区别是:仲裁节点不存储数据,可少了数据复制的压力)
rs0:PRIMARY> rs.add("192.168.1.101:27017");
rs0:PRIMARY> rs.add("192.168.1.102:27017");
rs0:PRIMARY> rs.isMaster() --查看状态
rs0:PRIMARY> rs.status() --查看状态
登录SECONDARY节点查看状态
rs0:SECONDARY> db.getMongo().setSlaveOk(); --或rs.slaveOk()
rs0:SECONDARY> rs.isMaster()
# 查看复制集相关命令帮助
rs.help()
# 副本集也可以这样初始化
rs.initiate(
{
_id : ‘rs0‘,
members: [
{_id:0, host:‘192.168.1.100:27017‘,priority:6},
{_id:1, host:‘192.168.1.101:27017‘,priority:4},
{_id:2, host:‘192.168.1.102:27017‘,priority:2}
]
}
)
或
rs.initiate(
{
_id : ‘rs0‘,
members: [
{_id:0, host:‘192.168.1.100:27017‘,priority:6},
{_id:1, host:‘192.168.1.101:27017‘,priority:4},
{_id:2, host:‘192.168.1.102:27017‘,arbiterOnly:true}
]
}
)
# 移除节点
rs.remove("192.168.1.102:27017");
# 关闭当前示例
db.shutdownServer()
# 将当前主库“降级”
rs0:PRIMARY>rs.stepDown(30)
rs0:SECONDARY>
# 冻结Secondary节点(PRIMARY维护时,可让Secondary不参与PRIMARY选举)
rs0:SECONDARY> rs.freeze(100)
# 查看复制集情况
db.printSlaveReplicationInfo()
其中:
source:从库的ip和端口
syncedTo:目前的同步情况,以及最后一次同步的时间
# rs.add 所有参数
{
_id: <int>,
host: <string>, // required
arbiterOnly: <boolean>,
buildIndexes: <boolean>,
hidden: <boolean>,
priority: <number>,
tags: <document>,
slaveDelay: <int>,
votes: <number>
}
hidden:这样设置后此机器在读写中都不可见,并且不会被选举为Primary,但是可以投票,一般用于备份数据。
slaveDelay:可以指定一个时间延迟从primary节点同步数据。主要用于处理误删除数据马上同步到从节点导致的不一致问题。
Linux下MongoDB副本集搭建 https://www.cnblogs.com/s6-b/p/11288583.html
MongoDB副本集的常用操作及原理 https://www.cnblogs.com/ivictor/p/6804408.html
mongodb副本集高可用架构 https://www.cnblogs.com/littleatp/p/8562842.html
MongoDB 副本集的原理、搭建、应用 https://www.cnblogs.com/zhoujinyi/p/3554010.html
原文:https://www.cnblogs.com/huligong1234/p/12727691.html