MongoDB的主從切換(優秀)

來源:互聯網
上載者:User
             原創作品,允許轉載,轉載時請務必以超連結形式標明文章 原始出處 、作者資訊和本聲明。否則將追究法律責任。 http://elain.blog.51cto.com/3339379/760266

主從同步:

md01    10.0.0.11        master
md02    10.0.0.12        slave
md03    10.0.0.14        slave

#建立資料庫目錄

 mkdir -p /elain/apps/mongodb/  mkdir -p /elain/data/mongodb/db/  mkdir -p /elain/logs/mongodb/  

註:  
1、不需要像mysql一樣複製完整資料過去,叢庫啟動會制動複製主庫完整資料。
2、叢庫自動設定為唯讀。
3、mongodb第一次啟動時間較長,需要注意等待。
4、管理命令多數都要在admin庫中執行 use admin

相關參數:./mongod --help
--autoresync 當發現從伺服器的資料不是最新時,開始從主伺服器請求同步資料
--slavedelay 同步延遲,單位:秒

主-從
作為主伺服器啟動

 /elain/apps/mongodb/bin/mongod --fork --master --oplogSize=4096 --port 27001 --dbpath /elain/data/mongodb/db --logpath /elain/logs/mongodb/mongodb.log  

作為從伺服器啟動,並指明主伺服器地址。--autoresync為強制從主伺服器同步全部資料

 /elain/apps/mongodb/bin/mongod --fork --slave --source 10.0.0.11:27001 --port 27001 --dbpath /elain/data/mongodb/db --logpath /elain/logs/mongodb/mongodb.log   

註:可以在啟動從時加以下常用參數
--slavedelay 10      #延時複製 單位為秒
--autoresync         #自動重新同步
--only               #複製指定的資料庫,預設複製所有的庫
--oplogSize          #主節點的oplog日誌大小,單位為M,建議設大點(更改oplog大小時,只需停主庫,刪除local.*,然後加--oplogSize=* 重新啟動即可,*代表大小)

如果發現主從不同步,從上手動同步

 db.runCommand({"resync":1})  

狀態查詢

 db.runCommand({"isMaster":1})   

#主還是從

在叢庫上查詢主庫地址

 > use local;  switched to db local  > db.sources.find();  { "_id" : ObjectId("4e9105515d704346c8796407"), "host" : "10.0.0.11:27001", "source" : "main", "syncedTo" : { "t" : 1318155992000, "i" : 1 } }  

#查看各Collection狀態

 db.printCollectionStats();  

#查看主從複製狀態

 db.printReplicationInfo();  

測試主從
在主伺服器建立資料庫

 mongo --port 27001  >show dbs  >use elaindb  >db.blog.save({title:"new article"})  

在從伺服器上查看同步資料

 mongo --port 27001  

#在從庫插入資料的操作 會提示 not master

 > use elaindb;  switched to db elaindb  > db.blog.find();  { "_id" : ObjectId("4e9174b48443c8ef12b30c56"), "title" : "new article" }  

#查看主從同步資訊:

 > db.printReplicationInfo();  this is a slave, printing slave replication info.  source:   10.0.0.11:27001           syncedTo: Sun Oct 09 2011 18:37:12 GMT+0800 (CST)                   = 19 secs ago (0.01hrs)  
 >db.printSlaveReplicationInfo();  

#此為同步過來的資料,測試成功

附加:

添加及刪除源:
啟動從節點時可以用--source指定主節點,也可以在shell中配置這個源,

啟動一個從,連接埠為27002

 /elain/apps/mongodb/bin/mongod --fork --slave  --port 27002 --dbpath /elain/data/mongodb/testdb --logpath /elain/logs/mongodb/mongodb.log  

登入:

 mongo --port 27002    [root@md03 ~]# mongo --port 27002  MongoDB shell version: 2.0.0  connecting to: 127.0.0.1:27002/test  > show dbs  local   (empty)  

添加到從節點上

 >use local  >db.sources.insert({"host": "10.0.0.11:27001"});  

#查看顯示正在同步

 > db.sources.find();  { "_id" : ObjectId("4e9111e1c29bbd9b9cd31d4e"), "host" : "10.0.0.11:27001", "source" : "main", "syncedTo" : { "t" : 1318156782000, "i" : 246 }, "dbsNextPass" : { "testdb" : true, "testdb1" : true } }  

#同步完成後

 > db.sources.find();  { "_id" : ObjectId("4e9111e1c29bbd9b9cd31d4e"), "host" : "10.0.0.11:27001", "source" : "main", "syncedTo" : { "t" : 1318156782000, "i" : 256 } }  

更改源:(假設10.0.0.12也為主庫)

 db.sources.insert({"host": "10.0.0.12:27001"});  db.sources.remove({"host": "10.0.0.11:27001"});  

若複製中使用了認證,需在local庫中添加repl使用者來複製

 >user local;  > db.addUser("repl", "elain123");  


附錄一、Slave 頂替 Master
如果主伺服器 10.0.0.11 宕機了,
此時需要用 10.0.0.12 機器來頂替 master 服務,

步驟如下:
#停止 10.0.0.12 進程(mongod)

 kill -2 `ps -ef|grep mongod|grep -v grep|awk '{print $2}'`  

#刪除 10.0.0.12 資料目錄中的 local.*

 rm -rf /elain/data/mongodb/db/local.*  

#以--master 模式啟動 10.0.0.12

 /elain/apps/mongodb/bin/mongod --fork --master --oplogSize=4096 --port 27001 --dbpath /elain/data/mongodb/db --logpath /elain/logs/mongodb/mongodb.log  

附錄二、切換 Master/Slave 角色
切換主庫10.0.0.11和從庫10.0.0.12的角色

步驟如下:(命令略)

用 fsync 命令暫停 主庫 上的寫操作,
關閉 從庫 上的服務
清空 從庫 上的 local.*檔案
用-master 選項重啟 從庫 服務
在 從庫 上執行一次寫操作,初始化 oplog,獲得一個同步起始點
關閉 從庫 服務,此時 從庫 已經有了新的 local.*檔案
關閉 主庫 服務,並且用 從庫 上新的 local.*檔案來代替 主庫 上的 local.*檔案(建議先壓縮再COPY)
用-master 選項重啟 從庫 服務
在啟動slave的選項上加一個-fastsync 選項來重啟 主庫 服務
 

轉載請註明: 轉載自http://www.elain.org

本文連結地址:MongoDB實戰系列之三:MongoDB的主從部署

 

本文出自 “elain的技術部落格” 部落格,請務必保留此出處http://elain.blog.51cto.com/3339379/760266

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.