多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > php開源 > 綜合技術 > MongoDB: 7. Replication (2)

MongoDB: 7. Replication (2)

來源:程序員人生   發布時間:2013-10-26 20:14:52 閱讀次數:2968次
2. Master/Slave

Master/Slave 是一種典型的備份方案,MongoDB 支持 "One Master Multi Salver" 和 "Multi Master One Slave" 等多種部署方式。

先從簡單的 "鏡像備份" 開始。

$ sudo mkdir -p /var/mongodb/0
$ sudo mkdir -p /var/mongodb/1

$ sudo ./mongod --fork --logpath /dev/null --dbpath /var/mongodb/0 --master
forked process: 1388
all output going to: /dev/null

$ sudo ./mongod --fork --logpath /dev/null --dbpath /var/mongodb/1 --port 27018 --slave --source localhost:27017 --autoresync
forked process: 1401
all output going to: /dev/null
autoresync 參數會在系統發生意外情況造成主從數據不同步時,自動啟動復制操作 (同步復制 10 分鐘內僅執行一次)。除此之外,還可以用 --slavedelay 設定更新頻率(秒)。

使用 isMaster、printReplicationInfo、printSlaveReplicationInfo 等命令獲取相關狀態信息。

$ ./mongo

> db.isMaster()
{ "ismaster" : true, "ok" : 1 }

> db.printReplicationInfo()
configured oplog size: 990MB
log length start to end: 1164secs (0.32hrs)
oplog first event time: Mon Aug 23 2010 12:23:54 GMT+0800 (CST)
oplog last event time: Mon Aug 23 2010 12:43:18 GMT+0800 (CST)
now: Mon Aug 23 2010 12:43:24 GMT+0800 (CST)

$ ./mongo localhost:27018

> db.isMaster()
{ "ismaster" : false, "ok" : 1 }

> db.printSlaveReplicationInfo()
source: localhost:27017
syncedTo: Mon Aug 23 2010 12:43:58 GMT+0800 (CST)
= 10secs ago (0hrs)

> show dbs
admin
local
test

> use local
switched to db local

> show collections
me
pair.sync
sources
system.indexes

> db.sources.find()
{ "_id" : ObjectId("4c71f8178d806ad3f54dd89a"), "host" : "localhost:27017", "source" : "main", "syncedTo" : { "t" : 1282538738000, "i" : 1 }, "localLogTs" : { "t" : 0, "i" : 0 } }
Slave 的配置信息保存在 local.sources 中。

通常我們會使用主從方案實現讀寫分離,但需要設置 Slave_OK。

$ ipython

IPython 0.10 -- An enhanced Interactive Python.

In [1]: from pymongo import *

In [2]: m_conn = Connection()

In [3]: s_conn = Connection(host="localhost:27018", slave_okay=True)

In [4]: m_db = m_conn.test

In [5]: s_db = s_conn.test

# ----------------------------------------- #

In [6]: m_db.users.insert({"name":"user3"})
Out[6]: ObjectId('4c71feb0499b140632000000')

In [7]: s_db.users.find_one({"name":"user3"}) # 數據被復制到 Slave
Out[7]: {u'_id': ObjectId('4c71feb0499b140632000000'), u'name': u'user3'}

In [8]: m_db.users.remove({"name":"user3"}) # 刪除 Master 數據

In [9]: for u in m_db.users.find(): print u
....:
{u'_id': ObjectId('4c71fa4d5e01e1ba6d62398f'), u'name': u'user1'}

In [10]: for u in s_db.users.find(): print u # Slave 記錄被同步刪除
....:
{u'_id': ObjectId('4c71fa4d5e01e1ba6d62398f'), u'name': u'user1'}

# ----------------------------------------- #

In [11]: s_db.users.insert({"name":"userx"}) # 在 Slave 插入數據
Out[11]: ObjectId('4c71ff2c499b140632000001')

In [12]: for u in m_db.users.find(): print u # Master 上無該數據
....:
{u'_id': ObjectId('4c71fa4d5e01e1ba6d62398f'), u'name': u'user1'}

In [13]: for u in s_db.users.find(): print u # Slave 同樣沒有
....:
{u'_id': ObjectId('4c71fa4d5e01e1ba6d62398f'), u'name': u'user1'}

可見 Slave 讀操作正常,但寫無效果。

我們還可以部署 "One Slave Two Master" 方案。

