MaatKitの紹介
MaatkitというMySQL用のツール群の紹介。
ツールの数が多いので、この講演ではよく使うツール数個について説明されていた。
特徴
- ドキュメントもあるし、オプション例もある
- Facebookを始め多数の企業に導入されている
- 商用サポートもあるらしい
- rpmなどもあり、導入は簡単
- しかし日本語の情報はほとんどないらしい、というか日本ではほとんど使われてないらしい
- はてなではMySQLサーバ構築時に一緒にインストールする
- 最近は memcached,postgresql にも対応しているらしいが未検証
mk-find
- GNU find っぽくテーブル情報を検索できる。正規表現ももちろんOK
- 抽出したテーブルに対し処理を実行することも可能
mk-slave-restart
- エラーで止まったmysqldをリスタートする。エラー番号指定可能
mk-kill
- 特定条件にマッチしたクエリをkillする。条件指定が豊富
- 例 バッチサーバから本番DBに間違って投げられた参照クエリを kill
mk-slave-move
- レプリケーションスレーブを移動。子→孫、孫→子、孫→別の子スレーブの孫、etc...
- 実行時にレプリケーションが止まるので、本番環境から外して実行しておくこと!
mk-query-digest
- クエリ解析ツール。解析できるデータ形式が豊富。
- 出力は mysqldumpslow ライク
- はてなでは毎日cronでmk-query-digestを流してクエリ改善の指標としているらしい
- あるサーバへのクエリのうちselectだけを別サーバに向けるなんてこともできる
はてなでの歴史
-
- 2008/8/28にSSD購入
- 2009/2/26 X25M導入
- 現在 53ホスト
- alter table 速い
- どのくらい速いかというと、RAID上でalter tableするより、RAID から tar + ncat でSSDに持ってきて、alter table してから再度 tar + ncat で RAID に戻す方が速い、というぐらい
サーバ構成
- メモリ8GB、シングル(非RAID)
- ファームウェアバージョンもファイルシステムアラインメントも気にしない
SMARTの見方
- Media Wearout Indicatior が write量と強い相関
- 大量に書き込むと減る。0が寿命だと言われているが、0になっても動くものもある
- write性能が著しく劣化する模様
その他
- よれよれのSATA使うとread性能劣化
- AHCIにしないと性能劣化
- 通常使ってる分にはベンダサーバRAID×3台より速い
- 50以上のホストで使ってるがトラブルが起きたことがない。一方でRAIDはRAIDカードのコンデンサが爆発したりと、トラブルはちょこちょこ発生
- SSDがあまりに速すぎるせいでEC2等のクラウド環境に持っていけない
- X25EだとオーバースペックなのでX25Mで十分
- SSDはルートディレクトリから乗っけてる
- はてなではXenを使った仮想化をしている。Dom0並べておいて、使い道はあとで考える感じ
インフラエンジニアのための Cassandra 入門
CassandraはMySQLより分散処理の管理が楽
- MySQLの分散処理は大変
- カラム分割やハッシュテーブルなど使っても、メンテナンスが結構手間
- Cassandra でできること
- パフォーマンス
- r/w ともに MySQL より 250/23倍速い( 300/300 ms -> 0.12/15 ms) ※公式wikiより
- 分散実装
- 冗長性
- データ構造
- Cassandra でできないこと
Gossip プロトコル
- 直近のノードのみでデータのやりとりをすることで、クラスタ全体にデータを伝搬させるためのプロトコル。
- (説明には用語としてでてなかったが、要するにクラスタ全体で木構造をとるということ。だからノードN個のデータ転送量はN-1倍するだけで済む。N**2などのオーダーにならないということ)
- ノードが死んだことを検知したら、別のノードとの通信に切り替える。
- ポーリング間隔は1秒固定。
- データの転送量が急激に増えることはないが、その性質上クラスタ全体での整合性をとることが困難
- 整合性とることを優先するオプションもあるが、パフォーマンスは著しく低下する
Cassandra 上のデータ構成要素
- memtable
- sstable
- 古くなったデータはディスク上のこのファイルに書き込まれる
- commitlog
- sstable と commitlog は IO分割した方がいい(パーティション分割とかディスクを分けるとか)
サーバ追加
- 設定ファイルのSeedという項目に追加しておけばいい
nodetoolコマンド
- データの再配置(めちゃ重い)
- サーバ監視
- バックアップ/リストア
- snapshot コマンド。
- 使うときは flush して memtable の情報を全て書き出してから
問題点
- 動作不安定。高負荷時に落ちる
- クライアントの冗長/分散は必要
- kumofs の kumo-gateway みたいなのはない
- 仕様がちょこちょこ変わる
以上