41から始めました

文字通り41歳から始めたブログです。DB(MySQL)を使ってお仕事してるので、DB周りの話を中心に最近始めたこととかをTwitterのノリで書いています。なお、本サイトにおいて示されている見解は私個人の見解であり、所属団体や組織を代表するものではありません。

MySQL Technology Cafe #4参加してきた

昨日行ってきたやつのお話共有します。 松信さん(Facebook)の話がすごすぎて聞いてて頭プスプス言ってた。 それを思い返しながらまたプスプス言ってたんですが、なんとかかきおこしました。 正直、まだ理解が追いついてないです…。

MySQL Technology Cafe #4

https://oracle-code-tokyo-dev.connpass.com/event/135081/

タイムスケジュール *逐次通訳有

時間 内容 登壇者
18:00-18:25 受付 -
18:25-18:30 はじめに MySQL GBU 梶山 隆輔 氏
18:30-18:55 State of the Dolphin - What's new in MySQL Oracle Corporation Philip Antoniades (逐次通訳あり)
18:55-19:55 MySQL Replication and HA at Facebook Facebook, Database Engineer, 松信嘉範 氏
19:55-20:30 ネットワーキング

State of the Dolphin - What's new in MySQL

セッション概要 MySQLの最新の開発動向についてご紹介するセッションです。MySQL 8.0のGA以降も機能強化が続けられ、MySQL Cluster 8.0やMySQL Cloud Serviceもリリースに向けて開発が進められています。

登壇者 Philip Antoniades Oracle Corporation, Senior Director MySQL Sales Consulting プロフィール MySQL社の古参メンバーの一人で、現在はMySQLの技術営業部門のを統括。2003年にMySQL ABに入社、現在はオラクルにてワールドワイドのMySQLソリューションエンジニアチームのディレクターを務める。ニューヨーク在住。

Top 8 Best Features in MySQL 8

新機能であるInnoDB ClusterやJSONGIS関数の強化の話をされていました。

  1. SQL+NoSQL = MySQL ロゴにもなってるよね!
  2. MySQL InnoDB Cluster みなさんご存知。
  3. MySQLShell (SQL, Python, Java(Scriptですね))
  4. ROLEとかパスワードとかセキュリティ強化
  5. GIS関数
  6. データディクショナリ
  7. ユニコード改善
  8. SQLのアナライズ

