メモメモ。 全体を通して実にカジュアルだった。
山岡「どうやらみなさんは本当のカジュアルなMySQLを知らないらしい。4/19(木) 19:30に来てください。本物のカジュアルをお目にかけてみせますよ」
Decolog
- 女子いっぱい
- うらやm。。。
Decolog構成
- 500強のサーバ 200以上はmysql
3人で開発運用
AWS使ってる
なぜMySQL?
- だいたいRDBMSでたりる。
- 使い方がわかりやすいのがいい
- Decologではそんな難しい事はしてない。
こんな僕でも1億枚捌けた – 30days albumインフラ成長の歴史
- ペパボのインフラの人
- もとレン鯖の管理者
今日話すサービス
- 30d.jp
- 写真保存共有サービス
- 累計1億枚超えた
- 202TB
- mysqlの話は少ないです。
スキップ!!!
史上最大のピンチ
- 急に重くなった気が
- ぎりぎりアラートこない程度の高負荷
予想外の増加ペースに。
週末の増加ペースが1−2TB/day
- appサーバとDBどちらもHWの限界に。
どうにかするために
- apache/passengerのチューニング
- staticファイルをnginxに。
DBにindexたしたけど効果なし。
サーバ発注したけど数週間。
EC2をつかおう!
- EC2上に構成を作って、参照のみそっちに流した。
- 子、孫スレーブをEC2上に作った
孫スレーブが必要だった理由
- masterが限界
- 子slaveが他の機能もになってるので、あまり負荷かけたくない。
子スレーブの作成
- xtrabackup で作成
- internetを通してreplするのでSSLで接続
孫slaveはEBSスナップショットで。
これでとりあえず乗り切った
サーバが納品
- appサーバを増強
- したら、DBに負担がかかって応答なくなってappもサチった
- DBも増強。
- 平和になった
まとめ
- パフォーマンス監視だけは忘れずに
- SSDすごい
- 足回りのDBは早めに。
データセンター間でMySQLをカジュアルにアップグレードしたお話
- n0tsさん
今日の話
- 大人の事情でDC移行
- MySQLもupgradeしたのでその話
サービス規模
- 広告サービス
- X000 req/sec
構成
- MySQL 5.0.XXを使ってた
- 移行前後で構成は特に変えない
DC間レプリケーション
- SSLレプリケーションなぜか失敗
- 5.0.58 へ 5.5.Xへつなごうとしてたら失敗
- 仕方ないので、SSHトンネルで結んだ
きりかえ
- 両方のDCに流れても大丈夫なように構成して、DNSラウンドロビンした
その後、DNSラウンドロビンをやめて切り替えた。
なんとか問題なくversion up完了。
MySQL Casual な生活
- hatakさん
- コロプらの人
コロプラについて
- コロニーな生活プラス
- 位置情報サービスのプラットフォーム
- ユーザ250万人
- 月間37億PV
構成
- CentOS 5/6
- Java/PHP
- MySQL 5.1/5.5
- ほぼInnoDB
- master / slave 1:n
mysql 5.5
- InnoDBのパフォーマンスとutf8mb4が使いたかった。
- どれくらい変わったのか。。。はそんなに。
メンテナンスな話
- DBには運用が必要
- Slaveは割と簡単に入れ替え可能
Masterは面倒
- やたらとやると刺さる
- サービス停止はそれはそれで面倒
よくやるのはオンラインマスタ入れ替え
丸ごと同じセットを作り、ごそっと入れ替える。
- 同じ台数だけセットが必要になるのがデメリット。
注意すべきところ
- 新Masterの方で、auto_incrementの値を増やしておく
- 重複を防ぐため。
- 新Masterの方で、auto_incrementの値を増やしておく
preload
- 全件SELECTするというてもある
- blackhole Engineを使う手も。
- 現実に即した形でやりたい
- tcpdump + pt-query-digest
- 全件SELECTするというてもある
気をつけるところ
- mk-slave-moveでつなぎ変えるとかもあり。
- 極力新しいMasterに早く切り替えられるようにする。
チューニングな話
- 突発的に高まる事がある
最初のボトルネックはMaster DB
ひたすらmy.cnfを調整
- sync_binlog = 0
- innodb_flush_log_at_trx_commit = 0
- innodb_support_xa = 0
- 信頼性は落ちるので、DBの系統によって個別に調整
diskのマウントオプションとか
ライトバリアとか
メモリをつめるだけ詰む
ただ落とし穴が。。。
- からのデータにデータセットが詰まっていくとswapが。。。
本番に影響しない範囲での試行錯誤大事
障害な話
- 未然に防ぐ事大事
時々巡回してチェック
まずは、何が起きているか、を確認
- error_log
- show processlist
- slow log
- …
あるある障害
- Range Partition作り忘れ
- cronにしてても、移行漏れ
サーバに起因する障害
- show processlist でCommitがたまってる
- disk I/O
- Hwレベルでの監視も必要
- クエリが詰まる
- indexや想定外のデータ蓄積等
- Sleepがたまる
- app側でささってしまってるとか。
- show processlist でCommitがたまってる
いろんな視点が大事
- サーバだけでなく、コードやサービスもみないといけない。
Forcing swap in
Swap Insanity
- NUMAアーキテクチャによるメモリアクセスが関連してswapしちゃう
複数CPUだと旨くメモリを使いきれずにswapしちゃう問題
mysqld_safeにパッチ
Masterは再起動したいけどなかなか
- Masterきりかえすべき
sudo /sbin/swapoff
- page size単位でメモリに戻される
- 案外なんとかなっちゃっった
- ただの一時しのぎ
なんとかKitについて
Maatkit
- Percona Toolkitに組み込まれた
Percona Toolkit
- Maatkit / Aspersaを継承したもの
pt-mext
- show global statusをside-by-sideで表示してくれる
pt-online-schema-change
pt-stalk
- トリガーを設定できて、thresholdをこえたものに対して発動できる
mk-slave-move
- なぜかなくなってる。
レプリケーションエラーから自動で復旧
ある日起きた障害
slaveが全部とまった
- MySQLのbugに起因
- なんかいかskipしてひとまず解決
- …またとまった
またskipしてなんとかしたが、見地から解決まで10分ぐらいかかる
- これではまずい
mk-slave-restart
- 特定のエラーを無限skipしてくれる
- ただ、手動なのは変わらず
logmon
- IBM性のツール
- perl
- エラー監視できる
logmonで監視して、止まったらmk-slave-restartを自動で発動
- 実運用では、さらにIRCにも通知させた
- 時々落ちるので、Supervisordでデーモン管理
MySQL Cluster 7.2のネタ
色々告知
MySQL Cluster7.2が出た
- これはKVSだよ!
沖縄に行こう!
- 4月頭に沖縄支部ができたよ。
- スピーカー募集
北海道に行こう!
- 6月にOSC
- スピーカー募集
サンフランシスコにいこう!
- 9月末にMySQL Connect
- 5/6まで募集
- スピーカー募集
MySQL ビギナートーク
- 5/29にここで。
- スピーカー募集
東南アジアに行こう!
- 社員募集中
道具を磨くことのススメ
道具を磨く
mymemcheck
- 最大使用メモリを算出してくれる
MySQLTuner
- もうちょっと増やした方がいいかも、とかをアドバイスしてくれる。
tcpdump->pt-query-digest
show profile
MySQLTranCapcha
- まつのぶさんの。
tpc-c
facebook online schema changer tool
MySQL Performatnce Blog
AKBとmysql-buildの話
AKBとmysql-build
haruna Storage Engine
- AKB!!
mysql-build
- mysqlを手元にソース持ってきてbuildしてくれるツール
- カジュアルに色々入れてみよう
自作MapReduceフレームワーク MyMR
PHP と MySQLでMapReduce
- MyMR
- MySQLに入出力する
- コマンドラインで実行
- PHPで書く
RailsとMySQL
RailsとMySQL
- SET SQL_AUTO_IS_NULL = 0 , NAMES utf8を最初ん勝手に打ってる
- mysql2は実際にはprepareが実行されない
- 自前でエスケープしないと。
- クエリ実行はmysql_send_query
- mysql_real_queryではない。
- ノンブロッキングに実行するため
- mysql_real_queryは結果を待つ
transaction
- begin - commit/rollbackになる
- auto_commitを自動できる、とかはしない。
- ネストした場合は自動でsavepointをうつ
福岡でもmysql casualやるよ!
カジュアルなクエリ品質管理
クエリ解析
増強したけどまた負荷が増えてきた
- V時回復
- クエリ品質を担保せねば。
スロークエリ解析
- 現れだしたときにはもう。。
show processlist
- 頻度で見るのはいい感じ
mk-query-digest
- tcpdump
- pcap形式で保存するとサイズが小さくすむ
続・Master n 対 Slave 1 レプリケーションの作り方
n:1 repl
- 半年間ちゃんと動いてるよ!
- 問題出てない!
fluentdとMySQL
Fluentd mysql
- fluentd-plugin-mysql
- mysql-jsonでガツんと入れてしまうw