ライブPHP配布用にBambooを設定しようとしています(Jenkinsにも同じ原則が適用されます)。
Bambooアプリでボタンを押してリアルタイムで公開できるようにしたいです。
しかし、セッションがまだアクティブであることを確認したいと思います。つまり、ネットワークユーザーはダウンタイムを経験しません。何かが間違っている場合は、回復力を維持しようとします。
これを達成する方法についての高度な概念の提案はありますか?
私の考えは、以下のように動作できることです
実行中の2つのWebサーバー
webapp-live -- port 80 public
webapp-deploy -- port 81 private
戦略
1) Push project files onto server
2) /var/www/releases/web-app-tag-number.zip
3) unzip file
4) deploy to webapp-deploy
5) sanity checks i.e. webapp-deploy loads homepage ok
6) swap deploy with live - use symlink to re-point files? (will this keep sessions alive?)
私はこれが何度も起こったと確信しています。
より良い戦略があるのだろうか?
答え1
これはどうですか:
1 public facing load balancer (e.g. HAproxy)
Two backend webservers.
- プールからWebサーバーを削除します(Haproxyを使用すると、管理ソケットを介して実行されます。を参照)。この問題)
- このサーバーのセッションが終了するまで待ちます。
- 無効なサーバーにプロジェクトファイルをプッシュし、解凍して展開します。
- ロードバランサーなしでテストされました。 (つまり、ローカルホスト)
- サーバーを再度有効にします。
- 2番目のサーバーに対して手順1を繰り返します。
サーバーを無効にすると、現在のすべての接続が期限切れになるのを待ってからサーバーが保守モードになります。もちろん、接続は必ずしも「セッション」と同じではありません。したがって、セッションの処理方法によっては、2つのサーバー間のセッション複製が必要になる場合があり、別々のセッションデータベース(新しいセッションデータベース)が必要になる場合があります。単一障害点)両方のサーバーに依存します。
これにより、ユーザーにダウンタイムが発生しなくなります。さらに、ロードバランシングのいくつかの追加の利点も得られます。
残念ながら、HAproxyをこのように設定するのは難しいかもしれません。