摘要:今天小數(shù)給大家?guī)?lái)的是數(shù)人云工程師金燁的分享,有關(guān)于自動(dòng)快速部署服務(wù)相關(guān)組件的一些實(shí)踐。當(dāng)與相遇,雙劍合璧,一切變得如此簡(jiǎn)單有趣。通過(guò)將服務(wù)注冊(cè)到來(lái)做健康檢查。
今天小數(shù)給大家?guī)?lái)的是數(shù)人云工程師金燁的分享,有關(guān)于自動(dòng)快速部署DCOS服務(wù)相關(guān)組件的一些實(shí)踐。
當(dāng)Ansible與Docker相遇,雙劍合璧,一切變得如此簡(jiǎn)單有趣。
本次分享將包括以下內(nèi)容:
云平臺(tái)部署使用的服務(wù)、組件
Docker化服務(wù)組件
初始化安裝控制主機(jī)
集群主機(jī)系統(tǒng)檢測(cè)
使用Ansible初始化集群主機(jī)
使用Ansible安裝、檢測(cè)DCOS相關(guān)服務(wù)
一、使用的服務(wù)、組件簡(jiǎn)介Ansible 批量管理配置服務(wù)
初始化主機(jī)、批量安裝各服務(wù)使用
test yum repo 部署軟件包源
啟動(dòng)一個(gè)簡(jiǎn)單 http 服務(wù),把安裝使用的軟件包全放到這個(gè)項(xiàng)目中
Docker 輕量級(jí)容器服務(wù)
Cadvisor 監(jiān)控服務(wù)
test-registry 組件安裝使用鏡像倉(cāng)庫(kù)
Haproxy 負(fù)載均衡組件
Keepalived 高可用組件
部署在master1 和 master2 兩臺(tái)主機(jī),通過(guò)檢查這兩臺(tái)主機(jī)部署的haproxy進(jìn)行VIP 漂移。
MySQL數(shù)據(jù)庫(kù)
自研組件
Consul 服務(wù)發(fā)現(xiàn)、健康檢查、健值存儲(chǔ)外訪(fǎng)問(wèn)的切換
Zookeeper Mesos Marathon
DCOS 核心組件,負(fù)責(zé)集群資源管理,應(yīng)用調(diào)試
二、主要服務(wù)的功能說(shuō)明及邏輯架構(gòu)上面簡(jiǎn)單介紹了安裝整個(gè) DCOS 服務(wù)的完整過(guò)程,在安裝各組件前,我們都會(huì)先檢測(cè)是否已經(jīng)安裝了該服務(wù),如果已經(jīng)存在會(huì)中止安裝,人工檢查后,再進(jìn)行后續(xù)操作。
1、test yum repotest-yumrepo 是一個(gè)簡(jiǎn)單的 yum 源服務(wù),里面放置了安裝 DOCS 需要使用的所有 rpm 包,使用 createrepo 命令進(jìn)行創(chuàng)建和更新yum 源。
2、test registry在安裝 DCOS 前會(huì)把組件鏡像全 push 到 registry ,不設(shè)置認(rèn)證用戶(hù),配置申請(qǐng)好的證書(shū)。
使用這個(gè) registry 時(shí),只需要添加域名解析就可以。
registry 的數(shù)據(jù)目錄,直接復(fù)制目錄到其它主機(jī)。
再啟動(dòng) registry 服務(wù)容器就可以直接使用,而不需要導(dǎo)入導(dǎo)出浪費(fèi)時(shí)間。
因?yàn)?docker 鏡像是分層的,不同的鏡像,也會(huì)共用一些公共的鏡像層。
使用這個(gè)原理,鏡像大多數(shù)的服務(wù)都使用相同的 base 鏡像,這樣所有的鏡像都放置到 registry 中,就可以減少占用磁盤(pán)的容量。
3、自研組件DCOS 自研的控制界臺(tái)
4、Consul用它來(lái)做各服務(wù)的健康檢查、服務(wù)發(fā)現(xiàn)、MySQL主從切換等。
consul 分為server 和 client ,我們注冊(cè)、注銷(xiāo)服務(wù)都是通過(guò) client API 進(jìn)行,這樣的好處是 client 上的主機(jī)服務(wù)都綁定在 client 端,健康檢查也都是通過(guò) client 端進(jìn)行本地檢查。
服務(wù)本身的狀態(tài)查詢(xún)查詢(xún)則是通過(guò) Server 端。
consul 的服務(wù)發(fā)現(xiàn)consul 有多種服務(wù)發(fā)現(xiàn)機(jī)制,我們使用的是比較簡(jiǎn)單的 dns 模式,通過(guò) consul 自帶的 DNS 解析功能實(shí)現(xiàn)的。
各服務(wù)安裝好后,通過(guò)調(diào)用 consul 的 API 注冊(cè)服務(wù)。
需要服務(wù)發(fā)現(xiàn)的組件通過(guò) docker run 參數(shù) 添加 --dns , 在容器內(nèi)部就可以解析到 consul 中注冊(cè)的服務(wù)地址 , 例如: 訪(fǎng)問(wèn)數(shù)據(jù)庫(kù)的配置就可以設(shè)置為 mysql.service.consul:3306, 這樣的配置。(當(dāng)然支持srv 服務(wù)可以直接用)
5、Haproxyhaproxy做為平臺(tái)服務(wù)的負(fù)載均衡服務(wù),對(duì)外服務(wù)配置服務(wù)時(shí),配置的是 consul 中的服務(wù)域名。
這里有個(gè)坑,原來(lái)使用 haproxy 1.5 版本, 后端服務(wù)使用域名時(shí),啟動(dòng)后只解析一次(和nginx類(lèi)似),這時(shí)如果解析到的服務(wù)掛掉,訪(fǎng)問(wèn)haproxy頁(yè)面時(shí)會(huì)503.
查詢(xún)官網(wǎng)得知 haproxy 1.6 支持了動(dòng)態(tài) dns 域名解析的配置,后升級(jí)為 haproxy 1.6。
下面是動(dòng)態(tài) dns 解析相關(guān)的配置內(nèi)容:
6、MySQL 基于 Consul 的主從切換最初的MySQL主從切換是基于 haproxy+keepalived 來(lái)做高可用的。
這種機(jī)制下,MySQL主從切換的簡(jiǎn)單需求需要引入2個(gè)開(kāi)源組件,架構(gòu)上也非常復(fù)雜。
為了減輕架構(gòu)復(fù)雜度和可維護(hù)性,我們將主從切換改為了使用 Consul 進(jìn)行主從切換。MySQL是安裝了兩臺(tái),一主一從,設(shè)置權(quán)限時(shí),主是讀寫(xiě)的,從是普通用戶(hù)只讀權(quán)限。
通過(guò)將服務(wù)注冊(cè)到 consul 來(lái)做健康檢查。
MySQL Master 和 Slave 注冊(cè)到一共注冊(cè)四個(gè)服務(wù)到Consul, 如下代碼:
正常情況 mysql-vip.service.consul 解析到 主mysql ip。
這里會(huì)分兩種情況切換到從解析:
主MySQL掛掉后,ip解析到從mysql ip,mysql-vip 切換到從Mysql IP
主庫(kù)的 consul 掛掉也會(huì)導(dǎo)致服務(wù)無(wú)法解析,即使 mysql-master 正常,所以如果 consul 掛掉也會(huì)被激活切換。
請(qǐng)注意:因?yàn)镸ySQL從是只讀的,相當(dāng)于降級(jí)服務(wù)。
7、Zookeeper Mesos Marathon參考以前寫(xiě)的文章:容器公司如何用容器進(jìn)行產(chǎn)品迭代
http://blog.dataman-inc.com/s...
dockerfile 的語(yǔ)法比較簡(jiǎn)單,類(lèi)似shell, 常用的命令主要有:
FROM 依賴(lài)的基礎(chǔ)鏡像
RUN 執(zhí)行的shell命令
ADD 添加本地文件目錄或下載網(wǎng)絡(luò)中的文件并且解壓到鏡像中
COPY 復(fù)制本地文件或目錄到鏡像中
ENTRYPOINT docker容器啟動(dòng)時(shí)的默認(rèn)命令
CMD docker容器啟動(dòng)時(shí)的默認(rèn)參數(shù)
參考:https://docs.docker.com/engin...
下面是dockerfile的示例
2、dockerfile 的一些小技巧docker 鏡像的默認(rèn)啟動(dòng)命令可以是一個(gè)自定義的 shell 腳本,例如我們編寫(xiě)一個(gè) entrypoint.sh 腳本,可以在啟動(dòng)腳本中做很多事情,比如初始化服務(wù)、拉取配置、替換變量等等。
3、Dockerfile示例:ZookeeperDockerfile
Zookeeper啟動(dòng)腳本:
cat /data/run/dataman_zookeeper.sh
參考 https://docs.docker.com/engin...
https://github.com/Dataman-Cl...
四、初始化安裝控制主機(jī) 1、啟動(dòng)test yum repo啟動(dòng)test yum repo,把 test yum repo 配置到當(dāng)前主機(jī)的/etc/yum.repos.d/test.repo
配置內(nèi)容如下:
然后就可以很方便的安裝一些必要的工具服務(wù)。
test yum repo的使用方法
其中 --disablerepo=* 是禁用其它 yum repo, --enablerepo=repo 是開(kāi)啟數(shù)人云 testrepo ,這樣做是為了防止其它 的yum repo 影響 yum 安裝 的過(guò)程,減少出錯(cuò)。
2、安裝需要使用的基礎(chǔ)服務(wù)安裝需要部署DOCS需要使用的服務(wù),和一些調(diào)試工具
yum --disablerepo=* --enablerepo=testrepo install -y net-tools iptables ansible 等。
修改 NTP server 的配置。
3、啟動(dòng)安裝集群組件使用的鏡像倉(cāng)庫(kù)test-registry服務(wù) 五、集群主機(jī)系統(tǒng)安裝前配置及檢測(cè)安裝機(jī)準(zhǔn)備好 yum repo 和 test registry, 我們就可以準(zhǔn)備安裝 DCOS集群了。
安裝前我們會(huì)先檢測(cè)當(dāng)前安裝機(jī)的服務(wù)是否是我們要求的主機(jī)狀態(tài),檢查包括:
yum repo 狀態(tài)正常
test registry 狀態(tài)正常
NTP server 狀態(tài)正常
然后修改ansible 配置ansible/inventory/hosts。
規(guī)劃好主機(jī)列表及角色,內(nèi)容示例如下:
修改自定義的主配置文件config.cfg,這個(gè)配置中主要包含了,集群使用的 DCOS master 列表,mysql 主機(jī)、用戶(hù)、初始密碼,Keepalived 主機(jī)、VIP地址,以后面各服務(wù)就從這兩個(gè)配置中讀取內(nèi)容生成最終配置,再進(jìn)行安裝。
在安裝服務(wù)前會(huì)檢測(cè)各主機(jī):
系統(tǒng)版本、內(nèi)核版本檢測(cè)
文件系統(tǒng)檢測(cè)
磁盤(pán)容量檢測(cè)
如果檢測(cè)到的結(jié)果異常會(huì)跟中止安裝。
六、初始化集群主機(jī)前面的初步檢測(cè)步驟通過(guò)后,我們就會(huì)對(duì)集群主機(jī)進(jìn)行初始化操作。
包含的內(nèi)容有:
基礎(chǔ)操作
防火墻、selinux 等
主機(jī)名
設(shè)置主機(jī)機(jī)名解析
NTP 客戶(hù)端
設(shè)置 ntp 服務(wù)
Docker
安裝配置等
安裝運(yùn)維調(diào)試工具
出問(wèn)題檢查的各種工具,比如 netstatdig等
主機(jī)初始化后的環(huán)境檢查
以上初始化的檢查
最終我們通過(guò) Ansible 完成了將整套的分布式部署抽象成了兩步完成:
在一個(gè)配置文件中配置整套安裝方案的服務(wù);
執(zhí)行安裝腳本。
這個(gè)服務(wù)并不是完美的,還有很多可以?xún)?yōu)化的,比如大數(shù)量主機(jī)安裝的效能問(wèn)題等,我們會(huì)持續(xù)對(duì)其進(jìn)行改進(jìn)。
歡迎大家一起交流、探討經(jīng)驗(yàn)。謝謝大家。
Q&AQ1:現(xiàn)在Docker的版本更新也很快,那數(shù)人云是怎么來(lái)考慮這個(gè)版本的,每次跟著更新,還是延后多少個(gè)小版本?
A1:每次Docker更新我們都在在內(nèi)部進(jìn)行測(cè)試,經(jīng)過(guò)一段時(shí)間的驗(yàn)證,沒(méi)有什么大坑的時(shí)候,就更新。沒(méi)有特定的,延后固定幾個(gè)版本。
Q2:此前看到一篇文章說(shuō),Docker是沒(méi)有后向兼容的,每次更新版本都會(huì)非常痛苦。你們是怎么處理這個(gè)問(wèn)題?
A2:這個(gè)問(wèn)題我們也很煩惱,我們是一臺(tái)一臺(tái)主機(jī)的升級(jí),不會(huì)影響業(yè)務(wù)的正常使用。DCOS集群本身是高可用的,所以宕機(jī)1、2臺(tái)也不會(huì)有問(wèn)題。
(承接上一問(wèn))
Q3:一般來(lái)說(shuō),DCOS集群我們都建議上百臺(tái)主機(jī),那一個(gè)DCOS集群升級(jí)一次大概要耗時(shí)多久?
A3:升級(jí)的話(huà),提前規(guī)劃,按應(yīng)用或集群的角色劃分好批次 比如說(shuō) Master不能同時(shí)升級(jí),兩個(gè)MySQL主從不能同時(shí)升級(jí),Elasticsearh 集群不能同時(shí)升級(jí)等 提前進(jìn)行docker pull 預(yù)熱 100臺(tái)主機(jī),完整升級(jí)一次預(yù)計(jì)要半小時(shí)左右。這個(gè)半小時(shí)不包含準(zhǔn)備時(shí)間。
Q4:你們docker volume怎么解決的?
A4:例如MySQL這種需要持久化數(shù)據(jù) 的服務(wù),我們是發(fā)到固定主機(jī)。如果是Elasticsearch,這種本身已經(jīng)有數(shù)據(jù)同步的服務(wù),我們是直接掛載出來(lái),指定一個(gè)主機(jī)范圍。
Q5:能分享下數(shù)人云在DCOS+DevOps方面的經(jīng)驗(yàn)么?
A5:這次分享的集群安裝就是我們DevOps的一部分,我們的應(yīng)用和組件都是Docker化的,使用ansible docker run或調(diào)用marathon api 進(jìn)行、更新發(fā)布應(yīng)用,平時(shí)的工作主機(jī)就是Docker化服務(wù)和把這些服務(wù)發(fā)到DCOS集群中。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/27954.html
摘要:阿里云官網(wǎng)推薦購(gòu)買(mǎi)租賃配置地址首先我們要確認(rèn)我們是個(gè)人用戶(hù)還是企業(yè)用戶(hù),賬戶(hù)實(shí)名認(rèn)證是個(gè)人認(rèn)證的即為個(gè)人用戶(hù),實(shí)名認(rèn)證是企業(yè)認(rèn)證的即為企業(yè)用戶(hù)。對(duì)于初次租賃阿里云服務(wù)器的用戶(hù)來(lái)說(shuō),首先面臨的就是云服務(wù)器配置該如何選擇,因?yàn)閷?duì)于一般性用戶(hù)來(lái)說(shuō),沒(méi)有專(zhuān)業(yè)的技術(shù)人員推薦指導(dǎo)購(gòu)買(mǎi)什么樣的云服務(wù)器,買(mǎi)高了容易浪費(fèi)云服務(wù)器資源,成本也高一些,買(mǎi)低了可能又容易出現(xiàn)問(wèn)題,比如CPU,內(nèi)存消耗過(guò)高導(dǎo)致服務(wù)器卡...
摘要:容器內(nèi)文件日志平臺(tái)支持的文件存儲(chǔ)是,避免了許多復(fù)雜環(huán)境的處理。以上是數(shù)人云在實(shí)踐容器日志系統(tǒng)過(guò)程中遇到的問(wèn)題,更高層次的應(yīng)用包括容器日志分析等,還有待繼續(xù)挖掘和填坑,歡迎大家提出建議,一起交流。 業(yè)務(wù)平臺(tái)每天產(chǎn)生大量日志數(shù)據(jù),為了實(shí)現(xiàn)數(shù)據(jù)分析,需要將生產(chǎn)服務(wù)器上的所有日志收集后進(jìn)行大數(shù)據(jù)分析處理,Docker提供了日志驅(qū)動(dòng),然而并不能滿(mǎn)足不同場(chǎng)景需求,本次將結(jié)合實(shí)例分享日志采集、存儲(chǔ)以...
摘要:指導(dǎo)員明伯伯?dāng)?shù)人云工程師手記相關(guān)閱讀基于的集群管理開(kāi)發(fā)實(shí)踐服務(wù)發(fā)現(xiàn),負(fù)載均衡和 這是一個(gè)容器信息臃腫的時(shí)代。 Docker 鯨魚(yú)鼓著圓圓的肚子在西雅圖開(kāi)了一場(chǎng)名為 DockerCon2016 的大會(huì),全球 4000 人參加, 8 大看點(diǎn)留下對(duì)容器生態(tài)的更多暢想。 數(shù)人云一直專(zhuān)注于以企業(yè)級(jí)的 Mesos +容器技術(shù)棧,出于對(duì)容器新技術(shù)的熱愛(ài),我們?cè)谏鐓^(qū)版的工具上小試牛刀,距 Docker...
摘要:在之前公眾號(hào)的數(shù)人云工程師手記基于的集群管理開(kāi)發(fā)實(shí)踐對(duì)的服務(wù)發(fā)現(xiàn)及負(fù)載均衡有詳細(xì)的介紹。服務(wù)名稱(chēng)為服務(wù)命名,必須為英文或數(shù)字。 本文是數(shù)人云9月22日線(xiàn)上微信群分享的文章實(shí)錄。數(shù)人云容器管理面板Crane開(kāi)源以來(lái),很多小伙伴對(duì)它還不是非常了解,數(shù)人云工程師金鑫從Crane技術(shù)背景、環(huán)境準(zhǔn)備和使用步驟等方面為大家做了詳細(xì)的介紹,并整理大家常見(jiàn)的問(wèn)題逐一進(jìn)行了解答。 引言 Docker1....
閱讀 1587·2021-08-09 13:47
閱讀 2828·2019-08-30 15:55
閱讀 3571·2019-08-29 15:42
閱讀 1172·2019-08-29 13:45
閱讀 3084·2019-08-29 12:33
閱讀 1801·2019-08-26 11:58
閱讀 1052·2019-08-26 10:19
閱讀 2479·2019-08-23 18:00