SQL Server から AWS Auroraにマイグレーションする時の注意事項

オンプレ環境のSQL Server開発機からAWS Auroraにマイグレーションした際、DMS(Database Migration Service)を使って見たので、ハマった処をメモ。
https://aws.amazon.com/jp/dms/

eyecatch_dms-200x200
※仕様をよく読んだら書いてあるのかもしれない。

【移設方法】
オンプレのSQLServerは、DMSからアクセスが出来ないネットワークにある為、セキュリティを弄らずに移設をする方法を考えました。
結果的に、[開発機] – [RDS for SQL Server] – [DMS] – [RDS for Aurora]
と余計なSQLServerを挟んでいます。

20161108_1

【移行時の注意点】
・DMSはスキーマ単位になりますが、Auroraはスキーマの概念がありません。
 SQLServerで
 [db_name1].[dbo].[table_name]
 [db_name2].[dbo].[table_name]
 は別テーブルとして扱われますが、Auroraでは[dbo].[table_name]と単一になります。

 その為、事前にスキーマを[ALTER SCHEMA db_name1 TRANSFER dbo.table_name]等のコマンドで変更しておく必要があります。
 対象は、一般テーブル、システムテーブルです

 また、ストアドもスキーマを変更する必要があります。
 こちらは変更のコマンドが解らなかったので、SSMSでストアドのCreate文作成 → dboの部分をdb_nameに変更して新規作成を行いました。

・LOBサイズ
 DMSのLOBサイズの上限は、デフォルトで24KBになっています。
 大きめのデータが格納されている場合、この上限に引っかかる場合がありますので、適時変更を行ってください。
 分からなくても、1024KBぐらいあれば十分かと。

・移行元がSQLServerの場合、継続的なレプリケートが出来ない。
 DMSの強みである継続的レプリケート。
 これにより、大容量のデータベースでもダウンタイムを低減させる事が出来ます。
 が、現時点でSQLServerからAuroraへは、レプリケートが行いません。

・IDENTITIYはAutoIncrimentにならない
・datetimeoffset(7) → varchar(34)
この辺はエンジンの違いが出てきます。

追加のデータが入らないうちに、Alter Tableで変更しておきましょう。

パフォーマンスカウンタのネットワークのスケール

スケール調整の覚書

グラフ枠のプロパティ/グラフ/垂直スケール の最大値を100から1000に上げる

NetworkInterface/NIC名/Bytes Sent/sec
 ・・・ GigaNicを積んでいる場合、スケールは0.00001 でxxxMB/s
     ※グラフ赤線

NetworkInterface/NIC名/Packet Sent/sec
 ・・・ GigaNicを積んでいる場合、スケールは0.001 でxxxMbps
     ※グラフ黄緑線

perfmon_20160913

RDS for SQL Serverのフルバック機能を検証する

先日、AWSのRDS for SQLServerのフルバックアップがS3のバケット上に置けるようになったので、触ってみる。
現時点ではトランザクションログバックアップが出来ないが、S3を使うことによりオンプレ環境から取得したフルバックアップのリストアや、解析用にフルバックアップを別サーバーにリストアするなど、
利用用途が増える。

参考:
Amazon RDS for SQL Server – Amazon S3 でネイティブバックアップと復元をサポート
Importing and Exporting SQL Server Databases

事前準備:
リンク先に記載の通り、S3のバケット作成とIAMロールの作成を行う。
S3のバケット作成とIAMロールの作成は、RDSのオプショングループの作成画面からも行える。
ちなみに、default:sqlserver-xx グループには、オプションを追加することが出来ないので新規でオプショングループを準備する。

rds_s3_1

rds_s3_2

作成したオプショングループをインスタンスに割り当て、インスタンスの再起動を行うとRDS for SQLServerからS3へのアクセスが可能になる。

S3操作:
S3への操作は、AWSが準備したストアドプロシージャを実行する。

