本文整理自网络,侵删。
主从复制可以用来做数据库的备份,故障恢复,读写分离。
本实验使用Mongodb 3.2版本,我们先查看一下mongod的帮助
[root@localhost mongodb]# mongod --help .....省略 Master/slave options (old; use replica sets instead): --master master mode --slave slave mode --source arg when slave: specify master as <server:port> --only arg when slave: specify a single database to replicate --slavedelay arg specify delay (in seconds) to be used when applying master ops to slave --autoresync automatically resync if slave data is stale .....省略
主从复制已经是过期的功能,目前使用副本集代替。主从复制和副本集的区别,可以简单的理解成主从复制不能自动故障转移,副本集中的集群在主节点宕机后,可以使用选举的策略选择一个新的主节点出来。实现自动的故障转移。
从节点可以是一个,也可以是多个。
下面我们在一台机器上,使用两个实例的方式实现主从复制。
建立数据库目录
[root@localhost data]# mkdir -p /application/mongodb/data/{master,slave}
2. 启动master实例
[root@localhost data]# mongod --dbpath=/application/mongodb/data/master/ --port 27017 --master
--master 指定该实例是主服务器 。
3. 启动从实例
[root@localhost ~]# mongod --dbpath=/application/mongodb/data/slave/ --port 27018 --slave --source 127.0.0.1:27017
--slave 指定该实例为从服务器
--source 指定主服务器是谁?
从服务器启动后,即不断的想主服务器请求同步数据
2016-01-16T10:30:10.208+0800 I REPL [replslave] syncing from host:127.0.0.1:27017 2016-01-16T10:30:11.210+0800 I REPL [replslave] syncing from host:127.0.0.1:27017 2016-01-16T10:30:12.211+0800 I REPL [replslave] syncing from host:127.0.0.1:27017 2016-01-16T10:30:14.196+0800 I REPL [replslave] syncing from host:127.0.0.1:27017 2016-01-16T10:30:15.197+0800 I REPL [replslave] syncing from host:127.0.0.1:27017 2016-01-16T10:30:16.199+0800 I REPL [replslave] syncing from host:127.0.0.1:27017 2016-01-16T10:30:17.202+0800 I REPL [replslave] syncing from host:127.0.0.1:27017 2016-01-16T10:30:18.204+0800 I REPL [replslave] syncing from host:127.0.0.1:27017 2016-01-16T10:30:19.207+0800 I REPL [replslave] syncing from host:127.0.0.1:27017 2016-01-16T10:30:20.209+0800 I REPL [replslave] syncing from host:127.0.0.1:27017
至此,主从复制已经配置完成,就是这么的简单。
对于从服务器,还有三个参数需要解释一下。
--only arg
从节点指定只复制某个特定的数据库(默认复制所有数据库)
--slavedelay arg
指定从服务器延迟多久时间再同步,此选项在主服务器发生人为操作失误时,比较有用。发现错误时,从服务器还没有同步错误。这样可以避免错误的发生。
--autoresync
如果从节点的数据与主节点发生断裂(某些oplog中的数据还未被同步,即被覆盖了),那么该选项将是从节点自动的从新从头开始同步数据库。
下面我们验证一下,数据的同步是否有效。
在主库中插入数据。
[root@localhost ~]# mongo 127.0.0.1:27017 MongoDB shell version: 3.2.1 connecting to: 127.0.0.1:27017/test > db.user.insert({"name":"jack","age":40,"job":"moive star"}) WriteResult({ "nInserted" : 1 }) > db.user.insert({"name":"vicent","age":25,"job":"teacher"}) WriteResult({ "nInserted" : 1 })
登录从数据库,检查数据是否同步
[root@localhost ~]# mongo 127.0.0.1:27018 MongoDB shell version: 3.2.1 connecting to: 127.0.0.1:27018/test > > db.user.find() { "_id" : ObjectId("5699af720102a61caffb76e8"), "name" : "jack", "age" : 40, "job" : "moive star" } { "_id" : ObjectId("5699af920102a61caffb76e9"), "name" : "vicent", "age" : 25, "job" : "teacher" }
可以看到数据已经同步啦~
相关阅读 >>
更多相关阅读请进入《mongodb》频道 >>

数据库系统概念 第6版
本书主要讲述了数据模型、基于对象的数据库和XML、数据存储和查询、事务管理、体系结构等方面的内容。