麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 數(shù)據(jù)庫(kù) > MongoDB > 正文

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

2020-03-14 12:53:26
字體:
供稿:網(wǎng)友

前言

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

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

相關(guān)概念

先來看一張圖:

mongodb,3.4,集群搭建,mongodb分片集群搭建,mongodb分片集群

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

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

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

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

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

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

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

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

  • 系統(tǒng)系統(tǒng) centos6.5
  • 三臺(tái)服務(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:20000config:21000shard1:27001shard2:27002shard3: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

分別在每臺(tái)機(jī)器建立conf、mongos、config、shard1、shard2、shard3六個(gè)目錄,因?yàn)閙ongos不存儲(chǔ)數(shù)據(jù),只需要建立日志文件目錄即可。

mkdir -p /usr/local/mongodb/confmkdir -p /usr/local/mongodb/mongos/logmkdir -p /usr/local/mongodb/config/datamkdir -p /usr/local/mongodb/config/logmkdir -p /usr/local/mongodb/shard1/datamkdir -p /usr/local/mongodb/shard1/logmkdir -p /usr/local/mongodb/shard2/datamkdir -p /usr/local/mongodb/shard2/logmkdir -p /usr/local/mongodb/shard3/datamkdir -p /usr/local/mongodb/shard3/log

配置環(huán)境變量

vim /etc/profile# 內(nèi)容export MONGODB_HOME=/usr/local/mongodbexport 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.piddbpath = /usr/local/mongodb/config/datalogpath = /usr/local/mongodb/config/log/congigsrv.loglogappend = true bind_ip = 0.0.0.0port = 21000fork = true #declare this is a config db of a cluster;configsvr = true#副本集名稱replSet=configs #設(shè)置最大連接數(shù)maxConns=20000

啟動(dòng)三臺(tái)服務(wù)器的config server

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

登錄任意一臺(tái)配置服務(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” 為三個(gè)節(jié)點(diǎn)的 ip 和 port

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

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

配置文件

vi /usr/local/mongodb/conf/shard1.conf#配置文件內(nèi)容#——————————————–pidfilepath = /usr/local/mongodb/shard1/log/shard1.piddbpath = /usr/local/mongodb/shard1/datalogpath = /usr/local/mongodb/shard1/log/shard1.loglogappend = truebind_ip = 0.0.0.0port = 27001fork = true #打開web監(jiān)控httpinterface=truerest=true #副本集名稱replSet=shard1 #declare this is a shard db of a cluster;shardsvr = true #設(shè)置最大連接數(shù)maxConns=20000

啟動(dòng)三臺(tái)服務(wù)器的shard1 server

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

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

mongo --port 27001#使用admin數(shù)據(jù)庫(kù)use admin#定義副本集配置,第三個(gè)節(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è)置第二個(gè)分片副本集

配置文件

vi /usr/local/mongodb/conf/shard2.conf#配置文件內(nèi)容#——————————————–pidfilepath = /usr/local/mongodb/shard2/log/shard2.piddbpath = /usr/local/mongodb/shard2/datalogpath = /usr/local/mongodb/shard2/log/shard2.loglogappend = truebind_ip = 0.0.0.0port = 27002fork = true #打開web監(jiān)控httpinterface=truerest=true #副本集名稱replSet=shard2 #declare this is a shard db of a cluster;shardsvr = true #設(shè)置最大連接數(shù)maxConns=20000

啟動(dòng)三臺(tái)服務(wù)器的shard2 server

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

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

mongo --port 27002#使用admin數(shù)據(jù)庫(kù)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è)置第三個(gè)分片副本集

配置文件

vi /usr/local/mongodb/conf/shard3.conf #配置文件內(nèi)容#——————————————–pidfilepath = /usr/local/mongodb/shard3/log/shard3.piddbpath = /usr/local/mongodb/shard3/datalogpath = /usr/local/mongodb/shard3/log/shard3.loglogappend = truebind_ip = 0.0.0.0port = 27003fork = true #打開web監(jiān)控httpinterface=truerest=true #副本集名稱replSet=shard3 #declare this is a shard db of a cluster;shardsvr = true #設(shè)置最大連接數(shù)maxConns=20000

啟動(dòng)三臺(tái)服務(wù)器的shard3 server

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

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

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

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

vi /usr/local/mongodb/conf/mongos.conf#內(nèi)容pidfilepath = /usr/local/mongodb/mongos/log/mongos.pidlogpath = /usr/local/mongodb/mongos/log/mongos.loglogappend = truebind_ip = 0.0.0.0port = 20000fork = true#監(jiān)聽的配置服務(wù)器,只能有1個(gè)或者3個(gè) configs為配置服務(wù)器的副本集名字configdb = configs/192.168.0.75:21000,192.168.0.84:21000,192.168.0.86:21000 #設(shè)置最大連接數(shù)maxConns=20000

啟動(dòng)三臺(tái)服務(wù)器的mongos server

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

5、啟用分片

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

登陸任意一臺(tái)mongos

mongo --port 20000#使用admin數(shù)據(jù)庫(kù)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、測(cè)試

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

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

我們?cè)O(shè)置testdb的 table1 表需要分片,根據(jù) id 自動(dòng)分片到 shard1 ,shard2,shard3 上面去。要這樣設(shè)置是因?yàn)椴皇撬衜ongodb 的數(shù)據(jù)庫(kù)和表 都需要分片!

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

mongo 127.0.0.1:20000#使用testdbuse testdb;#插入測(cè)試數(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個(gè)分片,各自分片數(shù)量為: shard1 “count” : 42183,shard2 “count” : 38937,shard3 “count” : 18880。已經(jīng)成功了!

后期運(yùn)維

啟動(dòng)關(guān)閉

mongodb的啟動(dòng)順序是,先啟動(dòng)配置服務(wù)器,在啟動(dòng)分片,最后啟動(dòng)mongos.

mongod -f /usr/local/mongodb/conf/config.confmongod -f /usr/local/mongodb/conf/shard1.confmongod -f /usr/local/mongodb/conf/shard2.confmongod -f /usr/local/mongodb/conf/shard3.confmongod -f /usr/local/mongodb/conf/mongos.conf

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

killall mongodkillall mongos

總結(jié)

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


注:相關(guān)教程知識(shí)閱讀請(qǐng)移步到MongoDB頻道。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 久久国产一级 | 欧美精品99 | 精品欧美一区二区精品久久 | 精品一区二区久久久久久按摩 | 成人毛片视频在线观看 | 毛片在线视频在线播放 | 伊人一二三四区 | 91久久久久久久一区二区 | 亚洲精品欧美在线 | 欧美日韩在线中文字幕 | 国产精品自在线拍 | 日本精品视频一区二区三区四区 | 亚洲一区二区在线 | 久久精品国产亚洲7777小说 | 久久精品男人 | 久久久中精品2020中文 | 九九综合九九 | 国产精品视频成人 | 天天透天天狠天天爱综合97 | 亚洲精品无码不卡在线播放he | 狠狠干夜夜草 | 国产毛片自拍 | 欧美视频国产精品 | 欧美一级美国一级 | 国产羞羞视频 | 视频一区 中文字幕 | 亚洲天堂岛国片 | 日本在线看片 | 亚洲成人在线视频网 | 日本欧美在线播放 | 九九热九九热 | 亚洲一区二区 | 在线看三级 | 欧美片一区二区 | 钻石午夜影院 | 午夜视频啊啊啊 | 免费一级电影 | 国产精品久久77777 | av电影院在线观看 | 热99在线视频 | 激情福利视频 |