SQL Server Log Shipping(ログシッピング)の良いところ

最近、DRサイトに関する引き合いが多くなってきています。

Windows/MSSQL環境でDRを考える際に切っても切り離せないのがSQL Serverの各種高可用性ソリューションです。

最近だとAlwaysOnという新しい機能について良く耳にするようになってきました。

しかし、今回は昔からあるログシッピングをDRに使う場合について思うところを書いてみようと思います。

SQL Serverの高可用性ソリューション

SQL Serverには、AlwaysOn、DBミラーリング、ログシッピング、バックアップリストアといった高可用性ソリューションがありますが、Microsoft社のこちらのホワイトペーパーにわかりやすい比較があったので引用させてもらいます。

f:id:yomon8:20131015210257p:plain

比較項目で使われているRPOとRTOに関しては、BCPやDRを検討する際には必ずと言えるほどに出てくる用語なのですが、こちらのページがわかりやすく説明されています。

RPO(Recovery Point Objective: 目標復旧地点) | BCM Navi 用語集

RTO(目標復旧時間) | BCM Navi 用語集

このように、RPOとRTOの数字的な比較だけ見ると、
 松:AlwaysOn または DBミラーリング
 竹:ログシッピング
 梅:バックアップリストア
と見ることもできます。

しかし実際には、それぞれ特徴があって適材適所で選択、そして併用することも検討する必要があるものです。

今回はこの中からログシッピングについて良いところを深掘りしてみます。


SQL Server ログシッピングの良いところ

仕組みが極めてシンプル

ログシッピングの仕組みは極めてシンプルで、
以下の3つの機能が疎結合で連携して動いています。

  1. プライマリDBでログバックアップを取得
  2. ログバックアップファイルをDRシステムにコピー
  3. DRシステム側のDBにログバックアップをリストア

これらの仕組みはSQL Serverエージェントジョブで動くので、Management Studioからも操作・確認することが可能です。


要件に合わせてコントロールしやすい

RPOが厳しくデータ消失が許されないようなシステムや、RTOが厳しくてサービス停止が許されないようなシステムの場合、ログシッピングでは要件を満たせないこともあると思います。

逆にプライマリDBが停止するほどの障害が発生した時に、他のシステムとの整合性を考えて障害直前ではなく、2時間前の状態に戻したいなど要件がある場合、ログシッピングは便利です。

ログシッピングの仕組みはそれぞれが疎結合のジョブで動いているので、例えばプライマリDBのログバックアップとDRサイトへのログ転送は30分毎に行うが、DRサイトのDBへのログ適用は1日1回にするなどの制御も可能です。

それぞれの処理のタイミングを調整することで、障害発生時には前回のログ適用タイミング以降、DRサイトに保存されている最新のログバックアップまでの間で、時間指定でDBの状態を復旧することもできます。

当然、DBの容量が大きくなったり、ログ適用の間隔を伸ばせば、その分、復旧時間も長くなるので、RPOやRTOを考慮しながらそれぞれの処理タイミングを設計する必要があります。


従量課金制のパブリッククラウドとの相性が良い

ログシッピングはAzureやAWSといった従量課金制のIaaSをDRサイトにする場合はとても相性が良いです。

ログシッピングではDRサイト側のシステムを必ずしも常時起動させておく必要はありません。

DRサイト側のシステムはログを適用するタイミングだけ起動して、ログの適用が終わったらシャットダウンしておけます。このような構成を取ることをで、ログ適用のタイミング分だけを課金対象とすることが可能です。

この時、DRサイト側のシステムが全て停止してしまうと、ログバックアップの転送先が無くなってしまうので、最低でもログバックアップファイルの転送先としてファイルサーバを一台上げておくなどの工夫が必要になります。


既存運用への影響が少ない

ログシッピングは本番環境の停止無しで設定することが可能です。


Standard Editionでも利用可能です

AlwaysOnなどはEnterprise EditionのSQL Serverが必要ですが、ログシッピングはStandard Editionでも利用できます。

SQL Server 2008R2
Features Supported by the Editions of SQL Server 2008 R2

SQL Server 2012
Features Supported by the Editions of SQL Server 2016