hgfre 发表于 2016-11-18 12:49:30

mongoDB配置主从同步

官方网站:
http://www.mongodb.org/

MongoDB 安裝,主从配置

一 MongoDB 安装

[*]# wget http://fastdl.mongodb.org/linux/mongodb-linux-x86_64-2.0.0.tgz


[*]# tar xzvf mongodb-linux-x86_64-2.0.0.tgz


[*]# mv mongodb-linux-x86_64-2.0.0 /usr/local/mongodb


[*]

[*]# mkdir /usr/local/mongodb/data


[*]# touch /usr/local/mongodb/logs


[*]

[*]# /usr/local/mongodb/bin/mongod --dbpath=/usr/local/mongodb/data --logpath=/usr/local/mongodb/logs --logappend --port=27017 --fork


[*]

[*]

[*]

[*]#./mongo


[*]MongoDB shell version: 2.0.0


[*]connecting to:test


[*]> use test;


[*]switched to db test


[*]> exit


[*]bye


[*]

[*]

[*]# netstat -anlpt | grep mongo


[*]tcp 0 0 0.0.0.0:27017 0.0.0.0:* LISTEN 11504/mongod


[*]tcp 0 0 0.0.0.0:28017 0.0.0.0:* LISTEN 11504/mongod


注意:
如果报错
-bash: /usr/local/mongodb/bin/mongod: cannot execute binary file
说明你的服务器和mongodb 的版本不对应, 如果服务器是64位,下载x86_64的mongodb ,如果服务器是32位的, 下载i686的mongodb/


二 MongoDB 主从配置

1)实验环境
主:192.168.0.14
从:192.168.0.64

2)时间同步
两台机器做时间同步
# ntpdate time.windows.com

3)启动服务
master:192.168.0.14
启动命令
/usr/local/mongodb/bin/mongod --master --dbpath=/usr/local/mongodb/data --logpath=/usr/local/mongodb/logs --logappend --port=27017 --fork

slave:192.168.0.64
启动命令
/usr/local/mongodb/bin/mongod --slave --source 192.168.0.14:27017 --dbpath=/usr/local/mongodb/data --logpath=/usr/local/mongodb/logs --logappend --port=27017 --fork


4)测试主从
在主上插入数据
测试1:

[*]测试1:


[*]1 在主库上插入数据


[*]#./mongo


[*]MongoDB shell version: 2.0.0


[*]connecting to:test


[*]> db.foo.save({"id":123456,"name":'lizonggang'})


[*]> db.foo.find({"id":123456})


[*]{ "_id": ObjectId("51c3f4b21399022afd992f39"),"id": 123456,"name":"lizonggang" }


[*]>


[*]

[*]2 在从上查看数据(已有在主上插入的数据,说明主从成功)


[*]#./mongo


[*]MongoDB shell version: 2.0.0


[*]connecting to:test


[*]> db.foo.find({"id":123456})


[*]{ "_id": ObjectId("51c3f4b21399022afd992f39"),"id": 123456,"name":"lizonggang" }


[*]>


测试2:

[*]1 在主库上插入数据


[*]> use elaindb


[*]switched to db elaindb


[*]> db.test.save({title:"This is a test!"})


[*]> db.test.find();


[*]{ "_id": ObjectId("51c3f8f11a90c8da157c7f64"),"title":"This is a test!" }


[*]>


[*]

[*]2 在从库上验证数据


[*]#./mongo


[*]MongoDB shell version: 2.0.0


[*]connecting to:test


[*]> use elaindb


[*]switched to db elaindb


[*]> db.test.find();


[*]{ "_id": ObjectId("51c3f8f11a90c8da157c7f64"),"title":"This is a test!" }


[*]> db.printReplicationInfo();


[*]this is a slave, printing slave replication info.


[*]source: 192.168.0.14:27017


[*]   syncedTo: Fri Jun 21 2013 14:59:10 GMT+0800 (CST)


[*]= 9 secs ago (0hrs)


[*]>


[*]> db.printSlaveReplicationInfo();


