標籤:
? I. 主從複製
• A. 主伺服器:~/work/mongodb-osx-x86_64-2.6.2/bin/mongod --dbpath ./db/ --logpath ./log --logappend --fork --port 27017 --master --oplogSize=64
• B. 從伺服器:./mongod --dbpath ../db/ --logpath ../log/s.log --fork --port 27018 --slave --slavedelay 5 --autoresync --source localhost:27017
• C. 啟動選項
• --master,指定主節點
• --slave,指定從節點
• --fastsync,以主節點的資料快照為基礎啟動從節點,用該選項啟動比做完整同步快很多
• --oplogSize arg,指定主節點oplog的大小(MB)
• --source arg <serverIp:port>,在主節點上指定從節點地址,在從節點上指定主節點地址
• --only arg,在從節點上指定複製特定的資料庫,預設複製所有資料庫
• --slavedelay arg,設定從節點同步主節點資料的延遲時間
• --autoresync,如果主從節點不同步了,則自動重新同步
• D. 動態添加從伺服器
在啟動從節點時可以不用指定主節點地址而是在啟動後在shell裡通過命令動態添加或刪除主節點:
db.sources.insert({‘host‘:‘ip:port‘});
db.sources.remove({‘host‘:‘ip:port‘});
db.sources.find()
• E. 注意:
需要注意的是,主從不能使用同樣的資料目錄和連接埠。mongo也支援一主多從的模式,但從多了同樣會對主造成效能影響。當然mongo也支援雙master的模式,但雙master模式一直存在資料同步延遲造成某一方資料被衝掉的情況,根據情況靈活使用。
? II. 複製集(replica set)
複製集(replica set)能自動的恢複,它能保證在叢集中總有一個活躍節點(primary)可用和一個或多個備份節點(secondary)
• A. 啟動
1. ./mongod --dbpath /data/db1/ --logpath mo1.log --replSet shard1 --port 27017
2. ./mongod --dbpath /data/db2/ --logpath mo2.log --replSet shard1 --port 27018
--replSet指定了複製集名字,通過該選項可以將不同的執行個體放在同一個複製集中。上面添加了兩個執行個體,當然可以添加多個執行個體。啟動複製集但還不可用,需要進行初始化。
• B. 初始化
在shell中串連上面兩個執行個體中的任意一個,敲入如下命令進行初始化:
1. cfg={_id:‘shard1‘,members:[
2. {_id:0,host:‘127.0.0.1:27017‘},
3. {_id:1,host:‘127.0.0.1:27018‘}]
4. }
5. rs.initiate(cfg)
cfg是配置資訊,_id指定了複製集的名字,members指定了複製集中的執行個體。rs.initiate命令進行初始化,它返回初始化是否成功以及相 應資訊。初始化成功之後,shell會顯示你正在使用primary還是secondary,也可以使用rs.status()查看狀態資訊,複製集的配 置資訊儲存在local.system.replset集合中。
登入secondary節點,在正常查詢前需要輸入rs.slaveOK()。
• C. 添加節點
./mongod --dbpath /data/db3/ --logpath mo3.log --replSet shard1 --port 27019
然後登入primary節點,執行如下命令:
1. rs.add(‘127.0.0.1:27019‘)
2. rs.reconfig(rs.conf())
• D. 節點類型
• standard,常規節點,儲存完整的資料備份,參與選舉投票,可能成為活躍節點;
• passive,儲存完整的資料備份,參與選舉投票,不能成為活躍節點;
• arbiter,只參與投票,不儲存資料,不能成為活躍節點。
每個節點有一個priority屬性,範圍是0~1000,預設值是1,它的值決定了該節點是standard還是passive,如果是0則是passive,否則是standard。
standard節點中也根據priority的值從大到小決定誰能成為新的活躍節點,如果多個節點的priority值一樣,則看哪個節點的資料比較新。
在添加節點時,可以設定節點的屬性arbiterOnly為true,則設定改節點為arbiter。
• III. 複製的原理
主節點將操作計入oplog,從節點啟動時複製主節點中的每一個文檔,之後擷取主節點的oplog並執行其中的操作以達到資料同步。oplog儲存在 local.oplog集合中,主從節點都會維護一個syncedTo的屬性,主節點通過db.slaves.find(),從節點通過 db.sources.find()查看,表示從節點上次同步時間,這樣就知道下次該從哪個時間開始做同步了。
mongodb複製(同步)實現