linux下Mongodb集群搭建:分片+副本集

来源:https://www.cnblogs.com/wwccyy66/archive/2018/09/28/9718614.html
-Advertisement-
Play Games

三台伺服器 192.168.1.40/41/42 安裝包 mongodb-linux-x86_64-amazon2-4.0.1.tgz 埠分配: mongos:28000 config:28001 shard1:28011 shard2:28012 shard3:28013 主要模塊以及配置文件 ...


三台伺服器 192.168.1.40/41/42

安裝包 mongodb-linux-x86_64-amazon2-4.0.1.tgz

服務規劃
 伺服器40  伺服器41  伺服器42
 mongos  mongos  mongos
 config server  config server  config server
 shard server1 主節點  shard server1副節點  shard server1仲裁
 shard server2 仲裁  shard server2 主節點  shard server2 副節點
 shard server3副節點  shard server3仲裁  shard server3主節點

 

 

 

 

 

 

埠分配:

mongos:28000

config:28001

shard1:28011

shard2:28012

shard3:28013

 

主要模塊以及配置文件

1、config server 配置伺服器

 

vi /usr/local/mongodb/conf/config.conf
40伺服器配置文件
pidfilepath = /usr/local/mongodb/config/log/configsrv.pid dbpath = /mydata/mongodb/config/data logpath = /usr/local/mongodb/config/log/congigsrv.log logappend = true bind_ip = 192.168.29.40 port = 28001 fork = true #以守護進程的方式運行MongoDB,創建伺服器進程 #declare this is a config db of a cluster; configsvr = true #副本集名稱 replSet=configs #設置最大連接數 maxConns=20000

41伺服器配置文件
pidfilepath = /usr/local/mongodb/config/log/configsrv.pid dbpath = /mydata/mongodb/config/data logpath = /usr/local/mongodb/config/log/congigsrv.log logappend = true bind_ip = 192.168.29.41 port = 28001 fork = true #以守護進程的方式運行MongoDB,創建伺服器進程 #declare this is a config db of a cluster; configsvr = true #副本集名稱 replSet=configs #設置最大連接數 maxConns=20000
42伺服器配置文件

pidfilepath = /usr/local/mongodb/config/log/configsrv.pid dbpath = /mydata/mongodb/config/data logpath = /usr/local/mongodb/config/log/congigsrv.log logappend = true bind_ip = 192.168.29.42 port = 28001 fork = true #以守護進程的方式運行MongoDB,創建伺服器進程 #declare this is a config db of a cluster; configsvr = true #副本集名稱 replSet=configs #設置最大連接數 maxConns=20000
啟動三台伺服器的config server
mongod -f /usr/local/mongodb/conf/config.conf

登錄任意一臺配置伺服器,初始化配置副本集
#連接
mongo --port 21000
#config變數
config = {
... _id : "configs",
... members : [
... {_id : 0, host : "192.168.1.40:28001" },
... {_id : 1, host : "192.168.1.41:28001" },
... {_id : 2, host : "192.168.1.42:28001" }
... ]
... }

#初始化副本集
rs.initiate(config)

2 配置分片副本集(三台機器)

配置文件
vi /usr/local/mongodb/conf/shard1.conf

#配置文件內容
#——————————————–
pidfilepath = /usr/local/mongodb/shard1/log/shard1.pid
dbpath = /mydata/mongodb/shard1/data
logpath = /usr/local/mongodb/shard1/log/shard1.log
logappend = true

bind_ip = 192.168.29.40
port = 28011
fork = true

#打開web監控
#httpinterface=true
#rest=true

#副本集名稱
replSet=shard1

#declare this is a shard db of a cluster;
shardsvr = true

#設置最大連接數
maxConns=20000
#配置文件內容
#——————————————–
pidfilepath = /usr/local/mongodb/shard1/log/shard1.pid
dbpath = /mydata/mongodb/shard1/data
logpath = /usr/local/mongodb/shard1/log/shard1.log
logappend = true

bind_ip = 192.168.29.41
port = 28011
fork = true

#打開web監控
#httpinterface=true
#rest=true

#副本集名稱
replSet=shard1

#declare this is a shard db of a cluster;
shardsvr = true

#設置最大連接數
maxConns=20000

#配置文件內容
#——————————————–
pidfilepath = /usr/local/mongodb/shard1/log/shard1.pid
dbpath = /mydata/mongodb/shard1/data
logpath = /usr/local/mongodb/shard1/log/shard1.log
logappend = true

bind_ip = 192.168.29.42
port = 28011
fork = true

#打開web監控
#httpinterface=true
#rest=true

#副本集名稱
replSet=shard1

#declare this is a shard db of a cluster;
shardsvr = true

#設置最大連接數
maxConns=20000
 

vi /usr/local/mongodb/conf/shard2.conf

vi /usr/local/mongodb/conf/shard2.conf (shard2和shard3就是上面配置文件相應地方改為2和3就可以了)

3、配置路由伺服器 mongos

先啟動配置伺服器和分片伺服器,後啟動路由實例:(三台機器)
vi /usr/local/mongodb/conf/mongos.conf

#內容
pidfilepath = /usr/local/mongodb/mongos/log/mongos.pid
logpath = /usr/local/mongodb/mongos/log/mongos.log
logappend = true

bind_ip = 0.0.0.0
port = 28000
fork = true

#監聽的配置伺服器,只能有1個或者3個 configs為配置伺服器的副本集名字
configdb = configs/192.168.1.40:28001,192.168.1.41:28001,192.168.1.42:28001

#設置最大連接數
maxConns=20000

 

