欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

mongodb3.4集群搭建實戰(zhàn)之高可用的分片+副本集

 更新時間:2017年08月13日 15:11:51   作者:純潔的微笑  
這篇文章主要給大家介紹了關于mongodb3.4集群搭建實戰(zhàn)之高可用的分片+副本集的相關資料,文中通過示例代碼將實現的步驟一步步的介紹的非常詳細,對大家具有一定的參考學習價值,需要的朋友們下面跟著小編來一起學習學習吧。

前言

最近因為工作的原因,在學習使用mongodb數據庫,mongodb是最常用的nodql數據庫,在數據庫排名中已經上升到了前六。這篇文章介紹如何搭建高可用的mongodb(分片+副本)集群,分享出來供大家參考學習,下面話不多說了,來一起看看詳細的介紹:

在搭建集群之前,需要首先了解幾個概念:路由,分片、副本集、配置服務器等。

相關概念

先來看一張圖:

從圖中可以看到有四個組件:mongos、config server、shard、replica set。

mongos,數據庫集群請求的入口,所有的請求都通過mongos進行協調,不需要在應用程序添加一個路由選擇器,mongos自己就是一個請求分發(fā)中心,它負責把對應的數據請求請求轉發(fā)到對應的shard服務器上。在生產環(huán)境通常有多mongos作為請求的入口,防止其中一個掛掉所有的mongodb請求都沒有辦法操作。

config server,顧名思義為配置服務器,存儲所有數據庫元信息(路由、分片)的配置。mongos本身沒有物理存儲分片服務器和數據路由信息,只是緩存在內存里,配置服務器則實際存儲這些數據。mongos第一次啟動或者關掉重啟就會從 config server 加載配置信息,以后如果配置服務器信息變化會通知到所有的 mongos 更新自己的狀態(tài),這樣 mongos 就能繼續(xù)準確路由。在生產環(huán)境通常有多個 config server 配置服務器,因為它存儲了分片路由的元數據,防止數據丟失!

shard,分片(sharding)是指將數據庫拆分,將其分散在不同的機器上的過程。將數據分散到不同的機器上,不需要功能強大的服務器就可以存儲更多的數據和處理更大的負載?;舅枷刖褪菍⒓锨谐尚K,這些塊分散到若干片里,每個片只負責總數據的一部分,最后通過一個均衡器來對各個分片進行均衡(數據遷移)。

replica set,中文翻譯副本集,其實就是shard的備份,防止shard掛掉之后數據丟失。復制提供了數據的冗余備份,并在多個服務器上存儲數據副本,提高了數據的可用性, 并可以保證數據的安全性。

仲裁者(Arbiter),是復制集中的一個MongoDB實例,它并不保存數據。仲裁節(jié)點使用最小的資源并且不要求硬件設備,不能將Arbiter部署在同一個數據集節(jié)點中,可以部署在其他應用服務器或者監(jiān)視服務器中,也可部署在單獨的虛擬機中。為了確保復制集中有奇數的投票成員(包括primary),需要添加仲裁節(jié)點做為投票,否則primary不能運行時不會自動切換primary。

簡單了解之后,我們可以這樣總結一下,應用請求mongos來操作mongodb的增刪改查,配置服務器存儲數據庫元信息,并且和mongos做同步,數據最終存入在shard(分片)上,為了防止數據丟失同步在副本集中存儲了一份,仲裁在數據存儲到分片的時候決定存儲到哪個節(jié)點。

環(huán)境準備

  • 系統(tǒng)系統(tǒng) centos6.5
  • 三臺服務器:192.168.0.75/84/86
  • 安裝包: mongodb-linux-x86_64-3.4.6.tgz

服務器規(guī)劃

服務器75 服務器84 服務器86
mongos mongos mongos
config server config server config server
shard server1 主節(jié)點 shard server1 副節(jié)點 shard server1 仲裁
shard server2 仲裁 shard server2 主節(jié)點 shard server2 副節(jié)點
shard server3 副節(jié)點 shard server3 仲裁 shard server3 主節(jié)點

端口分配:

mongos:20000
config:21000
shard1:27001
shard2:27002
shard3:27003

集群搭建

1、安裝mongodb

#解壓
tar -xzvf mongodb-linux-x86_64-3.4.6.tgz -C /usr/local/
#改名
mv mongodb-linux-x86_64-3.4.6 mongodb

分別在每臺機器建立conf、mongos、config、shard1、shard2、shard3六個目錄,因為mongos不存儲數據,只需要建立日志文件目錄即可。

