mongodb安装,请参考mongodb2.6安装篇
主从集群
mongodb支持在多个机器中通过异步复制达到故障转移和实现冗余。
多机器中同一时刻只有一台用于写操作,正是由于这个情况,mongodb提供了数据一致性的保障,担当primary角色的机器能把读操作分发给slave。
mongodb的主从集群分为两种:
master-slave复制(主从)
replica Sets复制(副本集)
master-slave复制(主从)
只需要在某一个服务启动加上--master参数,而另一个服务加上--slave与--source参数,即可实现同步。mongodb的最新版本已经不推荐使用这种方法了。
一下2张图片来自互联网!!!
1:主――>从
主
2:从从从
这里我使用一台服务器做mongodb主从服务器,规划示例如下:
master主port:20001 slave从port:20002
创建master、slave目录
[root@localhost opt]# mkdir master slave [root@localhost opt]# ll total 8 drwxr-xr-x 2 root root 4096 Dec 14 04:57 master drwxr-xr-x 2 root root 4096 Dec 14 04:57 slave [root@localhost opt]# mkdir log [root@localhost opt]# pwd /opt
启动mongodb-master
[root@localhost opt]# mongod --master --dbpath=/opt/master/ --logpath=/opt/log/master.log --logappend --fork --port 20001 about to fork child process, waiting until server is ready for connections. forked process: 1397 child process started successfully, parent exiting [root@localhost opt]# netstat -ntpl|grep 2000 tcp 0 0 0.0.0.0:20001 0.0.0.0:* LISTEN 1397/mongod
启动mongodb-slave
[root@localhost opt]# mongod --slave --source 192.168.33.131:20001 --dbpath=/opt/slavogpath=/opt/log/slave.log --logappend --fork --pe/ --logpath=/opt/log/slave.log --logappend --fork --port 20002 about to fork child process, waiting until server is ready for connections. forked process: 1435 child process started successfully, parent exiting [root@localhost opt]# netstat -ntpl|grep 20002 tcp 0 0 0.0.0.0:20002 0.0.0.0:* LISTEN 1435/mongod
mongodb-master登陆
[root@localhost opt]# mongo --port 20001 MongoDB shell version: 2.6.11 connecting to: 127.0.0.1:20001/test > db test > show tables;
插入数据,并查看插入的数据
> db.c1.insert({name:"haha"}) WriteResult({ "nInserted" : 1 }) > db.c1.find() { "_id" : ObjectId("566dde3a9701d2a9501e7c05"), "name" : "haha" } > db.c1.insert({name:"abc"}) WriteResult({ "nInserted" : 1 }) > db.c1.find() { "_id" : ObjectId("566dde3a9701d2a9501e7c05"), "name" : "haha" } { "_id" : ObjectId("566dde919701d2a9501e7c06"), "name" : "abc" } >
mongodb-salve登陆以及查看master同步的数据
[root@localhost ~]# mongo --port 20002 MongoDB shell version: 2.6.11 connecting to: 127.0.0.1:20002/test > db test > show tables; c1 system.indexes > db.c1.find() { "_id" : ObjectId("566dde3a9701d2a9501e7c05"), "name" : "haha" }
因为是slave服务,所以无法插入数据,只能查看数据
> db.c1.insert({name:"abc"}) WriteResult({ "writeError" : { "code" : undefined, "errmsg" : "not master" } }) > db.c1.find() { "_id" : ObjectId("566dde3a9701d2a9501e7c05"), "name" : "haha" } { "_id" : ObjectId("566dde919701d2a9501e7c06"), "name" : "abc" }