啟動三台伺服器的mongos server
mongos -f /usr/local/mongodb/conf/mongos.conf

4、啟用分片

目前搭建了mongodb配置伺服器、路由伺服器,各個分片伺服器,不過應用程式連接到mongos路由伺服器並不能使用分片機制,還需要在程式里設置分片配置,讓分片生效。
登陸任意一臺mongos
mongo --port 28000
#使用admin資料庫
use admin
#串聯路由伺服器與分配副本集
sh.addShard("shard1/192.168.1.40:28011,192.168.1.41:28011,192.168.1.42:28011")
sh.addShard("shard2/192.168.1.40:28012,192.168.1.41:28012,192.168.1.42:28012")
sh.addShard("shard3/192.168.1.40:28013,192.168.1.41:28013,192.168.1.42:28013")
#查看集群狀態
sh.status()

 5、測試

目前配置服務、路由服務、分片服務、副本集服務都已經串聯起來了,但我們的目的是希望插入數據,數據能夠自動分片。連接在mongos上,準備讓指定的資料庫、指定的集合分片生效。
#指定testdb分片生效
db.runCommand( { enablesharding :"testdb"});
#指定資料庫里需要分片的集合和片鍵
db.runCommand( { shardcollection : "testdb.table1",key : {id: 1} } )

我們設置testdb的 table1 表需要分片,根據 id 自動分片到 shard1 ,shard2,shard3 上面去。要這樣設置是因為不是所有mongodb 的資料庫和表 都需要分片!
測試分片配置結果
mongo  127.0.0.1:28000
#使用testdb
use  testdb;
#插入測試數據
for (var i = 1; i <= 100000; i++)
db.table1.save({id:i,"test1":"testval1"});
#查看分片情況如下,部分無關信息省掉了
db.table1.stats();

{
        "sharded" : true,
        "ns" : "testdb.table1",
        "count" : 100000,
        "numExtents" : 13,
        "size" : 5600000,
        "storageSize" : 22372352,
        "totalIndexSize" : 6213760,
        "indexSizes" : {
                "_id_" : 3335808,
                "id_1" : 2877952
        },
        "avgObjSize" : 56,
        "nindexes" : 2,
        "nchunks" : 3,
        "shards" : {
                "shard1" : {
                        "ns" : "testdb.table1",
                        "count" : 42183,
                        "size" : 0,
                        ...
                        "ok" : 1
                },
                "shard2" : {
                        "ns" : "testdb.table1",
                        "count" : 38937,
                        "size" : 2180472,
                        ...
                        "ok" : 1
                },
                "shard3" : {
                        "ns" : "testdb.table1",
                        "count" :18880,
                        "size" : 3419528,
                        ...
                        "ok" : 1
                }
        },
        "ok" : 1
}

6、後期運維

啟動關閉
mongodb的啟動順序是,先啟動配置伺服器,在啟動分片,最後啟動mongos.
mongod -f /usr/local/mongodb/conf/config.conf
mongod -f /usr/local/mongodb/conf/shard1.conf
mongod -f /usr/local/mongodb/conf/shard2.conf
mongod -f /usr/local/mongodb/conf/shard3.conf
mongod -f /usr/local/mongodb/conf/mongos.conf

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


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

-Advertisement-
Play Games
更多相關文章
  • 一、微信小程式支付 1、微信小程式端請求支付介面 商戶在小程式中先調用該介面在微信支付服務後臺生成預支付交易單,返回正確的預支付交易後調起支付。具體可以查看介面示例。 介面傳入參數示例: 介面返回示例: 二、介面調用(C#) 1、支付介面方法 2、支付結果通知API 3、Utility類 4、Pay ...
  • /// /// 創建緩存項的文件 /// /// 緩存Key /// object對象 public static void Insert(string key, object obj) { //創建緩存 HttpContext.C... ...
  • public static void SetCookie(string cname, string value, int effective) { HttpCookie cookie = new HttpCookie(cname); cookie.Value = value; cookie.Expi... ...
  • 網上有很多操作案例都失效的。 上面方法適用於centos6,如果是centos7則rpm文件替換為https://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm 2、修改grub的主配置文件/etc/grub.conf,設置defa ...
  • 1 Linux系統命令操作語法的格式 命令_[參數選項]_[文件或路徑] 其中 _ 至少一個空格 如:rm -f /etc/hosts 其中/etc/hosts完整路徑不帶空格 中括弧表示可選的,即命令的參數和路徑文件都是可選的,參數選項表示使用一個命令的不同功能,比如,可以刪除一個文件和創建一個文 ...
  • Nginx("engine x")是一款是由俄羅斯的程式設計師Igor Sysoev所開發高性能的 Web和 反向代理 伺服器,也是一個 IMAP/POP3/SMTP 代理伺服器。 在高連接併發的情況下,Nginx是Apache伺服器不錯的替代品。 Nginx 安裝 系統平臺:CentOS rele ...
  • 一.概述 這篇介紹shell的變數使用,跟其實語言一樣,都有聲明變數,使用變數,在shell中變數允許你臨時地將信息存儲中shell腳本中,以便和腳本的其他命令一起使用。 1.1 環境變數 在前面章節到了linux系統的環境變數,也可以在腳本中訪問這些值。下麵使用set 命令來查看當前系統的環境變數 ...
  • 4.Linux文件查找工具。 Linux經常使用locate與find作為文件查找命令。find可以認為是系統自帶的命令,功能也挺多但是使用方法相對有點繁瑣。find查找的是實時文件數據,一般用於查詢明確知道文件目錄及文件名的時候,可以按照參數將查詢出來的文件做進一步操作如:列印、刪除、執行命令等。 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...