O slideshow foi denunciado.
Utilizamos seu perfil e dados de atividades no LinkedIn para personalizar e exibir anúncios mais relevantes. Altere suas preferências de anúncios quando desejar.

mikasafabric for MySQL

1.164 visualizações

Publicada em

2016/08/29 Database Night Hokkaido 2016 Summer

Publicada em: Tecnologia
  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

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

×