mkdir -p /usr/local/mongodb/conf
mkdir -p /usr/local/mongodb/mongos/log
mkdir -p /usr/local/mongodb/config/data
mkdir -p /usr/local/mongodb/config/log
mkdir -p /usr/local/mongodb/shard1/data
mkdir -p /usr/local/mongodb/shard1/log
mkdir -p /usr/local/mongodb/shard2/data
mkdir -p /usr/local/mongodb/shard2/log
mkdir -p /usr/local/mongodb/shard3/data
mkdir -p /usr/local/mongodb/shard3/log

配置環(huán)境變量

vim /etc/profile
# 內容
export MONGODB_HOME=/usr/local/mongodb
export PATH=$MONGODB_HOME/bin:$PATH
# 使立即生效
source /etc/profile

2、config server配置服務器

mongodb3.4以后要求配置服務器也創(chuàng)建副本集,不然集群搭建不成功。

添加配置文件

vi /usr/local/mongodb/conf/config.conf

## 配置文件內容
pidfilepath = /usr/local/mongodb/config/log/configsrv.pid
dbpath = /usr/local/mongodb/config/data
logpath = /usr/local/mongodb/config/log/congigsrv.log
logappend = true
 
bind_ip = 0.0.0.0
port = 21000
fork = true
 
#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.0.75:21000" },
...  {_id : 1, host : "192.168.0.84:21000" },
...  {_id : 2, host : "192.168.0.86:21000" }
... ]
... }

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

其中,”_id” : “configs”應與配置文件中配置的 replicaction.replSetName 一致,”members” 中的 “host” 為三個節(jié)點的 ip 和 port

3、配置分片副本集(三臺機器)

設置第一個分片副本集

配置文件

vi /usr/local/mongodb/conf/shard1.conf

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

bind_ip = 0.0.0.0
port = 27001
fork = true
 
#打開web監(jiān)控
httpinterface=true
rest=true
 
#副本集名稱
replSet=shard1
 
#declare this is a shard db of a cluster;
shardsvr = true
 
#設置最大連接數
maxConns=20000

啟動三臺服務器的shard1 server

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

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

mongo --port 27001
#使用admin數據庫
use admin
#定義副本集配置,第三個節(jié)點的 "arbiterOnly":true 代表其為仲裁節(jié)點。
config = {
... _id : "shard1",
... members : [
...  {_id : 0, host : "192.168.0.75:27001" },
...  {_id : 1, host : "192.168.0.84:27001" },
...  {_id : 2, host : "192.168.0.86:27001” , arbiterOnly: true }
... ]
... }
#初始化副本集配置
rs.initiate(config);

設置第二個分片副本集

配置文件

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

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

bind_ip = 0.0.0.0
port = 27002
fork = true
 
#打開web監(jiān)控
httpinterface=true
rest=true
 
#副本集名稱
replSet=shard2
 
#declare this is a shard db of a cluster;
shardsvr = true
 
#設置最大連接數
maxConns=20000

啟動三臺服務器的shard2 server

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

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

mongo --port 27002
#使用admin數據庫
use admin
#定義副本集配置
config = {
... _id : "shard2",
... members : [
...  {_id : 0, host : "192.168.0.75:27002" , arbiterOnly: true },
...  {_id : 1, host : "192.168.0.84:27002" },
...  {_id : 2, host : "192.168.0.86:27002" }
... ]
... }

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

設置第三個分片副本集

配置文件

vi /usr/local/mongodb/conf/shard3.conf

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

bind_ip = 0.0.0.0
port = 27003
fork = true
 
#打開web監(jiān)控
httpinterface=true
rest=true
 
#副本集名稱
replSet=shard3
 
#declare this is a shard db of a cluster;
shardsvr = true
 
#設置最大連接數
maxConns=20000

啟動三臺服務器的shard3 server

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

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

mongo --port 27003
#使用admin數據庫
use admin
#定義副本集配置
config = {
... _id : "shard3",
...  members : [
...   {_id : 0, host : "192.168.0.75:27003" },
...   {_id : 1, host : "192.168.0.84:27003" , arbiterOnly: true},
...   {_id : 2, host : "192.168.0.86:27003" }
...  ]
... }

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

4、配置路由服務器 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 = 20000
fork = true

#監(jiān)聽的配置服務器,只能有1個或者3個 configs為配置服務器的副本集名字
configdb = configs/192.168.0.75:21000,192.168.0.84:21000,192.168.0.86:21000
 
#設置最大連接數
maxConns=20000

啟動三臺服務器的mongos server

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

5、啟用分片

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

登陸任意一臺mongos

mongo --port 20000
#使用admin數據庫
user admin
#串聯路由服務器與分配副本集
sh.addShard("shard1/192.168.0.75:27001,192.168.0.84:27001,192.168.0.86:27001")
sh.addShard("shard2/192.168.0.75:27002,192.168.0.84:27002,192.168.0.86:27002")
sh.addShard("shard3/192.168.0.75:27003,192.168.0.84:27003,192.168.0.86:27003")
#查看集群狀態(tài)
sh.status()

6、測試

目前配置服務、路由服務、分片服務、副本集服務都已經串聯起來了,但我們的目的是希望插入數據,數據能夠自動分片。連接在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:20000
#使用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
}

