70
LINEにおけるMySQL運用の現状と バージョンアップを支える仕組み ITSC Database dept db1 team / 大塚知亮 2020.12.17

LINEにおけるMySQL 運用の現状と バージョンアップを支え …LINE における MySQL 運用の現状と バージョンアップを支える仕組み ITSC Database

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

  • LINEにおけるMySQL運用の現状とバージョンアップを支える仕組み

    ITSC Database dept db1 team / 大塚知亮2020.12.17

  • LINE Database室紹介

    MySQL platformの変遷

    バージョンアップを支える仕組み

    運用を支えるツール

    今後の課題

    01

    02

    03

    04

    05

    概要

  • 登壇者紹介

    大塚知亮 (@tom__bo) IT Service Center, Database dept, DB1 team MySQL オペレーションと自動化

    DB管理システムの開発

    2016: LINE Summer Internship 2017: LINE Engineer アルバイト 2018: 入社

    好きなMySQLの機能は準同期レプリケーション!

  • Database室紹介

  • IT Service Center

    Verda Department (Private Cloud)

    System Department

    Network Department

    Database Department

    IT Service Centerの組織図

    ※ Verda: プライベートクラウドのプロダクト名

  • Database dept.

    DB1 team: MySQL, Redis, Oracle

    DB2 team: MySQL, Redis, SQL Server

    DB3 team: MySQL, MongoDB

    Big Data team: HBase, CUBRID

    Database室構成

  • サポートしているDBMS

  • 2016MongoDB

    DBMS運用の歴史

    2018Verda Redis

    2015Redis ClusterRedis Sentinel

    2017HadoopHbase

    Verda MySQL

    2019Verda Elasticsearch

    2011MySQLOracle

    CUBRIDSQL Server

    2020DBS for MySQL

  • 運用業務

    スキーマ管理 ACL管理 コンフィグ管理 インデックス管理 レプリケーショントポロジ管理 マイグレーション作業

    モニタリング アラート対応 クエリチューニング バックアップ・リカバリ 新機能・バグ調査 運用システムの開発

  • Database Operation SystemsVerda Service

    Database

    Database関連システム

    Redis

    統合管理システム

    MySQL

    DBA

    Elasticsearch

    Network

    Storage

    VM/PM

    Container

    Monitoring

    Alert System

    Backup System

    ACL System

    Operation tools

  • Database Operation SystemsVerda Service

    Database

    Database関連システム

    Redis

    Operation tools

    Monitoring

    Alert System

    Backup System

    ACL System

    統合管理システム

    MySQL

    DBA

    Elasticsearch

    Network

    Storage

    VM/PM

    Container

    Verda Dev

  • Database Operation SystemsVerda Service

    Database

    Database関連システム

    Redis

    Operation tools

    Monitoring

    Alert System

    Backup System

    ACL System

    統合管理システム

    MySQL

    Developer

    DBA

    Workflow / TicketsUse

    Elasticsearch

    Network

    Storage

    VM/PM

    Container

  • MySQL Platformの変遷

  • MySQLのバージョン比率

    バージョンごとの台数比

    8.0 (16%)

    5.7 (57%)

    5.6 (21%)

    他 (6%)

  • MySQLの増加

    0

    1000

    2000

    3000

    4000

    5000

    2015 2016 2017 2018 2019 2020

    インスタンス数

    500

    1000

    2000

    3000

    3500

    4000

  • MySQL Platform以前

    ~ 2017年 サーバ調達から調整 急激なインスタンス増加でサーバスペックの統一が難しい Ansibleや各DBAのスクリプトで単純な自動化のみ

  • MySQL Platform以前

    2011 ~ 2017 サーバ調達から調整 急激なインスタンス増加でサーバスペックの統一が難しい Ansibleや各DBAのスクリプトで単純な自動化のみ

    [課題] 開発者は作業のたびにWFを申請 WFの対応が自動化されていない 担当するDBAによって運用方法が異なる

  • MySQL Platform 1.0

    2017 ~ 2020 インスタンスタイプの標準化・統一 構築作業の自動化 単純なWFが自動化システムと連携

  • MySQL Platform 1.0

    2017 ~ 2020 インスタンスタイプの標準化・統一 構築作業の自動化 単純なWFが自動化システムと連携

    [課題] 増え続けるサービスにDBA作業の限界 インフラコスト削減のためのマイグレーション作業が頻発 規模の拡大によるアラートの増加

  • MySQL Platform 2.0

    2020年リリース (DBS for MySQL) 開発者によるセルフマネジメント オートヒーリング・トポロジ変更機能を開発者に提供 必要に応じてDBAがサポート クエリチューニングやIndex設計の社内教育を強化

  • MySQL Platform 2.0

    2020年リリース (DBS for MySQL) 開発者によるセルフマネジメント オートヒーリング・トポロジ変更機能を開発者に提供 必要に応じてDBAがサポート クエリチューニングやIndex設計の社内教育を強化

    [GlenDBの開発] オートヒーリング・インスタンスタイプ変更を自動化 トポロジ変更操作、確認がWeb画面から可能 HA managerをスクラッチで開発

  • GlenDB

    VM

    MySQL

    Filebeat

    Application

    DNS for Soruce DNS for Replica

    Load Balancer

    Elasticsearch

    DBONE

    MySQL Operator

    VM Operator

    GlenHA

    ManagementAPI

    Verda UI

    Developer

    VM

    MySQL

    Filebeat

    VM

    MySQL

    Filebeat

  • Auto Healing

    VM

    MySQL

    Application

    DNS for Soruce DNS for Replica

    Load BalancerGlenHA

    MySQL MySQL

    MySQL Operator

    VM Operator

    ManagementAPI

    Primary

  • Auto Healing

    MySQL

    Application

    DNS for Soruce DNS for Replica

    Load BalancerGlenHA

    MySQL MySQL

    MySQL Operator

    VM Operator

    ManagementAPI

    Primary is dead!

    Primary

  • Auto Healing

    MySQL

    Application

    DNS for Soruce DNS for Replica

    Load BalancerGlenHA

    MySQL MySQL

    MySQL Operator

    VM Operator

    ManagementAPI

    Change topology

    PrimaryPrimary

  • Auto Healing

    MySQL

    Application

    DNS for Soruce DNS for Replica

    Load BalancerGlenHA

    VM

    MySQL MySQL

    MySQL Operator

    VM Operator

    ManagementAPI

    Change topology

    Primary

  • Auto Healing

    MySQL

    Application

    DNS for Soruce DNS for Replica

    Load BalancerGlenHA

    VM

    MySQL MySQL

    MySQL Operator

    VM Operator

    ManagementAPI

    MySQL

    Add New MySQL

    New Instance

    Primary

  • Auto Healing

    MySQL

    Application

    DNS for Soruce DNS for Replica

    Load BalancerGlenHA

    VM

    MySQL MySQL

    MySQL Operator

    VM Operator

    ManagementAPI

    Old primary recovered!

    Primary

    Recovered!

  • Auto Healing

    MySQL

    Application

    DNS for Soruce DNS for Replica

    Load BalancerGlenHA

    VM

    MySQL MySQL

    MySQL Operator

    VM Operator

    ManagementAPI

    Recover topology!

    Primary

  • Sample view

  • バージョンアップを支える仕組み

  • バージョンアップポリシーの設定

    運用作業に追われて最近までポリシーがなかった サポート期限切れのインスタンスは潜在リスク 古いバージョンがあることでサポートや自動化のコストが高い

  • メジャーバージョンアップの方法

    論理バックアップを利用して新しいバージョンで構築 データとACLは別々に移行 フェイルオーバにより切り替え

    5.7

    5.7

    既存DBPrimary

  • メジャーバージョンアップの方法

    論理バックアップを利用して新しいバージョンで構築 データとACLは別々に移行 フェイルオーバにより切り替え

    5.7

    5.7

    8.0

    8.0

    既存DB 新規DBPrimary

  • メジャーバージョンアップの方法

    論理バックアップを利用して新しいバージョンで構築 データとACLは別々に移行 フェイルオーバにより切り替え

    5.7

    5.7

    8.0

    8.0

    既存DB 新規DB

    論理バックアップ

    Primary

  • メジャーバージョンアップの方法

    論理バックアップを利用して新しいバージョンで構築 データとACLは別々に移行 フェイルオーバにより切り替え

    5.7

    5.7

    8.0

    8.0

    既存DB 新規DB

    カスケードレプリケーション

    Primary

  • メジャーバージョンアップの方法

    論理バックアップを利用して新しいバージョンで構築 データとACLは別々に移行 フェイルオーバにより切り替え

    5.7

    5.7

    8.0

    8.0

    既存DB 新規DBPrimary

    フェイルオーバー

    Primary

  • メジャーバージョンアップの流れ

    1. テスト環境でバージョンアップテスト2. 移行先MySQLの作成3. データ移行 (論理バックアップをリストア)4. ACL移行5. データ・メタデータの確認6. クエリのデグレード確認7. 移行用レプリケーションの設定8. 移行先へフェイルオーバ

  • アップグレード作業への備え

    1000台以上、数百のサービスを移行するプロジェクト バージョンアップと同時にプラットフォーム移行 作業コスト・作業ミスを最小化

  • アップグレード作業への備え

    1000台以上、数百のサービスを移行するプロジェクト バージョンアップと同時にプラットフォーム移行 作業コスト・作業ミスを最小化

    [MySQL Upgrade Helperの開発] マイグレーション作業を自動化 OSSや既存のツールを組み合わせて高速に開発

  • MUH: MySQL Upgrade Helper

    mydumper

    myloader

    pt-show-grants

    MetadataChecker

    MQR

    VariablesChecker

    5.7

    5.7

    8.0

    8.0

    Migration

    OSS 内製ツール

    MUH System Real environment

  • MUH: MySQL Upgrade Helper

    mydumper

    myloader

    pt-show-grants

    MetadataChecker

    MQR

    VariablesChecker

    5.7

    5.7

    8.0

    8.0

    Migration

    OSS 内製ツール

    MUH System Real environment

    Replicaからデータをダンプ

  • MUH: MySQL Upgrade Helper

    mydumper

    myloader

    pt-show-grants

    MetadataChecker

    MQR

    VariablesChecker

    5.7

    5.7

    8.0

    8.0

    Migration

    OSS 内製ツール

    MUH System Real environment

    ダンプしたデータを移行先にロード

  • MUH: MySQL Upgrade Helper

    mydumper

    myloader

    pt-show-grants

    MetadataChecker

    MQR

    VariablesChecker

    5.7

    5.7

    8.0

    8.0

    Migration

    OSS 内製ツール

    MUH System Real environment

    移行先が必要なACL情報を確認し移行

  • MUH: MySQL Upgrade Helper

    mydumper

    myloader

    pt-show-grants

    MetadataChecker

    MQR

    VariablesChecker

    5.7

    5.7

    8.0

    8.0

    Migration

    OSS 内製ツール

    MUH System Real environment

    メタデータ・Variablesの差分を確認

  • MUH: MySQL Upgrade Helper

    mydumper

    myloader

    pt-show-grants

    MetadataChecker

    MQR

    VariablesChecker

    5.7

    5.7

    8.0

    8.0

    Migration

    OSS 内製ツール

    MUH System Real environment

    Network packetsかgeneral_logを取得して新環境に再現

    Packetsgeneral_log

  • MUH: MySQL Upgrade Helper

  • MQR: MySQL Query Replayer

  • MQR: MySQL Query Replayer

  • メジャーバージョンアップの流れ

    テスト環境でバージョンアップテスト(dev環境) 移行先MySQLの作成 データ移行 (論理バックアップをリストア) ACL移行 データ・メタデータの確認 デグレードチェック 移行用レプリケーションの設定 移行先へフェイルオーバ

    Verda

    MUH Web

  • アップグレード時(8.0)の問題例

    mysqldumpコマンドでMySQL 5.7からデータをダンプして8.0にインポート テーブルの照合順序(collation)が変わってしまった 5.7(utf8mb4_general_ci) => 8.0(utf8mb4_0900_ai_ci)

    Version character_set_server collation_server

    5.7 utf8mb4 utf8mb4_general_ci

    8.0 utf8mb4 utf8mb4_general_ci

    表: 問題が発生したときのMySQLの設定値

  • アップグレード時(8.0)の問題例

    8.0で設定可能になった default_collation_for_utf8mb4 の設定が原因 CREATE TABLE やALTER TABLE 文などで

    CHARACTER SET utf8mb4 句があってCOLLATION 句を指定していないときに利用されるデフォルトのcollation

    Manual: https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_default_collation_for_utf8mb4

    Version default_collation_for_utf8mb4 comment

    5.7 - 暗黙にutf8mb4_general_ci8.0 utf8mb4_0900_ai_ci 明示的に設定可能

    表: default_collation_for_utf8mb4のdefault値

    https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_default_collation_for_utf8mb4

  • アップグレード時(8.0)の問題例

    # at MySQL 5.7> create table tbl(id int not null);

    > SHOW CREATE TABLE tbl\G*************************** 1. row ***************************

    Table: tblCreate Table: CREATE TABLE `tbl` (

    `id` int(11) NOT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8mb41 row in set (0.01 sec)

    Version character_set_server collation_server default_collation_for_utf8mb4

    5.7 utf8mb4 utf8mb4_general_ci (暗黙にutf8mb4_general_ci)8.0 utf8mb4 utf8mb4_general_ci utf8mb4_0900_ai_ci

    表: 問題が発生したときのMySQLの設定値

  • アップグレード時(8.0)の問題例Version character_set_server collation_server default_collation_for_utf8mb4

    5.7 utf8mb4 utf8mb4_general_ci (暗黙にutf8mb4_general_ci)8.0 utf8mb4 utf8mb4_general_ci utf8mb4_0900_ai_ci

    表: 問題が発生したときのMySQLの設定値

    # at MySQL 8.0 (import dumped sql)> CREATE TABLE `tbl` ( `id` int(11) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

    > SHOW CREATE TABLE tbl\G*************************** 1. row ***************************

    Table: tblCreate Table: CREATE TABLE `tbl` (

    `id` int NOT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci1 row in set (0.00 sec)

  • アップグレード時(8.0)の問題例

    対策 default_collation_for_utf8mb4 を適切に設定する 移行後にTableのcollationを変更する

    余談 utf8mb4_0900_ai_ciだと ”びょういん” と “びよういん”などが区別できない

    “MySQL 8.0でもutf8mb4_general_ciを使いたい僕らは”

    Manual: https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_default_collation_for_utf8mb4

    https://mita2db.hateblo.jp/entry/2020/12/07/000000

    https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_default_collation_for_utf8mb4https://mita2db.hateblo.jp/entry/2020/12/07/000000

  • オペレーションを支えるツール

  • オペレーションを支えるツール

    mysql_query_replayer GitHub: https://github.com/tom--bo/mysql-query-replayer ネットワークパケットからクエリを抽出し、別のMySQLにクエリを再現することでデグレードを確認

    myStatusgo GitHub: https://github.com/kenken0807/myStatusgo インスタンス情報を1秒間隔で表示するMySQL版topコマンド

    https://github.com/tom--bo/mysql-query-replayerhttps://github.com/kenken0807/myStatusgo

  • MQR (MySQL Query Replayer)

    GitHub: https://github.com/tom--bo/mysql-query-replayer ネットワークパケットからクエリを抽出し、別のMySQLにクエリを再現することでデグレードを確認

    クエリの再現方法によって3つのモードを選択可能 Multi Mode: リアルタイムに本番環境の負荷を再現する Single Mode: Queuing MWを使わずにシンプルに動作 mpReader: パケットのダンプファイルを引数にコマンド

    として実行

    https://github.com/tom--bo/mysql-query-replayer

  • MQR: MySQL Query Replayer

  • MQR: MySQL Query Replayer

  • MQR: MySQL Query Replayer

  • オペレーションを支えるツール

    myStatusgo GitHub: https://github.com/kenken0807/myStatusgo インスタンス情報を1秒間隔で表示するMySQL版topコマンド 以下のような情報を収集しターミナル上で表示

    SHOW GLOBAL STATUS

    performance_schema.threads

    performance_schema.statement_digest

    performance_schema.file_summary_by_instance

    information_schema.innodb_trx

    https://github.com/kenken0807/myStatusgo

  • mystatusgo

  • mystatusgo

  • mystatusgo

  • 今後の課題

  • 今後の課題

    DBAが作業することを前提にシステムを設計してきたが、開発者が低コストで運用できるようなシステムの開発 オンラインでのスキーマ変更 スケーラブルなアーキテクチャに合うACL管理方法

    自律したシステムの開発 オートヒーリングやオートスケーリング機能の改良 HAシステムの改良

  • Engineer募集中!

    Mail: [email protected]

    Site: https://linecorp.com/ja/career/

    mailto:[email protected]://linecorp.com/ja/career/

  • LINE Database室紹介

    MySQL platformの変遷

    バージョンアップを支える仕組み

    運用を支えるツール

    今後の課題

    01

    02

    03

    04

    05

    まとめ

  • Slide Number 1Slide Number 2Slide Number 3Slide Number 4Slide Number 5Slide Number 6Slide Number 7Slide Number 8Slide Number 9Slide Number 10Slide Number 11Slide Number 12Slide Number 13Slide Number 14Slide Number 15Slide Number 16Slide Number 17Slide Number 18Slide Number 19Slide Number 20Slide Number 21Slide Number 22Slide Number 23Slide Number 24Slide Number 25Slide Number 26Slide Number 27Slide Number 28Slide Number 29Slide Number 30Slide Number 31Slide Number 32Slide Number 33Slide Number 34Slide Number 35Slide Number 36Slide Number 37Slide Number 38Slide Number 39Slide Number 40Slide Number 41Slide Number 42Slide Number 43Slide Number 44Slide Number 45Slide Number 46Slide Number 47Slide Number 48Slide Number 49Slide Number 50Slide Number 51Slide Number 52Slide Number 53Slide Number 54Slide Number 55Slide Number 56Slide Number 57Slide Number 58Slide Number 59Slide Number 60Slide Number 61Slide Number 62Slide Number 63Slide Number 64Slide Number 65Slide Number 66Slide Number 67Slide Number 68Slide Number 69Slide Number 70