centos7-mongodb3.4.6集群的搭建

来源:https://www.cnblogs.com/liwenlongBlog/archive/2018/06/06/9146670.html
-Advertisement-
Play Games

0、需要環境 安裝包:mongodb-linux-x86_64-3.4.6.tgz 安裝路徑:/usr/mongodb 伺服器: 192.168.177.131/132/133 mongos 20000 config server 21000 shard1 20001 shard2 20002 sh ...


0、需要環境

安裝包:mongodb-linux-x86_64-3.4.6.tgz

安裝路徑:/usr/mongodb

伺服器: 192.168.177.131/132/133

 

mongos           

20000

config server

21000

shard1           

20001

shard2           

20002

shard3           

20003

1、解壓到 /usr/local

解壓後重命名為mongodb,方便以後操作

2、創建目錄

mkdir -p mongodb/mongos/log

mkdir -p mongodb/config-server/data

mkdir -p mongodb/config-server/log

mkdir -p mongodb/shard1/data

mkdir -p mongodb/shard1/log

mkdir -p mongodb/shard2/data

mkdir -p mongodb/shard2/log

mkdir -p mongodb/shard3/data

mkdir -p mongodb/shard3/log

 

其中data目錄存放數據,log目錄存放日誌

mongos服務不存放數據,所以不需要數據目錄,只需要log目錄

3、配置伺服器 config server

vim /usr/local/mongodb/config-server.conf

 

systemLog:

  destination: file

  path: "/usr/local/mongodb/config-server/log/config-server.log"

  logAppend: true

storage:

  dbPath: "/usr/local/mongodb/config-server/data"

  journal:

    enabled: true

  directoryPerDB: true

net:

  port: 21000

processManagement:

  fork: true

  pidFilePath: "/usr/local/mongodb/config-server/config-server.pid"

sharding:

  clusterRole: configsvr

replication:

  replSetName: configServer

 

冒號(:)和配置之間需要有空格

 

啟動三台伺服器

cd mongodb

bin/mongod -f config-server.conf

 

登錄任意一臺配置伺服器,初始化

#連接

mongodb/bin/mongo --port 21000

 

config = {

    _id : "configServer",

     members : [

         {_id : 0, host : "192.168.177.131:21000" },

         {_id : 1, host : "192.168.177.132:21000" },

         {_id : 2, host : "192.168.177.133:21000" }

     ]

}

 

#初始化副本集

rs.initiate(config);

#查看分區狀態

rs.status();

 

4、分片副本集 shard

vim /usr/local/mongodb/shard1.conf

 

systemLog:

  destination: file

  path: "/usr/local/mongodb/shard1/log/shard1.log"

  logAppend: true

storage:

  dbPath: "/usr/local/mongodb/shard1/data"

  journal:

    enabled: true

  directoryPerDB: true

net:

  port: 20001

processManagement:

  fork: true

  pidFilePath: "/usr/local/mongodb/shard1/shard1.pid"

sharding:

  clusterRole: shardsvr

replication:

  replSetName: shard1

 

啟動三台伺服器:

cd mongodb

bin/mongod -f shard1.conf

 

登陸任意一臺伺服器,初始化副本集

mongo --port 20001

#使用admin資料庫

use admin

 

config = {

    _id : "shard1",

     members : [

         {_id : 0, host : "192.168.177.131:20001" },

         {_id : 1, host : "192.168.177.132:20001" },

         {_id : 2, host : "192.168.177.133:20001" }

     ]

 }

 

#初始化副本集

rs.initiate(config);

#查看分區狀態

rs.status();

 

 

配置第二,三個分片副本集,方法同第六步。 註意埠改為20002  20003

systemLog:

  destination: file

  path: "/usr/local/mongodb/shard2/log/shard2.log"

  logAppend: true

storage:

  dbPath: "/usr/local/mongodb/shard2/data"

  journal:

    enabled: true

  directoryPerDB: true

net:

  port: 20002

processManagement:

  fork: true

  pidFilePath: "/usr/local/mongodb/shard2/shard2.pid"

sharding:

  clusterRole: shardsvr

replication:

  replSetName: shard2

 

systemLog:

  destination: file

  path: "/usr/local/mongodb/shard3/log/shard3.log"

  logAppend: true

