Mongodb集群搭建過程及常見錯誤


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
    打開編輯器:
vi /etc/master.conf

按i 輸入下列配置

dbpath=/home/mongodb/data/master  
logpath=/home/mongodb/log/master.log
logappend=true
replSet=rep1
port=10000
fork=true
journal=true

完成之后按esc  》》 :  >>wq>>回車

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:數據存放目錄

logpath:日志存放路徑

logappend:以追加的方式記錄日志

replSet:replica set的名字

port:mongodb進程所使用的端口號,默認為27017

fork:以后台方式運行進程

journal:寫日志

smallfiles:當提示空間不夠時添加此參數

其他參數

pidfilepath:進程文件,方便停止mongodb

directoryperdb:為每一個數據庫按照數據庫名建立文件夾存放

bind_ip:mongodb所綁定的ip地址

oplogSize:mongodb操作日志文件的最大大小。單位為Mb,默認為硬盤剩余空間的5%

noprealloc:不預先分配存儲

3.啟動Mongodb   

cd /home/mongodb/bin

 

啟動服務

./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
}
 
配置過程中可能還會出現其他的一些錯誤,不過都可以去查看相應的日志文件,去解決。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM