摘要:今天,我們將關(guān)注如何部署容器并測(cè)試當(dāng)前實(shí)驗(yàn)性重新調(diào)度功能的當(dāng)前狀態(tài)。注意重新調(diào)度尚處于實(shí)驗(yàn)階段,其中存在。但也確實(shí)有部分用戶指出重新調(diào)度機(jī)制并未生效,或者是在主機(jī)恢復(fù)后出現(xiàn)了兩套容器。
歡迎回來,我們繼續(xù)本系列的第二篇教程。今天我們將主要關(guān)注Redis,希望大家還記得第一部分的主要內(nèi)容——了解如何安裝我們將要使用的環(huán)境。
傳送門: Docker Swarm系列第一部:利用Flocker部署多節(jié)點(diǎn)Cassandra集群
在發(fā)生節(jié)點(diǎn)故障時(shí)利用Swarm對(duì)Redis服務(wù)器進(jìn)行重新調(diào)度如果大家認(rèn)真閱讀了第一部分,應(yīng)該記得我們?cè)赟warm部署中使用了--experimental標(biāo)記。其中包括Swarm 1.1.0中的一項(xiàng)功能——在節(jié)點(diǎn)故障時(shí)對(duì)容器進(jìn)行重新調(diào)度。
今天,我們將關(guān)注如何部署Redis容器并測(cè)試當(dāng)前實(shí)驗(yàn)性重新調(diào)度功能的當(dāng)前狀態(tài)。
注意:重新調(diào)度尚處于實(shí)驗(yàn)階段,其中存在bug。我們將在示例過程中的對(duì)應(yīng)位置提醒大家可能出現(xiàn)的bug。
如果大家希望在Swarm主機(jī)發(fā)生故障時(shí)對(duì)容器進(jìn)行重新調(diào)度,則需要在容器部署中使用特定標(biāo)記。作為可行方案之一,我們可以使用以下標(biāo)記:--restart=always -e reschedule:on-node-failure或者類似于-l "com.docker.swarm.reschedule-policy=["on-node-failure"]"的標(biāo)簽。以下示例將使用環(huán)境變量方法。
首先,我們使用重新調(diào)度標(biāo)記與由Flocker管理的分卷進(jìn)行Redis容器部署。
接下來,利用SSH接入Docker主機(jī)內(nèi)的Redis容器運(yùn)行位置,并查看Redis始終使用的appendonly.aof文件內(nèi)容。該文件應(yīng)當(dāng)位于Flocker分卷中,作為容器起始點(diǎn)存在且不包含任何數(shù)據(jù)。
然后接入Redis服務(wù)器并添加一些鍵/值對(duì)。而后,再次查看appendonly.aof文件內(nèi)容以確保Redis以正確方式存儲(chǔ)數(shù)據(jù)。
在Flocker分卷中查看數(shù)據(jù)以驗(yàn)證Redis正確運(yùn)行。
測(cè)試故障轉(zhuǎn)移現(xiàn)在我們將測(cè)試故障轉(zhuǎn)移場(chǎng)景,確保我們的Flocker分卷能夠?qū)⒋鎯?chǔ)在Redis中的數(shù)據(jù)正確遷移至Swarm重新調(diào)度容器的新Docker主機(jī)上。
要實(shí)現(xiàn)這一目標(biāo),我們?cè)赟warm管理器中指定Docker,并利用docker events命令監(jiān)控各項(xiàng)事件。
要開始測(cè)試,首先在運(yùn)行有Redis容器的Docker主機(jī)上運(yùn)行shutdown -h now以模擬節(jié)點(diǎn)故障。大家應(yīng)該看到與該節(jié)點(diǎn)及容器相關(guān)的各項(xiàng)事件。
這些事件在告知我們,該容器及其資源由于遭遇故障(包括網(wǎng)絡(luò)與分卷)需要被移除、斷開連接或者卸載。我們看到的事件如下:
Container Kill
Container Die
Network Disconnect
Swarm Engine Disconnect
Volume Unmount
Container Stop
在Docker主機(jī)關(guān)閉一段時(shí)間之后,大家應(yīng)該會(huì)最終看到故障容器正在進(jìn)行重新調(diào)度(即重新創(chuàng)建)。在這里需要提醒的是,在測(cè)試中我們發(fā)現(xiàn)Swarm 1.1.3版本中仍然存在問題,即其仍然會(huì)在被創(chuàng)建在新Docker主機(jī)上的容器中運(yùn)行 Start 。
大家應(yīng)該會(huì)在查看到Create事件記錄的同時(shí)發(fā)現(xiàn)docker events,而后者的作用是對(duì)容器重建以及Flocker分卷移動(dòng)進(jìn)行初始化。
我們發(fā)現(xiàn),大家可能需要在重新調(diào)度完成后,在新主機(jī)上手動(dòng)Start該容器。
注意:容器創(chuàng)建過程中存在一些問題,但在測(cè)試中我們并未在容器啟動(dòng)時(shí)發(fā)現(xiàn)問題。
此事件代表著我們的容器已經(jīng)經(jīng)過重新調(diào)度并自動(dòng)創(chuàng)建于新的Docker主機(jī)之上。請(qǐng)注意,最新信息中的IP地址發(fā)生了變化,這是因?yàn)槿萜鞅徽{(diào)度到了新的Docker主機(jī)中。
下面來看流程回顧:
如果我們對(duì)Swarm運(yùn)行docker ps,則會(huì)看到該Redis容器為Created。在這種情況下,我們可以手動(dòng)進(jìn)行啟動(dòng),而Redis也將恢復(fù)并運(yùn)行在新節(jié)點(diǎn)上。
下面接入該Redis服務(wù)器以確保我們添加的數(shù)據(jù)仍然存在。
數(shù)據(jù)仍然存在!不過考慮到重新調(diào)度情況,我們不建議大家直接使用這些數(shù)據(jù)。
在測(cè)試當(dāng)中,大部分用戶反映容器能夠在新節(jié)點(diǎn)上正常啟動(dòng)。但也確實(shí)有部分用戶指出重新調(diào)度機(jī)制并未生效,或者是在Docker主機(jī)恢復(fù)后出現(xiàn)了兩套容器。無論如何,工作當(dāng)中顯然還存在著問題,而社區(qū)的作用也正在于此——幫助測(cè)試、報(bào)告并修復(fù)這些問題,從而確保其運(yùn)行效果更為可靠。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/26635.html
摘要:雖然可以使用相同的方式部署應(yīng)用到云端,使用外部負(fù)載均衡器,但動(dòng)態(tài)添加或者減少負(fù)載均衡節(jié)點(diǎn)依舊是痛點(diǎn)。這對(duì)使用外部負(fù)載均衡器幫助巨大。 數(shù)人云今天帶來的本篇文章將分享Docker在應(yīng)用程序生命周期每個(gè)階段中所扮演的角色,以及遷移到Swarm集群時(shí)需要考慮的問題。 利用Docker來開發(fā) Docker讓工作更輕松。如需要一個(gè)部署安裝MySQL數(shù)據(jù)庫(kù),或者安裝Ghost,又或者Redis數(shù)據(jù)...
摘要:一個(gè)容器起來,能夠?qū)ν夥?wù),這時(shí)就看下一步的負(fù)載均衡服務(wù)發(fā)現(xiàn)以及編排。它們有不同的應(yīng)用場(chǎng)景,比如傾向于四層的負(fù)載均衡。不單是負(fù)載均衡,它同時(shí)解決了服務(wù)發(fā)現(xiàn)和負(fù)載均衡兩個(gè)點(diǎn)。 今天是數(shù)人云容器三國(guó)演義Meetup嘉賓演講實(shí)錄第二彈。數(shù)人云工程師春明為大家奉送了一盤干貨的大餐,讓我們讀讀源碼,深入了解一下SwarmKit的世界吧! 小數(shù)前方預(yù)警:有大量代碼出現(xiàn)! showImg(htt...
閱讀 3739·2021-09-22 10:57
閱讀 1918·2019-08-30 15:55
閱讀 2706·2019-08-30 15:44
閱讀 1737·2019-08-30 15:44
閱讀 1881·2019-08-30 15:44
閱讀 2249·2019-08-30 12:49
閱讀 1058·2019-08-29 18:47
閱讀 3139·2019-08-29 16:15