欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

如何使用容器實現(xiàn)生產(chǎn)級別的MongoDBsharding集群的一鍵交付

今天就跟大家聊聊有關(guān)如何使用容器實現(xiàn)生產(chǎn)級別的MongoDB sharding集群的一鍵交付,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。

成都創(chuàng)新互聯(lián)堅持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都網(wǎng)站制作、做網(wǎng)站、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時代的華安網(wǎng)站設(shè)計、移動媒體設(shè)計的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!

作者介紹

魏世江 希云聯(lián)合創(chuàng)始人、CTO,負(fù)責(zé)基于Docker的自動化服務(wù)管理平臺的后端研發(fā)工作。擅長Docker相關(guān)技術(shù)、PasS平臺架構(gòu)及企業(yè)自動化運(yùn)維系統(tǒng)的設(shè)計及開發(fā)。創(chuàng)業(yè)之前在新浪SAE平臺任技術(shù)經(jīng)理,從09年SAE立項至13年下半年的四年多時間里,一直負(fù)責(zé)SAEPasS平臺各種基于Web的服務(wù)管理系統(tǒng)的設(shè)計及開發(fā),在DevOps方面積累了豐富的經(jīng)驗。Docker引擎代碼貢獻(xiàn)者,在Docker開源項目中代碼貢獻(xiàn)量全球排名50名左右。

開篇

Mongo在很早就支持了replication set和sharding集群。經(jīng)過了這么多年的沉淀,Mongo集群的成熟度已經(jīng)非常穩(wěn)定,被大量公司用到自己的生產(chǎn)環(huán)境下。如何使用容器技術(shù)來實現(xiàn)Mongo集群的一鍵式交付部署,屏蔽底層實現(xiàn)的細(xì)節(jié),是很多人關(guān)心的話題。

本文將給大家介紹基于進(jìn)程的容器技術(shù)實現(xiàn)Mongo sharding集群的一鍵部署,充分展現(xiàn)了容器的強(qiáng)大威力。

什么是Mongo sharding集群

Mongo(mongodb.com)作為流行的文檔數(shù)據(jù)庫,有很多有趣的特性,比如內(nèi)置failover、支持文件存儲、支持mapreduce以及可以在服務(wù)器端直接運(yùn)行js腳本,當(dāng)然我們今天最關(guān)心的是它內(nèi)置的sharding功能。分布式系統(tǒng)的設(shè)計向來具有很高的挑戰(zhàn),在最近一些年,隨著互聯(lián)網(wǎng)的發(fā)展,分布式的實踐逐步開始得到推廣和重視。

如果要深入了解Mongo sharding的原理,參考:

https://docs.mongodb.com/manual/sharding

集群編排規(guī)劃

mongo集群涉及到多個服務(wù),包括:

  • configdb, sharding集群的中心配置,是一個replicaset集群,監(jiān)聽在27019端口

  • mongos, 作為sharding集群的訪問和管理入口,監(jiān)聽在27017端口

  • mongo slices,數(shù)據(jù)分片節(jié)點

  • mongo replicaset,每個數(shù)據(jù)分片是一個replicaset集群,用于保障沒有單點,并提供自動failover能力

  • mongo express, mongodb的管理dashboard

拓?fù)鋱D

本次部署,configdb3臺,mongo數(shù)據(jù)節(jié)點12臺,分成4個分片,每個分片1主2從

如何使用容器實現(xiàn)生產(chǎn)級別的MongoDB sharding集群的一鍵交付

首先準(zhǔn)備mongo鏡像

Mongo官方已經(jīng)提供了Mongo 3.2的鏡像,可以用來作為Mongo集群的鏡像.為了減少后續(xù)維護(hù)工作,我們盡可能不構(gòu)建自己的鏡像。

下面我們按照mongo sharding官方的部署文檔,一步步編排集群。

https://docs.mongodb.com/manual/tutorial/deploy-shard-cluster/

部署的順序是:configdb -> mongos -> mongo-replicaset/mongo-slices -> mongo-express

部署mongo configdb

準(zhǔn)備configdb的配置文件

# cat mongo-config.conf

systemLog:
   verbosity: 0
   
operationProfiling:
   slowOpThresholdMs: 3000

processManagement:
   fork: false

storage:
   dbPath: /data/db
   journal:
      enabled: true
   engine: wiredTiger

replication:
   replSetName: {{.ReplSetName}}
   
sharding:
   clusterRole: configsvr
   
net:
   port: 27019

準(zhǔn)備 configdb集群的初始化js腳本

