小项目一般不会用到,只有当并发量大,宕机机率高的情况下才需要使用副本集模式
模式介绍
mongodb集群有三种模式,主从模式,副本集模式、sharding分片模式。主从模式官网也不再推荐上生产环境,主要是安全性太低。副本集和sharding模式目前是用的最广的方案,通常这2种方案的选择通过数据量和并发数来权衡。
早期的MongoDB版本使用master-slave,一主一从和MySQL类似,但slave在此架构中为只读,当主库宕机后,从库不能自动切换为主。目前已经淘汰master-slave模式,改为副本集,这种模式下有一个主(primary),和多个从(secondary),只读。支持给它们设置权重,当主宕掉后,权重最高的从切换为主。在此架构中还可以建立一个仲裁(arbiter)的角色,它只负责裁决,而不存储数据
使用场景
在GB级别的基本上副本集方案可满足,TB级别或以上采用sharding模式,解决单机容量和单机并发能力。这两种既有自己的优势也有自己的缺点,比如sharding模式分片越多,性能自然下降越多
官方建议的副本集节点数量是3个,1个主节点+2个从节点。或者是1个主节点+1个从节点+1个仲裁节点。仲裁节点的作用是在主节点不可用时,通过算法找到最适合的从节点成为新的主节点。不建议将仲裁节点和数据节点放在同一个服务器上
示例
这里开启三个本地Mongo服务来测试
./1/mongodb.conf (主1)
dbpath=D:\MongoDB\Server\4.0\1\db
port=27000
replSet=datamip/127.0.0.1:27001
# keyFile=D:\MongoDB\Server\4.0\keys\mongodb-keyfile
./2/mongodb.conf (从2)
dbpath=D:\MongoDB\Server\4.0\2\db
port=27001
replSet=datamip/127.0.0.1:27000
# keyFile=D:\MongoDB\Server\4.0\keys\mongodb-keyfile
./3/mongodb.conf (仲裁3)
dbpath=D:\MongoDB\Server\4.0\3\db
port=27002
replSet=datamip/127.0.0.1:27000
# keyFile=D:\MongoDB\Server\4.0\keys\mongodb-keyfile
KeyFile
在生产环境我们需要增加安全认证机制KeyFile,集群之间的安全认证
注意:三个节点必须要用同一份keyfile,在一台机器生成,拷贝到另外两台,并且修改成 600 的文件权限
生成 keyfile
$ openssl rand -base64 745 > /data/mongoConfig/keys/mongodb-keyfile
设置副本集、仲裁副本
$ mongo 127.0.0.1:27000
// 创建auth用户 (设置keyfile之后需要)
> db.createUser({ user: "admin", pwd: "admin", roles: [{ role: "userAdminAnyDatabase", db: "admin" }] })
// 设置副本集
> db.runCommand({
"replSetInitiate": {
"_id": "datamip",
"members": [
{ "_id": 1, "host": "127.0.0.1:27000" },
{ "_id": 2, "host": "127.0.0.1:27001" }
]
}
})
// 设置仲裁
> db.addArb("127.0.0.1:27002")
// 查看状态 (主、备、仲裁) 的状态
datamip:PRIMARY > rs.status()
在 mongodb.conf 启动配置文件中增加 keyFile 配置项
keyFile=/data/mongoConfig/keys/mon-keyfile
重启服务
注意:关闭服务需要先关闭[从],再关闭[主],最后一个关闭的将是 PRIMARY 主机
$ mongod -f /opt/mongodb/mongodb.conf
keyfiile登录 就相当于开启了 auth登录
$ mongo 127.0.0.1:27000 -u admin -p admin
datamip:PRIMARY > show dbs
默认不可以在 SECOUND 中使用 db命令,需要执行 salveOk 来开放权限
$ mongo 127.0.0.1:27001 -u admin -p admin
datamip:SECONDARY > rs.slaveOk()
datamip:SECONDARY > show dbs