mongodb之副本集搭建

實戰環境node

centos7 64位系統linux

防火牆和selinux關閉sql

mongodb 4.0mongodb

副本集官方文檔地址:https://docs.mongodb.com/manual/replication/數據庫

1、副本集介紹vim

MongoDB的replica set是一個mongod進程實例簇,數據在這個簇中相互複製,並自動進行故障切換。centos

MongoDB的數據庫複製增長了冗餘,確保了高可用性,簡化了管理任務如備份,而且增長了讀能力。大多數產品部署都使用了複製。MongoDB中primary處理寫操做,其它進行復制的成員則是secondaries。bash

image.png

相對於原來的主從複製,副本集能自動感知primary節點的下線,並提高其中一個Secondary做爲Primary。服務器

默認選舉是按照實例啓動前後順序選舉主從,能夠設置權重,指定某個實例爲primary(後續會有權重設置操做),ide

2、副本集角色

1. Primary

   默認狀況下,讀寫都是在Primary上操做的。

2. Secondary

   經過oplog來重放Primary上的全部操做,擁有Primary節點數據的完整拷貝。

   默認狀況下,不可寫,也不可讀。

   根據不一樣的需求,Secondary又可配置爲以下形式:

   1> Priority 0 Replica Set Members

        優先級爲0的節點,優先級爲0的成員永遠不會被選舉爲primary。

        在mongoDB副本集中,容許給不一樣的節點設置不一樣的優先級。

        優先級的取值範圍爲0-1000,可設置爲浮點數,默認爲1。

        擁有最高優先級的成員會優先選舉爲primary。

        譬如,在副本集中添加了一個優先級爲2的成員node3:27020,而其它成員的優先級爲1,只要node3:27020擁有最新的數據,那麼當前的primary就會自動降

        級,node3:27020將會被選舉爲新的primary節點,但若是node3:27020中的數據不夠新,則當前primary節點保持不變,直到node3:27020的數據更新到最新。

    2> Hidden Replica Set Members-隱藏節點

         隱藏節點的優先級一樣爲0,同時對客戶端不可見

         使用rs.status()和rs.config()能夠看到隱藏節點,可是對於db.isMaster()不可見。客戶端鏈接到副本集時,會調用db.isMaster()命令來查看可用成員信息。

         因此,隱藏節點不會受到客戶端的讀請求。

         隱藏節點經常使用於執行特定的任務,譬如報表,備份。

    3> Delayed Replica Set Members-延遲節點

         延遲節點會比primary節點延遲指定的時間(經過slaveDelay參數來指定)

         延遲節點必須是隱藏節點。

3. Arbiter

   仲裁節點,只是用來投票,且投票的權重只能爲1,不復制數據,也不能提高爲primary。

   仲裁節點經常使用於節點數量是偶數的副本集中。

   建議:一般將Arbiter部署在業務服務器上,切忌將其部署在Primary節點或Secondary節點服務器上。

注:一個副本集最多有50個成員節點,7個投票節點。

3、實戰說明

使用2臺服務器實戰mongodb副本集,生產環境中建議至少三臺服務器

兩臺服務器

ip爲:192.168.237.12八、192.168.237.129

集羣搭建實戰IP:

192.168.237.128:27017 

192.168.237.129:27018 

192.168.237.128:27019

一、配置文件修改(修改三個實例的端口和日誌目錄、數據目錄)

vim /data/mongodb/27017/mongodb.conf
systemLog:
  destination: file
  logAppend: true
  path: /data/mongodb/27017/mongodb.log
storage:
  dbPath: /data/mongodb/27017/
  journal:
    enabled: true
processManagement:
  fork: true
net:
  port: 27017
  bindIp: 0.0.0.0
#集羣名稱,三個配置文件一致
replication:
  replSetName: malin

二、啓動

/usr/local/mongodb/bin/mongod -f /data/mongodb-cluster/27017/mongodb.conf
/usr/local/mongodb/bin/mongod -f /data/mongodb-cluster/27018/mongodb.conf
/usr/local/mongodb/bin/mongod -f /data/mongodb-cluster/27019/mongodb.conf

三、初始化副本集

登陸任意一臺mongodb實例

/usr/local/mongodb/bin/mongo 127.0.0.1:27017

執行sql語句進行初始化

config = { _id:"malin", members:[
  {_id:0,host:"192.168.237.128:27017"},
  {_id:1,host:"192.168.237.129:27018"},
  {_id:2,host:"192.168.237.128:27019"}]
}
use admin               #必須在admin下執行
rs.initiate( config )	#副本集初始化,須要必定時間
rs.status()		#副本集狀態,一個primary,其它SECONDARY。primary是主,只有primary能寫入

四、測試副本集的數據同步

登陸primary實例

    執行sql

use malin
db.myuser.insert( {userid: 1} )

登陸SECONDARY實例,查看數據是否同步

    執行sql

    #SECONDARY須要聲明是slave才能查看數據

rs.slaveOk()

    從庫沒法插入數據

查看延時

rs.printSlaveReplicationInfo()

五、副本集故障自動切換說明

mongodb的副本集當primary掛了,會挑選其中的一臺secondary升爲主

若是集羣只剩下一個實例的話,不會提高爲primary,插入數據將異常

因此,當集羣中有實例掛掉時,應該及時處理問題,啓動實例,若是實例中只剩下兩臺實例時,再掛掉一臺,會出現出入數據異常。


總結:至此副本集羣搭建完成,若有問題留言

相關文章
相關標籤/搜索