SE の雑記

SQL Server の情報をメインに Microsoft 製品の勉強内容を日々投稿

SQL Server のスケーラブルな共有データベース

leave a comment

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 台用意しました。

image
環境概要図

■データベースの準備

まずは、[2008R2-SQL-01] でデータベースを準備します。

データベースで使用する LUN は [読み取り/書き込み] の両方が可能なように指定してあります。
image
– [2008R2-SQL-01] で使用している LUN

今回は SQL Server の自習書でおなじみの [NorthwindJ] を用意しました。
image

スケーラブルな共有データベースを設定するためには、データベースを [読み取り専用] にする必要があります。

USE [master]
GO
ALTER DATABASE [NorthwindJ] SET  READ_ONLY WITH NO_WAIT
GO

– 読み取り専用データベースにするための SQL –

データベースを読み取り専用にすると SSMS の表示が以下のように変わります。image
– SSMS での読み取り専用データベースの表示 –

読み取り専用データベースに設定をしたら、データベースをタッチをします。
# LUN を読み取り専用にするのであればデタッチしなくても大丈夫だと思います。

USE [master]
GO
EXEC master.dbo.sp_detach_db @dbname = N’NorthwindJ’
GO

これで準備完了です。

続いて参照用のサーバーでこのデータベースをアタッチします。

■読み取り専用データベースのアタッチ

今回の環境では、全 SQL Server で同一の LUN を参照しています。
読み取り専用データベースとしてアタッチするサーバーでは LUN を [読み取り専用] として設定しておきます。
# [2008R2-SQL-01] では [読み取り/書き込み] できるようにしていますが、他のサーバーでは読み取り専用とします。
image 
[2008R2-SQL-02] / [2008R2-SQL-03] の LUN の設定

LUN を読み取り専用にしているため、ディスクの管理でも [読み取り専用] として設定されています。
image
ディスクの管理の表示

 
[2008R2-SQL-01] でデータベースを設定しているため、既にドライブ内にはデータベースのファイルが存在しています。
 image
– ドライブの内容 –

それではこのデータベースをアタッチします。

USE [master]
GO
CREATE DATABASE [NorthwindJ] ON
( FILENAME = N’E:NorthwindJNorthwindJ.mdf’ ),
( FILENAME = N’E:NorthwindJNorthwindJ.ldf’ )
FOR ATTACH
GO

– アタッチの SQL –

以下が同一のデータベースファイルを複数のサーバーでアタッチした状態になります。
image 
複数のサーバーで同一ファイルをアタッチ

これで、[スケーラブルな共有データベース] の設定は完了です。

■NLB で冗長化

この環境を NLB を設定することでクライアントからの接続ポイントを固定化して、冗長化することができます。

 image 
構成概要図

image 
NLB の設定

以上で設定は完了です。

読み取り専用のデータベースなので、参照系でしか使えませんがサーバー増強 (スケールアウト) によってパフォーマンスを
向上させる方法としては面白い構成なのかな~と思います。
# ディスクがホットスポットになるので、ディスク負荷を考慮したうえで構成を検討する必要がありますが。

Written by masayuki.ozawa

4月 3rd, 2010 at 1:50 pm

Posted in SQL Server

Leave a Reply

*