MongoDB Replica Set(副本集)三节点(2+1)配置

官方文档:https://docs.mongodb.com/manual/replication/

安装配置

安装MongoDB 3.6.9

$ echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.6 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.6.list
$ sudo apt-get update
$ sudo apt-get install mongodb-org

添加配置

$ sudo vi /etc/mongo.conf
replication:
  oplogSizeMB: 2048
  replSetName: rs0

启动数据库

$ mongod -f /etc/mongo.conf

添加集群信息

一个主节点,一个从节点,一个仲裁节点

$ mongo
>cfg={ _id:"rs0", members:[ {_id:0,host:'192.168.56.100:27017',priority:2}, {_id:1,host:'192.168.56.101:27017',priority:1}, {_id:2,host:'192.168.56.102:27017',arbiterOnly:true}] };
>rs.initiate(cfg)

主节点权重稍微提高一点
初始化完成后,从节点自动同步主节点的所有数据

设置从节点可读

避免每次使用mongo client登录都需要设置,这里直接配置文件

$ vi ~/.mongorc.js
rs.slaveOk();

KeyFile权限配置

集群内部访问通过KeyFile
生成keyfile, MongoDb支持6~1024长度,文件权限需要修改为600

openssl rand -base64 567 > /var/lib/mongodb/keyfile
chmod 600 /var/lib/mongodb/keyfile

添加配置文件

security:
    authorization: enabled
    clusterAuthMode: keyFile
    keyFile: /var/lib/mongodb/keyfile

MongoDB副本集-失效备援后的回滚

当主节点挂掉后,从节点升级为主节点承载读写操作,这时可能会存在没有同步到从节点的写操作。
当老主节点恢复后,会废弃掉这些操作,并在dbPath目录下产生一个rollback/目录,存储这部分操作为bson文件,可人工用bsondump/mongorestore等方式导入主节点

如何避免,参考MongoDb Write Concern: https://docs.mongodb.com/manual/core/replica-set-write-concern/

注:如果只有一个mongodb存活,则降级为secondary,不可写

主从切换

Spring boot 连接mongoDB副本集配置多节点地址

spring.data.mongodb.uri=mongodb://host1:port2,host2:port2/million?replcaSet=_rsName_

可能会产生connector切换,如果副本集配置的members host是内网地址,则要求driver也在内网,否则切换不成功,报connect timeout错误。(估计connector切换是读取的mongo副本集配置,而不是读取driver配置的地址)

外网调试,则直接连接主节点的外网地址

命令参考

降级

rs.stepDown()

添加成员

rs.add({host:"localhost:27017"})
// 添加arbiter
rs.add({host:"localhost:27017",arbiterOnly:true})
// 或者
rs.addArb({host:"localhost:27017"})

移除成员

rs.remove({host:"localhost:27017"})

修改优先级

var config=rs.config()
config.members[2].priority=2
rs.reconfig(config)

更多信息

隐藏节点,延迟节点等

你可能感兴趣的:(MongoDB Replica Set(副本集)三节点(2+1)配置)