$ sudo mkdir -p /var/mongodb/m1
$ sudo mkdir -p /var/mongodb/m2
$ sudo mkdir -p /var/mongodb/s

$ sudo ./mongod --fork --dbpath /var/mongodb/m1 --logpath /dev/null --master
forked process: 1616
all output going to: /dev/null

$ sudo ./mongod --fork --dbpath /var/mongodb/m2 --logpath /dev/null --port 27018 --master
forked process: 1627
all output going to: /dev/null

$ sudo ./mongod --fork --dbpath /var/mongodb/s --logpath /dev/null --port 27019 --slave
forked process: 1638
all output going to: /dev/null
連接 Slave,添加配置。

$ ./mongo localhost:27019

MongoDB shell version: 1.6.1
connecting to: localhost:27019/test

> use local
switched to db local

> db.sources.insert({host:"localhost:27017"})
> db.sources.insert({host:"localhost:27018"})

> db.printSlaveReplicationInfo()
source: localhost:27017
syncedTo: Mon Aug 23 2010 13:06:03 GMT+0800 (CST)
= 17secs ago (0hrs)
source: localhost:27018
doing initial sync
在兩臺 Master 上添加數據,查看復制效果。

$ ./mongo localhost:27017

MongoDB shell version: 1.6.1
connecting to: localhost:27017/test

> use db1
switched to db db1

> db.users.insert({name:"user1"})
> db.users.insert({name:"user2"})

> db.users.find()
{ "_id" : ObjectId("4c720211ade34e85c5380eab"), "name" : "user1" }
{ "_id" : ObjectId("4c720214ade34e85c5380eac"), "name" : "user2" }

> exit
bye$ ./mongo localhost:27018

MongoDB shell version: 1.6.1
connecting to: localhost:27018/test

> use db2
switched to db db2

> db.blogs.insert({title:"aaa"})
> db.blogs.insert({title:"bbb"})
> db.blogs.insert({title:"ccc"})

> db.blogs.find()
{ "_id" : ObjectId("4c720236f24118cb2f59218d"), "title" : "aaa" }
{ "_id" : ObjectId("4c720239f24118cb2f59218e"), "title" : "bbb" }
{ "_id" : ObjectId("4c72023cf24118cb2f59218f"), "title" : "ccc" }

> exit
bye$ ./mongo localhost:27019

MongoDB shell version: 1.6.1
connecting to: localhost:27019/test

> show dbs
admin
db1
db2
local

> use db1
switched to db db1

> db.users.find()
{ "_id" : ObjectId("4c720211ade34e85c5380eab"), "name" : "user1" }
{ "_id" : ObjectId("4c720214ade34e85c5380eac"), "name" : "user2" }

> use db2
switched to db db2

> db.blogs.find()
{ "_id" : ObjectId("4c720236f24118cb2f59218d"), "title" : "aaa" }
{ "_id" : ObjectId("4c720239f24118cb2f59218e"), "title" : "bbb" }
{ "_id" : ObjectId("4c72023cf24118cb2f59218f"), "title" : "ccc" }
>
一切正常。
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 国产精品成人免费综合 | 日韩免费一区二区三区 | 亚洲小说另类 | 波多野结衣一区免费作品 | 亚洲一区二区三区深夜天堂 | 在线中文字幕视频 | 亚洲国产人成在线观看 | 精品少妇一区二区三区视频 | 欧美一级第一免费高清 | 国产成人一区二区三区视频免费 | 高清欧美一级在线观看 | 国产精品视频第一区二区三区 | 国产欧美综合一区二区 | 92精品国产自产在线观看 | 天天久久综合 | 日本vs欧美一区二区三区 | 成人性a激情免费视频 | 717影院理论午夜伦不卡久久 | 99爱视频99爱在线观看免费 | a毛片在线播放 | 亚洲精品欧美精品日韩精品 | 国亚洲欧美日韩精品 | 欧美日本在线观看 | 午夜dj在线观看免费高清在线 | 精品国产精品a | 亚欧美综合 | 老黄网站在线观看免费 | 欧美亚洲综合另类成人 | 成人国产精品 | 亚洲最大视频网站 | 欧美日韩国产精品自在自线 | jizz老师| 夜夜狠操 | 在线观看视频h | 亚洲三级成人 | 亚洲精品一二三区 | 欧美毛片网站 | 欧美 日韩 亚洲另类专区 | 成人自拍视频在线观看 | 中文字幕在线精品视频入口一区 | 一区二区在线视频免费观看 |