mongo 主从,副本集,分片

副本集

配置
# 做一个叫做 rs0 的副本集,打开三个终端分别执行
# 当然,规范的做法是向 参考blog 中使用的那种 用配置文件配置,并且用fork模式启动
# 不过这里为了方便,就直接在终端跑了,而且方便看日志
mongod --port 27017 --dbpath "/var/db/db1" --replSet rs0
mongod --port 27018 --dbpath "/var/db/db2" --replSet rs0
mongod --port 27019 --dbpath "/var/db/db3" --replSet rs0

我们需要用用mongo客户端初始化rs,这里有两种选择,
一种,是像下面这样,先一个空参数的 rs.initiate(),让后在掉两次 rs.add(“xxx”)
另一种,像其他参考中的blog 那样,rs.initiate(config), 后面就不用再add 了

# 假定 27017 这台是 master 
mongo 127.0.0.1:27017
> rs.initiate()

// 上句执行完, 除打印出正常的返回信息外, 指示符会改变
rs0:PRIMARY>
// 查看 rs 的状态
rs0:PRIMARY> rs.conf() // 同 rs.config()
rs0:PRIMARY> rs.status()

rs0:PRIMARY> rs.add("127.0.0.1:27018")
rs0:PRIMARY> rs.add("127.0.0.1:27019")
验证PRIMARY 写的数据, SECONDARY可以读到

此时 PRIMARY 可以写数据

rs0:PRIMARY> use playground
rs0:PRIMARY> db.number.insert({n:1})

如果连到27018

mongo 127.0.0.1:27017
// 注意,提示符显示 SECONDARY
rs0:SECONDARY> show dbs
admin       (empty)
local       2.077GB
playground  0.078GB
// 可以看到新建的数据库
rs0:SECONDARY> use playground
switched to db playground
// 但是没有read 权限
rs0:SECONDARY> db.number.find()
error: { "$err" : "not master and slaveOk=false", "code" : 13435 }
// 需用使用setslaveOk()
rs0:SECONDARY> db.getMongo().setSlaveOk()
rs0:SECONDARY> db.number.find()
{ "_id" : ObjectId("5bbb768358d0430871e84098"), "n" : 1 }
验证 PRIMARY 宕机后,SECONDARY之一会成为PRIMARY

ctrl+c 关掉 PRIMARY 的终端
mongo 连到 SECONDARY 之一中输入 rs.status(),看到有一台已经变到PRIMARY
连到这台PRIMARY , 可以写数据
此时,如果当掉的机器恢复,则恢复的机器为SECONDARY

参考:

菜鸟教程-副本集
菜鸟教程-分片

mongodb系列之–mongodb 主从配置与说明
mongodb系列之—副本集配置与说明
Mongodb系列之–mongodb的启动与关闭
mongodb系列之–分片的原理与配置

高可用mongodb集群的学习记录(一安装配置MongoDB)
高可用mongodb集群的学习记录(二mongodb主从配置)
高可用mongodb集群的学习记录(三搭建mongodb副本集)
高可用mongodb集群的学习记录(四mongodb分片集群搭建)

MongoDb用户权限控制
这篇有讲key配置,但是好像没啥用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值