文章目錄
- 1.設定主節點(ip:10.0.0.1)
-
- 2.設定從節點(ip:10.0.0.2)
-
- 3.通過向sources集合添加主節點資訊(ip:10.0.0.3)
-
- 4.修改從節點的配置,改為10.0.0.4:27037為源,則可以用insert和remove來完成
1.主從複製
主從複製是MongoDB最常用的複製方式。可用於備份、故障恢複、讀擴充等。
最基本的設定方式就是建立一個主節點和一個或者多個從節點,每個從節點要知道主節點的地址 。
2.選項
--only:在從節點上指定只複製特定某個資料庫(預設複製所有資料庫)。
--slavedelay:用在從節點,當應用主節點的操作時增加延時(單位為秒)。
--fastsync:以從節點的資料快照為基礎啟動從節點。(簡單來說以前是主節點的備份,現在從新啟動,就會在原來資料的基礎上啟動,不會重新同步一次主節點的所有資料)。
--autoresync:如果從節點與主節點不同步了,則自動重新同步。
--oplogSize:主節點oplog的大小(單位是MB)。
註:主節點的操作記錄稱為oplog。oplog儲存在一個特殊的資料庫中,叫做local。oplog只記錄改變資料庫狀態的操作,如查詢操作就不會儲存。
3.命令 1.設定主節點(ip:10.0.0.1)Sql代碼
- hww@ubuntu:~$ mkdir -p ~/dbs/master
- hww@ubuntu:~$ mongod -dbpath ~/dbs/master -prot 27037 -master
2.設定從節點(ip:10.0.0.2)Java代碼
- hww@ubuntu:~$ mkdir -p ~/dbs/slave
- hww@ubuntu:~$ mongod -dbpath ~/dbs/slave -port 27037 -slave -source 10.0.0.1:27037
3.通過向sources集合添加主節點資訊(ip:10.0.0.3)Java代碼
- hww@ubuntu:~$ mkdir -p ~/dbs/slave
- hww@ubuntu:~$ mongod -dbpath ~/dbs/slave -port 27037 -slave
向sources集合添加主節點資訊:
Java代碼
- > use local
- switched to db local
- > db.sources.insert({"host":"10.0.0.1:27037"})
查詢文檔是否插入成功:
Java代碼
- > db.sources.find()
- {
- "_id" : ObjectId("4edd829376484aaedee08dae"),
- "host" : "10.0.0.1:27037", "source" : "main"
- }
4.修改從節點的配置,改為10.0.0.4:27037為源,則可以用insert和remove來完成Java代碼
- > db.sources.insert({"host":"10.0.0.4:27037"})
- > db.sources.remove({"host":"10.0.0.1:27037"})
mongodb文檔
資料庫提供了主從複製模式,其實mongodb的主從複製配置很簡單,就是啟動mongod服務進程的時候 分別指定 --master ,--slave,一個是以主模式啟動,另一個屬於從模式啟動,當主庫更新時,資料就會被被複製到從資料庫中。此次測試僅在單台
伺服器上開啟2deamon來類比2台伺服器進行主從複製:主庫:./mongod --master --dbpath=/opt/monogdata/data --port=60000從庫:./mongod --slave --dbpath=/opt/monogdata/slavedata/ --port=60010 --source=127.0.0.1:60000
--主庫:[monogdb@yangDB bin]$ ./mongo --port 60000MongoDB shell version: 1.8.3-rc0connecting to: 127.0.0.1:60000/test> show dbsadmin (empty)local 1.203125GBtest 0.203125GB> use testswitched to db test> show collections --
查看主庫中的對象。system.indexes
--system.indexes用來存放索引的表test
--一個測試表
--查看test表中的內容>
db.test.find(); --此操作=select * from test;{ "_id" : ObjectId("4e3fe5d8e138232e61000000"), "id" : 1, "val" : "hello monogdb" }
--向test表中插入資料> db.test.insert({id:2,val:"yangql is learing monogdb master slave!"});> db.test.find(); { "_id" : ObjectId("4e3fe5d8e138232e61000000"), "id" : 1, "val" : "hello monogdb" }{ "_id" : ObjectId("4e45291c018d1a0d765a9788"), "id" : 2, "val" : "yangql is learing monogdb master slave!" }
--備庫[monogdb@yangDB bin]$ ./mongo --port=60010MongoDB shell version: 1.8.3-rc0connecting to: 127.0.0.1:60010/test> dbtest> db.printSlaveReplicationInfo(); ---顯示主庫的資訊。source: 127.0.0.1:60000 syncedTo: Fri Aug 12 2011 21:19:42 GMT+0800 (CST) = 7secs ago (0hrs)> show collectionssystem.indexes
test --主庫的資料已經被複製到從庫了> db.test.find();{ "_id" : ObjectId("4e3fe5d8e138232e61000000"), "id" : 1, "val" : "hello monogdb" }--主庫更新資料後查看從庫。> db.test.find();{ "_id" : ObjectId("4e3fe5d8e138232e61000000"), "id" : 1, "val" : "hello monogdb" }{ "_id" : ObjectId("4e45291c018d1a0d765a9788"), "id" : 2, "val" : "yangql is learing monogdb master slave!" }
--測試在從庫更新資料,但是不成功!> db.test.insert({id:2,val:"yangql is writing things to slave,but it can`t do this!"});
not master> db.test.find(); { "_id" : ObjectId("4e3fe5d8e138232e61000000"), "id" : 1, "val" : "hello monogdb" }{ "_id" : ObjectId("4e45291c018d1a0d765a9788"), "id" : 2, "val" : "yangql is learing monogdb master slave!" }monogdb的主從複製是不能達到主庫當機以後,從庫自動升級到主庫的,而Replica Pairs借用arbiter可以完成主從故障遷移 。