mongodb複製(同步)實現

來源:互聯網
上載者:User

標籤:

? 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複製(同步)實現

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.