# cat configdb-init.js
{{ $s := service "mongo-configsvr" }}
config = {
    _id : "{{.ReplSetName}}",
     members : [
     {{range $c := $s.Containers }}{_id : {{$c.Seq}}, host: "{{$c.Domain}}:27019"},{{end}}
     ]
}

rs.initiate(config)

rs.status()

開始編排configdb服務(wù)

第一步 創(chuàng)建模版

如何使用容器實現(xiàn)生產(chǎn)級別的MongoDB sharding集群的一鍵交付

第二步 選擇mongo鏡像,指定cmd

如何使用容器實現(xiàn)生產(chǎn)級別的MongoDB sharding集群的一鍵交付

第三步 設(shè)置容器參數(shù),關(guān)聯(lián)配置文件

如何使用容器實現(xiàn)生產(chǎn)級別的MongoDB sharding集群的一鍵交付

第四步 健康檢查策略

如何使用容器實現(xiàn)生產(chǎn)級別的MongoDB sharding集群的一鍵交付

第五步 設(shè)置部署策略,默認(rèn)部署容器數(shù)量

如何使用容器實現(xiàn)生產(chǎn)級別的MongoDB sharding集群的一鍵交付

初始化configdb為replicaset集群

我們通過添加一個one-off的服務(wù)configsvr-init,該服務(wù)執(zhí)行初始化動作后將會自動退出

第一步 選擇mongo鏡像,指定cmd

如何使用容器實現(xiàn)生產(chǎn)級別的MongoDB sharding集群的一鍵交付

第二步 設(shè)置容器參數(shù),關(guān)聯(lián)js腳本

如何使用容器實現(xiàn)生產(chǎn)級別的MongoDB sharding集群的一鍵交付

第三步 設(shè)置部署策略,優(yōu)先級數(shù)字設(shè)為11(configdb優(yōu)先級10)

如何使用容器實現(xiàn)生產(chǎn)級別的MongoDB sharding集群的一鍵交付

至此,configdb的編排算是完成了。我們接下來編排mongos服務(wù)

準(zhǔn)備mongos配置文件

# cat mongos.conf
replication:
   localPingThresholdMs: 2000

{{ $port := .CfgPort }}
{{$s := service "mongo-configsvr"}}
sharding:
   configDB: {{.ReplSetName}}/{{range $i,$c := $s.Containers}}{{if ne $i 0}},{{end}}{{$c.Domain}}:{{$port}}{{end}}

mongo的配置文件我們一般放到/etc/下

編排mongos模版

第一步 選擇鏡像,指定cmd參數(shù)

如何使用容器實現(xiàn)生產(chǎn)級別的MongoDB sharding集群的一鍵交付

注意cmd里執(zhí)行的是mongos

第二步 設(shè)置容器參數(shù),關(guān)聯(lián)mongos配置

如何使用容器實現(xiàn)生產(chǎn)級別的MongoDB sharding集群的一鍵交付

第三步 健康檢查

如何使用容器實現(xiàn)生產(chǎn)級別的MongoDB sharding集群的一鍵交付

第四步 設(shè)置部署策略,注意優(yōu)先級

如何使用容器實現(xiàn)生產(chǎn)級別的MongoDB sharding集群的一鍵交付

mongos必須在configdb集群初始化后運(yùn)行, 接下來我們開始編排mongo的數(shù)據(jù)節(jié)點服務(wù),這是集群中最復(fù)雜的部分

準(zhǔn)備shard節(jié)點的配置文件

cat mongo-shard.conf
systemLog:
   verbosity: 0
   
operationProfiling:
   slowOpThresholdMs: 3000
   
processManagement:
   fork: false
            
storage:
   dbPath: /data/db
   journal:
      enabled: true
   engine: wiredTiger
{{ $num := (parseInt .REPLICA_NUM) |add 1 }}
{{ $cn := (parseInt .Container.Seq) |subtract 1 }}
{{ $rsn := $cn |divide $num }}
replication:
   replSetName: RS{{$rsn}}

變量REPLICA_NUM表示每個主有幾個從,默認(rèn)為2 這里將123個容器編為RS0,456編為RS1,789編為RS2,10,11,12編為RS3

編排mongo shard服務(wù)

第一步 添加mongo鏡像,指定cmd參數(shù)

如何使用容器實現(xiàn)生產(chǎn)級別的MongoDB sharding集群的一鍵交付

第二步 設(shè)置參數(shù),關(guān)聯(lián)配置

如何使用容器實現(xiàn)生產(chǎn)級別的MongoDB sharding集群的一鍵交付

第三步 健康檢查

如何使用容器實現(xiàn)生產(chǎn)級別的MongoDB sharding集群的一鍵交付

