mongodb 的集羣方式主要分爲三種Replica Set / Sharding / Master-Slaver ,這裏只說明最簡單的集羣搭建方式(生產環境),若是有多個節點能夠此類推或者查看官方文檔。html
Replica Setlinux
中文翻譯叫作副本集。其實簡單來講就是集羣當中包含了多份數據,保證主節點掛掉了,備節點能繼續提供數據服務,提供的前提就是數據須要和主節點一致。以下圖
Primary表示主節點,Secondary表示備節點,Mongodb(A)表示仲裁節點。主備節點存儲數據(M,S),仲裁節點不存儲數據。客戶端同時鏈接主節點與備節點,不鏈接仲裁節點。mongodb
默認設置下,主節點提供全部增刪查改服務,備節點不提供任何服務。可是能夠經過設置使備節點提供查詢服務,這樣就能夠減小主節點的壓力,當客戶端進行數據查詢時,請求自動轉到備節點上。這個設置叫作Read Preference Modes,同時Java客戶端提供了簡單的配置方式,能夠沒必要直接對數據庫進行操做。數據庫
仲裁節點是一種特殊的節點,它自己並不存儲數據,主要的做用是決定哪個備節點在主節點掛掉以後提高爲主節點,因此客戶端不須要鏈接此節點。這裏雖然只有一個備節點,可是仍然須要一個仲裁節點來提高備節點級別。
主節點失效,切換過程以下
app
官網下載地址
https://www.mongodb.com/download-center/community
選定系統版本
翻譯
wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.2.0.tgz tar -zxf https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.2.0.tgz mkdir -p /mongodb/data/{master,slaver,arbiter} mkdir /mongodb/log #三個目錄分別對應主,備,仲裁節點
#master.conf dbpath=/mongodb/data/master logpath=/mongodb/log/master.log pidfilepath=/mongodb/master.pid directoryperdb=true logappend=true replSet=testrs bind_ip=192.168.11.11 port=27017 oplogSize=10000 fork=true #slaver.conf dbpath=/mongodb/data/slaver logpath=/mongodb/log/slaver.log pidfilepath=/mongodb/slaver.pid directoryperdb=true logappend=true replSet=testrs bind_ip=192.168.11.12 port=27017 oplogSize=10000 fork=true #arbiter.conf dbpath=/mongodb/data/arbiter logpath=/mongodb/log/arbiter.log pidfilepath=/mongodb/arbiter.pid directoryperdb=true logappend=true replSet=testrs bind_ip=192.168.11.13 port=27017 oplogSize=10000 fork=true
*配置文件中參數解釋: dbpath:數據存放目錄 logpath:日誌存放路徑 pidfilepath:進程文件,方便中止mongodb directoryperdb:爲每個數據庫按照數據庫名創建文件夾存放 logappend:以追加的方式記錄日誌 replSet:replica set的名字 bind_ip:mongodb所綁定的ip地址 port:mongodb進程所使用的端口號,默認爲27017 oplogSize:mongodb操做日誌文件的最大大小。單位爲Mb,默認爲硬盤剩餘空間的5% fork:之後臺方式運行進程
#啓動各節點的mongo ./mongod -f master.conf ./mongod -f slaver.conf ./mongod -f arbiter.conf #配置主,備,仲裁節點 ./mongo 192.168.11.11:27017 #ip和port是某個節點的地址 >use admin >cfg={ _id:"testrs", members:[ {_id:0,host:'192.168.11.11:27017',priority:2}, {_id:1,host:'192.168.11.12:27017',priority:1}, {_id:2,host:'192.168.11.13:27017',arbiterOnly:true}] }; #cfg是能夠任意的名字,固然最好不要是mongodb的關鍵字,conf,config均可以。最外層的_id表示replica set的名字, members裏包含的是全部節點的地址以及優先級。優先級最高的即成爲主節點,即這裏的192.168.11.11:27017。 特別注意的是,對於仲裁節點,須要有個特別的配置——arbiterOnly:true。這個千萬不能少了,否則主備模式就不能生效。 arbiterOnly O爲大寫 >rs.initiate(cfg) #查看狀態 > rs.status() #正在進行配置會提示:"stateStr" : "RECOVERING" #末行輸出以下即爲成功 "ok" : 1, "$clusterTime" : { "clusterTime" : Timestamp(1567144580, 1), "signature" : { "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="), "keyId" : NumberLong(0) } }, "operationTime" : Timestamp(1567144580, 1) }