mongodb replica set 和 nodejs中使用mongoose連接replica

来源:http://www.cnblogs.com/gabrielchen/archive/2016/01/06/5106314.html
-Advertisement-
Play Games

一.mongodb replication 介紹 官網上的第一句話就是Replication is the process of synchronizing data across multiple servers.翻譯過來就是replication(複製)是跨多個伺服器同步的過程,基本原理就是一....


一.mongodb replication 介紹

  官網上的第一句話就是Replication is the process of synchronizing data across multiple servers.翻譯過來就是replication(複製)是跨多個伺服器同步的過程,基本原理就是一個主伺服器和很多從伺服器通過同步日誌的方式來達到數據一致的目的,並且有且只有一個主伺服器,在mongodb中也叫主節點(primary node)負責寫操作,而從伺服器,也叫次要節點(secondary nodes)只需複製主伺服器的一個叫oplog 的日誌來與主伺服器的數據同步,如果主伺服器不幸掛掉,那麼mongo的引擎會自動觸發一次選舉,選出新的主伺服器(或者半數以上投票),如果沒法完成選舉,票數相同等情況,整個集群將會變成只讀狀態無法寫入。mongo也有一個角色叫做仲裁者(Arbiter),它不存儲和同步數據,只是作為一個維持權威或者心跳數據的存在避免節點過少無法完成選舉,其也幫助主從伺服器判斷狀態,其可以用一些性能較差的機器或者虛擬機扮演。

  作為一個前端以上是我能做出的最好的解釋了。下麵直接開擼,簡單幾步幾行代碼帶大家搭建一個mongo replica

 

二.mongodb replica set

  1.系統介紹

    a.mac osx 10.10

    b.mongodb 3.2.0

    

    2.節點建點

  首先需要去你選擇的mongodb數據文件存放的文件夾新建三個資料庫,用來模擬三台不通的機器,博主的路徑如下

  

cd /data/db
mkdir  nodeOne nodeTwo nodeThree

  3.啟動三個資料庫(dbpath),並且埠(--port 1000x),集群名稱(--replSet gabriel),關閉日誌選項(--nojournal),守護進程方式啟動,會自動拉起(--fork),日誌目錄(--logpath)。

mongod --dbpath /data/db/node1 --port 10001 --replSet gabriel --nojournal --fork --logpath /data/db/node1.log
mongod --dbpath /data/db/node2 --port 10002 --replSet gabriel --nojournal --fork --logpath /data/db/node2.log
mongod --dbpath /data/db/node3 --port 10003 --replSet gabriel --nojournal --fork --logpath /data/db/node3.log

  4.順便連接一個伺服器,做初始化操作,這裡博主連入10001埠

//終端下進入
mongo localhost:10001
//進入後輸入初始化方法
rs.initiate({_id:"gabriel",members:[
{_id:1,host:"localhost:10001"},
{_id:2,host:"localhost:10002"},
{_id:3,host:"localhost:10003"},
]})

  收到如下信息就成功了。

{
"info" : "Config now saved locally. Should come online in about a minute.",
"ok" : 1
}

  此時會發現終端上的輸出已經有了變化。

//從單個一個
>
//變成了
gabriel:OTHER>

  5.查詢狀態

rs.status()

    在返回中,參數set後面為集群名稱,每個members下麵可以看到他們各自的情況,其中stateStr是角色,主節點為(PRIMARY)。

  6.進入主節點插入數據,進入從節點查看數據

  

//博主主節點在10001介面
mongo localhost:10001
//切換資料庫,插入一條數據,依次輸入
 use gabdb
db.user.insert({dataid:10001})
db.user.find()

  切換到從節點,你會發現使用show dbs 會報錯,是因為還沒有開啟許可權,輸入rs.slaveOk();就可以順利訪問了。

  

//切換從節點
mongo localhost:10002

//無許可權查詢
show dbs
//報錯
2016-01-06T14:48:53.155+0800 E QUERY    [thread1] Error: listDatabases failed:{ "ok" : 0, "errmsg" : "not master and slaveOk=false", "code" : 13435 } :

//開啟
gabriel:SECONDARY> rs.slaveOk()
gabriel:SECONDARY> show dbs

  以上就是簡單的建立過程,現在已經可以在從伺服器看到主伺服器插入的數據了。

  

   

三.在nodejs中使用mongoose連接replica 資料庫

  1.版本介紹

  a.nodejs 0.10.25

  b.mongoose 3.8.8

  

  2.配置如下

  

 var mongoose = require('mongoose'),
//mongoose配置
var opts = {
  db: { native_parser: true },
  server: { 
    poolSize: 5 ,
     auto_reconnect: true,
     socketOptions: {keepAlive: 1}
  },
  replset: { rs_name: 'gabriel' }
}
//mongoose連接
app.db = mongoose.connect(config.mongodb.repUri, opts);
app.db.on('error', console.error.bind(console, 'mongoose connection error: '));
app.db.once('open', function () {
    //and... we have a data store
});
//config.mongodb.repUri 如下
exports.mongodb = {
 
  repUri:"mongodb://localhost:10001,localhost:10002,localhost:10003/gabdb"
};

  

所以過程如上所述,有問題可以留言告知,覺得好的點一下推薦~ 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Icinga客戶端的部署相對於伺服器端來說,簡單很多。對於伺服器端來說,如果要通過以下這種方式來監控伺服器,必須包含三個組件,Icinga內核,Icinga插件,NRPE(Nagios Remote Plugin Executor)。對於Icinga客戶端來說,只需要部署Icinga插件和NRPE。...
  • Linux系統調用--getrusage函數詳解功能描述:獲得進程的相關資源信息。如:用戶開銷時間,系統開銷時間,接收的信號量等等;用法:#include #include #include #define RUSAGE_SELF 0#define RUSAGE_CHILDREN -1int get...
  • 一,nfs服務優缺點 NFS 是Network File System的縮寫,即網路文件系統,可以讓不同的客戶端掛載使用同一個目錄,作為共用存儲使用,這樣可以保證不同的節點客戶端數據一致性,在集群架構中經常用到 NFS優點:簡單、方便、可靠、穩定 NFS缺點: 1、存在單點故障 2...
  • 創建資料庫: 1 CREATE DATABASE Test --要創建的資料庫名稱 2 ON PRIMARY 3 ( 4 --資料庫文件的具體描述 5 NAME='Test_data', --主數據文件的邏輯名稱...
  • Convert函數和Cast函數都是轉化函數,效果是一樣的。cast函數,轉化,如果轉化之後,年齡還是Null的話,就顯示為“未知”Convert函數和Cast函數都是轉化函數,效果是一樣的。
  • 相信大家認真看完這篇文章就會知道怎麼去設計出高級的資料庫了!!!最近有朋友一直問我為什麼需要規範的的資料庫設計?專業人士解析:因為在實際的項目開發中,如果系統的數據存儲量較大,設計的表比較多,表和表之間的關係比較複雜,就需要首先考慮規範的資料庫設計,然後進行具體的創建庫,創建表的工作,不管是創建動....
  • 創建了一個外鍵,還有一點限制,就是當定義了ON Update/Delete CASCADE 的時候,該表不能再定義Instand Of Update/Delete 觸發器。這個是不允許的。如果定義了Instand Of觸發器改變了 Update 或者 Delete 的行為,那麼在級聯刪除的時候,引用...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...