1. 程式人生 > >第六章:架構篇 Replica Sets複製集的搭建

第六章:架構篇 Replica Sets複製集的搭建


1. 建立資料資料夾   mkdir -p  /mongodb/data/master      --主   mkdir -p /mongodb/log/   mkdir -p /mongodb/data/slaver         --備   mkdir -p /mongodb/log/   mkdir -p /mongodb/data/arbiter        --仲裁   mkdir -p /mongodb/log/   touch  /mongodb/log/master.log    touch /mongodb/log/slaver.log   touch /mongodb/log/arbiter.log   touch  /mongodb/master.pid     touch  /mongodb/slaver.pid   touch  /mongodb/arbiter.pid   chmod -R  755 /mongodb   --三個節點都執行 2.建立配置檔案 # 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.56.87
port=27017
oplogSize=10000 
fork=true 
noprealloc=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.56.88
port=27017
oplogSize=10000
fork=true
noprealloc=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.56.89
port=27017
oplogSize=10000  
fork=true  
noprealloc=true   給以上檔案加上讀寫執行的許可權 [[email protected] bin]# chmod 755 master.conf
[[email protected] bin]# chmod 755  slaver.conf [[email protected] bin]# chmod 755 arbiter.conf 注意: 把 .log  等檔案也建好   引數解釋:

dbpath:資料存放目錄

logpath:日誌存放路徑

pidfilepath:程序檔案,方便停止mongodb

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

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

replSet:replica set的名字

bind_ip:mongodb所繫結的ip地址

port:mongodb程序所使用的埠號,預設為27017

oplogSize:mongodb操作日誌檔案的最大大小。單位為Mb,預設為硬碟剩餘空間的5%

fork:以後臺方式執行程序

noprealloc:不預先分配儲存
3.啟動mongodb

進入每個mongodb節點的bin目錄下
[[email protected] bin]# ./mongod -f master.conf 
[[email protected] bin]# ./mongod -f slaver.conf 
[[email protected] bin]# ./mongod -f arbiter.conf  
注意配置檔案的路徑一定要保證正確,可以是相對路徑也可以是絕對路徑。
4.配置主,備,仲裁節點

可以通過客戶端連線mongodb,也可以直接在三個節點中選擇一個連線mongodb。
./mongo 192.168.56.87:27017   #ip和port是某個節點的地址  
>use admin  
>cfg={ _id:"testrs", members:[  {_id:0,host:'192.168.56.87:27017',priority:2},  {_id:1,host:'192.168.56.88:27017',priority:1},  
{_id:2,host:'192.168.56.89:27017',arbiterOnly:true}] --永遠不成為主節點  };   >rs.initiate(cfg)             #使配置生效  
 cfg是可以任意的名字,當然最好不要是mongodb的關鍵字,conf,config都可以。 最外層的_id表示replica set的名字, members裡包含的是所有節點的地址以及優先順序。優先順序最高的即成為主節點,即這裡的192.168.56.87:27017。 特別注意的是,對於仲裁節點, 需要有個特別的配置——arbiterOnly:true。只能作為secondary副本節點,防止一些效能不高的節點成為主節點。 這個千萬不能少了,不然主備模式就不能生效。  配置的生效時間根據不同的機器配置會有長有短,配置不錯的話基本上十幾秒內就能生效,有的配置需要一兩分鐘。
如果生效了,執行rs.status()命令會看到如下資訊:
testrs:PRIMARY> rs.status()
{
     "set" : "testrs",
     "date" : ISODate("2015-05-08T03:27:59.706Z"),
     "myState" : 1,
     "members" : [
          {
               "_id" : 0,
               "name" : "192.168.56.87:27017",
               "health" : 1,  --1表明正常; 0表明異常
               "state" : 1,       -- 1表明是Primary; 2 表明是Secondary; 
               "stateStr" : "PRIMARY", 
--表明此機器是主庫 
               "uptime" : 620,
               "optime" : Timestamp(1431055581, 1),
               "optimeDate" : ISODate("2015-05-08T03:26:21Z"),
               "electionTime" : Timestamp(1431055584, 1),
               "electionDate" : ISODate("2015-05-08T03:26:24Z"),
               "configVersion" : 1,
               "self" : true
          },
          {
               "_id" : 1,
               "name" : "192.168.56.88:27017",
               "health" : 1,   
              "state" : 2,      -- 1表明是Primary; 2 表明是Secondary; 
               "stateStr" : "SECONDARY",  --表明此機器是從庫               "uptime" : 294,
               "optime" : Timestamp(1431055581, 1),
               "optimeDate" : ISODate("2015-05-08T03:26:21Z"),
               "lastHeartbeat" : ISODate("2015-05-08T03:27:58.189Z"),
               "lastHeartbeatRecv" : ISODate("2015-05-08T03:27:59.287Z"),
               "pingMs" : 0,
               "configVersion" : 1
          },
          {
               "_id" : 2,
               "name" : "192.168.56.89:27017",
               "health" : 1,
               "state" : 7,
               "stateStr" : "ARBITER",
               "uptime" : 294,
               "lastHeartbeat" : ISODate("2015-05-08T03:27:59.686Z"),
               "lastHeartbeatRecv" : ISODate("2015-05-08T03:27:58.028Z"),
               "pingMs" : 0,
               "configVersion" : 1
          }
     ],
     "ok" : 1
} 如果配置正在生效,其中會包含如下資訊: "stateStr" : "RECOVERING"   同時可以檢視對應節點的日誌,發現正在等待別的節點生效或者正在分配資料檔案。
 現在基本上已經完成了叢集的所有搭建工作。至於測試工作,可以留給大家自己試試。一個是往主節點插入資料,能從備節點查到之前插入的資料(查詢備節點可能會遇到某個問題,可以自己去網上查檢視)。二是停掉主節點,備節點能變成主節點提供服務。三是恢復主節點,備節點也能恢復其備的角色,而不是繼續充當主的角色。二和三都可以通過rs.status()命令實時檢視叢集的變化。


