Windows Server Update Services のベスト プラクティス

適用対象: System Center Configuration Manager (current branch - version 1810)System Center Configuration Manager (current branch - version 1806)System Center Configuration Manager (current branch - version 1802)

はじめに


この資料では、Windows Server Update Services (WSUS) の設計または構成の制限により、パフォーマンスが低下する構成を回避するのに役立つベスト プラクティスについて説明します。

詳細情報


容量制限

WSUS はサーバーあたり 100,000 クライアント (System Center Configuration Manager を使用する場合は 150,000 クライアント) をサポートできますが、この制限に近づくことはお勧めしません。 代わりに、同じ SQL サーバー データベースを共有する 2〜4 台のサーバーの構成の使用を検討してください。

これは、数値に安全性があるためです。 つまり、1 台のサーバーがダウンしても、重要ではありますが、クライアントは更新できないため、週末をすぐに損なうことはなく、最新の 0 日間のエクスプロイトに対して更新する必要があります。

共有データベースのシナリオでは、スキャン ストームと呼ばれるものも防ぎます。

スキャン ストームは、多くのクライアントが WSUS サーバーを変更し、サーバーがデータベースを共有していない場合に発生する可能性があります。 WSUS はデータベース内のアクティビティを追跡するため、クライアントが最後にスキャンしてから何が変更されたかを認識し、それ以降に更新されたメタデータのみを送信します。

クライアントが別のデータベースを使用する別の WSUS サーバーに変更する場合、クライアントはフル スキャンを実行する必要があります。 これにより、大規模なメタデータ転送が発生する可能性があります。 これらのシナリオでは、特に WSUS サーバーが正しく維持されていない場合、クライアントごとに 1 GBを超える転送が発生します。

これにより、クライアントが WSUS インスタンスと通信するときにエラーを引き起こすのに十分な負荷が生成される可能性があります。 これにより、クライアントは繰り返し再試行されます。

データベースを共有すると、クライアントが同じ DB を使用する別の WSUS インスタンスに切り替えても、スキャンのペナルティは発生しません。 負荷の増加は、データベースの切り替えに対して支払う大きなペナルティではありません。

System Center Configuration Manager クライアント スキャンは、スタンドアロンの自動更新よりも WSUS に多くの要求を与えることに注意してください。 SCCM にはコンプライアンス チェックが含まれているため、拒否を除くすべてのステータスにあるすべての更新を返す基準でスキャンを要求します。

自動更新エージェントがスキャンするか、コントロール パネルの [更新プログラムのチェック] をクリックすると、エージェントはインストール用に承認された更新のみを取得するための条件を送信します。 したがって、返されるメタデータは通常、System Center Configuration Manager がスキャンを開始したときよりも少なくなります。 更新エージェントはデータをキャッシュし、次のスキャン要求はクライアント キャッシュからデータを返します。

リサイクルを無効にし、メモリ制限を構成する

WSUS は、データベースから更新メタデータを取得する内部キャッシュを実装します。 データベースからメタデータを取得すると、非常にコストがかかり、メモリを消費する可能性があり、デフォルトのプライベート メモリ制限と仮想メモリ制限を超過すると、WSUS (WSUSPool と呼ばれます) をホストする IIS アプリケーション プールがリサイクルされる可能性があります。

プールがリサイクルされると、キャッシュは削除され、再構築する必要があります。 クライアントがデルタ スキャンを受けている場合、これは大きな問題ではありません。 ただし、スキャン ストーム シナリオに陥ると、プールは絶えずリサイクルされ、スキャン要求を行うと、クライアントは HTTP 503 エラーなどのエラーを受け取ります。

デフォルトのキューの長さを増やし、仮想メモリ制限とプライベート メモリ制限の両方を 0 に設定して無効にすることをお勧めします。 IIS では、29 時間ごとにアプリケーション プールの自動リサイクル、Ping、およびアイドル タイムアウトが実装されます。これらはすべて無効にする必要があります。 これらの設定では、[IIS マネージャー] > [アプリケーション プール] > [WsusPool] を選択し、IIS マネージャーの右側のペインにある [詳細設定] リンクをクリックします。

