(」・ω・)」うー!(/・ω・)/にゃー!

Mysql Casual Talks vol.3にいってきた。

| Comments

メモメモ。 全体を通して実にカジュアルだった。

山岡「どうやらみなさんは本当のカジュアルな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の値を増やしておく
      • 重複を防ぐため。
  • preload

    • 全件SELECTするというてもある
      • blackhole Engineを使う手も。
    • 現実に即した形でやりたい
    • tcpdump + pt-query-digest
  • 気をつけるところ

    • 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側でささってしまってるとか。
  • いろんな視点が大事

    • サーバだけでなく、コードやサービスもみないといけない。

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

Comments