mongo集羣有三種方式
1.Replica Set副本
2.Sharding分片
3.Master-slave主備
通常來說,我們用第1、2種較多,第3種官方並不推薦。這裏我們主要介紹Replica Set副本集。
Replica Set
中文翻譯叫做副本集,不過我並不喜歡把英文翻譯成中文,總是感覺怪怪的。其實簡單來說就是集羣當中包含了多份數據,保證主節點掛掉了,備節點能繼續提供數據服務,提供的前提就是數據需要和主節點一致。如下圖:
Mongodb(M)表示主節點,Mongodb(S)表示備節點,Mongodb(A)表示仲裁節點。主備節點存儲數據,仲裁節點不存儲數據。客戶端同時連接主節點與備節點,不連接仲裁節點。
默認設置下,主節點提供所有增刪查改服務,備節點不提供任何服務。但是可以通過設置使備節點提供查詢服務,這樣就可以減少主節點的壓力,當客戶端進行數據查詢時,請求自動轉到備節點上。這個設置叫做Read Preference Modes,同時Java客戶端提供了簡單的配置方式,可以不必直接對數據庫進行操作。
仲裁節點是一種特殊的節點,它本身並不存儲數據,主要的作用是決定哪一個備節點在主節點掛掉之後提升爲主節點,所以客戶端不需要連接此節點。這裏雖然只有一個備節點,但是仍然需要一個仲裁節點來提升備節點級別。我開始也不相信必須要有仲裁節點,但是自己也試過沒仲裁節點的話,主節點掛了備節點還是備節點,所以咱們還是需要它的。
由於資源有限,我只使用一臺虛擬機(192.168.1.119)搭建三個節點,每個節點的端口號不一樣:
Mongodb(M)端口號27017,Mongodb(S)端口號27018,Mongodb(A)端口號27019
先官網下載mongodb文件,這裏我解壓到/usr/local/mongodb 文件夾下。
1、設置配置文件:
Mongodb(M): testrs_27017.conf
#數據存放目錄
dbpath=/usr/local/mongodb/datasource/data/db/testrs_27017
#日誌存放目錄
logpath=/usr/local/mongodb/datasource/log/testrs_27017.log
#進程文件方便停止mongodb
pidfilepath=/usr/local/mongodb/datasource/pid/testr_27017.pid
#爲每一個數據庫按照數據庫名建立文件夾存放
directoryperdb=true
#一追加的方式記錄日誌
logappend=true
#mongodb所綁定的主機上的ip地址(client端可以通過該ip進行登錄)
bind_ip=192.168.1.119
#mongodb進程所使用的端口號,默認爲27017
port=27017
#mongodb操作日誌文件的最大大小。單位爲Mb,默認爲硬盤剩餘空間的5%
oplogSize=10000
#以後臺方式運行進程
fork=true
#不預先分配存儲
noprealloc=true
#replica set(副本)的名字
replSet=testrs
Mongodb(S) testrs_27018.conf
#數據存放目錄
dbpath=/usr/local/mongodb/datasource/data/db/testrs_27018
#日誌存放目錄
logpath=/usr/local/mongodb/datasource/log/testrs_27018.log
#進程文件方便停止mongodb
pidfilepath=/usr/local/mongodb/datasource/pid/testr_27018.pid
#爲每一個數據庫按照數據庫名建立文件夾存放
directoryperdb=true
#一追加的方式記錄日誌
logappend=true
#mongodb所綁定的ip地址
bind_ip=192.168.1.119
#mongodb進程所使用的端口號,默認爲27017
port=27018
#mongodb操作日誌文件的最大大小。單位爲Mb,默認爲硬盤剩餘空間的5%
oplogSize=10000
#以後臺方式運行進程
fork=true
#不預先分配存儲
noprealloc=true
#replica set(副本)的名字
replSet=testrs
Mongodb(A) :testrs_27019.conf
#數據存放目錄
dbpath=/usr/local/mongodb/datasource/data/db/testrs_27019
#日誌存放目錄
logpath=/usr/local/mongodb/datasource/log/testrs_27019.log
#進程文件方便停止mongodb
pidfilepath=/usr/local/mongodb/datasource/pid/testr_27019.pid
#爲每一個數據庫按照數據庫名建立文件夾存放
directoryperdb=true
#一追加的方式記錄日誌
logappend=true
#mongodb所綁定的ip地址
bind_ip=192.168.1.119
#mongodb進程所使用的端口號,默認爲27017
port=27019
#mongodb操作日誌文件的最大大小。單位爲Mb,默認爲硬盤剩餘空間的5%
oplogSize=10000
#以後臺方式運行進程
fork=true
#不預先分配存儲
noprealloc=true
#replica set(副本)的名字
replSet=testrs
2、創建數據庫文件夾和日誌文件夾:
mkdir -p /usr/local/mongodb/datasource/pid
mkdir -p /usr/local/mongodb/datasource/log
mkdir -p /usr/local/mongodb/datasource/data/db/testrs_27017
mkdir -p /usr/local/mongodb/datasource/data/db/testrs_27018
mkdir -p /usr/local/mongodb/datasource/data/db/testrs_27019
3、啓動服務:
/usr/local/mongodb/bin/mongod -f /文件路徑/testrs_27017.conf
/usr/local/mongodb/bin/mongod -f /文件路徑/testrs_27018.conf
/usr/local/mongodb/bin/mongod -f /文件路徑/testrs_27019.conf/4、查看服務情況:
[root@localhost conf]# ps -ef|grep mongo
root 13289 1 1 18:07 ? 00:02:38 ../bin/mongod -f testrs_2017.conf
root 13813 1 1 19:00 ? 00:02:12 ../bin/mongod -f testrs_2018.conf
root 13837 1 1 19:00 ? 00:02:12 ../bin/mongod -f testrs_2019.conf
5、選擇主節點進入:
/usr/local/mongodb/bin/mongo 192.168.1.119:27107
6、初始化副本集
rs.initiate()
7、添加備節點
rs.add("192.168.1.119:27018")
8、添加仲裁節點
rs.add("192.168.1.119:27019",true) 或者rs.addArb("192.168.1.119:27019")
9、查看配置
rs.conf()
10、 查看狀態
rs.status()
11、刪除節點
rs.remove("192.168.1.119:27019")