mongoDB Replica集群配置(1主+1從+1仲裁)


1.mongoDB節點介紹

主節點(Primary)

在復制集中,主節點是唯一能夠接收寫請求的節點。MongoDB在主節點進行寫操作,並將這些操作記錄到主節點的oplog中。而從節點將會從oplog復制到其本機,並將這些操作應用到自己的數據集上。(復制集最多只能擁有一個主節點)

從節點(Secondaries)

從節點通過應用主節點傳來的數據變動操作來保持其數據集與主節點一致。從節點也可以通過增加額外參數配置來對應特殊需求。例如,從節點可以是non-voting或是priority 0.

仲裁節點(ARBITER)

仲裁節點即投票節點,其本身並不包含數據集,且也無法晉升為主節點。但是,旦當前的主節點不可用時,投票節點就會參與到新的主節點選舉的投票中。仲裁節點使用最小的資源並且不要求硬件設備。投票節點的存在使得復制集可以以偶數個節點存在,而無需為復制集再新增節點 不要將投票節點運行在復制集的主節點或從節點機器上。 投票節點與其他 復制集節點的交流僅有:選舉過程中的投票,心跳檢測和配置數據。這些交互都是不加密的。

24104

24105

心跳檢測

復制集成員每兩秒向復制集中其他成員進行心跳檢測。如果某個節點在10秒內沒有返回,那么它將被標記為不可用。

mongodb副本集是有故障恢復功能的主從集群,由一個primary節點和一個或多個secondary節點組成:

同步過程: Primary節點寫入數據,Secondary通過讀取Primary的oplog得到復制信息,開始復制數據並且將復制信息寫入到自己的oplog。如果某個操作失敗,則備份節點停止從當前數據源復制數據。如果某個備份節點由於某些原因掛掉了,當重新啟動后,就會自動從oplog的最后一個操作開始同步,同步完成后,將信息寫入自己的oplog,由於復制操作是先復制數據,復制完成后再寫入oplog,有可能相同的操作會同步兩份,不過MongoDB在設計之初就考慮到這個問題,將oplog的同一個操作執行多次,與執行一次的效果是一樣的。

通俗理解:當Primary節點完成數據操作后,Secondary會做出一系列的動作保證數據的同步

  • 1、檢查自己local庫的oplog.rs集合,找出最近的時間戳。
  • 2、檢查Primary節點local庫oplog.rs集合,找出大於此時間戳的記錄。
  • 3、將找到的記錄插入到自己的oplog.rs集合中,並執行這些操作。

副本集的同步和主從同步一樣,都是異步同步的過程,不同的是副本集有個自動故障轉移的功能。其原理是:slave端從primary端獲取日志,然后在自己身上完全順序的執行日志所記錄的各種操作(該日志是不記錄查詢操作的),這個日志就是local數據 庫中的oplog.rs表,默認在64位機器上這個表是比較大的,占磁盤大小的5%,oplog.rs的大小可以在啟動參數中設 定:–oplogSize 1000,單位是M。

注意:在副本集的環境中,要是所有的Secondary都宕機了,只剩下Primary。最后Primary會變成Secondary,不能提供服務。

2.mongoDB安裝文檔

工具:Robomongo(mongodb可視化管理工具)

安裝之前系統優化:

mongoDB 禁用大內存頁面

echo never >> /sys/kernel/mm/transparent_hugepage/enabled

echo never >> /sys/kernel/mm/transparent_hugepage/defrag

yum install -y numactl (可以提高mongodb導入速度)

numactl --interleave=all 啟動命令

官方安裝文檔:http://docs.mongoing.com/manual-zh/installation.html

2.1創建mongoDB3.2源

vim /etc/yum.repos.d/mongodb-org-3.2.repo

[mongodb-org-3.2] name=MongoDB

Repository baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.2/x86_64/

gpgcheck=1

enabled=1

gpgkey=https://www.mongodb.org/static/pgp/server-3.2.asc

2.2創建mongoDB2.6源

vim /etc/yum.repos.d/mongodb-org-3.2.repo

[mongodb-org-2.6]

name=MongoDB 2.6

Repository baseurl=http://downloads-distro.mongodb.org/repo/redhat/os/x86_64/

gpgcheck=0

enabled=1

2.3安裝的MongoDB的最新穩定版本

yum install -y mongodb-org

2.4安裝的MongoDB特定版本

分別指定每個組件包以及版本號追加到包的名稱,如下面的例子:

yum install -y mongodb-org-3.2.0 mongodb-org-server-3.2.0 mongodb-org-shell-3.2.0 mongodb-org-mongos-3.2.0 mongodb-org-tools-3.2.0

