日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > 服務器 > 如何使用容器實現生產級別的MongoDB sharding集群的一鍵交付

如何使用容器實現生產級別的MongoDB sharding集群的一鍵交付

來源:程序員人生   發布時間:2016-07-11 08:57:26 閱讀次數:2683次

作者介紹

魏世江
希云聯合開創人、CTO,負責基于Docker的自動化服務管理平臺的后端研發工作。善于Docker相干技術、PasS平臺架構及企業自動化運維系統的設計及開發。創業之前在新浪SAE平臺任技術經理,從09年SAE立項至13年下半年的4年多時間里,1直負責SAEPasS平臺各種基于Web的服務管理系統的設計及開發,在DevOps方面積累了豐富的經驗。Docker引擎代碼貢獻者,在Docker開源項目中代碼貢獻量全球排名50名左右。

開篇

Mongo在很早就支持了replication set和sharding集群。經過了這么多年的沉淀,Mongo集群的成熟度已非常穩定,被大量公司用到自己的生產環境下。如何使用容器技術來實現Mongo集群的1鍵式交付部署,屏蔽底層實現的細節,是很多人關心的話題。

本文將給大家介紹基于進程的容器技術實現Mongo sharding集群的1鍵部署,充分展現了容器的強大威力。

甚么是Mongo sharding集群

Mongo(mongodb.com)作為流行的文檔數據庫,有很多有趣的特性,比如內置failover、支持文件存儲、支持mapreduce和可以在服務器端直接運行js腳本,固然我們今天最關心的是它內置的sharding功能。散布式系統的設計向來具有很高的挑戰,在最近1些年,隨著互聯網的發展,散布式的實踐逐漸開始得到推行和重視。

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

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

集群編排計劃

mongo集群觸及到多個服務,包括:

  • configdb, sharding集群的中心配置,是1個replicaset集群,監聽在27019端口
  • mongos, 作為sharding集群的訪問和管理入口,監聽在27017端口
  • mongo slices,數據分片節點
  • mongo replicaset,每一個數據分片是1個replicaset集群,用于保障沒有單點,并提供自動failover能力
  • mongo express, mongodb的管理dashboard

拓撲圖

本次部署,configdb3臺,mongo數據節點12臺,分成4個分片,每一個分片1主2從

00

首先準備mongo鏡像

Mongo官方已提供了Mongo 3.2的鏡像,可以用來作為Mongo集群的鏡像.為了減少后續保護工作,我們盡量不構建自己的鏡像。

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

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

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

部署mongo configdb

準備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

準備 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服務

第1步 創建模版

01

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

02

第3步 設置容器參數,關聯配置文件

03

第4步 健康檢查策略

04

第5步 設置部署策略,默許部署容器數量

05

初始化configdb為replicaset集群

我們通過添加1個one-off的服務configsvr-init,該服務履行初始化動作后將會自動退出

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

11

第2步 設置容器參數,關聯js腳本

12

第3步 設置部署策略,優先級數字設為11(configdb優先級10)

13

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

準備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的配置文件我們1般放到/etc/下

編排mongos模版

第1步 選擇鏡像,指定cmd參數

21

注意cmd里履行的是mongos

第2步 設置容器參數,關聯mongos配置

22

第3步 健康檢查

23

第4步 設置部署策略,注意優先級

24

mongos必須在configdb集群初始化后運行, 接下來我們開始編排mongo的數據節點服務,這是集群中最復雜的部份

準備shard節點的配置文件

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表示每一個主有幾個從,默許為2
這里將123個容器編為RS0,456編為RS1,789編為RS2,10,11,12編為RS3

編排mongo shard服務

第1步 添加mongo鏡像,指定cmd參數

31

第2步 設置參數,關聯配置

32

第3步 健康檢查

33

第4步 設置部署

34

有了上面的數據節點后,我們發現,還沒有初始化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

上面的腳本略微有點復雜,基本邏輯就是,先初始化每一個replicaset集群RS0..RS3,并將每一個RS加入到sharding集群當作分片slices。具體可以參考上面的部署拓撲圖。

開始編排shard-init服務

該服務是one-off履行

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

41

第2步 設置參數,同步腳本init.sh

42

第3步 設置部署優先級

43

到這里mongo sharding集群的編排工作基本就完成了。接下來我們為mongo服務添加1個可視化面板,方便我們的使用

編排mongo-express服務

第1步 添加mongo express鏡像

51

第2步 設置環境變量

52

第3步 健康檢查

53

第4步 設置部署優先級

54

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

部署測試

點擊部署,生成1個利用實例,我們命名為m

61

我們看1下shard-init的初始化輸出:
44

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

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

62

我們查看config這個db下表里的數據,特別是和集群配置有關的:

mongos表:
63

有哪些分片呢?我們看到了RS0 RS1 RS2 RS3:
64

我們可以創建1個名為csphere的db試試:
65

后續,可以參考mongo文檔,在開發中,設置您的sharding key等。更進1步的mongodb管理,請參考官方文檔

總結

從mongodb集群的自動化交付看全部編排進程,我們發現背后的魔法關鍵是:DISCOVERY ALL,發現所有的東西并使之具有可編程特性。

Q&A


Q1: 你好 目前這個的實際利用情況如何?有何挑戰?

A1: 實際測試運行良好。挑戰在于編排進程,背后的discovery能力能否滿足自動化的能力。在實際生產中,可以優化您的配置文件,如挑戰timeout等,或日志的loglevel

Q2: 模板文件通過甚么語言進行渲染,通過甚么流程發現啟動容器的信息?

A2: 希云cSphere平臺背后有1套強大的配置模版引擎,golang模版。平臺的調和中心可以發現各種參數并進行可編程去應對自動化挑戰

Q3: 你好 mongodb群集性能瓶頸,監控指標你覺得最重要的是甚么,擴容的時候要注意甚么?

A3: mongo集群在使用上注意存儲引擎的選擇,在3.2之前是mmap,3.2已調劑,新的默許引擎能夠更好的處理大數據量的問題。mongo的水平擴大本身很好,注意mongos代理部署的多1點,避免流量從單個mongos流入流出

聯系希云


電話 010⑹2249349

郵箱 docker@csphere.cn

官網 http://csphere.cn

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 精品久久久久久久久久久久 | 亚洲精品观看 | 欧美视频在线看 | a级在线| 精品三级 | 在线成人精品国产区免费 | xxx精品| 日本久久精品视频 | www.久久精品 | 国产精品精品 | 亚洲最大色综合成人av | 91久久久久久久久 | 欧美日韩免费在线视频 | 久久久久久九九 | 成人在线中文字幕 | 爱情岛论坛首页永久网址 | 韩国三级视频 | 欧美成人黄色 | 国产精品三级在线观看 | 久久久久久午夜 | 国产精品免费看 | av簧片 | 久久精品一区二区三区不卡牛牛 | 国产精品一二三区 | 国产精品欧美激情 | 一区二区三区四区日韩 | 韩国三级日本三级少妇99 | www黄色 | 99国产精品视频免费观看 | 精品一区二区三区在线播放 | 国产精品一二三区 | 欧美福利在线 | 热re99久久精品国产99热 | 欧美一区二区三区在线观看视频 | 黄色短视频在线观看 | 麻豆传媒在线播放 | 亚洲热视频| 亚洲成人一区 | 久久99国产精一区二区三区 | 狠狠插狠狠操 | 国产精品6|