TechNet フォーラムを見ていたところ SQL Server 2008 R2 のローリングア ップグレードを使用したパッチ適用についての投稿がありました。
そういえば、SQL Server 2008 以降のクラスタ環境ではローリング アップグレードのシナリオが追加されていたなということを思い出し、良い機会だったので試してみました。
# Tech・Ed 2009 のセッションでの話があったということをブログに書いていたのですが試していませんでした…。
技術情報としては以下の情報が参考になります。
# フォーラムに記載されていた技術情報になります。2008 R2 でも同じ手順になります。
SQL Server 2008 フェールオーバー クラスタにローリング更新プログラムおよび Service Pack を適用する方法
今回は使用しないのですが以下のような技術情報もあります。
FIX: Error message when you perform a rolling upgrade in a SQL Server 2008 cluster : "18401, Login failed for user SQLTESTAgentService. Reason: Server is in script upgrade mode. Only administrator can connect at this time.[SQLState 42000]"
SQL Server フェールオーバー クラスター インスタンスをアップグレードする方法 (セットアップ)
■ローリング アップグレードの手順概要
資格の中央に書いている作業は、どちらのノードでもできる操作になります。
# フェールオーバークラスターマネージャーで設定を変更するだけですので。
ネットワーク名リソースの所有者の変更はパッチを適用しているノードにフェールーバーしないようにするための設定となるため必須ではありません。
緑の背景色になっている箇所がサービスが停止するタイミングとなります。
■Cumulative Update の適用
投稿を書いている時点での SQL Server 2008 R2 の最新の修正プログラムは Cumulative Update 5 となります。
Cumulative Update package 5 for SQL Server 2008 R2
今回は、SQL Server 2008 R2 の RTM (10.50.1600) に CU5 を適用してみたいと思います。
# すべての作業はローカルの Administrators グループのメンバーであるドメインの Users グループのユーザーで実施しています。
[2008R2-SQLR2-01] [2008R2-SQLR2-02] という 2 台構成のクラスタになっています。
現在は、2008 R2-SQLR2-01がすべてのリソースを持っている状態です。
この状態で 2008R2-SQLR2-01 (パッシブノード) に CU5 の適用を行います。
- フェールオーバー クラスター マネージャーを使用してSQL Server のネットワークリソース名の [実行可能な所有者] からパッシブノードを外します。
- CU5 のインストーラーを実行します。
- UAC が働いた場合は、[はい] をクリックします。
- [次へ] をクリックします。
- [ライセンス条項に同意する] を有効にして、[次へ] をクリックします。
- コンポーネントがすべて選択された状態で、[次へ] をクリックします。
- 使用中のファイルの確認が終了したら、[次へ] をクリックします。
# 使用中のファイルがあった場合は、パッチ適用後に再起動をする必要があります。
- [更新] をクリックしてパッチを適用します。
この状態では、2008R2-SQLR2-01 (アクティブノード) で SQL Server のリソースを実行していますので、SQL Server のサービスは継続して利用することが可能です。
パッチの適用が完了したら [閉じる] をクリックします。
作業が終了するとパッシブノードでは、パッチが適用された状態となります。
SQL Server 2008 R2 のクラスタの構成は以下のようになっています。
共有ディスクにデータベースを格納し、SQL Server に必要となるプログラムと Resource データベースに関しては各ノードのローカルディスクに格納されています。
# SQL Server 2005 では Resource データベースも共有ディスクに格納されていましたが 2008 以降では各ノードのローカルのファイルとして格納されます。
現在は、パッシブノードのみパッチを適用しているため、共有ディスク上のシステムデータベースは最新のパッチバージョンに合わせた更新はされていない状態です。
# SQL Server のリソースはアクティブノードが占有していますので、パッシブノードからは操作ができません。
現在の SQL Server のバージョンを確認してみます。
現在はアクティブノードが SQL Server のリソースを保有しているので、バージョンは RTM の状態となっています。
それでは、SQL Server のネットワークリソース名の所有者を変更して、アクティブノードにもパッチを適用したいと思います。
SQL Server のリソースの含まれるグループを移動します。
移動が終わったらアクティブノード (だったノード) を所有者から外します。
現在のリソースの配置状況は以下のようになります。
既にパッチを適用しているパッシブノードに SQL Server のリソースを移動したタイミングでシステムデータベースのアップグレードが行われます。
SQL Server のログからアップグレードされていることを確認することができます。
2010-12-28 07:31:09.79 Server Microsoft SQL Server 2008 R2 (RTM) – 10.50.1753.0 (X64) |
バージョン情報を確認すると CU5 (10.50.1753) となっています。
アクティブノードのパッチ適用はパッシブノードと同じ手順になります。
# 画面キャプチャだけ載せておきたいと思います。
今回はインストール時の使用中のファイルの確認で使用中のファイルが検出されていますのでインストール後に再起動をしています。
再起動が終了したら所有者を戻し、アクティブノードに SQL Server のリソースを移動させます。
アクティブノードで SQL Server のリソースがオンラインになり、バージョン情報が更新されていればパッチの適用は完了です。
パッシブノードで順次適用できるので、ローリング アップグレードを使用するとダウンタイムを短くしてパッチの適用ができそうですね。
# リソースの移動があるのでダウンタイムゼロとはいかないですが。