第四步 設(shè)置部署

如何使用容器實現(xiàn)生產(chǎn)級別的MongoDB sharding集群的一鍵交付

有了上面的數(shù)據(jù)節(jié)點后,我們發(fā)現(xiàn),還沒有初始化replset,也沒有將每個replset加入到sharding里,下面我們來做shard初始化工作

初始化sharding集群

#!/bin/bash

set -e

{{$s := service "mongo"}}
{{$n := (parseInt .REPLICA_NUM) |add 1}}
{{$slices := $s.ContainerNum |divide $n}}
{{$port := .Port}}
echo begin to init replica set ...
for i in {0..{{$slices |subtract 1}}}; do
  bn=$(( $i * {{$n}} + 1 ))
  en=$(( $bn + {{.REPLICA_NUM}} ))

  RS_NODE=
  RS_NODE_CONFIG=
  ii=$bn
  while [ $ii -le $en ]; do
    RS_NODE=$RS_NODE$ii.mongo.{{.Instance.Name}}.csphere.local:{{$port}},
    RS_NODE_CONFIG=$RS_NODE_CONFIG"{_id:$ii, host: \"$ii.mongo.{{.Instance.Name}}.csphere.local:{{$port}}\"},"
    ii=$(($ii + 1))
  done
  RS_NODES=$(echo $RS_NODE|sed 's/,$//')
  RS_NODES_CONFIG=$(echo $RS_NODE_CONFIG|sed 's/,$//')

  cat > /tmp/RS$i.js <<EOF
config = {
  _id : "RS$i",
  members : [
  $RS_NODES_CONFIG
  ]
}

rs.initiate(config)
rs.status()
EOF

  ## connect to 0.mongo/3.mongo...
  begin_mongo=$bn.mongo.{{.Instance.Name}}.csphere.local
  mongo $begin_mongo /tmp/RS$i.js
  sleep 3
  j=0
  while [ $j -lt 10 ]; do
    mongo $begin_mongo --eval "rs.status()" | grep PRIMARY && break
    j=$(($j + 1))
    sleep 2
  done
  if [ $j -eq 10 ]; then
    echo RS$i initianized failed
    exit 1
  fi
  echo RS$i initinized ok
  
  echo begin to add RS$i to sharding ...
  mongo --eval "sh.addShard(\"RS${i}/$RS_NODES\")" 1.mongos.{{.Instance.Name}}.csphere.local
done

上面的腳本稍微有點復(fù)雜,基本邏輯就是,先初始化每個replicaset集群RS0..RS3,并將每個RS加入到sharding集群當(dāng)作分片slices。具體可以參考上面的部署拓?fù)鋱D。

開始編排shard-init服務(wù)

該服務(wù)是one-off執(zhí)行

第一步 添加鏡像,指定cmd為init.sh

如何使用容器實現(xiàn)生產(chǎn)級別的MongoDB sharding集群的一鍵交付

第二步 設(shè)置參數(shù),同步腳本init.sh

如何使用容器實現(xiàn)生產(chǎn)級別的MongoDB sharding集群的一鍵交付

第三步 設(shè)置部署優(yōu)先級

如何使用容器實現(xiàn)生產(chǎn)級別的MongoDB sharding集群的一鍵交付 到這里mongo sharding集群的編排工作基本就完成了。接下來我們?yōu)閙ongo服務(wù)添加一個可視化面板,方便我們的使用

編排mongo-express服務(wù)

第一步 添加mongo express鏡像

如何使用容器實現(xiàn)生產(chǎn)級別的MongoDB sharding集群的一鍵交付

第二步 設(shè)置環(huán)境變量

如何使用容器實現(xiàn)生產(chǎn)級別的MongoDB sharding集群的一鍵交付

第三步 健康檢查

如何使用容器實現(xiàn)生產(chǎn)級別的MongoDB sharding集群的一鍵交付

第四步 設(shè)置部署優(yōu)先級

如何使用容器實現(xiàn)生產(chǎn)級別的MongoDB sharding集群的一鍵交付

至此,編排工作全部完成。下面我們來測試剛才的工作成果。。

部署測試

點擊部署,生成一個應(yīng)用實例,我們命名為m

如何使用容器實現(xiàn)生產(chǎn)級別的MongoDB sharding集群的一鍵交付

我們看一下shard-init的初始化輸出: 如何使用容器實現(xiàn)生產(chǎn)級別的MongoDB sharding集群的一鍵交付

我們看一下面板express的輸出:

這是mongo express的首頁,可以查看到該mongos上的訪問概括

