院長のメモ帖
2012年4月12日 木曜日
SQL2012でAlwaysOnを試してみた
今日も、動物病院、、、、の話ではなくパソコンの話です。
昨年末に、顧客管理のデーターベースをAccessからSQLサーバーに切り替えました。
ちょうどこの病院を作ったのが2000年で、そのころはまだVBでプログラムしてましたので、自作の顧客管理プログラムはAccessのVBを使うのがリーズナブルかつ簡単でした。
.NETが発表されて、C#がリリースされたのを機会にプログラミング環境をC#に全面的に切り替えました。何度か、Accessの帳票ベースからC#のWindowsフォームベースに切り替えようとしたのですが、SQL文にどうしてもなじめないとか、かえって遅くなるとか、いろいろな理由で10年以上運用してしまいました。
しかし、C#4.0の登場を機にLinqを触り始めたら、飛躍的にプログラミングの効率が良くなっていることに気が付いて.NETベースの顧客管理ソフトを1か月ぐらいででっち上げました。
そして、試しにSQLサーバーにデーターを移してLinqToSQLを使ってみたら、Accessよりずっと速いではないですか。サーバーの能力も10年前とは桁違いだし、.NET自体も速くなったみたいだし、Visual Studio上でデーターベース管理も行えるしということで、Accessをつかうメリットはほぼないなということで切り替えちゃいました。
それで、現在はSQLで運用していますが、1点だけ怖いのがあって、SQLサーバーが落ちた時のダウンタイムです。ファイルベースのAccessの場合は、ファイルサーバーが落ちてもリアルタイムでデュプリケートしている予備ファイルサーバーに自動的に切り替えるだけで済みますが、SQLの場合、フェイルオーバークラスタ環境でないと、自動で切り替えというわけにはいきません。クラスター化した場合、ストレージが単一の障害点となり、ストレージもクラスター化が必要ですが、そこまでの機材は揃えれません。
しかし、新しく出たSQL2012のAlwaysOnだと、共有ストレージが不要です。これだと、手軽に自動フェイルオーバーが行えます。3台のSQL2012Coreを試しに作って、実験してみました。
インストールと設定は大して迷うこともなかったです。一つはまったのが、バーチャルマシン上でフェイルオーバークラスターの機能とSQLサーバーをインストールして、VHDをコピーしてsysprepかけて3台用意したのですが、フェイルオーバー機能に伴ってインストールされた仮想IPのMACアドレスが3台とも同じになってしまいクラスタリングの作製でエラーが出て先に進めませんでした。いったん機能をアンインストールしていれなおしたら違うMacアドレスになり問題が解決しました。VMで複数台用意する場合、Sysprep後にフェイルオーバークラスターをインストールしたほうが無難なようです。
AlwaysOn機能の設定は、非常に簡単で http://www.microsoft.com/ja-jp/sqlserver/2012/movie.aspx にある「SQL Server AlwaysOn による可用性の向上」という自習書を参照してインストールすれば、ほぼ迷うことはなかったです。
で、実際に自動フェイルオーバーを試してみました。クライアントソフトを立ち上げてデーターベースと接続して、SQLをシャットダウン=>自動フェイルオーバーして、再びクライアントソフトをいじったところ、少しの間反応が止まってから無事に動き出しました。瞬時にというわけにはいきませんが、クライアントソフト側でなんの対応もすることもなくフェイルオーバーできました。これは、理想に近い環境です。でかいクエリをしている途中にフェイルオーバーした場合は、さすがにエラーが出ましたが、顧客管理をLinqToSQLでアクセスしている分には、ほとんど瞬時のクエリばっかりだし、クエリが終わればほとんどの場合接続を切りますので、データーロスの可能性はかなり低いようです。
昨年末に、顧客管理のデーターベースをAccessからSQLサーバーに切り替えました。
ちょうどこの病院を作ったのが2000年で、そのころはまだVBでプログラムしてましたので、自作の顧客管理プログラムはAccessのVBを使うのがリーズナブルかつ簡単でした。
.NETが発表されて、C#がリリースされたのを機会にプログラミング環境をC#に全面的に切り替えました。何度か、Accessの帳票ベースからC#のWindowsフォームベースに切り替えようとしたのですが、SQL文にどうしてもなじめないとか、かえって遅くなるとか、いろいろな理由で10年以上運用してしまいました。
しかし、C#4.0の登場を機にLinqを触り始めたら、飛躍的にプログラミングの効率が良くなっていることに気が付いて.NETベースの顧客管理ソフトを1か月ぐらいででっち上げました。
そして、試しにSQLサーバーにデーターを移してLinqToSQLを使ってみたら、Accessよりずっと速いではないですか。サーバーの能力も10年前とは桁違いだし、.NET自体も速くなったみたいだし、Visual Studio上でデーターベース管理も行えるしということで、Accessをつかうメリットはほぼないなということで切り替えちゃいました。
それで、現在はSQLで運用していますが、1点だけ怖いのがあって、SQLサーバーが落ちた時のダウンタイムです。ファイルベースのAccessの場合は、ファイルサーバーが落ちてもリアルタイムでデュプリケートしている予備ファイルサーバーに自動的に切り替えるだけで済みますが、SQLの場合、フェイルオーバークラスタ環境でないと、自動で切り替えというわけにはいきません。クラスター化した場合、ストレージが単一の障害点となり、ストレージもクラスター化が必要ですが、そこまでの機材は揃えれません。
しかし、新しく出たSQL2012のAlwaysOnだと、共有ストレージが不要です。これだと、手軽に自動フェイルオーバーが行えます。3台のSQL2012Coreを試しに作って、実験してみました。
インストールと設定は大して迷うこともなかったです。一つはまったのが、バーチャルマシン上でフェイルオーバークラスターの機能とSQLサーバーをインストールして、VHDをコピーしてsysprepかけて3台用意したのですが、フェイルオーバー機能に伴ってインストールされた仮想IPのMACアドレスが3台とも同じになってしまいクラスタリングの作製でエラーが出て先に進めませんでした。いったん機能をアンインストールしていれなおしたら違うMacアドレスになり問題が解決しました。VMで複数台用意する場合、Sysprep後にフェイルオーバークラスターをインストールしたほうが無難なようです。
AlwaysOn機能の設定は、非常に簡単で http://www.microsoft.com/ja-jp/sqlserver/2012/movie.aspx にある「SQL Server AlwaysOn による可用性の向上」という自習書を参照してインストールすれば、ほぼ迷うことはなかったです。
で、実際に自動フェイルオーバーを試してみました。クライアントソフトを立ち上げてデーターベースと接続して、SQLをシャットダウン=>自動フェイルオーバーして、再びクライアントソフトをいじったところ、少しの間反応が止まってから無事に動き出しました。瞬時にというわけにはいきませんが、クライアントソフト側でなんの対応もすることもなくフェイルオーバーできました。これは、理想に近い環境です。でかいクエリをしている途中にフェイルオーバーした場合は、さすがにエラーが出ましたが、顧客管理をLinqToSQLでアクセスしている分には、ほとんど瞬時のクエリばっかりだし、クエリが終わればほとんどの場合接続を切りますので、データーロスの可能性はかなり低いようです。
投稿者 美濃加茂市のIT獣医師 近藤 博 | コメント(0)
コメントする