3.創建keyfile(用於集群通信)

openssl rand -base64 755 > keyfile文件名

chmod 400 keyfile文件名

3.2將keyfile文件復制到從庫和仲裁等其他節點,並在配置文件中指定路徑

24153

3.3配置文件修改(僅供參考)

vi /etc/mongod.conf

systemLog:#配置日志信息

destination: file

path: /home/mongodb/data/arbiter/mongod-qnzs-arbiter.log

logAppend: true

timeStampFormat: iso8601-local

processManagement:#fork后台允許模式

fork: true

pidFilePath: /home/mongodb/data/arbiter/mongod-qnzs-arbiter.pid

net:#配置通信端口

port: 27017

security:#安全通信設置

#初始化數據庫之后需要創建管理用戶,所以提前關閉用戶認證。不然操作數據庫提示權限不足

clusterAuthMode: keyFile

keyFile: /home/mongodb/data/mongo-keyfile

#authorization: enabled

authorization: disabled

storage:#引擎配置

dbPath: /home/mongodb/data/arbiter

directoryPerDB: true

journal:

enabled: true

engine: wiredTiger

wiredTiger:

engineConfig:

directoryForIndexes: true

cacheSizeGB: 90

operationProfiling:

slowOpThresholdMs: 100

replication:

oplogSizeMB: 20480

replSetName: qnzs

官方詳細配置說明http://docs.mongoing.com/manual-zh/reference/configuration-options.html

3.4mongoDB啟動

numactl --interleave=all mongod -f 配置文件路徑

24150

3.5創建管理用戶

use admin db.createUser( { user: "root", pwd: "1234", roles: [ { role: "root", db: "admin" } ] } );

24124

3.6mongoDB集群配置(1主+1從+1仲裁)

進入mongoDB:

mongo 172.168.11.19:27017/admin -u root -p 123

use admin

rs.initiate(

{

_id : "qnzs",#設置集群名稱

members: [

{_id:0,host:"172.17.116.18:27017",priority:2},#設置主庫(優先級高仲裁為主庫概率越高)

{_id:1,host:"172.17.116.19:27017",priority:1},#設置從庫

{_id:2,host:"172.17.116.20:27017",arbiterOnly:true}#設置仲裁

]

}

)

注意:對於仲裁節點,需要特別的配置:arbiterOnly:true。不設置,主備模式不生效。

24155

3.7查看集群狀態

rs.status()

24107

24103

4.擴展知識

節點角色:

24111

讀寫分離

MongoDB副本集對讀寫分離的支持是通過Read Preferences特性進行支持的,這個特性非常復雜和靈活。設置讀寫分離需要先在從節點SECONDARY 設置 setSlaveOk

應用程序驅動通過read reference來設定如何對副本集進行讀取操作,默認的,客戶端驅動所有的讀操作都是直接訪問primary節點的,從而保證了數據的嚴格一致性。

有如下幾種模式:

24109

24108

mongo shell中復制相關方法

24174

復制 數據庫的命令

24172

用戶管理和認證方法

官方詳細檔https://docs.mongodb.com/master/reference/security/#security-methods-in-the-mongo-shell

24178

角色管理方法

官方詳細檔https://docs.mongodb.com/master/reference/security/#security-methods-in-the-mongo-shell

24188

 

image

相關官方資料mongo Shell MethodsBuilt-In RolesSecurity Methods in the mongo Shell

 總結:

由於之前沒有接觸過mongodb數據庫,項目中需要用到。后續查看官方文檔,英文就是個渣渣。

還好有翻譯工具。按照官文搭建,但還是遇到很多坑。例如驗證問題

 

security:#安全通信設置

#初始化數據庫之后需要創建管理用戶,所以提前關閉用戶認證。不然操作數據庫提示權限不足

clusterAuthMode: keyFile

keyFile: /home/mongodb/data/mongo-keyfile

#authorization: enabled

authorization: disabled

初始化數據庫的時候,一定要先禁言用戶驗證功能。然后在創建管理用戶,之后就可以開啟驗證。操作數據庫了

 

參考文檔

官方文檔

http://docs.mongoing.com/manual-zh/

http://docs.mongoing.com/manual-zh/reference/configuration-options.html

http://docs.mongoing.com/manual-zh/core/security-built-in-roles.html

個人文檔

http://blog.csdn.net/luonanqin/article/details/8497860

https://deepzz.com/2016/05/15/19.html

https://segmentfault.com/a/1190000004641620

http://blog.csdn.net/kk185800961/article/details/45619863


免責聲明!

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



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