校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁 > 知識庫 > mongodb3.4集群搭建實(shí)戰(zhàn)之高可用的分片+副本集

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

熱門標(biāo)簽:云南外呼系統(tǒng) 電銷機(jī)器人是什么軟件 呼和浩特電銷外呼系統(tǒng)加盟 濟(jì)南電銷機(jī)器人加盟公司 怎么投訴地圖標(biāo)注 廣州長安公司怎樣申請400電話 蘋果汽車租賃店地圖標(biāo)注 老虎洗衣店地圖標(biāo)注 杭州人工電銷機(jī)器人價格

前言

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

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

相關(guān)概念

先來看一張圖:

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

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

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

shard,分片(sharding)是指將數(shù)據(jù)庫拆分,將其分散在不同的機(jī)器上的過程。將數(shù)據(jù)分散到不同的機(jī)器上,不需要功能強(qiáng)大的服務(wù)器就可以存儲更多的數(shù)據(jù)和處理更大的負(fù)載。基本思想就是將集合切成小塊,這些塊分散到若干片里,每個片只負(fù)責(zé)總數(shù)據(jù)的一部分,最后通過一個均衡器來對各個分片進(jìn)行均衡(數(shù)據(jù)遷移)。

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

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

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

環(huán)境準(zhǔn)備

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

服務(wù)器規(guī)劃

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

端口分配:

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

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

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
# 內(nèi)容
export MONGODB_HOME=/usr/local/mongodb
export PATH=$MONGODB_HOME/bin:$PATH
# 使立即生效
source /etc/profile

2、config server配置服務(wù)器

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

添加配置文件

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

## 配置文件內(nèi)容
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
 
#設(shè)置最大連接數(shù)
maxConns=20000

啟動三臺服務(wù)器的config server

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

登錄任意一臺配置服務(wù)器,初始化配置副本集

#連接
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”應(yīng)與配置文件中配置的 replicaction.replSetName 一致,”members” 中的 “host” 為三個節(jié)點(diǎn)的 ip 和 port

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

設(shè)置第一個分片副本集

配置文件

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

#配置文件內(nèi)容
#——————————————–
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
 
#設(shè)置最大連接數(shù)
maxConns=20000

啟動三臺服務(wù)器的shard1 server

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

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

mongo --port 27001
#使用admin數(shù)據(jù)庫
use admin
#定義副本集配置,第三個節(jié)點(diǎn)的 "arbiterOnly":true 代表其為仲裁節(jié)點(diǎn)。
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);

設(shè)置第二個分片副本集

配置文件

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

#配置文件內(nèi)容
#——————————————–
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
 
#設(shè)置最大連接數(shù)
maxConns=20000

啟動三臺服務(wù)器的shard2 server

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

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

mongo --port 27002
#使用admin數(shù)據(jù)庫
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);

設(shè)置第三個分片副本集

配置文件

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

 
#配置文件內(nèi)容
#——————————————–
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
 
#設(shè)置最大連接數(shù)
maxConns=20000

啟動三臺服務(wù)器的shard3 server

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

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

mongo --port 27003
#使用admin數(shù)據(jù)庫
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、配置路由服務(wù)器 mongos

先啟動配置服務(wù)器和分片服務(wù)器,后啟動路由實(shí)例啟動路由實(shí)例:(三臺機(jī)器)

vi /usr/local/mongodb/conf/mongos.conf

#內(nèi)容
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)聽的配置服務(wù)器,只能有1個或者3個 configs為配置服務(wù)器的副本集名字
configdb = configs/192.168.0.75:21000,192.168.0.84:21000,192.168.0.86:21000
 
#設(shè)置最大連接數(shù)
maxConns=20000

啟動三臺服務(wù)器的mongos server

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

5、啟用分片

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

登陸任意一臺mongos

mongo --port 20000
#使用admin數(shù)據(jù)庫
user admin
#串聯(lián)路由服務(wù)器與分配副本集
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、測試

目前配置服務(wù)、路由服務(wù)、分片服務(wù)、副本集服務(wù)都已經(jīng)串聯(lián)起來了,但我們的目的是希望插入數(shù)據(jù),數(shù)據(jù)能夠自動分片。連接在mongos上,準(zhǔn)備讓指定的數(shù)據(jù)庫、指定的集合分片生效。

#指定testdb分片生效
db.runCommand( { enablesharding :"testdb"});
#指定數(shù)據(jù)庫里需要分片的集合和片鍵
db.runCommand( { shardcollection : "testdb.table1",key : {id: 1} } )

我們設(shè)置testdb的 table1 表需要分片,根據(jù) id 自動分片到 shard1 ,shard2,shard3 上面去。要這樣設(shè)置是因為不是所有mongodb 的數(shù)據(jù)庫和表 都需要分片!

測試分片配置結(jié)果

mongo 127.0.0.1:20000
#使用testdb
use testdb;
#插入測試數(shù)據(jù)
for (var i = 1; i = 100000; i++)
db.table1.save({id:i,"test1":"testval1"});
#查看分片情況如下,部分無關(guān)信息省掉了
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
}

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

后期運(yùn)維

啟動關(guān)閉

mongodb的啟動順序是,先啟動配置服務(wù)器,在啟動分片,最后啟動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

關(guān)閉時,直接killall殺掉所有進(jìn)程

killall mongod
killall mongos

總結(jié)

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

參考:

  • 搭建高可用mongodb集群(四)—— 分片
  • MongoDB3.4副本集分片集群搭建
  • Mongodb高可用集群(四)——分片
您可能感興趣的文章:
  • 如何為MongoDB添加分片副本集
  • 分布式文檔存儲數(shù)據(jù)庫之MongoDB分片集群的問題
  • MongoDB搭建高可用集群的完整步驟(3個分片+3個副本)
  • Mongodb副本集和分片示例詳解
  • MongoDB分片集群部署詳解
  • MongoDB分片在部署與維護(hù)管理中常見的事項總結(jié)大全
  • 詳解MongoDB4.0構(gòu)建分布式分片群集
  • MongoDB分片鍵的選擇和案例實(shí)例詳解
  • MongoDB分片詳解
  • mongodb分片技術(shù)_動力節(jié)點(diǎn)Java學(xué)院整理
  • 深入理解MongoDB分片的管理
  • Mongodb 刪除添加分片與非分片表維護(hù)
  • MongoDB 主分片(primary shard)相關(guān)總結(jié)

標(biāo)簽:無錫 泰安 遼陽 雞西 興安盟 廈門 玉林 自貢

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《mongodb3.4集群搭建實(shí)戰(zhàn)之高可用的分片+副本集》,本文關(guān)鍵詞  mongodb3.4,集群,搭建,實(shí)戰(zhàn),;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《mongodb3.4集群搭建實(shí)戰(zhàn)之高可用的分片+副本集》相關(guān)的同類信息!
  • 本頁收集關(guān)于mongodb3.4集群搭建實(shí)戰(zhàn)之高可用的分片+副本集的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    主站蜘蛛池模板: 郧西县| 长沙县| 密云县| 萍乡市| 资兴市| 汤原县| 海南省| 蒙山县| 通化市| 黔东| 永修县| 茌平县| 永靖县| 南开区| 沅江市| 酉阳| 达孜县| 太白县| 万源市| 乐山市| 隆化县| 大冶市| 南投县| 新疆| 神木县| 海口市| 大石桥市| 监利县| 曲沃县| 大兴区| 红桥区| 竹山县| 疏勒县| 上蔡县| 花莲县| 镇宁| 彰武县| 封丘县| 江北区| 泽库县| 星子县|