Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

mikasafabric for MySQL

1,024 views

Published on

2016/08/29 Database Night Hokkaido 2016 Summer

Published in: Technology
  • Be the first to comment

  • Be the first to like this

mikasafabric for MySQL

  1. 1. mikasafabric for MySQL Oracle ACEはオラクれない 2016/08/29 yoku0825 Database Night Hokkaido 2016 Summer
  2. 2. \こんば んは/ 1/55
  3. 3. Twitterや ってる⼈︖ 2/55
  4. 4. 本⽇のハッシュタ グ #dbdonight EZ DO DANCEっぽい 3/55
  5. 5. \こんばんは/ yoku0825@とある企業のDBA オラクれない- ポスグれない- マイエスキューエる- 家に帰ると 妻の夫- せがれの⽗- ムスメの⽗- ⽣息域 Twitter: @yoku0825- Blog: ⽇々の覚書- MyNA ML: ⽇本MySQLユーザ会- MySQL Casualʼs Slack: MySQL Casual- 4/55
  6. 6. とある企業 GMOメディア株式会社 (そろそろ4年くらいかな) ただいまエンジニア募集中 Ruby, PHP, Java, その他募集してないふりしてエンジニアが不⾜してい るなう - Skypeでビデオ⾯接できるはず- 東京に出てきたい時には候補の⼀つにしていただければ幸い- 5/55
  7. 7. This yoku0825 is brought you by 開催してくれた @marcy̲terui さんありがとうございます ノリで北海道まで付き合ってくれた @soudai1025 さんも ありがとうございます 会社の予算(勉強会への登壇費⽤負担)で札幌まできまし た。ありがとうヘーシャ。 6/55
  8. 8. 前書き 7/55
  9. 9. 2015年 10⽉21⽇ 8/55
  10. 10. MySQL 5.7.9 Genral Availability 9/55
  11. 11. 盛りだくさんの変更点 Complete list of new features in MySQL 5.7 MySQL 5.7の新機能完全リスト | Yakst 詳解MySQL 5.7 進化したMySQLをよく知るためのテクニカ ルガイド 10/55
  12. 12. 数々の改善点 JSON型, JSON関数, generated column(関数インデック ス) ⽇本語対応 InnoDB FTS sysスキーマの標準バンドル サーバーサイドステートメントタイムアウト 同⼀スキーマ内Multi-Threaded Slave 11/55
  13. 13. 数々の改善点 innodb̲buffer̲pool̲sizeのオンラインリサイズ Multi-Source Replication GTIDのオンライン有効化 ダイナミックレプリケーションフィルター オフラインモード 12/55
  14. 14. ところによりシャア 13/55
  15. 15. そして 14/55
  16. 16. 数々の いくつかの罠 default̲password̲lifetime show̲compatibility̲56 mysql.user.passwordカラムの廃⽌ sql̲modeのデフォルト値変更 log̲error̲verbosity vs. log̲warnings テンポラリーテーブルのInnoDB化 log̲timestamps rpmパッケージではvalidate̲passwordプラグインがデフォ ルトで有効 ⽇本語対応 InnoDB FTSはN-gramで使うとアルファベット が死ぬ 15/55
  17. 17. 即死はしないけど割と⼤きな変更点も 16桁ハッシュのパスワードの廃⽌ 認証周りの構⽂の変更 mysql_install_db vs mysqld --initialize InnoDBバッファプールの暖気がデフォルトでONに binlog̲format, sync̲binlogのデフォルト変更 innodb̲default̲row̲formatの注意 rpmのsecure̲file̲privのデフォルト 16/55
  18. 18. というかこのへん ⽇々の覚書: MySQL 5.7.6以降では暗黙のテンポラリーテー ブルがあふれると死ぬ ⽇々の覚書: MySQL 5.7.4で導⼊された default̲password̲lifetimeがじわじわくる(MySQL 5.7.11でFIX︕︕) ⽇々の覚書: MySQL 5.7では迂闊にperformance̲schema をOFFするとSHOW STATUSが使えない(修正されまし た) 17/55
  19. 19. そんな去年の末 「5.7はn倍速い」 「5.7は新機能がいっぱい」 うん、それは知ってる。でも気を付けなきゃユーザーが 痛い目⾒るものもあるよね︖ それも紹介してよ。 「どこかの誰かさんがMySQL 5.7のパラメーターは罠い 罠い⾔い続けた結果」 「お客様からも”5.7は罠なの︖”とお問い合わせをいた だくようになり」 「こんなものを⽤意した」 MySQL :: 資料ダウンロード > MySQL 最新情報セミナ ー2015秋 > MySQL 5.7 新旧パラメタ⽐較 ⽇々の覚書: 2015年のMySQL 5.7騒動を振り返って 18/55
  20. 20. そんな去年の末 それではまた来年もよろしくお願いします。 来年は何してるんだろうなー。 ⽇々の覚書: 2015年のMySQL 5.7騒動を振り返って 19/55
  21. 21. MySQL Fabricや ってるとは思わな かったよ︓ (︔゙゚ʼω゚ʼ)︓ 20/55
  22. 22. 本題 21/55
  23. 23. MySQL Fabric #とは ⾼可⽤性(High Availability) 障害探知と昇格- データベースリクエストのアクセス先の選択- シャーディング – スケールアウト MySQL Fabric – コネクタとの連携 プロキシ不要の構成- MySQL :: MySQL Fabric 22/55
  24. 24. 要はナウいMHA for MySQLみたいなやつ マスター⾃動昇格 GTID必須(MySQL 5.7のオンラインGTID有効化で⼀気に ⾝近に) クラッシュセーフスレーブの設定でも使える MHA for MySQLは relay_log_info_repository= TABLE と相性が悪 くて起動に転ける - 対応コネクター(MySQL RouterもFabric対応コネクターと ⾒做せる)を使えばLVSやHA Proxy不要 23/55
  25. 25. 夢のような MySQLの管理 フレームワーク 24/55
  26. 26. 現実は⽢くない MySQL Fabricつらい MySQL Fabricつらい Advent Calendar 2014 MySQL Fabric&Routerつらくない Advent Calendar 2015 MySQL Fabricでぼっこぼこにされたはなし 25/55
  27. 27. これなんかひどい MySQL Fabric uses wrong argument of MAKETIME in prune̲log and prune̲error̲log events. MAKETIME functionʼs arguments are (hour, minute, second) but MySQL Fabric passes prune̲time as hour MySQL Bugs: #81557: MySQL Fabric uses wrong argument of MAKETIME in prune̲log Event 26/55
  28. 28. バンドメンバー募集 27/55
  29. 29. これもひどい status compares (not equal) with string ʻFAULTYʼ but status has integer datatype. mysql> SELECT server_uuid, group_id, server_address, mode, statu s, weight FROM servers WHERE group_id LIKE '%%' AND group_id IS N OT NULL AND status != 'FAULTY' ORDER BY group_id, server_addres s, server_uuid; .. 2 rows in set, 1 warning (0.00 sec) Warning (Code 1292): Truncated incorrect DOUBLE value: 'FAULTY' MySQL Bugs: #81559: Incorrect WHERE clause in dump̲servers fanction 28/55
  30. 30. 作ったやつ出てこい 29/55
  31. 31. 何故誰も⽂句を⾔わな いのか不思議なレベル 世界中で俺しか使ってないんじ ゃないか疑惑 30/55
  32. 32. 夢のような MySQLの管理 フレームワーク 31/55
  33. 33. 悪 夢のような MySQLの管理 フレームワーク 32/55
  34. 34. つらい 33/55
  35. 35. でもMySQL Fabric #とは ⾼可⽤性(High Availability) 障害探知と昇格- データベースリクエストのアクセス先の選択- シャーディング – スケールアウト MySQL Fabric – コネクタとの連携 プロキシ不要の構成- MySQL :: MySQL Fabric 34/55
  36. 36. ⽅向性は悪くないは ず(ポストMHA for MySQLとしては アリだと思った) 35/55
  37. 37. ので 36/55
  38. 38. mikasafabric for MySQL あまりにもつらかったので、おとなしくフォークして⾃ 前でパッチを当てることにしました。フォークするつい でに名前を変えたのが mikasafabric for MySQLになり ます。 期待通りに使えるMySQL Fabricを目指した結果なの で、まあまあ期待通りに動きます mikasafabric for MySQLをオープンソースライセンスで公 開しました | GMOメディア エンジニアブログ 37/55
  39. 39. mikasafabric for MySQL #とは ⾼可⽤性(High Availability) 障害探知と昇格- データベースリクエストのアクセス先の選択- シャーディング – スケールアウト 今のところMySQL Fabricの機能に⼿を⼊れてない- ここはスコープ外- MySQL Fabric – コネクタとの連携 プロキシ不要の構成- MySQL Routerとの組み合わせに特化する代わりに、アプリケーショ ンサイドのコネクションプールにも対応 - 38/55
  40. 40. mikasafabric for MySQL MySQL 5.7の新機能も積極的に使う offline_mode を使ってコネクションプールとの相性を改善 0.1.2現在、ファームはMySQL 5.7.5以上必須 - Multi-Source Replication環境下でもファームに組み込めるように改 善 - 既存のバグのFIX prune_log, prune_error_log イベントのバグのせいでいつまでも消え ないログテーブル - レプリケーションスレッドのエラーでスレーブを SPARE ステートに切 り離し - “ちょっと便利な” 機能 event_schedular がオフだとワーニングメッセージ- ログテーブルへの出⼒をコンフィグで設定- group.health() の出⼒結果に gtid_executed を追加- 39/55
  41. 41. MySQL Fabric(mikasafabric) + MySQL Routerの動 作 Master Slave mysqlfabric Monitor/Demote Monitor/Promote AP AP mysqlrouter 127.0.0.1:3306 AP AP mysqlrouter 127.0.0.1:3306 Lookup Group QueryRouting(NAT) Routing(NAT) 40/55
  42. 42. 名前解決ベースのHAに近い MySQL Router(またはFabric-awareコネクター)がリゾルバ ー MySQL RouterはTTLが切れるたびにMySQL Fabricに経路 情報を問い合わせ TTL期間内はMySQL Router内のルーティングキャッシュを使って経 路解決 - TTL期間後でもMySQL Fabricへの経路情報の問い合わせに失敗した らルーティングキャッシュを使い続ける この実装のおかげで、MySQL Fabricの単体障害はサービスに影響を与えない - 41/55
  43. 43. MySQL Router MySQL Routerは全てのパケットを⼀度NATする もしアプリケーションから⾒てlocalhost以外に置くなら、MySQLア カウントの接続元はMySQL RouterのIPアドレスにしないといけない - 遅延は数⼗us単位- ⼀度NATしている関係上、エラーパケットを捕捉して特定のエラーコ ードなら切断するとかいうパッチもしてみた(動いた) - パスワードをiniファイルに書くと起動できない、書かないとプロンプ トを出そうとするのがダメなところ(パッチでしのいでる) - mikasafabricでマスター昇格コマンドを叩くと2〜3秒で切 り替わる TTLは1- フェイルオーバーの場合、mikasafabricがファームのダウンを検知す るまでに6秒くらいなので合わせて10秒ちょい(のはず) - 42/55
  44. 44. MySQL Fabric レプリケーションのマスター/スレーブの組を “グループ” と 呼んで管理 サーバー(mysqld)は server_uuid ごとに識別される 4つのステータス。PRIMARY, SECONDARY, SPARE, FAULTY- 43/55
  45. 45. サーバーごとのステータス PRIMARY SECONDARY SPARE FAULTY read-write Yes No No No read-only No Yes No No read-only & allow̲primar y̲reads Yes Yes No No フェイルオーバ ー候補 - Yes No No フェイルオーバ ー時のマスター 追従 (Yes) Yes Yes No 死活監視 Yes Yes Yes No MySQL Routerから⾒た時で、他のコネクターは違うかも知 れない 44/55
  46. 46. mysqlrouter.ini [fabric_cache:hogehoge] address = 172.17.3.202 user = mysqlrouter #password = router_password [routing:master] bind_address= 0.0.0.0:13306 mode = read-write destinations= fabric+cache://hogehoge/group/myfabric [routing:slave_only] bind_address= 0.0.0.0:23306 mode = read-only destinations= fabric+cache://hogehoge/group/myfabric [routing:all_wrr] bind_address= 0.0.0.0:33306 mode = read-only destinations= fabric+cache://hogehoge/group/myfabric&allow_primar y_reads=yes 45/55
  47. 47. ステータス変更 PRIMARY SECONDARY SPARE FAULTY PRIMARY - group promote(*) No threat report̲failure SECONDARY group promote - server set̲status threat report̲failure SPARE No server set̲status - threat report̲failure FAULTY No No server set̲status - * 他のサーバーをマスターに昇格させるということ 46/55
  48. 48. mikasafabric for MySQLの死活監視 変更後ステータス mikasafabric特有 MySQL接続失敗(サーバーダ ウン含む) FAULTY No SHOW SLAVE STATUSで スレッドが⽌まってる SPARE Yes オフラインモードON FAULTY Yes 47/55
  49. 49. mikasafabric for MySQLのフェイルオーバー マスターに対して SET GLOBAL read_only = 1 マスターに対して SET GLOBAL offline_mode = 1 (mikasafabric特有) candidateに対して SELECT WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS(..), STOP SLAVE, RESET SLAVE ALL, SET GLOBAL read_only = 0 candidate以外のスレーブと旧マスターに対して STOP SLAVE, CHANGE MASTER TO 旧マスターに対して SET GLOBAL offline_mode = 0 (mikasafabric特有) 48/55
  50. 50. オフラインモード (from MySQL 5.7.5) MySQL :: MySQL 5.7 Reference Manual :: 6.1.4 Server System Variables SET GLOBAL offline_mode= 1 で有効化 オフラインモードだと、Super̲privを持っていないユーザ ーは接続できない Super̲privを持っていないユーザーのセッションは、現在 のクエリーが終了次第コネクションを切断される これで、コネクションプールのスレッドたちを⼀度強制的に切り離せ る - ⽇々の覚書: MySQL 5.7.5のオフラインモードはgraceful shutdownの夢を⾒るか 49/55
  51. 51. mikasafabric for MySQLということ MySQL Fabricを使いたいおじさんが、 ⾃分で使うために パッチしている MySQL Fabric 1.6.0がlabsにあった時期があって、このまま1.5.6ベ ースで⾏くかどうかは微妙だけれど、それでも「ある程度期待通りに 動くMySQL Fabric」として使える程度にはメンテナンスするはず - ⾃分で⾔うのもアレだけど、MySQL 5.7 + MySQL Fabric + MySQL Routerの組み合わせで運⽤だったら⽇本で⼀番詳 しい気がする だから、その組み合わせだけに特化して(それでも⼤概のユースケー スには上⼿く合う)「DBAが本当に必要だったもの」を追加する - 50/55
  52. 52. エコシステムと付き合うということ エコシステムは本来(ほとんどのユーザーにとっては) 作る ものじゃなくて 、 便利に利⽤するもの 、 もともとは 作っ た⼈⾃⾝が使うためのもの だったりすることが多い 作者が使わない機能、作者が踏まないバグ、作者が使わなくなったシ ステムはメンテナンスされない - 使えない、修正されないと嘆いてるそれは、そもそも作者が知らない かも知れない 教えて︕ できそうならがんばる︕ - MHA for MySQLとかまさにそれ- 51/55
  53. 53. yoku0825ウェア mikasafabric for MySQL mroonga/docker anemoeater 雑なスクリプト mysqlbinlog̲lister とか stream̲binlog とかは汎⽤的に使えると思 う - 52/55
  54. 54. 旅は道連れ世は情け 銀の弾丸みたいに何もかも教えてくれる⼈にいてほしい訳じ ゃなくて 困った時に⼀緒に「困ったねぇ」って⾔ってくれるともだち がほしい おじさんズ are waiting for you!! MyNA ML: ⽇本MySQLユーザ会- MySQL Casualʼs Slack: MySQL Casual- 53/55
  55. 55. ついでに mikasafabric for MySQLをよろしく お願いします :) 54/55
  56. 56. Questions and/or Suggestions? 55/55

×