2009年9月12日土曜日

新書籍「Linux-DBシステム構築/運用入門」

 Linux上で「高速で、落ちない」DBサーバーを構築するための技術解説をした書籍を出版します。タイトルはストレートに「Linux-DBシステム構築/運用入門」です。
 9月17日発売ですが、ジュンク堂など一部の書店ではすでに入荷しているそうなので、見かけたらぜひ読んでみてください。章構成は以下の通りです。

第1章 論理ボリュームマネージャ(LVM)を活用する
第2章 Heartbeatによるクラスタ環境の構築
第3章 DRBDによるネットワークミラーリング(前編)
第4章 DRBDによるネットワークミラーリング(後編)
第5章 高可用DBサーバーの構築
第6章 現場で使われる高可用構成
第7章 DBサーバーのパフォーマンス概論
第8章 インデックスのチューニング(前編)
第9章 インデックスのチューニング(後編)
第10章 DBサーバーのハードウェア選定
第11章 SSDの効果とアプリケーションへの影響
第12章 メモリ管理とスワップ領域の制御
第13章 ファイルシステムとI/Oスケジューラ
第14章 Linux-DBサーバーにおける負荷テストの心得



 本書籍は、DBマガジンでの連載記事「Linux-DBサーバー構築入門」と一部の特集記事がベースになっています。連載中に書くことのできなかった、SSDの章とメモリの章については新規に書き下ろしています。それ以外の章についても、書籍としての一貫性や、最近のトレンドに追従できているかといった観点から、大幅に加筆修正を行いました。
 大きく分けて、HA構成編(1章-6章)とパフォーマンス編(7章-14章)の2本立てとなっています。Linux上にRDBMSをインストールして使うのは当たり前に行われているので、そこから一歩進んで、HA構成をいかに安価に構築し、かつパフォーマンスを出していくかという点に焦点を当てています。
 主に想定している読者としては、Linux上でのRDBMSのインストール方法を知っているという前提知識があって、高可用環境の構築や高パフォーマンスのための技術を学びたいと考えている方になります。相当丁寧に書いたつもりなので、「入門」のタイトル通り、これから学ぼうと考えている方に読んでほしいです。一方で随所で踏み込んだ解説をしているので、中~上級者の方にも得るものがあると思います。


●HA構成編の内容
 HA構成編では、LVMについて軽く流した後、もっとも基本形と言えるアクティブ/スタンバイ構成から解説を始めています。まず理論をしっかり理解するという観点から、アクティブ/スタンバイ構成を正しく組むためのハードウェア設計や、監視経路の整備、Heartbeat、DRBD、monといった各ソフトウェアの存在意義の解説をしています。その上で、具体的なアクティブ/スタンバイ構成の組み方や、パラメータ設定上のポイント、フェイルオーバーテストの方法、パフォーマンス上の考慮ポイントなどをカバーしています。HA環境はただ構築して終わりではなく、その後も使い続けるものですから、トラブル時に迅速に原因を切り分けて復旧するためにも、より本質的な理解を得たいところです。特にDRBDについては、dopdやActivity Log、スプリットブレイン自動検知機能の存在意義や動作原理など、ほとんど語られることが無いけれども重要な点も解説しています。

 最近のトレンドでは、ハードウェアのうち1台が無駄になってしまい、かつダウンタイムが長くなってしまうアクティブ/スタンバイ構成から一歩進んで、どちらもアクティブ状態になるアクティブ/アクティブ構成を採用するケースが増えてきています。アクティブ/アクティブ構成については、本書ではMySQLを例にとって、レプリケーション、MySQL Clusterなどによってどんな構成が取れるかを示しています。一般的に推奨されないと考えられているマスター/マスター型のレプリケーションが使われるのはなぜか、データセンター間のレプリケーション構成は取れるのかといった点から、次期バージョンで期待を集めているセミ同期レプリケーションの可能性と注意事項などもカバーしています。第6章はMySQLに特化した章になっていますが、ほかの章についてはできるだけMySQLに依存しないように配慮しています。
 特にアクティブ/スタンバイ構成とアクティブ/アクティブ構成は、ソフトウェアの構成要素がまるで変わってくるので、特に理解が難しいポイントでもあるのですが、全体像を理解できるように配慮したつもりです。