storage:

  dbPath: "/usr/local/mongodb/shard3/data"

  journal:

    enabled: true

  directoryPerDB: true

net:

  port: 20003

processManagement:

  fork: true

  pidFilePath: "/usr/local/mongodb/shard3/shard3.pid"

sharding:

  clusterRole: shardsvr

replication:

  replSetName: shard3

 

啟動三台伺服器:

cd mongodb

bin/mongod -f shard2.conf

bin/mongod -f shard3.conf

 

登陸任意一臺伺服器,初始化副本集

mongo --port 20002

mongo --port 20003

#使用admin資料庫

use admin

 

config = {

    _id : "shard2",

     members : [

         {_id : 0, host : "192.168.177.131:20002" },

         {_id : 1, host : "192.168.177.132:20002" },

         {_id : 2, host : "192.168.177.133:20002" }

     ]

 }

 

config = {

    _id : "shard3",

     members : [

         {_id : 0, host : "192.168.177.131:20003" },

         {_id : 1, host : "192.168.177.132:20003" },

         {_id : 2, host : "192.168.177.133:20003" }

     ]

 }

 

#初始化副本集

rs.initiate(config);

#查看分區狀態

rs.status();

 

5、路由伺服器 mongos

vim /usr/local/mongodb/mongos.conf

 

systemLog:

  destination: file

  path: "/usr/local/mongodb/mongos/log/mongos.log"

  logAppend: true

net:

  port: 20000

  bindIp: 0.0.0.0

processManagement:

  fork: true

  pidFilePath: "/usr/local/mongodb/mongos/mongos.pid"

sharding:

configDB: configReplSet/192.168.177.131:21000,192.168.177.132:21000,192.168.177.133:21000

 

啟動三台伺服器:

cd mongodb

bin/mongos -f mongos.conf

 

註意此處啟動使用的是mongos

 

6、啟用分片

目前搭建了mongodb配置伺服器、路由伺服器,各個分片伺服器,不過應用程式連接到mongos路由伺服器並不能使用分片機制,還需要在程式里設置分片配置,讓分片生效。

 

#登陸任意一臺mongos

mongo --port 20000

#使用admin資料庫

use  admin

#串聯路由伺服器與分配副本集

 

sh.addShard("shard1/192.168.177.131:20001,192.168.177.132:20001,192.168.177.133:20001");

sh.addShard("shard2/192.168.177.131:20002,192.168.177.132:20002,192.168.177.133:20002");

sh.addShard("shard3/192.168.177.131:20003,192.168.177.132:20003,192.168.177.133:20003");

 

#查看集群狀態

sh.status()

 

至此集群已經搭建完成。

 

7、測試

連接mongos

bin/mongo --port 20000

 

首先啟動某個Database(資料庫)的Sharding(分片)功能

mongos> sh.enableSharding("test")

 

對testDB資料庫里的collection logs進行shard,shard key是sn欄位,shard策略是hashed。使用hashed策略旨在讓mongodb將數據均勻分佈,如果使用{"sn",1}進行range shard,數據會按照大小順序分佈,就會出現某個shard數據很多,其他的很少的現象。

mongos> sh.shardCollection("testDB.logs", { "sn" : "hashed" } )

 

查看shard信息

mongos> sh.status()

 

添加測試數據

mongos> use testDB

mongos> for(var i=1; i<=100000; i++){db.log.insert({sn:i, msg:'Message ' + i});}

等待一段時間

 

查看log的shard信息

mongos> db.logs.stats()

 

可以看到三個分片幾乎平均的保存了數據。

33143   33755   33102

