mongo 主从,副本集,分片

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/harryhare/article/details/82975131

副本集

配置

# 做一个叫做 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配置,但是好像没啥用

猜你喜欢

转载自blog.csdn.net/harryhare/article/details/82975131