345 Views
September 21, 18
スライド概要
2023年10月からSpeaker Deckに移行しました。最新情報はこちらをご覧ください。 https://speakerdeck.com/lycorptech_jp
MySQL at Yahoo! JAPAN 〜数字で見るヤフーのMySQL基盤の秘密 !?〜 2018年9月21日 db tech showcase 2018 1 Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved
本日のターゲット • オンプレでDBを運用している方 • DBAとして開発者と向きあっている方 2
自己紹介 • Satoshi Mitani(@mita2) • データ&サイエンスソリューション統括本部 データプラットフォーム本部 MySQL • MySQL基盤の立ち上げ〜現在まで 継続して、 DB運用・コンサルティングに従事 3
MySQLチームの業務 4 • DBクラウドの社内提供 • DB運用・管理 • 質問対応 コンサル
Yahoo! JAPANの データPF 5
Yahoo! JAPAN 利用者数 1日 6 9,000万 ユニーク ブラウザ ※出所:Yahoo! JAPAN社内データ(2018年4月-6月の平均)
提供サービス 100を超える多くのサービス Media Membership Search C2C Payment Video Answer Mail C2C EC B2C EC Local
巨大なデータプラットフォーム 1800 4000+ 23 300,000 DBs nodes PB Query/day NoSQL Object Storage RDB Hadoop 8 DWH 4100 node 120 PB
数字で見る ヤフーのMySQL基盤 の秘密 9
MySQL at Yahoo! JAPAN 管理対象 DB数 DB 規模 チーム 人数 問合せ数 10 DB 基盤構成
MySQL at Yahoo! JAPAN 管理対象 DB数 DB 規模 チーム 人数 問合せ数 11 DB 基盤構成
巨大なデータプラットフォーム 1800 4000+ 23 300,000 DBs nodes PB Query/day NoSQL Object Storage RDB Hadoop 12 DWH 4000 node 120 PB
巨大なデータプラットフォーム 1600 MySQL forks RDB 4000+ 23 300,000 nodes PB Query/day NoSQL Object Storage Hadoop 13 DWH 4000 node 120 PB
データベース多すぎ😵 14
増え続けるDB… 2020年 3000 over 本番DB数 2500 2000 1654 1410 1500 1107 868 1000 500 414 574 648 0 15 2015上期末 2015下期末 2016上期末 2016下期末 2017上期末 2017下期末 現時点
DB増えても売り上げ増えない DBは年率1.5倍で増えるが… 売上高 1,000,000 500,000 0 16 2015 2016 2017 https://about.yahoo.co.jp/ir/jp/archives/data/ より
運用の大変さ 多種多様なDB >>> 巨大なDB 17
コスト上昇を抑えるために 多種多様なDB >>> 巨大なDB 18 提供機能にメリハリをつける ことで運用コストを抑える
犠牲にしていること 1. InnoDB以外のストレージエンジン 2. HWの個別選定 • 社内のIaaS 基盤標準HWに従う 3. 複雑なレプリケーション • 19 多段、レプリケーションフィルタ
大事にしていること • シンプル・カジュアル • すぐ使える、簡単に始められる • • • 20 セルフ化 フルマネージド 面倒な社内規定の代行
Oracle Database • Oracle Enterprise Edition RAC 11g, 12c • 250DB • • Order made 寄りの運用 • • 21 主に、ミッションクリティカル用途 1DBあたりのDBA比率 MySQL : Oracle = 1 : 25
MySQL at Yahoo! JAPAN 管理対象DB数 1600 DB 規模 チーム 人数 問合せ数 22 DB 基盤構成
MySQL at Yahoo! JAPAN 管理対象DB数 1600 DB 規模 チーム 人数 問合せ数 23 DB 基盤構成
物理容量分布 物理容量 バイナリログ除く 24
物理容量上限 • 上限、500GB • MySQLはOLTP向けのDB • ログ系etc は適切なDBの選定を推奨 • スケールアップ/アウトも限られる • 25 大規模であれば要シャーディング
MySQL at Yahoo! JAPAN 管理対象DB数 DBの規模 85%が30G以下 1600 26 チーム 人数 問合せ数 DB 基盤構成
MySQL at Yahoo! JAPAN 管理対象DB数 DBの規模 85%が30G以下 1600 27 チーム 人数 問合せ数 DB 基盤構成
MySQL 基盤 • 2010年〜 • • 28 ノウハウの蓄積、運用品質の向上 サービス開発者の運用負担軽減
大きく分けると2つ • 2つの世代が稼働中 • • 29 第一世代 / V1 第二世代 / Database As A Service
大きく分けると2つ • 2つの世代が稼働中 • • 30 第一世代 / V1 第二世代 / Database As A Service
第二世代の開発背景 • 納期の大幅短縮・構築の手間削減 • サービス同士のリソース競合をなくす • メンテナンス影響を最小限にしたい 31
第二世代の構成 マルチライター型 MySQL
第二世代の構成 マルチライター型 MySQL
OpenStack とは https://www.openstack.org/software/ より
OpenStack • 2013年からIaaS 基盤として利用 • 12万VMが稼働中 MySQL基盤のインフラして採用 35
OpenStack Trove を選択 • Database As A Service コンポーネント • 機能 • • • • • • 36 DBインスタンスの作成 DBアカウントの管理 DBの起動・停止 リサイズ(VMスペック変更) etc… 対応しているデータストア • MySQL, MariaDB, Percona, Redis, Cassandra…
カスタムした部分 (1) • WebUI • スクラッチで開発 • シンプルで使いやすいUI • 独自の業務要件 • 障害時の連絡先管理機能 • DBアカウントの棚卸し 37
カスタムした部分 (1) • WebUI 38
カスタムした部分 (2) • アカウント管理 • root DBアカウントの発行制限 • root のアクセス元制限 etc… 39
Troveのメリ・デメ 40
Troveのよかったところ • 初期の開発期間を短縮できた 41
Troveのイマイチなところ • OpenStackは複雑で巨大 • Trove に盛り込めないカスタム • Trove の開発は最近 停滞ぎみ 42
Percona XtraDB Cluster マルチライター型 MySQL fork
PXC 概要 • マルチライターのMySQL fork • • 用途 • • • • 44 Group Replication とほぼ同じ ビルドイン 高可用性 Read Scalability Disaster Recovery スレーブも追加可 async slave async slave
Multi Master , Multi Writer ? Client Client マルチマスター マルチライター
マルチマスター • 従来のレプリケーションは非同期 • 同時書込すると・・・ • レプリケーション停止 • データ不整合 46
不整合の具体例 マスター2 マスター1 UPDATE col1 = 1 UPDATE col1 = テーブル 変更 2 Binlog 追記 テーブル 変更 Binlog 追記 OK OK col1=2 col1=1 ログ適用 ログ適用 47 時間 不整合
マルチライター • 同時に書き込み可 • 楽観的ロックによる不整合回避 48
いつものロック
いつものロック • ロックが競合した場合、後続は「待つ」
PXCのロック
時間
行の値
トランザクション1 on ノード1
T1
-
mysql> BEGIN;
Query OK, 0 rows affected (0.00 sec)
トランザクション2 on ノード2
mysql> UPDATE grplt.tbl SET col1 = 10,
who_update = ‘A' WHERE pk = 1;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
T2
-
mysql> BEGIN;
Query OK, 0 rows affected (0.00 sec)
mysql> UPDATE grplt.tbl SET col1 = 10,
who_update = ‘B' WHERE pk = 1;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
T3
A
T4
A
51
mysql> COMMIT;
Query OK, 0 rows affected (0.00 sec)
(ノード1の更新内容が伝わってくる)
mysql> COMMIT;
ERROR 1213 (40001): Deadlock found when
trying to get lock; try restarting transaction
PXCのロック
時間
行の値
トランザクション1 on ノード1
T1
-
mysql> BEGIN;
Query OK, 0 rows affected (0.00 sec)
トランザクション2 on ノード2
• 異なるノードでロックが競合した場合、「先勝ち」
mysql> UPDATE grplt.tbl SET col1 = 10,
who_update = ‘A' WHERE pk = 1;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> BEGIN;
• T2デッドロックは必要に応じてリトライ
Query OK, 0 rows affected (0.00 sec)
mysql> UPDATE grplt.tbl SET col1 = 10,
who_update = ‘B' WHERE pk = 1;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
• LBをSingle-Primaryで運用すれば、従来と同じ挙動に
T3
A
T4
A
52
mysql> COMMIT;
Query OK, 0 rows affected (0.00 sec)
(ノード1の更新内容が伝わってくる)
mysql> COMMIT;
ERROR 1213 (40001): Deadlock found when
trying to get lock; try restarting transaction
Multi Master , Multi Writer ? Client • • 不整合の考慮が必要 片方にのみ書込、Active/Standby Client • 同時更新で不整合は起こらない • 容易に高可用性構成が組める
Why Percona ? • 設計当時まだGRは未リリース • 自動データリカバリ • State Snapshot Transfer • 中身はxtrabackupをncで転送 54
PXCの考慮事項 • ALTER TABLEで全更新ブロック • 要 pt-online-schema-change • LOCK TABLES, SELECT FOR UPDATE に制限あり • 更新性能はvanilla MySQLのほうが優れる • 巨大なトランザクションでメモリを食う 55
課題と解決策 • 納期の大幅短縮・構築の手間削減 OpenStack • サービス同士のリソース競合をなくす • メンテナンス影響を最小限にしたい 56 マルチライター
MySQL at Yahoo! JAPAN 管理対象DB数 DBの規模 85%が30G以下 1600 57 チーム 人数 問合せ数 DB基盤構成 2世代
MySQL at Yahoo! JAPAN 管理対象DB数 DBの規模 85%が30G以下 1600 58 チーム 人数 問合せ数 DB基盤構成 2世代
チーム構成 • 約10名 59
チーム内の役割分担 • サービス毎にDB担当をアサイン • サービス特徴やミッションを理解 60
DBAもなるべく業務知識を • 例) • 11/11 → Yahoo! ショッピング • 台風 → Yahoo! 路線 61
DBAもなるべく業務知識を • 例) • 11/11 → Yahoo! ショッピング • 台風 → Yahoo! 路線 62
DBAもなるべく業務知識を • 例) • 台風 → Yahoo! 路線 • 11/11 → Yahoo! ショッピング 63
チーム内の役割分担 • サービス毎にDB担当をアサイン 「エスパー」する力 • DBAも業務知識を持つべき 64 大事
開発者とDBAの 役割分担 65
利用者ができないこと • 管理者権限の利用 • レプリケーション設定などは DBAが実施 • DBサーバへのSSH
利用者にまかせていること(1) • DDLの実行 • SQLレビューはしない • 「関所」になりたくない • 困ったときにヘルプ 67
利用者にまかせていること(2) • 一部の設定変更は許可 sql_mode max_connections wait_timeout max_allowed_packet max_binlog_files charset Etc… 68
MySQL at Yahoo! JAPAN 管理対象DB数 DBの規模 85%が30G以下 1600 チーム人数 10名 69 問合せ数 DB基盤構成 2世代
MySQL at Yahoo! JAPAN 管理対象DB数 DBの規模 85%が30G以下 1600 チーム人数 10名 70 問合せ数 DB基盤構成 2世代
MySQL at Yahoo! JAPAN 管理対象DB数 DBの規模 85%が30G以下 1600 チーム人数 10名 71 20/week DB基盤構成 2世代
• 開発者は1000〜2000人? • 72 JIRA Softwareのチケットでやりとり
JIRA 73
チャットよりチケットが○ • 雑に質問されがち • 割り込みになる • 期待されるレスポンスが短い • 履歴が共有できない 74
チケット優先度定義 75
よくある問い合わせ • 接続できない系 • エラーでました系 76
よくある問い合わせ • 接続できない系 • PaaS, FaaS などの登場により増加 • デバッグ用アプリの提供の必要 77
よくある問い合わせ • エラーでました系 • • • 78 エラーの内容が知りたい人 エラーの修正方法を知りたい人 エラーが出て不安な人
対、人間 • コスト 大 • 79 リソースの半分ぐらい
啓蒙活動 • 半年に1度セミナー • グッズを作ったり… 80 • 一部は公開してます
DBAとうまくやりとりするコツ (DBAからのお願い) 81
DBAとうまくやりとりするコツ 82 • 「やってほしい作業」でなく「目的」を伝える • DB利用者に見えているDBの状態はごく一部 • 経験・情報量の多いDBAに「手段」はまかせる
MySQL at Yahoo! JAPAN 管理対象DB数 DBの規模 85%が30G以下 1600 チーム人数 10名 83 問合わせ数 20件/week DB基盤構成 2世代
まとめの前に… 84
Yahoo! JAPAN のミッション 情報技術で 人々や社会の課題を解決する 85
Yahoo! JAPAN の強み 100を超えるサービスから得られる 「マルチビックデータ」 86
我々は、仲間を募集しています • 歓迎条件 • DBに精通したスキル • CI/CD環境下での開発や運用 • DBオペレーションの自動化 • 興味を持って頂いた方は、 twitter: @mita2 までご連絡下さい。 87
Q&A
まとめ
Yahoo! JAPAN のMySQL基盤 • 多種多様なDBを効率良く 扱うことにフォーカス • Tech Giantに負けないインフラ を作ってます!
Thank you
明日のMySQL Session 時間 セッション名 09:30- MySQL/PostgreSQL だけで作る高速あいまい全文検索システム 稼働中プロジェクトにおけるMySQLバージョンアップ 13:3014:30- 15:3017:30- MySQL: 突然全てのスレーブのレプケーションが “unknown error reading log event on the master “ というエラーで 停止したら 5.6から5.7へ、そして更なるサービスの可用性を目指して LINEのMySQLの運用について