{

    "sharded" : true,

    "capped" : false,

    "ns" : "testDB.logs",

    "count" : 100000,

    "size" : 5688895,

    "storageSize" : 1773568,

    "totalIndexSize" : 3944448,

    "indexSizes" : {

       "_id_" : 983040,

       "sn_hashed" : 2961408

    },

    "avgObjSize" : 56,

    "nindexes" : 2,

    "nchunks" : 6,

    "shards" : {

       "shard1" : {

           "ns" : "testDB.logs",

           "size" : 1920351,

           "count" : 33755,

           "avgObjSize" : 56,

           "storageSize" : 634880,

           "capped" : false,

           ...

           "ok" : 1

       },

       "shard2" : {

           "ns" : "testDB.logs",

           "size" : 1885397,

           "count" : 33143,

           "avgObjSize" : 56,

           "storageSize" : 544768,

           "capped" : false,

           ...

           "ok" : 1

       },

       "shard3" : {

           "ns" : "testDB.logs",

           "size" : 1883147,

           "count" : 33102,

           "avgObjSize" : 56,

           "storageSize" : 593920,

           "capped" : false,

           ...

           "ok" : 1

       }

    },

    "ok" : 1

}

 

 

 

 

 

 

 

 

 

 

8、後期運維

mongodb的啟動順序是,先啟動配置伺服器,在啟動分片,最後啟動mongos.

/usr/local/mongodb/bin/mongod -f /usr/local/mongodb/config-server.conf

/usr/local/mongodb/bin/mongod -f /usr/local/mongodb/shard1.conf

/usr/local/mongodb/bin/mongod -f /usr/local/mongodb/shard2.conf

/usr/local/mongodb/bin/mongod -f /usr/local/mongodb/shard3.conf

/usr/local/mongodb/bin/mongos -f /usr/local/mongodb/mongos.conf

 

 

關閉時,直接killall殺掉所有進程

killall mongod

killall mongos

 

沒有killall命令的使用<yum install psmisc>安裝


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

-Advertisement-
Play Games
更多相關文章
  • Monthly由來 最近在做關於智能財稅的項目,大量用到了賬期相關的數據操作。項目已有兩年曆史了,對於賬期數據,前輩們用的是DateTime數據類型,即每個月的最後一天就是賬期。而用DateTime來表達賬期數據,確實讓我人很困惑: 1. 概念不統一: DateTime是時間類型,而賬期只跟年月相關 ...
  • 讀<C#併發編程經典實例.PDF>總結: 如果程式中存在大量的計算任務,並且這些任務能夠分割成幾個獨立的任務塊,那麼就應該使用並行編程。 並行編程可提高CPU利用率。 通常情況下,伺服器程式不適合併行編程。大多數伺服器本身就具有並行能力,在伺服器上進行並行編程,將降低本身的並行處理能力,不會有實際的 ...
  • 報錯信息:There is already an open DataReader associated with this Connection which must be closed first 緩解的方案:在實例化database的時候利用線程獨立實例化,每個線程一個單獨的database實例 ...
  • 因為access_token,在以後的高級功能裡面會經常用到,所以這裡不得不這裡對前面所講解的access_token改造一下。另外需要說明的是access_token是變化的,有自己的周期,官方解釋為:"有效期為7200秒",這就要求我們把獲得的access_token存入一個物理文件或者Appl ...
  • 系列文章 1. 開源一款強大的文件服務組件(QJ_FileCenter)(系列一) 2. 開源一款強大的文件服務組件(QJ_FileCenter)(系列二 安裝說明) 3. 開源一款強大的文件服務組件(QJ_FileCenter)(系列三 訪問介面與項目集成)計劃中... 4. 開源一款強大的文件服 ...
  • 需要掌握的重要目錄 /etc/sysconfig/network-scripts/ifcfg-eth0:網卡配置文件 /etc/resolv.conf:客戶端DNS /etc/hosts:本地的主機名解析的文件 /etc/sysconfig/network:主機名 /etc/fstab:開機磁碟自動 ...
  • 一、搭建前言 很多公司都有自己搭建的yum倉庫,這樣做的好處有以下幾點: 1)節省流量,避免從公網重覆下載軟體包;為公司省錢; 2)提升下載速度;外網下載受帶寬影響,下載速度較慢,而yum倉庫在區域網中就很快; 3)方便統一管理,軟體版本,都能做到統一; 4)避免訪問外網,很多大公司,都是與公網隔絕 ...
  • 一、簡介 LVS是 Linux Virtual Server 的簡稱,也就是Linux虛擬伺服器。這是一個由章文嵩博士發起的一個開源項目,它的官方網址是http://www.linuxvirtualserver.org,現在 LVS 已經是 Linux 內核標準的一部分。使用 LVS 可以達到的技術 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...