推奨される変更の概要と、関連するスクリーン ショットを次に示します。 詳細については、ここ を参照してください。

キューの長さ = 2000 (デフォルトの 1000 から増加)

アイドル タイムアウト (分) = 0 (デフォルトの 20 から減少)

Ping の有効化 = False (デフォルトの True から)

プライベート メモリ制限 (KB) = 0 (無制限、デフォルトの 1843200 KB から増加)

通常の時間間隔 (分) = 0 (リサイクルを防ぎ、デフォルトの 1740 から変更)

詳細設定

参考までに、約 17,000 の更新プログラムがキャッシュされた環境では、キャッシュが安定するまで (約 14 GB) 構築されるため、24 GBを超えるメモリが必要であることがわかりました。

圧縮は有効であるか (帯域幅を節約する場合)

WSUS は、Xpress エンコーディングを呼び出す圧縮タイプを使用します。 これにより、更新メタデータに圧縮が実装されます。 これにより、帯域幅を大幅に節約できます。

Xpress エンコーディングは、IIS の ApplicationHost.config で <httpCompression> 要素の下に次の行とレジストリ設定を使用して有効になります。

ApplicationHost.Config

<scheme name="xpress" doStaticCompression="false" doDynamicCompression="true" dll="C:\Program Files\Update Services\WebServices\suscomp.dll" staticCompressionLevel="10" dynamicCompressionLevel="0" />

レジストリ キー

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Update Services\Server\Setup\IIsDynamicCompression

両方が存在しない場合は、このコマンドを実行してから IIS で WsusPool アプリケーション プールを再起動することで有効にできます。

cscript "%programfiles%\update services\setup\DynamicCompression.vbs" /enable "%programfiles%\Update Services\WebServices\suscomp.dll"

Xpress エンコーディングは CPU のオーバーヘッドをいくらか追加し、帯域幅が問題ではないが CPU 使用率が問題の場合は無効にできます。 次のコマンドでオフにします。

cscript "%programfiles%\update services\setup\DynamicCompression.vbs" /disable

製品とカテゴリの構成

WSUS を構成するときは、展開する予定の製品とカテゴリのみを選択します。 後で必要になるカテゴリと製品はいつでも同期できますが、それらを展開する予定がないときに追加すると、メタデータのサイズと WSUS サーバーのオーバーヘッドが増加します。

Itanium の更新やその他の不要な更新を無効にする

これは、Windows Server 2008 R2 が Itanium をサポートする最後のバージョンだったため、これ以上問題になることはありません。 しかし、それは言及に耐えます。

ご使用の環境でこのスクリプトをカスタマイズして使用し、Itanium アーキテクチャの更新を拒否します。 スクリプトは、更新タイトルに "プレビュー" または "ベータ" を含む更新プログラムを拒否することもできます。

これにより、WSUS コンソールの応答性は向上しますが、クライアント スキャンには影響しません。

置き換えられた更新を拒否し、メンテナンスを実行する

WSUS の実行を改善するためにできる最も重要なことの 1 つです。 必要以上に (つまり、それらを展開しなくなった後) 更新を回避することは、WSUS のパフォーマンスの問題の最大の原因です。 まだ展開している場合は、それらを保持してもかまいません。 ただし、展開を終えたら、それらを削除してください。

置き換えられた更新およびその他の WSUS メンテナンス項目の拒否の詳細については、「Microsoft WSUS および構成マネージャー SUPメンテナンスの完全なガイド」の記事を参照してください。

SSL セットアップでの WSUS

デフォルトでは、WSUS はクライアント通信に SSL を使用するように構成されていません。 インストール後の最初の手順は、サーバー とクライアントの通信間のセキュリティを確保するために、WSUS で SSL を構成する必要があります。

自己署名証明書を作成し (すべてのクライアントがこの証明書を信頼する必要があるため理想的ではありません)、サードパーティの証明書プロバイダーから、または内部証明書インフラストラクチャから証明書を取得する必要があります。