【フルバックアップ取得】

exec msdb.dbo.rds_backup_database
@source_db_name='DBスキーマ名',
@s3_arn_to_backup_to='arn:aws:s3:::S3バケット名/ファイル名.bk',
@overwrite_S3_backup_file=1;

【DBリストア】

exec msdb.dbo.rds_restore_database
@restore_db_name='DBスキーマ名',
@s3_arn_to_restore_from='arn:aws:s3:::S3バケット名/ファイル名.bk';

【タスク状態確認】

exec msdb.dbo.rds_task_status @db_name='DBスキーマ名'

RDS for SQLServerではメンテナンスプランが使えない為、以下のような処理をエージェントジョブで回すとフルバックアップ取得の代わりになる。
※保持期間を過ぎたバックアップファイルの削除を、lambdaなりAWSCLIなりで行う事。

USE msdb

declare @Backet nvarchar(20)
declare @DATE nvarchar(10)
declare @DBNAME nvarchar(30)
declare @BackupFile nvarchar(50)

SET @Backet = 's3バケット名'
SET @DATE = (SELECT CONVERT(date, getdate()))

--データベース一覧を取得(master(ID=1),tempdb(ID=2),model(ID=3),msdb(ID=4) 以上)
DECLARE C1_DBNAME CURSOR FOR
SELECT NAME FROM SYS.DATABASES WHERE DATABASE_ID > '5'

OPEN C1_DBNAME

FETCH NEXT FROM C1_DBNAME INTO @DBNAME

WHILE (@@FETCH_STATUS = 0)

BEGIN

SET @BackupFile = N'arn:aws:s3:::' + @Backet + '/' + @DBNAME + '_' + @DATE + '.bak'

IF @BackupFile IS NOT NULL
exec msdb.dbo.rds_backup_database
@source_db_name = @DBNAME,
@s3_arn_to_backup_to = @BackupFile,
@overwrite_S3_backup_file = 1;

FETCH NEXT FROM C1_DBNAME INTO @DBNAME
END

CLOSE C1_DBNAME
DEALLOCATE C1_DBNAME

GO

windows2012のQoSが効かない場合の注意点

新規にwindows2012サーバーを準備し、WindowsでポリシーベースのQOSを使ってS3へのアップロードスピードを帯域制御する方法をトレースしてみた。

QoSの設定はこの通りだが、「出力方向のスロットル率を指定する」には注意が必要。

検証では200MBbpsに設定を行ったが、物理1Gの回線環境で800MBps以上トラフィックが流れてしまう。
qos_1

qos_2

MSに問い合わせをして調査、検証を行った結果、

windows2012のインストール時点のQoSのバグっぽい事まで突き止める。
(Windowsアップデートしたら動きが改善されているので、どこかでパッチが当たった模様)

Windowsアップデート前: 制限の設定値の10倍が実際の制限値となる。
 ・ QoSを200MBps(204800 KBps)に制限 → トラフィックが200MBps以上
 ・ QoSを 20MBps(20480 KBps) に制限 → トラフィックは200MBps以下になる

Windowsアップデート後: 制限の設定値と同じ値が実際の制限値となる。
 ・ QoSを200MBps(204800 KBps)に制限 → トラフィックが200MBps以下になる

MSからKB番号の返答が来たら追記します。

コマンドラインからSQL Server2012をインストールする

覚書

以下のファイルを、ConfigurationFile.iniという名前で保存する。
[code]
;SQL Server 2012 Configuration File
[OPTIONS]

; INSTALL、UNINSTALL、UPGRADE などのセットアップ ワークフローを指定します。これは必須のパラメーターです。

ACTION="Install"
IACCEPTSQLSERVERLICENSETERMS="True"
; コマンド ライン引数 ENU の詳細なヘルプが定義されていません。

ENU="False"

