首页 > 数据库技术 > 详细

MongoDB笔记02——副本集

时间:2020-04-18 22:14:50      阅读:93      评论:0      收藏:0      [点我收藏+]

MongoDB副本集配置

一、安装MongoDB

部署说明:三台机器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节点同步数据。主要用于处理误删除数据马上同步到从节点导致的不一致问题。

四、相关参考

MongoDB笔记02——副本集

原文:https://www.cnblogs.com/huligong1234/p/12727691.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!