SQL Server では、読み取り専用データベースを複数のサーバーで共有してスケールアウトする手法があります。
この方法を [スケーラブルな共有データベース] と言います。
SQL Server 2008 R2 の BOL にも記載されていますね。
スケーラブルな共有データベースの概要
この設定自体は知っていたのですが、正式な名称を今日初めて知りました…。
今回はその設定方法をまとめてみたいと思います。
■環境について
今回作成した環境がこちらになります。
[2008R2-SQL-01] ~ [2008R2-SQL-03] の 3 台のサーバーと NAS 上にデータベースを用意しました。
# iSCSI で接続をしています。
[2008R2-SQL-01] でデータベースの更新を実施して、そのデータベースを [2008R2-SQL-02] [2008R2-SQL-03] で
読み取り専用のデータベースとして使用するというシナリオです。
# 実際には 2 台の SQL Server があればテストできるのですがシナリオを考慮して 3 台用意しました。
■データベースの準備
まずは、[2008R2-SQL-01] でデータベースを準備します。
データベースで使用する LUN は [読み取り/書き込み] の両方が可能なように指定してあります。
– [2008R2-SQL-01] で使用している LUN –
今回は SQL Server の自習書でおなじみの [NorthwindJ] を用意しました。
スケーラブルな共有データベースを設定するためには、データベースを [読み取り専用] にする必要があります。
USE [master] |
– 読み取り専用データベースにするための SQL –
データベースを読み取り専用にすると SSMS の表示が以下のように変わります。
– SSMS での読み取り専用データベースの表示 –
読み取り専用データベースに設定をしたら、データベースをタッチをします。
# LUN を読み取り専用にするのであればデタッチしなくても大丈夫だと思います。
USE [master] |
これで準備完了です。
続いて参照用のサーバーでこのデータベースをアタッチします。
■読み取り専用データベースのアタッチ
今回の環境では、全 SQL Server で同一の LUN を参照しています。
読み取り専用データベースとしてアタッチするサーバーでは LUN を [読み取り専用] として設定しておきます。
# [2008R2-SQL-01] では [読み取り/書き込み] できるようにしていますが、他のサーバーでは読み取り専用とします。
?
– [2008R2-SQL-02] / [2008R2-SQL-03] の LUN の設定 –
LUN を読み取り専用にしているため、ディスクの管理でも [読み取り専用] として設定されています。
– ディスクの管理の表示 –
?
[2008R2-SQL-01] でデータベースを設定しているため、既にドライブ内にはデータベースのファイルが存在しています。
?
– ドライブの内容 –
それではこのデータベースをアタッチします。
USE [master] |
– アタッチの SQL –
以下が同一のデータベースファイルを複数のサーバーでアタッチした状態になります。
?
– 複数のサーバーで同一ファイルをアタッチ –
これで、[スケーラブルな共有データベース] の設定は完了です。
■NLB で冗長化
この環境を NLB を設定することでクライアントからの接続ポイントを固定化して、冗長化することができます。
以上で設定は完了です。
読み取り専用のデータベースなので、参照系でしか使えませんがサーバー増強 (スケールアウト) によってパフォーマンスを
向上させる方法としては面白い構成なのかな~と思います。
# ディスクがホットスポットになるので、ディスク負荷を考慮したうえで構成を検討する必要がありますが。