如何使用容器實現(xiàn)生產(chǎn)級別的MongoDB sharding集群的一鍵交付

我們查看config這個db下表里的數(shù)據(jù),特別是和集群配置有關(guān)的:

mongos表:

如何使用容器實現(xiàn)生產(chǎn)級別的MongoDB sharding集群的一鍵交付 有哪些分片呢?我們看到了RS0 RS1 RS2 RS3: 如何使用容器實現(xiàn)生產(chǎn)級別的MongoDB sharding集群的一鍵交付

我們可以創(chuàng)建一個名為csphere的db試試: 如何使用容器實現(xiàn)生產(chǎn)級別的MongoDB sharding集群的一鍵交付

后續(xù),可以參考mongo文檔,在開發(fā)中,設(shè)置您的sharding key等。更進(jìn)一步的mongodb管理,請參考官方文檔

總結(jié)

從mongodb集群的自動化交付看整個編排過程,我們發(fā)現(xiàn)背后的魔法關(guān)鍵是:DISCOVERY ALL,發(fā)現(xiàn)所有的東西并使之具有可編程特性。

Q&A


Q1: 你好 目前這個的實際應(yīng)用情況如何?有何挑戰(zhàn)?

A1: 實際測試運(yùn)行良好。挑戰(zhàn)在于編排過程,背后的discovery能力能否滿足自動化的能力。在實際生產(chǎn)中,可以優(yōu)化您的配置文件,如挑戰(zhàn)timeout等,或日志的loglevel

Q2: 模板文件通過什么語言進(jìn)行渲染,通過什么流程發(fā)現(xiàn)啟動容器的信息?

A2: 希云cSphere平臺背后有一套強(qiáng)大的配置模版引擎,golang模版。平臺的協(xié)調(diào)中心可以發(fā)現(xiàn)各種參數(shù)并進(jìn)行可編程去應(yīng)對自動化挑戰(zhàn)

Q3: 你好 mongodb群集性能瓶頸,監(jiān)控指標(biāo)你覺得最重要的是什么,擴(kuò)容的時候要注意什么?

A3: mongo集群在使用上注意存儲引擎的選擇,在3.2之前是mmap,3.2已經(jīng)調(diào)整,新的默認(rèn)引擎能夠更好的處理大數(shù)據(jù)量的問題。mongo的水平擴(kuò)展本身很好,注意mongos代理部署的多一點,避免流量從單個mongos流入流出

看完上述內(nèi)容,你們對如何使用容器實現(xiàn)生產(chǎn)級別的MongoDB sharding集群的一鍵交付有進(jìn)一步的了解嗎?如果還想了解更多知識或者相關(guān)內(nèi)容,請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝大家的支持。

網(wǎng)頁題目:如何使用容器實現(xiàn)生產(chǎn)級別的MongoDBsharding集群的一鍵交付
URL鏈接:http://aaarwkj.com/article36/iijesg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供動態(tài)網(wǎng)站、網(wǎng)站設(shè)計、全網(wǎng)營銷推廣、標(biāo)簽優(yōu)化、App開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站優(yōu)化排名
在线观看免费国产b片| 日韩亚洲毛片全在线播放| 高清国产国产精品三级国产av| 欧美日韩免费高清视视频| 欧美大片免费在线播放| 美女高潮久久久777| 粉嫩一区二区三区av| 国产又粗又长又大又长| 免费在线观看一区二区三区视频 | 熟女少妇久久中文字幕| 国产成人拍国产亚洲精品| 99精品欧美日韩在线播放| 国产精品久久中文字幕网| 日韩精品女性三级视频| 丝袜美腿美女日韩在线| 国产美女作爱视频网站| 久久亚洲中文字幕精品一区四区| 91欧美激情另类亚洲| 久久国产精品一区二区三区| 日韩无遮挡免费在线观看| 国产精品一区二区国产激情久久| 亚洲精品在线观看日本| 欧美日韩一区二区激情在线| 亚洲乱码中文字幕人妻| 成人午夜激情在线观看| 亚洲成人av毛片在线观看| 国产白浆一区二区视频| 久久精品亚洲av三区麻豆| 一区二区三区精品人妻| av免费观看日韩永久| 欧美激情性国产精品潮| 国产三级一区二区不卡| 黄色大片免费在线观看| 91国产性感美女视频| 亚洲福利一区二区三区| 精品蜜臀国产av一区二区| 蜜臀人妻四季av一区二区不卡| 国产午夜精品福利爽爽| 日韩欧美第一页在线观看| 国产亚洲精品a久久7777| 欧美亚洲综合另类色妞|