; ユーザー インターフェイスの動作を制御するパラメーターです。
; 有効な値は Normal (完全な UI の場合)、AutoAdvance (簡易 UI の場合)、および EnableUIOnServerCore (GUI ブロックをバイパスする Server Core セットアップの場合) です。

; UIMODE="NOMAL"

; ユーザー インターフェイスは表示されません。

QUIET="False"

; ユーザー操作はなく、進行状況だけが表示されます。

QUIETSIMPLE="True"

; SQL Server セットアップで更新プログラムを検出して含める必要があるかどうかを指定します。
; 有効な値は、True と False または 1 と 0 です。既定では、SQL Server セットアップには、検出された更新プログラムが含まれます。

UpdateEnabled="True"

; インストール、アンインストール、またはアップグレードを行う機能を指定します。
; 最上位の機能には、SQL、AS、RS、IS、MDS、ツールなどがあります。
; SQL 機能では、データベース エンジン、レプリケーション、フルテキスト、および Data Quality Services (DQS) サーバーがインストールされます。
; ツール機能では、管理ツール、オンライン ブック コンポーネント、SQL Server Data Tools、その他の共有コンポーネントがインストールされます。

FEATURES=SQLENGINE,BIDS,CONN,BC,SDK,SSMS,ADV_SSMS,SNAC_SDK

; SQL Server セットアップが更新プログラムを取得する場所を指定します。
; 有効な値は、"MU" (Microsoft Update を検索)、有効なフォルダー パス、.\MyUpdates のような相対パス、または UNC 共有です。
; 既定では、SQL Server セットアップは Microsoft Update を検索するか、Window Server Update Services を通じて Windows Update サービスを検索します。

UpdateSource="MU"

; コマンド ライン パラメーターの使用方法を表示します

HELP="False"

; 詳細なセットアップ ログをコンソールにパイプすることを指定します。

INDICATEPROGRESS="False"

; セットアップで WOW64 にインストールするよう指定します。このコマンド ライン引数は、IA64 や 32 ビット システム上ではサポートされません。

X86="False"

; 共有コンポーネントのルート インストール ディレクトリを指定します。このディレクトリは、共有コンポーネントのインストール後は変更されません。

INSTALLSHAREDDIR="C:\Program Files\Microsoft SQL Server"

; WOW64 共有コンポーネントのルート インストール ディレクトリを指定します。このディレクトリは、WOW64 共有コンポーネントのインストール後は変更されません。

INSTALLSHAREDWOWDIR="C:\Program Files (x86)\Microsoft SQL Server"

; 既定のインスタンスまたは名前付きインスタンスを指定します。既定のインスタンスは、Express 以外のエディションの場合は MSSQLSERVER、Express エディションの場合は SQLExpress です。SQL Server データベース エンジン (SQL)、Analysis Services (AS)、または Reporting Services (RS) のインストール時には、このパラメーターが必須です。

INSTANCENAME="MSSQLSERVER"

; 指定した SQL Server 機能のインスタンス ID を指定してください。SQL Server のディレクトリ構造、レジストリ構造、およびサービス名には、SQL Server インスタンスのインスタンス ID が組み込まれます。

INSTANCEID="MSSQLSERVER"

; SQL Server 機能の使用状況データを収集して Microsoft へ送信できるようにするかどうかを指定します。この機能を有効にするには 1 または True を指定し、無効にするには 0 または False を指定します。

SQMREPORTING="False"

; 今後のリリースの SQL Server の改善のため、Microsoft にエラーを報告できるようにするかどうかを指定します。この機能を有効にするには 1 または True を指定し、無効にするには 0 または False を指定します。

ERRORREPORTING="False"

; インストール ディレクトリを指定します。

INSTANCEDIR="C:\Program Files\Microsoft SQL Server"

; エージェント アカウント名

AGTSVCACCOUNT="gree-rogue\Administrator"
AGTSVCPASSWORD="パスワード"
; インストール後にサービスを自動的に開始します。

