Mongodb从0到1系列五: 主从复制

Mongodb从0到1系列一:下载、安装、启动、停止

Mongodb从0到1系列二:数据库与集合操作文档、增删改查

Mongodb从0到1系列三: 条件查询、大小写

Mongodb从0到1系列四: Limit与Skip方法、排序、索引


10 主从复制

主从复制类似于DB2中的HADR,一个主机,一个备机,两者存放相同的数据库内容,主机的内容的修改会被同步到备机,备机只读。

两台机器,hostname分别是db2a和db2b,现用db2a作Master, db2b做slave
Master IP地址 192.168.37.1 (db2a)
Slave IP地址 192.168.37.3 (db2b)

db2a拷贝相应的介质到db2b上:
db2a:~ # scp mongodb-linux-x86_64-enterprise-suse11-3.4.6.tgz 192.168.37.3:/root

db2b为初始化mongodb做准备:
db2b:~ # tar -zxvf mongodb-linux-x86_64-enterprise-suse11-3.4.6.tgz
db2b:~ # echo "export PATH=/root/mongodb-linux-x86_64-enterprise-suse11-3.4.6/bin/:$PATH" >> /etc/profile
db2b:~ # source /etc/profile
db2b:~ # mkdir -p /data/db

首先在db2a上使用db.shutdownServer()停止mongodb服务,然后开启mongodb服务的时候,指定--master选项:

db2a:~ # mongod --master

新开一mongo shell:
> db.getMongo().setSlaveOk
function (value) {
    if (value == undefined)
        value = true;
    this.slaveOk = value;
}

在db2b上开启mongodb服务的时候要指定--slave和--source
db2b:~ # mongod --slave --source=192.168.37.1:27017

新开一mongo shell:
db2b:~ # mongo
> use test1
switched to db test1
> db.student.find()
Error: error: {
        "ok" : 0,
        "errmsg" : "not master and slaveOk=false",
        "code" : 13435,
        "codeName" : "NotMasterNoSlaveOk"
}
> rs.slaveOk()
> show collections
student
teacher
> db.student.find({},{"_id":0})
{ "name" : "Zhaoliu", "age" : 25, "course" : "Chinese" }
{ "name" : "Zhangsan", "age" : 22, "course" : "Chinese" }
{ "name" : "Lisi", "age" : 23, "course" : "computer" }
{ "name" : "Liuneng", "age" : 26, "course" : "English" }
{ "name" : "Wangwu", "age" : 24, "course" : "Chinese" }
> db.student.insert({name:'Xieguangkun',age:42,course:'Art'})
WriteResult({ "writeError" : { "code" : 10107, "errmsg" : "not master" } })
> use test2
switched to db test2
> show collections
STUDENT
Student
student

可以看到,slave只能读取,不能写入

在db2a上新添加一个文档,可以在db2b上同步
db2a上:
> db.student.insert({name:'Xieguangkun',age:42,course:'Art'})
WriteResult({ "nInserted" : 1 })

db2b上:
> db.student.find({},{"_id":0})
{ "name" : "Zhaoliu", "age" : 25, "course" : "Chinese" }
{ "name" : "Zhangsan", "age" : 22, "course" : "Chinese" }
{ "name" : "Lisi", "age" : 23, "course" : "computer" }
{ "name" : "Liuneng", "age" : 26, "course" : "English" }
{ "name" : "Wangwu", "age" : 24, "course" : "Chinese" }
{ "name" : "Xieguangkun", "age" : 42, "course" : "Art" }

这里需要注意一点:将slave停掉之后,再按照正常模式是可以启动的,可以进行增、删改操作。再次以slave模式启动后,删除的记录不会再次从主机拷贝过来, 增加的条目也不会被删掉。

master-slave架构。没有自动故障转移功能,需要指定master和slave端


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值