亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數據庫 > MongoDB > 正文

mongodb3.4集群搭建實戰之高可用的分片+副本集

2020-03-14 12:53:26
字體:
來源:轉載
供稿:網友

前言

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

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

相關概念

先來看一張圖:

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

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

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

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

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

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

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

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

環境準備

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

服務器規劃

 

服務器75 服務器84 服務器86
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: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

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

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

配置環境變量

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

2、config server配置服務器

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

添加配置文件

vi /usr/local/mongodb/conf/config.conf## 配置文件內容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 #設置最大連接數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” 為三個節點的 ip 和 port

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

設置第一個分片副本集

配置文件

vi /usr/local/mongodb/conf/shard1.conf#配置文件內容#——————————————–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監控httpinterface=truerest=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#定義副本集配置,第三個節點的 "arbiterOnly":true 代表其為仲裁節點。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.piddbpath = /usr/local/mongodb/shard2/datalogpath = /usr/local/mongodb/shard2/log/shard2.loglogappend = truebind_ip = 0.0.0.0port = 27002fork = true #打開web監控httpinterface=truerest=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.piddbpath = /usr/local/mongodb/shard3/datalogpath = /usr/local/mongodb/shard3/log/shard3.loglogappend = truebind_ip = 0.0.0.0port = 27003fork = true #打開web監控httpinterface=truerest=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.pidlogpath = /usr/local/mongodb/mongos/log/mongos.loglogappend = truebind_ip = 0.0.0.0port = 20000fork = true#監聽的配置服務器,只能有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")#查看集群狀態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#使用testdbuse 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.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

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

killall mongodkillall mongos

總結

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


注:相關教程知識閱讀請移步到MongoDB頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
揄拍成人国产精品视频| 久久久亚洲成人| 日韩欧美a级成人黄色| 日韩在线一区二区三区免费视频| 亚洲成人在线视频播放| 中文字幕久久久| 国产成人精品电影| 久久中文字幕在线| 中文字幕成人在线| 国产亚洲欧洲黄色| 久久人人97超碰精品888| 欧美激情2020午夜免费观看| 国产精品视频999| 97精品国产aⅴ7777| 日韩毛片在线看| 欧美理论电影在线观看| 亚洲欧美色图片| 国内伊人久久久久久网站视频| 亚洲最新av在线| 亚洲 日韩 国产第一| 欧美丰满片xxx777| 亚洲石原莉奈一区二区在线观看| 国产精品成av人在线视午夜片| 91久久在线观看| 欧美久久精品午夜青青大伊人| 亚洲欧美三级在线| 国产精品一二区| 国内精品小视频| 久久久久久国产精品久久| 国产日本欧美一区二区三区在线| 日韩精品视频在线观看免费| 另类专区欧美制服同性| 欧美激情一区二区三区在线视频观看| 国产999在线观看| 中文字幕亚洲欧美| 国产欧美 在线欧美| 国产成人高清激情视频在线观看| 日本午夜精品理论片a级appf发布| 国产精品男女猛烈高潮激情| 日韩免费在线视频| 欧美麻豆久久久久久中文| 国产精品久久久久久久久久99| 午夜精品久久17c| 欧美精品国产精品日韩精品| 亚洲国产精品久久久久秋霞蜜臀| 国产精品都在这里| 92裸体在线视频网站| 久久久999国产| 色妞久久福利网| 海角国产乱辈乱精品视频| 国产精品综合久久久| 亚洲综合大片69999| 欧美激情亚洲精品| 日韩欧美有码在线| 国产视频精品免费播放| 亚洲日韩欧美视频一区| 中文字幕自拍vr一区二区三区| 久久久久中文字幕2018| 中文字幕欧美在线| 国内伊人久久久久久网站视频| 国产精品精品视频一区二区三区| 久久久91精品国产| 久久av.com| 欧美性猛交xxxx乱大交3| 国内精品久久影院| 久久夜色撩人精品| 国内揄拍国内精品少妇国语| 国产精品av在线播放| 日韩在线播放一区| 亚洲精品电影网| 在线视频欧美性高潮| 久久天天躁狠狠躁夜夜躁| 国产玖玖精品视频| 欧美精品在线极品| 欧美视频不卡中文| 自拍偷拍亚洲在线| 亚洲精品日韩欧美| 国产精品一区二区三区免费视频| 国产精品jvid在线观看蜜臀| 欧美尺度大的性做爰视频| 在线视频免费一区二区| 午夜精品一区二区三区在线视频| 日韩欧美中文在线| 综合av色偷偷网| 2024亚洲男人天堂| 亚洲国产欧美一区二区三区同亚洲| 中文字幕视频一区二区在线有码| 欧美日韩中文字幕日韩欧美| 91视频九色网站| 国产精品扒开腿做爽爽爽男男| 国产精品国内视频| 亚洲欧美在线免费观看| 2019国产精品自在线拍国产不卡| 日韩欧美在线一区| 久久久免费在线观看| 国产91精品黑色丝袜高跟鞋| 欧美精品在线观看91| 日韩69视频在线观看| 国产日韩欧美中文| 成人免费观看网址| 欧美成人精品三级在线观看| 国产日韩换脸av一区在线观看| 国产a∨精品一区二区三区不卡| 色先锋久久影院av| 久久成人精品一区二区三区| 亚洲精品中文字幕有码专区| 日韩精品中文字幕在线播放| 国产91精品视频在线观看| 亚洲999一在线观看www| 久久久久久久一区二区| 国产欧美日韩最新| 国产精品一区av| 综合激情国产一区| 国产午夜精品视频免费不卡69堂| 免费av一区二区| 97免费视频在线播放| 91久久国产综合久久91精品网站| 日韩高清电影好看的电视剧电影| 亚洲欧美福利视频| 亚洲欧美日韩国产中文专区| 日韩免费黄色av| 国产精品久久久久久久久久免费| 欧美一级大胆视频| 欧美激情一级二级| 久久久噜久噜久久综合| 久久久久久久成人| 国产精品成人品| 麻豆一区二区在线观看| 日韩美女在线播放| 亚洲人成网站999久久久综合| 国产中文字幕亚洲| 国产亚洲人成网站在线观看| 欧美日韩一区二区在线播放| 国产成人av在线播放| 欧美xxxx18国产| 91国产视频在线| 91精品国产综合久久香蕉922| 欧美日韩第一视频| 欧美在线一级va免费观看| 国产精品久久久久999| 91成品人片a无限观看| 国产亚洲一级高清| 欧美大片网站在线观看| 亚洲欧美激情另类校园| 亚洲美女黄色片| 九九热精品视频国产| 欧美激情视频网站| 久久久999国产精品| 中日韩午夜理伦电影免费| 久久精品中文字幕电影| 欧美成人午夜剧场免费观看| 久久久久久久久久久人体| 久久亚洲国产成人| 97国产一区二区精品久久呦| 欧美色欧美亚洲高清在线视频| www.亚洲男人天堂| 国产精品免费视频xxxx| 欧美中文在线字幕| 高跟丝袜欧美一区| 亚洲一区二区日本| 久久久久久网站| 欧美一区二区三区精品电影| 国产精品自拍偷拍| 国产女同一区二区|