5.測試叢集是否同步 登入進入備庫 ./mongo 192.168.56.88:27017  查詢person下的資料: db.person.find() testrs:SECONDARY> db.person.find()
Error: error: { "$err" : "not master and slaveOk=false", "code" : 13435 } 報錯了:說明從庫不能執行查詢操作  讓從庫可以執行查詢操作: testrs:SECONDARY>  db.getMongo().setSlaveOk() testrs:SECONDARY> db.person.find()  -- 沒報錯了,但是沒有任何資料 登入主庫: ./mongo 192.168.56.88:27017  插入一條資料:  testrs:PRIMARY> db.person.insert({"name":"zw","sex":"M","age":19}) testrs:PRIMARY> db.person.find()  --主庫查詢,ok資料出來了
{ "_id" : ObjectId("554c2f77478a8bbe95a474d9"), "name" : "zw", "sex" : "M", "age" : 19 } testrs:SECONDARY> db.person.find()  --備庫查詢,哈哈已經同步過來啦
{ "_id" : ObjectId("554c2f77478a8bbe95a474d9"), "name" : "zw", "sex" : "M", "age" : 19 } 到此為止,叢集搭建成功..... -------------------------------------------------------------------------------------------------------------------------------------------------------------

相關推薦

架構 Replica Sets複製搭建

1. 建立資料資料夾   mkdir -p  /mongodb/data/master      --主   mkdir -p /mongodb/log/   mkdir -p /mongodb/data/slaver         --備   mkdir -p /mongodb/log/   mkdi

Spring Cloud原始碼分析之Eureka服務註冊

在文章《Spring Cloud原始碼分析之Eureka篇第四章:服務註冊是如何發起的 》的分析中,我們知道了作為Eureka Client的應用啟動時,在com.netflix.discovery.DiscoveryClient類的initScheduledT

異常機制

