web-dev-qa-db-ja.com

プロダクションUbuntuを更新すると、すべきこととすべきでないこと

私は頻繁にプロダクションweb/db/toolsボックスにログインし、典型的なメッセージを見ます:

30個のパッケージを更新できます。 16個の更新はセキュリティ更新です。

私の質問は、あなたのすべてがあなたのプロダクションUbuntuボックスのアップデートをどのように処理するのですか?これらの更新を自動化しますか?それらのダウンタイムを設定しますか?問題は、更新がおそらく既存の構成ファイルなどの何かを壊すことになることを決して知らないことです。

この問題の他の部分は、パッチについていくことは「良いこと」ですが、パッチはほぼ毎日リリースされます。毎日利用可能な新しいセキュリティパッチがある場合、計画的な停止はいくつ必要ですか。

更新の管理方法に関する回答のスレッドは非常に役立つと思います。

25
imaginative

UbuntuとWindows、RHEL、CentOS、SuSE、debianなどのパッチ適用について特別なことは何もありません。

パッチプロシージャを設計する際の基本的な心の状態は、何かが壊れる壊れると想定することです。

パッチ設定を設計するときに使用する傾向がある基本的なガイドラインのいくつかは次のとおりです。

  • 常にローカルシステムを使用して、パッチをインストールするネットワークの内部を一元化します。

これには、WSUS、または内部パッチ管理マシンへの<your_os_here>のミラーの使用が含まれる場合があります。個々のマシンにインストールされているパッチのステータスを一元的に照会して通知できる好ましいもの。

  • 可能な場合は、マシンにインストールのプレステージを行います。

可能な場合は、パッチが出たら、中央サーバーにパッチを個別のマシンにコピーしてもらいます。これは本当に時間の節約になるので、ダウンロードしてインストールするのを待つ必要はありません。パッチウィンドウでインストールを開始するだけです。

  • パッチをインストールするための停止ウィンドウを取得します。再起動が必要な場合があり、何かが壊れる可能性があります。それらのシステムの利害関係者が、パッチが展開されていることを認識していることを確認してください。 「これ」が機能しない呼び出しに備えてください。

パッチは問題を壊すという私の基本的な理論に沿って、重大な問題をトラブルシューティングし、場合によってはパッチをロールバックするのに十分なだけパッチを適用するための停止ウィンドウがあることを確認してください。パッチを適用した後にテストを行う必要はありません。個人的には、監視システムに大きく依存して、すべてが正常に機能している最小レベルで機能していることを知らせています。しかし、人々が仕事に取り掛かるときに呼び出される小さなやっかいな問題にも備えてください。電話に出る準備ができている人を常にスケジュールしておく必要があります。できれば、午前3時までボックスにパッチを当てていた人はできません。

  • 可能な限り自動化

ITの他のすべてと同様に、スクリプト、スクリプト、さらにスクリプトを記述します。パッケージのダウンロード、インストールの開始、ミラーのスクリプトを作成します。基本的には、パッチウィンドウをベビーシッターの割り当てに変えたいと思います。

  • 毎月複数のウィンドウがある

これにより、何らかの理由で「指定された夜」にパッチを適用できない場合に、一部のサーバーにパッチを適用しないようにすることができます。夜1に実行できない場合は、夜2に解放する必要があります。また、同時にパッチを適用するサーバーの数を正常に保つことができます。

最も重要なのはパッチに遅れずについていくことです!そうしないと、追いついた時点に戻るために、10時間以上の非常に大きなパッチウィンドウを実行する必要があることに気づくでしょう。問題が発生する可能性のあるポイントをさらに紹介し、どのパッチが原因で問題が発生したかを突き止めることをさらに困難にします。


この問題の他の部分は、パッチについていくことは「良いこと」ですが、パッチはほぼ毎日リリースされます。毎日利用可能な新しいセキュリティパッチがある場合、計画的な停止はいくつ必要ですか。

月に1回または隔月に1回サーバーにパッチを適用することは-私見-非常に達成可能で許容できる目標です。それ以上の場合は、サーバーに常にパッチを適用することになりますが、サーバーごとに何百ものパッチを適用する必要がある状況に陥ります。

1か月に何枚のウィンドウが必要ですか?それはあなたの環境に依存します。サーバーはいくつありますか?サーバーに必要な稼働時間はどれくらいですか?