[*]source: 192.168.0.14:27017


[*]   syncedTo: Fri Jun 21 2013 14:59:30 GMT+0800 (CST)


[*]= 16 secs ago (0hrs)


[*]>



测试3:

[*]在这个状态下,slave 下是不可以插入数据的


[*]> db.test.save({title:"This is slave test!"})


[*]not master


5) 一些查询状态的语句

1)查询库

[*]> show dbs;


[*]elaindb 0.0625GB


[*]local 0.125GB


[*]test 0.0625GB


2)在从库上查询主库的地址

[*]> use local;


[*]switched to db local


[*]> db.sources.find()


[*]{ "_id": ObjectId("51c3f5dd568d10529950b10d"),"host":"192.168.0.14:27017","source":"main","syncedTo": { "t": 1371797300000,"i": 1 } }


[*]>


3)查看主从复制状态

[*]> db.printReplicationInfo();


[*]configured oplog size: 47.6837158203125MB


[*]log length start to end: 1375secs (0.38hrs)


[*]oplog first event time: Fri Jun 21 2013 14:30:35 GMT+0800 (CST)


[*]oplog last event time: Fri Jun 21 2013 14:53:30 GMT+0800 (CST)


[*]now: Fri Jun 21 2013 14:53:32 GMT+0800 (CST)


[*]>


4)查看Collection状态

[*]> db.printCollectionStats();


[*]foo


[*]{


[*]"ns":"test.foo",


[*]"count": 1,


[*]"size": 56,


[*]"avgObjSize": 56,


[*]"storageSize": 4096,


[*]"numExtents": 1,


[*]"nindexes": 1,


[*]"lastExtentSize": 4096,


[*]"paddingFactor": 1,


[*]"flags": 1,


[*]"totalIndexSize": 8176,


[*]"indexSizes": {


[*]"_id_": 8176


[*]    },


[*]"ok": 1


[*]}


[*]---


[*]system.indexes


[*]{


[*]"ns":"test.system.indexes",


[*]"count": 1,


[*]"size": 64,


[*]"avgObjSize": 64,


[*]"storageSize": 4096,


[*]"numExtents": 1,


[*]"nindexes": 0,


[*]"lastExtentSize": 4096,


[*]"paddingFactor": 1,


[*]"flags": 0,


[*]"totalIndexSize": 0,


[*]"indexSizes": {


[*]

[*]    },


[*]"ok": 1


[*]}


[*]---


[*]>



6)应急
如果在应用中主挂掉了怎么办?
这个情况就需要,停止从库, 把从库以主库的启动命令起来就可以了。

1)停掉从库

kill -9 进程号

2)删除locat下文件


[*]rm mongodb/db/locat.*-rf


3)启动从库


[*]/usr/local/mongodb/bin/mongod --master --dbpath=/usr/local/mongodb/data --logpath=/usr/local/mongodb/logs --logappend --port=27017 --fork


7) MongoDB 增,删,改,查


[*]#./mongo


[*]MongoDB shell version: 2.0.0


[*]connecting to:test


[*]> db.test.insert({"Name":"ymind","age": 8 }); #在test数据库里插入数据


[*]>


[*]> db.test.find({"Name":"ymind" } ); #查询数据


[*]{ "_id": ObjectId("51c4187090db4e4751a3cd05"),"Name":"ymind","age": 8 }


[*]> db.test.find({"age": 8} ); #查询数据


[*]{ "_id": ObjectId("51c4187090db4e4751a3cd05"),"Name":"ymind","age": 8 }


[*]>


[*]>


[*]> db.test.update({"Name":"ymind"}, { "$set": { "age":"5" } } ); #修改数据


[*]> db.test.find({"Name":"ymind" } );


[*]{ "Name":"ymind","_id": ObjectId("51c4187090db4e4751a3cd05"),"age":"5" }


[*]>


[*]> db.test.remove({"Name":"ymind" } ); #删除数据


[*]> db.test.find({"Name":"ymind" } );


[*]>


[*]>


页: [1]
查看完整版本: mongoDB配置主从同步