●パフォーマンス編の内容
 パフォーマンス編では、「アプリケーション全体のアーキテクチャ」「RDBMS単体チューニング(主にインデックス設計)」「Linux/ハードウェア周り」「負荷テスト上のポイント」という観点から記述しました。
 目標スループットを達成する上で「1台のDBサーバーでは十分でないケース」が増えてきています。このときの対処手段としては、レプリケーション構成を用いたり、アプリケーションパーティショニングを組んだり、memcachedのようなキャッシュサーバを導入するといった様々な方法があります。これらは、それぞれ向き/不向きがありますが、本書を読むことでその特徴がより深く理解できるのではないかと思います。
 インデックスについては2章構成としており、前半は参照性能を最大化するためのインデックス設計、後半はINSERT性能のダウンを緩和するためのさまざまなテクニックをカバーしています。インデックスがあると更新性能が落ちるのはよく知られた話ですが、それがどの程度になるのか、データ量が増えると更新性能が落ちるのはなぜか、またハードウェア環境やテーブルパーティショニングなどによってどのように変わるのか、といった定量的な指標を示しており、参考になることでしょう。
 Linuxという観点ではメモリ制御/スワップ、メモリアロケータ、I/Oスケジューラ、ファイルシステムといった、パフォーマンス上重要なポイントをカバーしています。スワップサイズをゼロにすると何がまずいのか、接続パラメータにメモリ領域を割り当てすぎるとどんな副作用があるのか、cfq/deadline/noop/anticipatoryという4種類のI/Oスケジューラにはどんな違いがあるのか、といった、DB管理者であればひととおりおさえておきたい点をきっちりカバーしたつもりです。
 ハードウェアという観点では、HDDとRAID構成上のポイントやライトキャッシュの重要性、そしてSSDについてカバーしています。SSDには1章を丸々割いており、SSD製品選定上のポイントや、さまざまな条件によるHDDとSSDの性能差の紹介、ファイルによって適正がどう変わるかを見ていきます。そして、SSDが今後普及することで、RDBMS自体やアプリケーションにどのような影響があるかを考察していきます。SSDの章は、先月発売のDBマガジン誌の記事とほぼ同様なのですが、本書では字数制限が基本的に無いので、DBマガジン誌では書ききれなかった内容についても触れています。
 最後に、これらの要素技術を踏まえていかに実戦に活かすかという意味で負荷テストのケーススタディを紹介しています。

 MySQLを使われている方はもちろんのこと、そうでない方でもLinux上でDB構築/運用をする方であれば、必ずや得るものがあるだろう思います。
 本Blogでは、発売後しばらくの間、本書の内容を補完する意味でのサポート記事をいくつか投稿する予定です。

5 件のコメント:

Masanori さんのコメント...

こんにちは。

最近オープンソースソフトウェアを使ったDBサーバー構築の仕事がとても多く、この本は大変重宝しております。
P.98の「MySQLのインストール」にならってMySQLをインストールしたところ、以下のメッセージが出てMySQLを起動できませんでした。
innobase_buffer_pool_size can't be over 4GB on 32-bit systems

"innobase_buffer_pool_size=11G"というのは誤植ではないでしょうか。

Yoshinori Matsunobu さんのコメント...

エラーメッセージの通り、32ビット機では割り当てられるメモリに大きな制限がかかるので11GBでは起動できません。第12章をご参照ください。innodb_buffer_pool_size=11Gは、メモリが16GBある環境では妥当な設定です。

匿名 さんのコメント...

Website Design https://yoshinorim.net/
https://www.php.net/ https://www.python.org/ https://www.perl.org/

匿名 さんのコメント...

Website Design https://yoshinorim.net/contact-us
https://www.php.net/ https://www.python.org/ https://www.perl.org/

匿名 さんのコメント...

https://www.matsunobus.com/ https://www.php.net/ https://www.python.org/ https://www.perl.org/

コメントを投稿