AGTSVCSTARTUPTYPE="Automatic"

; CM ブリックの TCP 通信ポート

COMMFABRICPORT="0"

; マトリックスでのプライベート ネットワークの使用方法

COMMFABRICNETWORKLEVEL="0"

; ブリック間の通信を保護する方法

COMMFABRICENCRYPTION="0"

; CM ブリックで使用される TCP ポート

MATRIXCMBRICKCOMMPORT="0"

; SQL Server サービスのスタートアップの種類。

SQLSVCSTARTUPTYPE="Automatic"

; FILESTREAM 機能を有効にするレベル (0、1、2、または 3)。

FILESTREAMLEVEL="0"

; SQL Server Express で RANU を有効にするには、"1" に設定します。

ENABLERANU="False"

; データベース エンジンに使用する Windows 照合順序または SQL 照合順序を指定します。

SQLCOLLATION="Japanese_CI_AS"

; SQL Server サービスのアカウント: ドメイン\ユーザーまたはシステム アカウント。

SQLSVCACCOUNT="administrator"
SQLSVCPASSWORD="パスワード"

; SQL Server のシステム管理者として準備する Windows アカウント。

SQLSYSADMINACCOUNTS="administrator"

; 既定値は Windows 認証です。混合モード認証の場合は "SQL" を使用してください。

SECURITYMODE="SQL"

; データベース エンジンのバックアップ ファイルの既定のディレクトリ。

SQLBACKUPDIR="C:\database\backup"

; データベース エンジンのユーザー データベースの既定のディレクトリ。

SQLUSERDBDIR="F:\database\db"

; データベース エンジンのユーザー データベース ログの既定のディレクトリ。

SQLUSERDBLOGDIR="C:\database\log"

; データベース エンジンの TempDB ファイルのディレクトリ。

SQLTEMPDBDIR="F:\database\db"

; データベース エンジンの TempDB ログ ファイルのディレクトリ。

SQLTEMPDBLOGDIR="F:\database\tmp"

; 現在のユーザーを SQL Server 2012 Express のデータベース エンジン システム管理者として準備します。

ADDCURRENTUSERASSQLADMIN="False"

; TCP/IP プロトコルを無効にするには 0 を、有効にするには 1 を指定します。

TCPENABLED="1"

; Named Pipes プロトコルを無効にするには 0 を、有効にするには 1 を指定します。

NPENABLED="0"

; Browser サービスのスタートアップの種類。

BROWSERSVCSTARTUPTYPE="Disabled"

[/code]

コマンドプロンプトを開き、
[code]
インストールメディア内setup.exe /SAPWD="SQL認証時のsaのパスワード" /ConfigurationFile="保存したConfigurationFile.ini"
[/code]

Elastic CacheにAWS外からアクセスする

基本的にはAWS 外部からの ElastiCache リソースへのアクセスの通り。

Elastic CacheにはAWS以外からのアクセスが出来ないので、
インターネット-[Elastic IP]–[EC2]–[Elastic Cache]
みたいに、中間にEC2インスタンスを噛ます必要がある。

EC2は、PREROUTINGしかt1.microインスタンスでも十分じゃないかな

[code]
#中間のEC2上で

iptables -t nat -A PREROUTING -i eth0 -p tcp –dport 6379 -j DNAT –to ElasticCacheのIP:6379
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables-save

#/etc/sysctl.conf
net.ipv4.ip_forward = 1

sysctl -a
[/code]

ioDrive for クラウド

iodrive.jpg

gloopsのネットニュースを見てたら、ioDriveってワードが出てきた。

インフラエンジニア(のつもり)でioDriveの存在を知らないなんて・・・と言われそうだけど、
今検討しているサービス用のインフラで、IOがボドルネックになっている部分がチラホラあるので使えそう。

自前で準備すると高そうなので、クラウドで提供しているとこを探すと思うけど。
Fusion-io ioDrive の”非公式”標準価格/販売価格表

