2017-05-26 7 views
1

Docker swarmを使用している問題があります。Docker swarm:再起動後の高可用性を保証する

私はGunicornで動作するPython Webサービスの3つのレプリカを持っています。

問題は、ソフトウェア更新後にswarmサービスを再起動すると、古い実行中のサービスが強制終了され、新しいサービスが作成されて開始されることです。しかし、古いサービスがすでに終了し、新しいサービスがまだ完全に開始していない短期間では、ネットワークメッセージはすでに準備されていない新しいインスタンスにルーティングされ、502のゲートウェイエラーが発生します(I nginxからサービスへのプロキシ)。

私は--update-parallelism 1 --update-delay 10sオプションを使用しますが、問題を解決するわけではありません。502エラーが発生する可能性はわずかです(少なくとも2つのサービスが起動している場合でも、

+0

docker swarmが 'HEOCKTHCHECK' Dockerfile機能(' docker service create'で追加できる機能)を守るかどうか分かりません。私はそれを知っていいだろう – Robert

+0

うん、そこに存在する:https://blog.newrelic.com/2016/08/24/docker-health-check-instruction/ 私はそれが再起動のために働いたとは思わなかったが、私は – alexpirine

+0

私にお願いしてください、そして幸運を試してみましょう! – Robert

答えて

0

だから、私はコメントで提案してきたもの、以下:Docs

はDockerfileのHEALTHCHECK機能を使用します。ような何か:ドッカー大群がサービスの更新時にこのヘルスチェックを尊重しないことを知って

HEALTHCHECK --interval=5m --timeout=3s \ 
    CMD curl -f http://localhost/ || exit 1 

は、それがゼロダウンタイムの展開を持っている相対的な簡単です。

しかし、あなたが言及したように、消費者の健康管理能力は高く、健康診断の間隔を広げる必要があります。その場合

は、私はあなたがすぐに最初の実行をやっヘルスと current_minute % 5 == 0で連続チェックをカスタマイズするためにお勧めしますが、ヘルス自体が /30sを実行している:

HEALTHCHECK --interval=30s --timeout=3s \ 
    CMD /service_healthcheck.sh 

healthcheck.sh

#!/bin/bash 

CURRENT_MINUTE=$(date +%M) 
INTERVAL_MINUTE=5 

[ $((a%2)) -eq 0 ] 
do_healthcheck() { 
    curl -f http://localhost/ || exit 1 
} 

if [ ! -f /tmp/healthcheck.first.run ]; then 
    do_healhcheck 
    touch /tmp/healthcheck.first.run 
    exit 0 
fi 

# Run only each minute that is multiple of $INTERVAL_MINUTE 
[ $(($CURRENT_MINUTE%$INTERVAL_MINUTE)) -eq 0 ] && do_healhcheck 
exit 0 

覚えていることCOPY healthcheck.shを/healthcheck.sh(およびchmod +x

0

いくつかの既知の問題があります(例: moby/moby #30321)をdocker swarmでローリングアップグレードして、現在の17.05以前のリリース(すべての修正が17.06を作成するようには見えません)となりました。これらの問題により、あなたが見ているようなローリングアップグレード中に接続エラーが発生します。

ダウンタイムがゼロの展開要件があり、クライアント側の再試行でこれを解決できない場合は、あなたの群の前に青色/緑色のスイッチを入れて、ドッカーがすべてのシナリオに対する解決策を見つけるまで、コンテナの非アク​​ティブなセット。

+0

こんにちはBMitch、これについてのHEALTHCHECKについてどう思いますか? – Robert

+0

ヘルスチェックは良好ですが、これらの問題はヘルスチェックでも発生します。 – BMitch

+0

とにかく、青/緑のアプローチは、これらの問題に関係なく良いオプションです、ありがとう – Robert

関連する問題