Oracle Open World 2019でこのあたりの話はもちろん、今回はメルカリ社がMySQL Analytics Serviceの話をするらしい。 MySQL Analytics Serviceって、Nipunさんの話(この動画参照くらいでしか知らないけど、当時聞いたときにまだLaboの研究段階だったと思うし、それをどう実用に活かすかみたいな話が聞けるのかと思うとちょっと今からwkwkする。

MySQL Replication and HA at Facebook

セッション概要 FacebookにおけるMySQLの高可用化技術について紹介します。具体的には、Semi-Synchronous Replicationを始めとするレプリケーション技術の話や、そこに追加した機能の話をします。また、高可用化を実現するための内製ソフトウェアのDBStatus、Binlog Server、Logtailerなどを紹介し、どのような背景で、どのような課題を解決することを目指したのかを説明します。

登壇者 松信嘉範 氏 Facebook, Database Engineer プロフィール Yoshinori is a database engineer at Facebook. Before joining Facebook, Yoshinori was a database and infrastructure architect at DeNA, living in Tokyo. Yoshinori’s primary responsibility at DeNA is to make our database infrastructure more reliable, faster and more scalable. Before joining DeNA, Yoshinori worked at MySQL/Sun/Oracle as a lead consultant in APAC for four years. Yoshinori has written eight MySQL related technical books so far and has published technical articles about MySQL, Linux, and Java for a monthly database magazine since 2004.

MySQL replication and HA @Facebook

以下松信さんの話したことを箇条書きでメモしてる分だけですが書き起こします

  • MySQLレプリケーションをどうやって使っているか?について話す
  • 資料はPerconaLive(5月)で使ったもの(別の人が作った)

今日の話(目次)

レプリケーションの話

  • グローバルな構成(複数リージョンでMySQLのマスタースレーブを構成)
  • Facebookでは1リージョンに1つのMySQLインスタンスしか持ちません
  • マルチマスターはやりません
  • ある程度シンプルにシステムを組まないとトラブルの時に大変なので
  • チェインもしません
  • 孫スレーブはない
  • カスケードもしません
  • R1=リージョン1という意味
  • ちなみに、普段、マスタースレーブって言っちゃうんですが、プライマリー・レプリカっていうべきじゃないという話ありますよね。だけどslaveってソースに書いてるじゃん!ってことで(松信さんが)スレーブって言ったらレプリカのことだと思ってください
  • マスターと同じリージョンにスレーブが必要
  • Facebookではレプリケーションの主要な点として、リードをスケールアウトできるようにしたい
  • リードをスケールアウトするためには、Writeはクロスリージョンにするのはしょうがないとしている
  • 単一(同一)リージョンの中では準同期レプリケーション
  • 準同期レプリケーションの仕組みは、ローカルのバイナリログを書いて、
  • LBU ロジカルバックアップユニット >binlogを書いてackだけ返す
  • Master capable regions マスター候補となるスレーブ
    • マスター候補にならないスレーブもいる
  • binlogを読んで通知する機能:Wormhole
    • バイナリログの更新情報を元にMySQL以外のデータを更新する
    • キャッシュとかDWHにBinlogの更新情報を通知する Wormholeの参考

binlog BinlogServerの話

  • Live Master Promotion
    • マスターを切り替えたい時
    • アップグレード(マイナーバージョン)をFacebookでは頻繁に行っている(ので必要)
    • 重要なのはダウンタイム(500ms)
    • マスターをリードオンリーにした後、同期されたところで切り替え先をRWに書き換え、切り替える
    • リージョンが違うのでそのくらいかかる
  • Dead Master Promotion
    • どっかのRACが常に落ちるんで切り替えるのを自動化してる
    • ダウンタイムは30sくらい
    • ダウンしてもちゃんと復活するように
    • 多少切り替え時間がかかっても
  • 一個もセミシンククライアントがいないときは書き込みを止めるということができる=書き込みをさせない状態にする
  • リージョンがまるごと落ちるということもないことはない
  • そういう時は人が対応する
  • データがロストしたか(自動では)わからないので、人が介入する

Binlog Server Role and Features

ちなみにBinlog Serverの参考資料 もあげときます RippleについてはSmartStyleの説明が分かりやすかった yoku0825さんも検証をやってた

  • (マスター→binlog server→スレーブの流れ)
  • この機構により別のオートメーションが(スレーブやマスターを)構築する

Dependency replication

  • MySQLレプリケーションを使っているほぼすべての人は遅延を経験したことがあると思うんですけど
  • MySQLレプリケーション自体はすごく進化していて、並列性が上がって早くなっていますが課題はある
  • Facebookでは特定のアカウントの特定の投稿、例えばオバマが写真をアップロードした時に、その社員へのアクセスが集中して遅延が発生しました
  • こういう場合、特定のDBにデータがあるので、DBの並列性を上げても1つなんで限界がある
  • Facebookでは RBR を使ってbinlogから並列に更新可能なトランザクションを判定するグラフを作っている
  • トランザクション単位ではなく、レコード単位で並列度を上げていく

RBRって何? と思ってtom__boさんの記事に行く

  • RBR (Row based replication)ではRW/WWコンフリクトを見つけるためのすべてのデータが入っている。
  • conflictをDAGに書き換えて、コンフリクトがないものは部分的にであっても(例ではrowレベルで分解して競合しない部分を並列化していた)すぐに適用する
  • 最終的には適用でCommit orderingが保持されるようにしている
  • この方法でコンフリクトが少ない環境ではsysbenchのoltp_write_onlyのシナリオで最大4~5倍の性能改善

ああ、Row Based Replのことね。 とはいえ、言ってることはわかるけど、3行目の話とかどうやって実現しているのかわけわかめ・・・。

  • 非同期なスレーブが準同期なスレーブよりも多くのバイナリログを持っている可能性はある
  • Facebookでは、node fenceは準同期レプリケーションを組んでいるスレーブをすべて止める
  • スレーブよりもbinlog serverが正としている
  • binlog serverが再構築されないようにしている
  • 特定のUIDを持ったサーバにしかアクセスできないようにする
  • Rows Queryにコメントが書けるので、ほかのシステムから判別できるようにしている
    • シャードのIDとかレプリカセットとか
  • ネットワークの優先度を調整できるようにしてる
  • 準同期しているbinlog serverが最も進んだ状態にすることでフェールオーバーなどをシンプルにできた

RBR COMPLETE image format

  • binlog_row_imageについて
    • FULLに比べて元の値しか書かない
    • MINIMALだと微妙
  • FULLだと多いのでその中間のCOMPLETEを追加

Key Learnings/observations

  • binlog自体がハックされて壊されると深刻な問題
  • checksum機能が役に立ってる
  • SBRはやめてる
  • RACが部分的に遅延していると、特にリージョン間のネットワークが遅延してると書き込みは完結してても、レプリケーションが遅延する
  • SQL Thread をどんなに早くしても遅れてしまう
  • できるだけそういう状況を早く検知できるようにしている

今後

あたりが今後のチャレンジ

  • あと、パッチの管理、いわゆる技術的負債として残っているものをできるだけなくしていきたい

Q&A

Q: NICの速度の重要性が共感してもらいにくい。松信さんはどうお考えか?

  • MySQL だと優先度を変えるというのが大事
  • バックアップとかはそうかもしれないけど
  • あまりバンドル間での帯域については気にしてない

Q:リストアはどうしている?

  • こないだ梶山さんと話したのはバックアップかHAで今回の話はHAにしたんですけど、
  • mysqldumpでバックアップとってる
  • consistent restore
    • 自動的にバックアップをリストアしたものが正しいかを検証する機構がある

Q:変えたくても変えられないものはあるとは思うんですが、もし変えてもいいものがあればどこを変えたいですか?

  • MySQLじゃないものを使うこともできますが、レプリも使えてSQLも使えて気軽に使えるMySQLはイイ
  • RocksDBエンジンもあるし
  • パッチの管理が大変なので、できるだけその改造がしなくていいようにしたいんだけどそうはいかなくて、
  • でもMongoDBでどうする?ってのはそれはそれであるし
  • KVSでSQLが使えないとめんどい
  • だからRDBMSがいいよね、というのでMySQL使ってます
  • とにかくパッチを取り入れてほしい
  • Group ReplicationとかMySQLClusterの場合、同一リージョンにないといけないのでリージョンをまたがりたいFacebookの方針と合わない
  • Group Replicationがリージョンまたがるといいなと思ってる

授賞式

当日出席されていたMySQL ACEのとみたさん、yoku0825さん、三谷さんと、DB Techで登壇された北川さんにイルカの授与式

受賞後のyoku0825さんを撮っちゃいました f:id:next4us-ti:20190719145654j:plain

最後は残った人で写真撮影 f:id:next4us-ti:20190719145749j:plain

資料について

後日上がるとのことなので、イメージわきづらい人はそれを待ちましょう

最後に

mysql_cafeのスレッドに書かれていることをだいぶ参考に書かせてもらいました。

みなさんありがとうございました(特にyoku0825さん) そして、美味しい食事と飲み物、きれいな会場と、Philipさんと松信さんの貴重なお話を提供してくれたOracle社の関係者の皆様に感謝です。