搭建复制集
创建数据目录
mkdir -p /mongod/data{1,2,3}
准备配置文件
正常情况下复制集的每个mongod进程应该位于不同的服务器。我们现在在一台机器上运行3个进程,因此要为它们各自配置:
- 不同的端口。示例中将使用28017/28018/28019.
- 不同的数据目录。示例中将使用:
- /mongod/data1
- /mongod/data2
- /mongod/data3
- 不同日志文件路径。示例中将使用:
- /mongod/data1/mongod.log
- /mongod/data2/mongod.log
- /mongod/data3/mongod.log
这些配置文件标准格式如下,请修改必要的参数完成3个实例各自的配置文件:
# /usr/local/mongodb/config/mongod28017.conf
systemLog:
destination: file
path: /mongod/data1 # 日志文件路径
logAppend: true
storage:
dbPath: /mongod/data1/mongod.log # 数据目录
net:
bindIp: 0.0.0.0
port: 28017 # 端口
replication:
replSetName: chengRs0
processManagement:
fork: true
security:
authorization: enabled
keyFile: /usr/local/mongodb/config/.keyfile
执行进程
./mongod -f /mongod/data1/mongod.conf
./mongod -f /mongod/data2/mongod.conf
./mongod -f /mongod/data3/mongod.conf
配置复制集
进入mongo shell:
./mongo --port 28017
初始化复制集:
rs.initiate({
_id: "chengRs0",
members: [{
_id: 0,
host: "{ip}:28017"
},{
_id: 1,
host: "{ip}:28018"
},{
_id: 2,
host: "{ip}:28019"
}]
})
查看复制集状态:
rs.status()
调整复制集配置
var conf = rs.conf()
// 将0号节点的优先级调整为10
conf.members[0].priority = 10;
// 将1号节点调整为hidden节点
conf.members[1].hidden = true;
// hidden节点必须配置{priority: 0}
conf.members[1].priority = 0;
// 应用以上调整
rs.reconfig(conf);
安全校验
创建keyFile文件
## keyfile base64 编码
vim /usr/local/mongodb/config/.keyfile
## 设置权限600
chmod 600 /usr/local/mongodb/config/.keyfile
创建管理员账号
> use admin
> db.createUser({user:"admin",pwd:"123456",roles:[{role:"root",db:'admin'}]})
关闭所有服务,使用新的配置文件重启
./mongo --port 28017
use admin
db.auth("admin","123456") #认证,返回1表示成功