() 不同 finall try arr 運行時 運行 ror 則無 第六章:異常機制 異常的定義 異常:在程序運行過程中出現的意外事件,導致程序中斷執行。 異常處理 try...catch 語法:try{ //可能出現異常的代碼}catch(異常類型 異常對象名){

循環結構(二)

結構 不執行 三種 表達式 成了 不改變 條件 運算符 步驟 第六章:循環結構(二) 一. for 循環 1.循環結構的四個組成部分 (1). 初始部分:設置循環的初始狀態,比如我們設置記錄循環次數的變量 i 為 0 . (2). 循環體:重復執行的代碼 .

需求評審如何進行

角色 來源 職責 介紹 技術 產品介紹 好的 通過 協調 前言今天我們講的需求評審包括兩個部分,需求過濾和需求評審。 需求過濾 1.需求分析不是所有需求都要做進產品,我們要根據公司和產品的定位,進行合適地分析和過濾。 我們需要分析出用戶需求所對應的本質,將其轉化為產品能夠提

Node入門教程(8)path 模塊詳解

format QQ 調用 保留 微軟 posix interface join 結果 path 模塊詳解 path 模塊提供了一些工具函數,用於處理文件與目錄的路徑。由於windows和其他系統之間路徑不統一,path模塊還專門做了相關處理,屏蔽了彼此之間的差異。 可移

Docker | 構建私有倉庫

推送 sun 指定 公司 網絡環境 add 屬性 提示 回收機制 前言 上一章節,講解了利用Dockerfile和commit進行自定義鏡像的構建。大部分時候,公司運維或者實施部門在構建了符合公司業務的鏡像環境後,一般上不會上傳到公共資源庫的。這就需要自己搭建一個私有倉庫

編寫安全應用

利用 flash 網站 這一 ade 第六章 用戶數據 ack else 很多時候,安全應用是以犧牲復雜度(以及開發者的頭痛)為代價的。Tornado Web服務器從設計之初就在安全方面有了很多考慮,使其能夠更容易地防範那些常見的漏洞。安全cookies防止用戶的本地狀態被

《JAVA多線程編程核心技術》 筆記單例模式與多線程

會有 isp left sync con 多線程編程 鎖機制 數據 range 一、立即加載/"餓漢模式"和延遲加載/"懶漢模式" 立即加載(又稱餓漢模式):在使用類的時候已經將對象創建完畢,常見實現方法是直接new實例化 延遲加載(又稱懶漢模式):在調用get

隨機化

gin fat 偽隨機數發生器 偽隨機 運行 合成 內嵌 想要 ini 隨著設計變得越來越復雜,要想產生一個完整的激勵集來測試設計的功能也變得越來越困難。采用受約束的隨機測試法(CRT)自動產生測試集是目前的一種主要的方法。CRT由兩部分組成:使用隨機的數據流為DUT產生

隨機化(續1)

限制 調試 each 範圍 實例 func 文件中 約束 hand 6.6 pre_randomize和post_randomize函數 我們在調用randomize()函數之前或者之後要立即執行一些操作。比如,在隨機化之前可能要設置類裏的一些非隨機變量(上下限、權重),或

隨機化(續2)

重要 之間 ilog -o bbbb 動態 調試 即使 不同 6.10 隨機化句柄數組 如果想要產生多個隨機對象,那麽你可能需要建立隨機句柄數組,和整數數組不同,隨機求解器不會創建對象,所以你需要在隨機化前分配所有的元素。 動態數組可以按照需要分配最大數量的元素,然後按照約

Android群英傳知識點回顧——Android繪圖機制與處理技巧

ride ets 常用 結合 管理 一個 sla 浮雕效果 調用 6.1 屏幕的尺寸信息 6.1.1 屏幕參數 6.1.2 系統屏幕密度 6.1.3 獨立像素密度dp 6.1.4 單位轉換 6.2 2D繪圖基礎 6.3 Android X

數據挖掘項目完整應用案例演示

分析師 過程 6.2 需求分析 不同 反饋 數據挖掘 分析報告 6.4 6.1項目背景和業務分析需求的提出 ...... 6.2數據分析師參與需求討論 針對需求收集相關的背景數據和指標,熟悉業務相關邏輯 從數據分析的專業角度評價初步的業務分析需求是否合理,是否可行 6.

C#本質論6.0繼承

行為 實體 sta 密封類 類型 繼承鏈 tac 預測 兩個類 基類型與派生類型之間的轉型: 顯式轉型與隱式轉型: 從派生類型轉型為基類型稱為隱式轉型,轉型總會成功,不會引發異常。 從基類型轉型為派生類型稱為顯式轉型,在轉型過程中可能會失敗,為了執行顯示轉型,要在原始引用名

Introduction to 3D Game Programming with DirectX 12 學習筆記之 --- 在Direct3D中繪製

程式碼工程地址: https://github.com/jiabaodan/Direct12BookReadingNotes 學習目標 熟悉Direct3D介面的定義,儲存和繪製幾何資料 ; 學習編寫基本的頂點和畫素著色器; 學習使用渲染流水線狀態

Taglib原理和實現 標籤內常用方法總結

1。支援el表示式: import org.apache.taglibs.standard.lang.support.ExpressionEvaluatorManager; private Object value = null; this.valu

演算法導論 堆排序 筆記(堆、維護堆的性質、建堆、堆排序演算法、優先順序佇列、堆排序的程式碼實現)

堆排序(heapsort) 像合併排序而不像插入順序,堆排序的執行時間為O(nlgn) 。像插入排序而不像合併排序,它是一種原地( in place) 排序演算法:在任何時候,陣列中只有常數個元素儲存在輸入陣列以外。 堆: (二叉)堆資料結構是一種陣列物件,它可以被視為一棵完全二叉樹。樹

(雲吶管理手冊)提交企業認證,啟用跨企業互動

為保障服務供需雙方企業資訊的真實性,平臺規定企業資訊如未完善,無法使用企業互動功能。因此,如果需要使用企業互動功能,需要先完成企業認證。 平臺提供了Web、App兩個客戶端版本的企業認證入口,我們將根據客戶端不同,分別介紹企業認證的方法。 1.WEB企業認證 第一步:在“企業/相關配置/企業資

【.NET Core項目實戰-統一認證平臺】 網關-自定義客戶端授權

localhost 寫入 warn seo 接口 後端 配置 rect when 【.NET Core項目實戰-統一認證平臺】開篇及目錄索引 上篇文章我們介紹了網關使用Redis進行緩存,並介紹了如何進行緩存實現,緩存信息清理接口的使用。本篇我們將介紹如何實現網關自定義客