MongoDB主从复制与副本集

MongoDB复制

概念

复制是跨多个服务器数据同步的过程。

复制的特点

  • 保障数据的安全性
  • 数据高可用性
  • 灾难恢复
  • 无需停机维护(如备份,重建索引,压缩)
  • 分布式读取数据(提高读取能力)
    mongodb支持副本集和主从复制,主从复制官方已不再推荐(不支持自动故障切换)。

主从复制(Master-Slave)

主从复制是可用于备份,故障恢复和读扩展等。基本就是搭建一个主节点和一个或多个从节点,在数据库集群中要明确的知道谁是主服务器,主服务器只有一台。从服务器要知道自己的数据源也就是对应的主服务是谁。
运行mongod --master启动主服务器。
运行mongod --slave --source master_address启动从服务器。

调整配置

主要是指定了一下 dbPath 和 log path,master配置如下:

$ cat master.conf
# mongod.conf

# for documentation of all options, see:
#   http://docs.mongodb.org/manual/reference/configuration-options/

# Where and how to store data.
storage:
  dbPath: /home/work/mongo/master
  journal:
    enabled: true
#  engine:
#  mmapv1:
#  wiredTiger:

# where to write logging data.
systemLog:
  destination: file
  logAppend: true
  path: /home/work/mongo/master/mongod.log

# network interfaces
net:
  port: 27017
  bindIp: 127.0.0.1

启动mongo实例

mongod -f master.conf --logappend --master --fork
mongod -f slave-1.conf --logappend --slave --fork --source localhost:27017
mongod -f slave-2.conf --logappend --slave --fork --source localhost:27017

所有的从节点都是从主节点复制信息,目前还不能从节点到从节点复制机制,原因是从节点没有自己的oplog。
一个集群中从节点没有明确的限制,但是多个节点对单点主机发起的查询也是吃不消的,不超过12个节点的集群可以良好运转。

功能测试

在主库中向user集合插入一条数据。

> use test
switched to db test
> db.user.insert({
  'u':'test', 'p':'pwd'})
WriteResult({ "nInserted" : 1 })
> db.user.find()
{ "_id" : ObjectId("59c8d10c836ac6ec4e425fc5"), "u" : "test", "p" : "pwd" }

登录从库,可以看到user集合插入的记录已经同步过来了。

> rs.slaveOk()
> show dbs
admin  0.000GB
local  0.000GB
test   0.000GB
> use test
switched to db test
> show collections;
user
> db.user.find()
{ "_id" : ObjectId("59c8d10c836ac6ec4e425fc5"), "u" : "test", "p" : "pwd" }

其他配置项

  • –only 从节点指定复制某个数据库,默认是复制全部数据库
  • –slavedelay 从节点设置主数据库同步数据的延迟(单位是秒)
  • –fastsync 从节点以主数据库的节点快照为节点启动从数据库
  • –autoresync 从节点如果不同步则从新同步数据库(即选择当通过热添加了一台从服务器之后,从服务器选择是否更新主服务器之间的数据)
  • –o
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值