可以看到數據分到3個分片,各自分片數量為: shard1 “count” : 42183,shard2 “count” : 38937,shard3 “count” : 18880。已經成功了!

后期運維

啟動關閉

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

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

參考:

相關文章

  • Windows系統(tǒng)下安裝MongoDB并內網穿透遠程連接

    Windows系統(tǒng)下安裝MongoDB并內網穿透遠程連接

    這篇文章主要給大家介紹了關于Windows系統(tǒng)下安裝MongoDB并內網穿透遠程連接的相關資料,文中通過圖文將步驟介紹的非常詳細,對大家學習或者使用MongoDB具有一定的參考學習價值,需要的朋友可以參考下
    2023-03-03
  • MongoDB系列教程(七):MongoDb數據結構詳解

    MongoDB系列教程(七):MongoDb數據結構詳解

    這篇文章主要介紹了MongoDB系列教程(七):MongoDb數據結構詳解,本文講解了Collections、Document、GridFS等3種數據結構,需要的朋友可以參考下
    2015-05-05
  • 詳解MongoDB中創(chuàng)建集合與刪除集合的操作方法

    詳解MongoDB中創(chuàng)建集合與刪除集合的操作方法

    因為MongoDB屬于NoSQL,所以集合collection相當于關系型數據庫中的表table,這里我們就來詳解MongoDB中創(chuàng)建集合與刪除集合的操作方法:
    2016-06-06
  • MongoDB4.2.5安裝方法操作步驟

    MongoDB4.2.5安裝方法操作步驟

    這篇文章主要介紹了MongoDB4.2.5安裝方法操作步驟,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-12-12
  • mongodb操作的模塊手動封裝

    mongodb操作的模塊手動封裝

    這篇文章主要介紹了mongodb操作的模塊手動封裝的相關資料,這里提供實例幫助大家實現這樣的功能,需要的朋友可以參考下
    2017-08-08
  • Mongodb3.0.5 副本集搭建及spring和java連接副本集配置詳細介紹

    Mongodb3.0.5 副本集搭建及spring和java連接副本集配置詳細介紹

    這篇文章主要介紹了Mongodb3.0.5 副本集搭建及spring和java連接副本集配置詳細介紹的相關資料,這里對安裝步驟進行了詳解,需要的朋友可以參考下
    2016-12-12
  • 常用的MongoDB查詢語句的示例代碼

    常用的MongoDB查詢語句的示例代碼

    最近做了幾個規(guī)則邏輯。用到mongo查詢比較多,就是查詢交易信息跑既定規(guī)則篩選出交易商戶,使用聚合管道進行統(tǒng)計和取出簡單處理后的數據,用SQL代替業(yè)務代碼邏輯的判斷,本文給大家介紹Mongodb查詢語句的示例代碼,一起看看吧
    2021-07-07
  • MongoDB集合中的文檔管理

    MongoDB集合中的文檔管理

    這篇文章介紹了MongoDB集合中文檔的管理方法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-07-07
  • Mongodb UPDATE使用$sort將數組重新排序的示例代碼

    Mongodb UPDATE使用$sort將數組重新排序的示例代碼

    $sort方法在$push操作過程中,修改數組元素的排序,$sort方法,必須和$each共同使用,mongodb允許用戶傳遞一個空的數組給$each方法,保證用戶無須向數組中插入元素也可以將數組進行排序,本文給大家介紹了Mongodb UPDATE使用$sort將數組重新排序,需要的朋友可以參考下
    2024-06-06
  • MongoDB安全及身份認證(實例講解)

    MongoDB安全及身份認證(實例講解)

    下面小編就為大家?guī)硪黄狹ongoDB安全及身份認證(實例講解)。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-07-07

最新評論