証明書には、短いサーバー名、FQDN、および通過する SAN 名 (エイリアス) が必要です。

証明書をインストールしたら、グループ ポリシー (または System Center Configuration Manager のソフトウェア更新のクライアント構成設定) をアップグレードして、WSUS サーバーのアドレスと SSL ポートを使用する必要があります。 通常、これは 8531 または 443 です。

たとえば、GPO [イントラネットの Microsoft 更新サービスの場所を指定する] をhttps://wsus.contoso.com:8531 に構成します。

開始するためのリンク:

Secure Sockets Layer プロトコルを使用して WSUS をセキュリティで保護する

ウイルス対策の除外の構成

ウイルス対策スキャン

マイクロソフトのウイルス対策除外リスト

累積的な更新と毎月のロールアップについて


Windows OS の更新プログラムには、マンスリー ロールアップ累積的な更新プログラムという用語が使用される場合があります。 これらを同じ意味で使用する場合もありますが、ロールアップとは、Windows 7 SP1/Server 2008 R2 およびWindows 8.1/2012 R2 の更新プログラム用に公開された、部分的にのみ累積的な更新プログラムのセットを指します。

次のブログ記事では、これについて説明しています。

Windows 7 および Windows 8.1 の簡素化されたサービス: 最新の機能強化

Windows 7 および Windows 8.1 のサービスの変更に関する詳細

Windows 10 および Windows Server 2016 では、更新プログラムは最初から累積的でした。

Windows 10 更新プログラム サービス ケイデンス

このコンテキストでの累積とは、OS のリリース バージョンをインストールし、完全に修正プログラムを適用するために最新の累積更新プログラムを適用するだけでよいことを意味します。 古い OS については、このような更新プログラムはまだありませんが、これは方向性でありまして、このまま進めていきます。

Windows 7 および 8.1 の場合、これは最新のマンスリー ロールアップをインストールした後、追加の更新プログラムが引き続き必要であることを意味します。 Andrei Stoica は、ほぼ完全に修正プログラムが適用されたシステムの使用に関する Windows 7 および Windows Server 2008 R2 の例を公開しました。

以下のリンクで、Windows 7 および 8.1 のマンスリー ロールアップと Windows 10/Server 2016 の累積更新プログラムのリストを見つけることができます。または、「Windows X の更新プログラムの履歴」(X はバージョン) を検索して見つけることができます。

Windows 7 SP1/Server 2008 R2

Windows 7 SP1 と Windows Server 2008 R2 SP1 の更新プログラムの履歴

Windows 8.1/Server 2012 R2

Windows 8.1 および Windows Server 2012 R2 の更新プログラムの履歴

Windows 10/Server 2016

Windows 10 および Windows Server の更新プログラムの履歴

Windows Server 2019

Windows 10 および Windows Server 2019 の更新プログラムの履歴

考慮すべきもう 1 つのポイントは、すべての更新プログラムが公開されているわけではないため、WSUS と自動的に同期されることです。 たとえば、「C」および「D」週の累積的な更新プログラムはプレビュー更新プログラムであり、WSUS と同期しませんが、代わりに手動でインポートする必要があります。 Windows 10 更新プログラム サービス ケイデンスの「毎月の品質更新プログラム」セクションを参照してください。

PowerShell を使用して WSUS サーバーに接続する


これは、PowerShell と WSUS API を使い始めるためのコード例にすぎません。 さらに多くの PowerShell スクリプトについては、以下のリンクを参照してください。 これは、WSUS 管理コンソールがインストールされている場所で実行できます。

[void][reflection.assembly]::LoadWithPartialName("Microsoft.UpdateServices.Administration")$WSUSServer = 'WSUS'# This is your WSUS Server Name$Port = 8530# This is 8531 when SSL is enabled$UseSSL = $False#This is $True when SSL is enabledTry {    $Wsus = 	[Microsoft.UpdateServices.Administration.AdminProxy]::GetUpdateServer(`	$WSUSServer,$UseSSL,$Port)} Catch {    Write-Warning "$($WSUSServer)<$($Port)>: $($_)"    Break}