9x5の小規模な環境では、おそらく1か月に1つのパッチウィンドウで済むでしょう。 24時間年中無休の大規模なショップでは2つ必要になる場合があります。 24x7x365が非常に大きい場合、毎週異なるサーバーセットにパッチを適用するには、毎週ローリングウィンドウが必要になる場合があります。

あなたとあなたの環境のために働く周波数を見つけてください。

覚えておくべきことの1つは、100%が最新であることは不可能の目標を達成することであることです-セキュリティ部門に他のことを知らせないでください。最善を尽くして、あまり遅れないでください。

13
Zypher

やる事:

  1. バックアップを取る
  2. 復元可能なバックアップであることを確認してください(ただし、これら2つは一般的なポイントです)
  3. アップグレード中は、運用ボックスからトラフィックを誘導しないようにしてください。
  4. KVM、シリアルコンソール、ローカルアクセス、またはリモートハンドなど、すべてがうまくいかない場合に備えて、帯域外アクセス方法を試してください。
  5. 1つのサーバーでテストしてから、更新を他のサーバーに展開する前に、すべてが機能することを確認します
  6. 複数のサーバー間でバージョン番号が同じであることを確認できる場合は、人形を使用します。 (これを使用して強制的にアップグレードすることもできます)
  7. テストサーバーで、構成ファイルのバージョンを新しい(更新がインストールされた)バージョンと比較し、深刻な問題が発生しないことを確認します。現在インストールされているものとは異なる新しいバージョンをインストールする前にdpkgが尋ねるのを思い出すようです。

避けるべきこと:

  1. 1日の真ん中、または月曜日の朝9時、または金曜日の午後5時に更新を行います。 (@ 3influenceに感謝!)
  2. 非常に大きなデータベースサーバーでのMySQLのアップグレード(再起動には時間がかかる場合があります)
  3. すべてのサーバーを同時に実行する(特にカーネル)
  4. / etc/networksを変更する可能性のある操作(接続が失われる可能性があるため)
  5. あなたがすべてをチェックするためにそこにいなくても上記を行うことができる自動アップデートは問題ありません。
6
Tom O'Connor

作成する価値のあるもう1つのポイント:Windowsに慣れている場合は、ほとんどのLinux更新がnotにダウンタイムまたは再起動を必要とすることに驚かれるでしょう。カーネルの更新など、一部は実行します。ただし、再起動またはダウンタイムを必要とする更新は通常、そのようにフラグが立てられ、別のスケジュールで処理できます。

4
mpez0

私たちのUbuntuマシンはすべてLTSリリースを実行しています。

すべての更新を自動的にインストールします。「ベストプラクティス」ではないことを確認してください。ただし、私たちは比較的小規模なショップであり、単一のサービスごとにテスト/開発/本番環境を用意していません。 LTSの更新は、一般にかなり十分にテストされており、いずれにしても侵襲性は最小限です。

新しいリリースへのアップグレードは明らかに少し複雑です。

4
James

Ubuntu LTSシステムでは、次の方法でアップデートを処理します。

  1. ソフトウェアのすべてのクリティカルパスをチェックする一連の受け入れテスト
  2. 毎朝午前4時にセキュリティアップグレードを無人でインストールし、すぐに受け入れテストを実行します。何かが失敗した場合、エンジニアはページングされ、午前9時前に問題を修正したりロールバックしたりするための十分な時間があります。これは、これまでのところ5年間に2回だけ発生しています。LTSは十分にテストされ、安定しています。
  3. 私たちはインフラストラクチャ全体を毎週(digitaloceanで)自動的に再展開します。これにより、すべてのパッケージが最新バージョンに維持されます。新しいデプロイが受け入れテストに失敗した場合、エンジニアが問題をデバッグできるまでデプロイは保留されます。

次の論理的なステップは、メモリ内のセッション情報を排除することです。これにより、インフラストラクチャを毎日または1日に数回再デプロイするだけで、顧客に影響を与えずにステップ(2)を排除できます。

このアプローチはメンテナンスが少なく、メンテナンスウィンドウを完全に回避します。

2
jazmit

私がお勧めするのは、パッケージのロールバックを処理することです。何かを壊すアップグレードのための迅速な修正が必要な場合があるので、その方法の提案については Debianでのトランザクションとロールバック を参照してください。

0
gbjbaanb