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.

mysqlcasual6-fabric

11,687 views

Published on

2014/07/11 MySQL Casual Talks #6

Published in: Technology

mysqlcasual6-fabric

  1. 1. MySQL Fabric使いたいんだけど どうなんすか @dblmkt 2014.7.11 MySQL Casual Talks #6
  2. 2. 自己紹介
  3. 3. @dblmkt • サイバーエージェント アメーバ事業本部 インフラエンジニア • 主にアメブロ担当 • 趣味 – 登山
  4. 4. アメブロのDBって
  5. 5. アメブロのDBって • 脈々と受け継がれてきたスキーマ • MySQL 4.1, 5.0, 5.1, 5.5様々 • MyISAM多い • Read >>> |超えられない壁| >>> Write
  6. 6. マスタ分割激しい 記事 情報 ブログ 情報 本文 記事 情報 コメント テーマ 画像
  7. 7. 独自ルールでシャーディング t1 10万ユーザ t2 10万ユーザ t3 10万ユーザ t4 10万ユーザ t5 10万ユーザ t6 10万ユーザ t7 10万ユーザ t8 10万ユーザ t9 10万ユーザ ・・・・・・ ・・・・・・ ・・・・・・ ・・・・・・
  8. 8. スレーブ多い • とあるマスタで mysql> show slave hosts; +-----------+-----------------+------+-------------------+-----------+ | Server_id | Host | Port | Rpl_recovery_rank | Master_id | +-----------+-----------------+------+-------------------+-----------+ | 2008001 | | 3306 | 0 | 10101 | | 2008002 | | 3306 | 0 | 10101 | | 3344551 | | 3306 | 0 | 10101 | (中略) 65 rows in set (0.00 sec)
  9. 9. 大変なところ • スレーブの作り直し面倒 • シャーディングルール変更難しい • アクセスの偏り対策困る • my.cnf書き換えしんどい – Replicate-do-tableをいちいち書いている。。。
  10. 10. 色々検討してみた
  11. 11. Jetpants • Tumblr謹製シャーディング管理ツール – レンジベースのシャード管理 – pigzを使った高速スレーブ複製 – シャードの分割がオンラインでできる – https://github.com/tumblr/jetpants
  12. 12. MySQL Utilities • MySQL管理のためのコマンドラインツール群 • 大量のMySQLサーバを管理するコマンドも – mysqldbcopy – mysqluserclone – mysqlfailover
  13. 13. MYSQL FABRIC
  14. 14. MySQL Fabric • 「MySQLサーバ群を管理する 統合フレームワーク」
  15. 15. MySQL Fabric • マスタ障害時、スレーブの自動昇格 • シャーディング、クエリのロードバランシング – 更新はマスタ、参照はスレーブ • スレーブの複製
  16. 16. 構成 マスタ (Primary) スレーブ (Spare) Web/APサーバ Fabric対応 Connector Fabricサーバ State Store 情報取得 更新 参照 スレーブ (Secondary) スレーブ (Secondary)
  17. 17. 構成(シャーディング) マスタ (Primary) スレーブ (Secondary) Web/APサーバ Fabric対応 Connector Fabricサーバ State Store 情報取得 更新 参照 スレーブ (Secondary) マスタ (Primary) スレーブ (Secondary) スレーブ (Secondary) マスタ (Primary) グループ1 グループ2 Global Group
  18. 18. 注意! • Fabric対応Connector必須 – Java, PHP, Python • MySQL 5.6.10以上+GTIDレプリケーション必須
  19. 19. セットアップ
  20. 20. セットアップ • MySQL Serverインストール • MySQL Utilitiesインストール • State Storeのテーブル準備 – mysqlfabric manage setup • Fabricサーバの起動 – mysqlfabric manage start
  21. 21. 設定ファイル • /etc/mysql/fabric.cfg – State Store関連の設定 [storage] – 障害検知の設定 [failure_tracking] – MySQLサーバの設定 [servers] – Fabricサーバの設定 [protocol.xmlrpc]
  22. 22. グループ作成 • グループ作成 – mysqlfabric group create cluster01 • グループにサーバ追加 – mysqlfabric group add cluster01 スレーブのIP • グループのサーバをマスタに昇格 – mysqlfabric group promote cluster01
  23. 23. マスタの障害検知
  24. 24. マスタ障害検知 • 障害検知を有効化 – mysqlfabric group activate cluster01 $ mysqlfabric group lookup_groups Command : { success = True return = [{'group_id': 'cluster01', 'description': '', 'master_uuid': '7a6b7e8d-0033-11e4-8981-90b11c14b1a4', 'failure_detector': True}] activities = }
  25. 25. マスタ障害検知 • マスタダウン前 $ mysqlfabric group lookup_servers cluster01 { success = True return = [ {'status': 'SECONDARY', 'server_uuid': '7a87e263-0033-11e4-8981-90b11c17ba51', 'mode': 'READ_ONLY', 'weight': 1.0, 'address': '10.200.32.223'}, {'status': 'PRIMARY', 'server_uuid': '7addf86d-0033-11e4-8981-90b11c149f9e', 'mode': 'READ_WRITE', 'weight': 1.0, 'address': '10.200.32.222'}] activities = }
  26. 26. マスタ障害検知 • マスタダウン後 $ mysqlfabric group lookup_servers cluster01 { success = True return = [ {'status': 'PRIMARY', 'server_uuid': '7a87e263-0033-11e4-8981-90b11c17ba51', 'mode': 'READ_WRITE', 'weight': 1.0, 'address': '10.200.32.223'}, {'status': ‘FAULTY', 'server_uuid': '7addf86d-0033-11e4-8981-90b11c149f9e', 'mode': 'READ_WRITE', 'weight': 1.0, 'address': '10.200.32.222'}] activities = }
  27. 27. シャーディングの管理
  28. 28. 構成(シャーディング) マスタ (Primary) スレーブ (Secondary) Web/APサーバ Fabric対応 Connector Fabricサーバ State Store 情報取得 更新 参照 スレーブ (Secondary) マスタ (Primary) スレーブ (Secondary) スレーブ (Secondary) マスタ (Primary) グループ1 グループ2 Global Group
  29. 29. シャード作成 • Global Groupとなるグループを作成 • 配下のグループを作成 • シャードの定義を作る – mysqlfabric sharding create_definition RANGE cluster01 • 対象のテーブルを追加 – mysqlfabric sharding add_table 1 table01 column01 • シャードを追加 – mysqlfabric sharding add_shard 1 “cluster11/1“ --state=ENABLED – Mysqlfabric sharding add_shard 1 “cluster12/200000” --state=ENABLED
  30. 30. シャード分割・移動 • 分割 – mysqlfabric sharding split_shard 11 cluster13 --split_value=200000 • 移動 – mysqlfabric sharding move_shard 11 cluster13
  31. 31. 気になるところ
  32. 32. 気になる • ドキュメントがまだまだ • コマンドの結果がわかりにくい – 例、シャードのルールの一覧表示 $ mysqlfabric sharding list_definitions Command : { success = True return = [[3, 'RANGE', 'cluster01']] activities = }
  33. 33. 気になる • FabricサーバのHA化不可 – Pacemaker使えばという意見も – ボトルネックになる可能性 • Fabricサーバのスケールアウト不可 – そのうち何かの改善が。。。?
  34. 34. 気になる • シャード分割、移動時 – マスタにmysqldumpが走る – マスタとスレーブでDELETEが走る
  35. 35. 使いどこ • GTIDレプリ使う新規プロジェクトなら入れとけ – マスタ冗長化出来る – シャード使える、分割できる – クエリのロードバランスできる – スレーブの複製が簡単 – (も少し安定してから)
  36. 36. 使いどこ • 既存DBに入れるのはツラい? – 現行シャード構成の変更 – Connector部分の書き換え – MySQL 5.6 or 5.7へのバージョンアップ – GTIDレプリケーションへの対応
  37. 37. まとめ • MySQL Fabric – (マスタスレーブ構成の)MySQLサーバを管理する 仕組み – 新規プロジェクトなら、導入検討の余地あり – あと一歩だけどかなりいい感触
  38. 38. 情報源 • 公式ドキュメント – http://dev.mysql.com /doc/mysql-utilities/1.4/en/fabric.html • MySQL Performance Blog – http://www.mysqlperformanceblog.com/ • VN (Narayanan Venkateswaran氏のブログ) – http://vnwrites.blogspot.jp/
  39. 39. 宣伝 • 海外のブログ記事などを翻訳しています – Yakst – http://yakst.com/ja – 翻訳仲間募集中
  40. 40. m(__)m

×