MongoDB實戰系列之三:MongoDB的主從部署

jopen 12年前發布 | 51K 次閱讀 MongoDB NoSQL數據庫

主從同步:

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 選項來重啟 主庫 服務

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!