現時点でioDrive使っているところを軽く調べてみた。

とかかな。

ほとんどが今年の夏あたりにプレリリース出しているから、今後はもっと提供事業者が増えそうな気がする。

1階に有線LANを通す!

久しぶりの更新w

約3ヶ月振りです(サボり過ぎ!)

さて、我が家のネットワークは、2階の子供部屋に”情報分伝盤”とやらが取り付けられており、そこにアンテナからのTV配線や光の終端装置が設置されています。

嫁が1階でPCを使うので、今までは2階に無線LANのAPを置いていましたが、最近の暑さでAPやルーターが過剰に熱を持ってしまい、日中にネットに繋がらないとクレームを度々言われていました(^^;)

そこで、嫁対策の為に、情報分伝盤の近くに小型の扇風機を置いてルーターを冷ますのと、1階にAPを移設して嫁PCの電波感度の向上を行ってみました!

1階にAPを置くには、LANケーブルを1階に通す必要がありますが、幸い壁の中にCD管が埋め込まれていたので、この中にLANケーブルを
通すことにしました。

ネットで調べてみると、引込み線たる針金が必要らしいですが、数十メートルで\4,000とか結構いい値段がしてしまいます(^^;)

そんなお金は小遣いから捻出出来るはずも無いので、さらに調べてみると、100均のビニール紐と掃除機で代用できると情報を見つけました!

LAN工事ドットコム様

で、まねてみました!

写真は取っていませんでが、ビニール紐+掃除機で、らくらく呼び込み線は開通!

で、ビニール紐の片側にLANケーブルを固定し、反対から引っ張るのみ!

20100822_1.jpg
通ったーーー!

コンセント部分は、Amazonで安価だったモジュラジャックを購入。
モジュラジャック(Amazon)

20100822_2.jpg
ケーブルを剥き、モジュラジャックの所定の位置に配線をして、、、

20100822_3.jpg
付属の部品でケーブルを挟む!
で、コンセント部分の完成!
20100822_4.jpgあとは、壁に取り付けるだけw
20100822_5.jpg
子供らに邪魔されながらの作業でしたが、1人でやって大体2時間程度で終了。
電気屋さんに工事費用に聞いたら¥12,000って言われていた工事が、部品代だけで¥2,000ぐらいで収まったのが1番うれしいw

あと、2階の機器に扇風機の風を当てているので、少しは嫁からのクレームも無くなるかな。

ロードバランサーの動作

syslogさんからロードバランサーの動作概要を引用させて頂きます。

▼least connections <リースト・コネクション> [動的]
最もコネクション数の少ないサーバを選択してロードバランスを行う。
▼hash <ハッシュ> [動的]
クライアントのIPアドレスをハッシュ値計算し、相対させたサーバにバランシングする。つまりあるIPアドレスのものは常にそのサーバにバランシングされる。
▼round robin <ラウンド・ロビン> [静的]
複数のサーバに対して均等にロードバランスを行う。

▼fastest <ファーステスト> [動的]
最も速く応答するサーバを選択してロードバランスを行う。
▼observed <オブザーブド> [動的]
サーバのコネクション数と応答速度を監視して、ロードバランスを行う。
▼predictive <プリディクティブ> [動的]
サーバのコネクション数と応答速度を監視し、各サーバのパフォーマンスを予測してロードバランスを行う。
▼priority <プライオリティ> [静的]
あらかじめ指定されたサーバグループ毎の優先度に応じてロードバランスを行う。
▼ratio <レシオ> [静的]
複数のサーバに対してあらかじめ指定した割合に応じてロードバランスを行う。
▼static load balancing <スタティック・ロードバランシング> [静的]
あらかじめ定義された基準リストに基づいて接続配分を行う方式。その基準としては、現在のサーバ性能や現在の接続負荷は考慮していない。