Replica Sets
MongoDB 支持在多個機器中經過異步複製達到故障轉移和實現冗餘。多機器中同一時刻只 有一臺是用於寫操做。正是因爲這個狀況,爲 MongoDB 提供了數據一致性的保障。擔當
Primary 角色的機器能把讀操做分發給 slave。
Replica Sets的結構很是相似一個集羣。因 爲它確實跟集羣實現的做用是同樣的, 其中一個節點若是出現故障, 其它節點立刻會將業務接過來而無須停機操做。
下面以本機爲例介紹一下集羣的部署過程,以及部署過程當中常見的注意點及錯誤
本例環境是Linux操做系統,mongodb版本:mongodb-linux-x86_64-2.6.1.tgz,Vmwre虛擬機,虛擬機IP:192.168.169.129,集羣以本機不一樣端口模擬三臺服務器。
1.集羣主要分爲三個節點master主節點,slaver備用節點,arbiter仲裁節點
創建數據文件夾
mkdir -p /mongodb/data/master
mkdir -p /mongodb/data/slaver
mkdir -p /mongodb/data/arbiter
ps:三個目錄分別對應主,備,仲裁節點
2.創建配置文件夾
1)master.conf
打開編輯器:
dbpath=/home/mongodb/data/master
logpath=/home/mongodb/log/master.log
logappend=true
replSet=rep1
port=10000
fork=true
journal=true
完成以後按esc 》》 : >>wq>>回車mongodb
2)slaver.conf
編輯器打開和保存按上邊的步驟,下邊只寫詳細內容
dbpath=/home/mongodb/data/slaver
logpath=/home/mongodb/log/slaver.log
logappend=true
replSet=rep1
port=10001
fork=true
journal=true
3)arbiter.conf數據庫
dbpath=/home/mongodb/data/arbiter
logpath=/home/mongodb/log/arbiter.log
logappend=true
replSet=rep1
port=10002
fork=true
journal=true
smallfiles=true
參數解釋:服務器
dbpath:數據存放目錄app
logpath:日誌存放路徑異步
logappend:以追加的方式記錄日誌編輯器
replSet:replica set的名字spa
port:mongodb進程所使用的端口號,默認爲27017操作系統
fork:之後臺方式運行進程日誌
journal:寫日誌
smallfiles:當提示空間不夠時添加此參數
其餘參數
pidfilepath:進程文件,方便中止mongodb
directoryperdb:爲每個數據庫按照數據庫名創建文件夾存放
bind_ip:mongodb所綁定的ip地址
oplogSize:mongodb操做日誌文件的最大大小。單位爲Mb,默認爲硬盤剩餘空間的5%
noprealloc:不預先分配存儲
3.啓動Mongodb
啓動服務
./mongod -f /etc/master.conf
./mongod -f /etc/slaver.conf
./mongod -f /etc/arbiter.conf
有這樣的提示說明啓動成功
若是是下列的提示說明啓動失敗
啓動失敗的緣由有不少,檢查完配置文件,若是沒有錯誤,可打開相應的配置文件查看詳細的錯誤信息
cat /etc/master.conf
最多見的一個錯誤就是磁盤空間不足,會提示這樣的錯誤
由於Mongodb的日誌文件是成2g的增加,因此所需空間比較大,這時你能夠在配置文件裏添加這樣的一個配置
smallfiles=true。
所有三個服務所有啓動成功以後
4.配置主(master),備(slaver),仲裁(arbiter)節點
能夠經過客戶端鏈接mongodb,也能夠直接在三個節點中選擇一個鏈接mongodb。
./mongo 192.168.169.129:10000 #ip和port是某個節點的地址
>use admin
>cfg={ _id:"rep1", members:[ {_id:0,host:'192.168.169.129:10000',priority:2}, {_id:1,host:'192.168.169.129:10001',priority:1},
{_id:2,host:'192.168.169.129:10002',arbiterOnly:true}] };
>rs.initiate(cfg) #使配置生效
{
"set" : "rep1",
"date" : ISODate("2014-09-05T02:44:43Z"),
"myState" : 1,
"members" : [
{
"_id" : 0,
"name" : "192.168.169.129:10000",
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY",
"uptime" : 200,
"optime" : Timestamp(1357285565000, 1),
"optimeDate" : ISODate("2013-01-04T07:46:05Z"),
"self" : true
},
{
"_id" : 1,
"name" : "192.168.169.129:10001",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 200,
"optime" : Timestamp(1357285565000, 1),
"optimeDate" : ISODate("2013-01-04T07:46:05Z"),
"lastHeartbeat" : ISODate("2013-01-05T02:44:42Z"),
"pingMs" : 0
},
{
"_id" : 2,
"name" : "192.168.169.129:10002",
"health" : 1,
"state" : 7,
"stateStr" : "ARBITER",
"uptime" : 200,
"lastHeartbeat" : ISODate("2013-01-05T02:44:42Z"),
"pingMs" : 0
}
],
"ok" : 1
}
配置過程當中可能還會出現其餘的一些錯誤,不過均可以去查看相應的日誌文件,去解決。