MongoDB的主從複製和複本集

來源:互聯網
上載者:User

標籤:

mongoDB的兩個特性主從複製和複本集,實現了資料的同步備份

一、主從複製

主從複製是一個簡單的資料庫同步備份的叢集技術.例如主伺服器宕機了,可以直接使用從伺服器,主伺服器恢複後在進行同步,保證了業務的連續性

 

注意點:

  • 主伺服器只有一台
  • 從伺服器需要知道自己的資料來源,也就是對應的主伺服器
  • --master確定主伺服器,--slave和--source來控制從伺服器

1.舉例:

1).主伺服器的連接埠是60000

2).從伺服器的連接埠是60001

如何配置主從複製?

主伺服器的配置:

dbpath = D:\MongoDBMSCopy\Master   主要資料庫地址

port = 60000 主要資料庫連接埠號碼

bind_ip = 127.0.0.1 主要資料庫所在伺服器

master = true 確定我是主伺服器

 

從伺服器的配置

dbpath =  D:\MongoDBMSCopy\Slave 從資料庫地址

port = 60001 從資料庫連接埠號碼

bind_ip = 127.0.0.1 從資料庫所在伺服器

source = 127.0.0.1:60000 確定我資料庫連接埠

slave = true 確定自己是從伺服器

 

設定檔寫好之後,就可以通過命令來啟動主從伺服器了,

如下:

啟動主伺服器

C:\Windows\system32>mongod --config D:\MongoDBMSCopy\Master\Master.conf

啟動從伺服器

C:\Windows\system32>mongod --config D:\MongoDBMSCopy\Slave\slave.conf

 

驗證是否進行了複製

①開啟cmd,串連主伺服器,並建立一個Students資料庫,插入一個文檔名為Students

 

 

查看一下資料

> db.students.find()

{ "_id" : 1, "name" : "BigOrange", "age" : 25 }

②開啟cmd串連從伺服器

 

 如所示,證明已經進行了複製

 

2.主從複製的其他設定項

--only  從節點→指定複製某個資料庫,預設是複製全部資料庫

--slavedelay  從節點→設定主要資料庫同步資料的延遲(單位是秒)

--fastsync 從節點→以主要資料庫的節點快照為節點啟動從資料庫

--autoresync 從節點→如果不同步則從新同步資料庫

--oplogSize  主節點→設定oplog的大小(主節點操作記錄儲存到local的oplog中)

 

3.利用shell動態添加和刪除從節點

在從資料庫中的local資料庫會多一個sources文檔,它儲存著主伺服器的資訊

 

 

如何進行動態添加從節點呢,和正常的添加資料的操作一樣,直接通過insert插入remove刪除

掛接主節點:

db.sources.insert({“host”:”127.0.0.1:60000”})

刪除已經掛接的主節點:

db.sources.remove({“host”:”127.0.0.1:60000”}) 

 

二、複本集

 

第一張圖表明A是活躍的B和C是用於備份的

第二張圖當A出現了故障,這時候叢集根據權重演算法推選出B為活躍的資料庫

第三張圖當A恢複後他自動又會變為備份資料庫

 

例:如何配置一個複本集伺服器叢集

1.假如有上面ABC三台伺服器,如何進行配置呢,同樣需要修改設定檔

對於A伺服器:

dbpath = D:\MongoDBCopy\A\MongoDB_A.conf        #A的配置

port=11111                                       #連接埠號碼

bind_ip=127.0.0.1                                   #IP地址

replSet = child/127.0.0.1:22222                        #設定同伴,這裡是B

 

對於B伺服器:

dbpath = D:\MongoDBCopy\B\MongoDB_B.conf          #A的配置

port=22222                                        #連接埠號碼

bind_ip=127.0.0.1                                    #IP地址

replSet = child/127.0.0.1:33333                        #設定同伴,這裡是C

 

對於C伺服器:

dbpath = D:\MongoDBCopy\C\MongoDB_C.conf          #A的配置

port=33333                                        #連接埠號碼

bind_ip=127.0.0.1                                    #IP地址

replSet = child/127.0.0.1:11111                        #設定同伴,這裡是A

 

2.初始化複本集

使用shell進入一台伺服器,然後設定初始化複本集

 use admin db.runCommand({"replSetInitiate":
{ "_id":‘child‘, "members":[{ "_id":1, "host":"127.0.0.1:11111" },{ "_id":2, "host":"127.0.0.1:22222" },{ "_id":3, "host":"127.0.0.1:33333" }] }
})

哪個節點成為活躍節點,這時候是隨機的,如果想要更準確的設定,需要設定權重

 

3.查看複本集狀態

rs.status()

可以看到,連接埠為11111的伺服器被選擇為活躍伺服器

注意:

備份點不能進行查詢操作的,只有活躍點才能進行查詢操作

 

①在活躍伺服器上添加一個資料庫並添加一個文檔

child:PRIMARY> show dbs

admin  (empty)

local  4.076GB

child:PRIMARY> use Students

switched to db Students

child:PRIMARY> db.student.insert({name:"BigOrange",age:25})

WriteResult({ "nInserted" : 1 })

child:PRIMARY> db.student.find()

{ "_id" : ObjectId("56fa6b9159b5751566c1c37f"), "name" : "BigOrange", "age" : 25

 }

child:PRIMARY>

 

②切換到其中一個備份伺服器,發現不能進行查詢

C:\Windows\system32>mongo 127.0.0.1:22222/test

MongoDB shell version: 2.6.5

connecting to: 127.0.0.1:22222/test

child:SECONDARY> show dbs

Students  0.078GB

admin     (empty)

local     2.077GB

child:SECONDARY> use Students

switched to db Students

child:SECONDARY> show collections

2016-03-29T19:50:09.064+0800 error: { "$err" : "not master and slaveOk=false", "

code" : 13435 } at src/mongo/shell/query.js:131

child:SECONDARY> db.student.find()

error: { "$err" : "not master and slaveOk=false", "code" : 13435 }

child:SECONDARY>

 

補充:

節點和初始化進階參數

     standard 常規節點:參與投票有可能成為活躍節點

     passive 副本節點:參與投票,但是不能成為活躍節點

     arbiter 仲裁節點:只是參與投票不複製節點也不能成為活躍節點

 

進階參數

Priority  0到1000之間 ,0代表是副本節點 ,1到1000是常規節點

arbiterOnly : true 仲裁節點

 

用法

把上面A設定為仲裁節點

其他的不變,在初始化的時候,寫成如下

use admindb.runCommand({"replSetInitiate":{       "_id":‘child‘,       "members":[{        "_id":1,        "host":"127.0.0.1:11111",        arbiterOnly : true    },{        "_id":2,        "host":"127.0.0.1:22222",    },{        "_id":3,        "host":"127.0.0.1:33333"    }]  }})

 

其他使用可以參考如下

http://blog.itpub.net/29254281/viewspace-1176553/

4.讀寫分離操作→擴充讀

設定讀寫分離

          slaveOkay :  true

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.