SlideShare a Scribd company logo
1 of 66
Download to read offline
MySQLの冗長化
~無停止運用を実現するには~




         株式会社ハートビーツ 運用エンジニア   松崎 慶彦
© MATSUZAKI Yoshihiko   2013.1.24




自己紹介
• 松崎 慶彦 (MATSUZAKI Yoshihiko)
• 株式会社ハートビーツ 運用エンジニア
 ▫ MSP(サーバ運用・監視)の会社
 ▫ 24時間有人監視を提供している
 ▫ ベンダ非依存なサーバ運用(どこでもやる)
• 普段やっている業務
 ▫ サービス特性に合ったインフラの設計・構築
 ▫ サービス特性に合った運用の設計
 ▫ すでに動いているサービスの移設
© MATSUZAKI Yoshihiko   2013.1.24




MySQL
•   世界シェアトップのオープンソースRDBMS
•   導入が楽
•   枯れているので運用も楽
•   十分に高速
•   開発が活発でどんどん新機能が増えている
© MATSUZAKI Yoshihiko   2013.1.24




MySQLの最新情報




     http://dev.mysql.com/
© MATSUZAKI Yoshihiko   2013.1.24




MySQLを使う上で大事なこと
• ちゃんとしたスキーマ設計
• ちゃんとしたクエリ設計
▫ パフォーマンスはほとんどここで決まる
© MATSUZAKI Yoshihiko   2013.1.24




MySQL冗長化についての要望
• 動作を速くしてほしい!
• 負荷を下げてほしい!
• 無停止にしてほしい!
• データをロストさせたくない!
• 無停止でバックアップを取りたい!
• いざというときにスケールさせたい!
• でもアプリはなるべく変更したくない……
▫ スキーマやクエリはなかなか変えられない
© MATSUZAKI Yoshihiko   2013.1.24




MySQLの冗長化手段
• MySQL Cluster
• DRBD
• MySQL Replication
© MATSUZAKI Yoshihiko   2013.1.24




MySQL Cluster
•   監視・起動・停止・復旧まで自動でやってくれる
•   クラスタウェアが不要でmysqldだけで動作する
•   マスターの負荷分散ができる
•   トランザクション分離レベルやインデックスの制限がある
    ▫ スキーマ設計・クエリ設計での配慮が必要になる
© MATSUZAKI Yoshihiko   2013.1.24




トランザクション分離レベル
• 待ち時間と一貫性のトレードオフ
 ▫ 分離レベルが高いほど一貫性が強く待ち時間が長くなる
• 分離レベルが低いと起きる現象
 ▫ Dirty Read
    並列実行されている別トランザクションによる
     未コミットの更新を読み込んでしまう
 ▫ Non-Repeatable Read
    並列実行されている別トランザクションによる
     コミット済みのレコード変更を読み込んでしまう
 ▫ Phantom Read
    並列実行されている別トランザクションによる
     コミット済みのレコード追加・削除を読み込んでしまう
© MATSUZAKI Yoshihiko   2013.1.24




トランザクション分離レベル
• SERIALIZABLE
  ▫ 他トランザクションのコミットの影響を受けない
• REPEATABLE READ
  ▫ 参照中レコードのみ他トランザクションの影響を受けない
  ▫ Phantom Read
• READ COMMITTED ←MySQL Clusterで使用できるのはこれのみ
  ▫ 他トランザクションのコミット済みデータを読み込む
  ▫ Non-Repeatable Read, Phantom Read
• READ UNCOMMITTED
  ▫ 他トランザクションの未コミットデータを読み込む
  ▫ Dirty Read, Non-Repeatable Read, Phantom Read
© MATSUZAKI Yoshihiko   2013.1.24




DRBD
• ネットワーク越しにブロックデバイスをミラーリング
 ▫ ネットワークのレイテンシの影響を受けやすい
• コア機能がカーネルモジュール
 ▫ クラウドでは採用しにくい
• Failoverの仕組みを別に用意する必要がある
© MATSUZAKI Yoshihiko   2013.1.24




MySQL Replication
• マスターで実行したSQLをスレーブでも実行することで
  データを複製する
• 最も導入が簡単
• スキーマやクエリの制限もほとんどない
• Failoverの仕組みを別に用意する必要がある
© MATSUZAKI Yoshihiko   2013.1.24




Replication
© MATSUZAKI Yoshihiko   2013.1.24




レプリケーションの仕組み
© MATSUZAKI Yoshihiko   2013.1.24




レプリケーションの仕組み
© MATSUZAKI Yoshihiko   2013.1.24




レプリケーションの仕組み
© MATSUZAKI Yoshihiko   2013.1.24




レプリケーションの仕組み
© MATSUZAKI Yoshihiko   2013.1.24




レプリケーションの仕組み
© MATSUZAKI Yoshihiko   2013.1.24




ログポジション
• スレーブがバイナリログを読み込み始める位置
▫ CHANGE MASTER文で指定する
© MATSUZAKI Yoshihiko   2013.1.24




ログポジションを誤ると…
• データが抜け落ちてしまう
▫ 抜け落ちたデータへのUPDATEやDELETEで壊れる
© MATSUZAKI Yoshihiko   2013.1.24




ログポジションを誤ると…
• データが二重で更新されてしまう
▫ UNIQUEなキーを含んでいると失敗して壊れる
© MATSUZAKI Yoshihiko   2013.1.24




レプリケーションの注意点
• スレーブに書き込むと壊れる
▫ スレーブのread_onlyを有効にする
• ログポジションに十分気を付ける
▫ 不整合が起きるまでエラーがないので気付けない
  マスターが更新されていない状態で取得する
▫ なるべく自分で入力しない
  mysqldump --master-data
▫ GTID (after MySQL 5.6)
• 壊れたら再構築するしかないので慎重に…
© MATSUZAKI Yoshihiko   2013.1.24




準同期レプリケーション
• 準同期 (Semi-Synchronous)
  ▫ I/Oスレッドは同期
  ▫ SQLスレッドは非同期
• after MySQL 5.5

• スレーブへのバイナリログ転送が保証される
© MATSUZAKI Yoshihiko   2013.1.24




準同期レプリケーションの仕組み
© MATSUZAKI Yoshihiko   2013.1.24




準同期レプリケーションの仕組み
© MATSUZAKI Yoshihiko   2013.1.24




準同期レプリケーションの仕組み
© MATSUZAKI Yoshihiko   2013.1.24




準同期レプリケーションの仕組み
© MATSUZAKI Yoshihiko   2013.1.24




準同期レプリケーションの仕組み
© MATSUZAKI Yoshihiko   2013.1.24




準同期レプリケーションの注意点
• 複数台のスレーブがある場合
  1台がAckを返した時点でCOMMIT完了になる
 ▫ 用途に応じて構成を決める
• マスターはAckを待っている間COMMITが止まる
 ▫ スレーブ障害がマスターに伝播する可能性がある
 ▫ rpl_semi_sync_master_timeoutを短くする
   Webサーバのタイムアウト時間
   ブラウザのタイムアウト時間
© MATSUZAKI Yoshihiko   2013.1.24




Failover
© MATSUZAKI Yoshihiko   2013.1.24




簡単なFailover構成の一例
© MATSUZAKI Yoshihiko   2013.1.24




簡単なFailover構成の一例
© MATSUZAKI Yoshihiko   2013.1.24




簡単なFailover構成の一例
© MATSUZAKI Yoshihiko   2013.1.24




簡単なFailover構成の一例
© MATSUZAKI Yoshihiko   2013.1.24




簡単なFailover構成の一例
© MATSUZAKI Yoshihiko   2013.1.24




Failoverの基本的な流れ
• マスターの障害を検知
• マスターを仮想IPから除外
• マスターとのレプリケーションを停止
• (新マスターに昇格するスレーブを決定)
• (新マスターのログポジションを保存)
• 新マスターに仮想IPを切り替え
• (残りのスレーブを新マスターに接続)
• MySQLとは別に実装する必要がある
© MATSUZAKI Yoshihiko   2013.1.24




MySQLまわりのFailover
•   マスターの障害を検知
•   マスターを仮想IPから除外
•   マスターとのレプリケーションを停止
•   (新マスターに昇格するスレーブを決定)
•   (新マスターのログポジションを保存)
•   新マスターに仮想IPを切り替え
•   (残りのスレーブを新マスターに接続)
© MATSUZAKI Yoshihiko   2013.1.24




MySQLまわりのFailover
• MySQL MHA
  ▫ マスターがダウンしたら最新のスレーブをマスターにする
  ▫ ManagerとNode(各DB)の構成でやや構築コストが高い
• mysqlfailover (after MySQL 5.6)
  ▫ マスターがダウンしたら最新のスレーブをマスターにする
  ▫ Pythonで書かれたMySQL公式のFailoverスクリプト
• 自前
  ▫ 最新のスレーブ判別は準同期レプリケーションで代用可能
  ▫ そんなに複雑な処理でもないのでわりと簡単に書ける
© MATSUZAKI Yoshihiko   2013.1.24




仮想IPアドレスまわりのFailover
•   マスターの障害を検知
•   マスターを仮想IPから除外
•   マスターとのレプリケーションを停止
•   (新マスターに昇格するスレーブを決定)
•   (新マスターのログポジションを保存)
•   新マスターに仮想IPを切り替え
•   (残りのスレーブを新マスターに接続)
© MATSUZAKI Yoshihiko   2013.1.24




仮想IPアドレスまわりのFailover
• LVS (keepalived)
  ▫ keepalived自身の冗長化が簡単にできる
  ▫ ヘルスチェックがTCPぐらいしかないので作り込みが必要
  ▫ スケールする構成にしやすい
• Pacemaker
  ▫ スケールする構成にできない
• HAProxy
  ▫ HAProxy自身の冗長化が自力でできない
• MySQL Proxy
  ▫ MySQL Proxy自身の冗長化が自力でできない
  ▫ 正式版リリースではない
© MATSUZAKI Yoshihiko   2013.1.24




Failoverの注意点
• 最新のデータがどこにあるかを把握する
 ▫ 準同期レプリケーション (after MySQL 5.5)
 ▫ 更新系クエリの経路を常に1つに維持する
• 復旧前の誤ったサービス復帰を防止する
 ▫ reset slave
 ▫ skip-slave-start
 ▫ chkconfig mysqld off
• 書き込み可能な状態にする
 ▫ スレーブを昇格させるときにread_onlyを外す
© MATSUZAKI Yoshihiko   2013.1.24




LVS (keepalived)
© MATSUZAKI Yoshihiko   2013.1.24




LVS (keepalived)
• 仮想IPへのアクセスを別のサーバに振り分ける
• 自分自身のFailoverができる
• 自前のスクリプトでヘルスチェックができる
 ▫ 要求定義に応じた柔軟なヘルスチェック
 ▫ 障害発生時にFailoverを発動したりもできる
• 一つの仮想IPへのアクセスを複数のサーバに振
  り分けられる
 ▫ 単純なラウンドロビンだけでなく接続数を見て
   ロードバランシングしたりもできる
© MATSUZAKI Yoshihiko   2013.1.24




LVS (keepalived)の設定例
virtual_server 192.168.0.1 3306 {
    delay_loop 6             Failover時以外はスレーブに
    lb_algo wrr
                             アクセスが行かないように
    lb_kind DR
    protocol TCP
                          ↓sorry_serverで設定する
    sorry_server 192.168.0.102 3306
    real_server 192.168.0.101 3306 {
        weight 1
        MISC_CHECK {
                 misc_path "/path/to/mysql-check.sh 192.168.0.101"
                 misc_timeout 60            ↑
        }
                        自前のスクリプトでヘルスチェック
    }
}
© MATSUZAKI Yoshihiko   2013.1.24




スケールアウト
© MATSUZAKI Yoshihiko   2013.1.24




簡単なスケールする構成の一例
(スケールする構成への変更前)
© MATSUZAKI Yoshihiko   2013.1.24




簡単なスケールする構成の一例
(スケールする構成への変更後)
© MATSUZAKI Yoshihiko   2013.1.24




簡単なスケールする構成の一例
(更新系Failover)
© MATSUZAKI Yoshihiko   2013.1.24




簡単なスケールする構成の一例
(更新系Failover)
© MATSUZAKI Yoshihiko   2013.1.24




簡単なスケールする構成の一例
(更新系Failover)
© MATSUZAKI Yoshihiko   2013.1.24




簡単なスケールする構成の一例
(更新系Failover)
© MATSUZAKI Yoshihiko   2013.1.24




簡単なスケールする構成の一例
(中段スレーブ障害での参照系Failover)
© MATSUZAKI Yoshihiko   2013.1.24




簡単なスケールする構成の一例
(中段スレーブ障害での参照系Failover)
© MATSUZAKI Yoshihiko   2013.1.24




簡単なスケールする構成の一例
(中段スレーブ障害での参照系Failover)
© MATSUZAKI Yoshihiko   2013.1.24




簡単なスケールする構成の一例
(スレーブ障害での切り離し・Failover)
© MATSUZAKI Yoshihiko   2013.1.24




簡単なスケールする構成の一例
(スレーブ障害での切り離し・Failover)
© MATSUZAKI Yoshihiko   2013.1.24




簡単なスケールする構成の一例
(スレーブ障害での切り離し・Failover)
© MATSUZAKI Yoshihiko   2013.1.24




簡単なスケールする構成の一例
(スレーブ障害での切り離し・Failover)
© MATSUZAKI Yoshihiko   2013.1.24




簡単なスケールする構成の一例
(スレーブ障害での切り離し・Failover)
© MATSUZAKI Yoshihiko   2013.1.24




スケールアウトの注意点
• 現用系に影響を与えないようにする
• server_idがユニークであることを担保する
 ▫   同じserver_idのスレーブがぶら下がると壊れる
 ▫   LAN内でユニークな値を使用する
 ▫   オートスケールなら自動で書き換える
 ▫   手動なら書き換える前に接続しないようにする
      skip-slave-start
      chkconfig mysqld off
• Replicationで実行される更新系の負荷は分散できない
 ▫ SQLスレッドはシングルスレッドなのでスケールアップでも無理
      マスターの分割
© MATSUZAKI Yoshihiko   2013.1.24




スケールアウトの注意点
• 無停止で稼働中のスレーブを増やす
▫ mysqldump --single-transaction --master-data
  MyISAMでやるとテーブルロックで障害になる
▫ 仮想化基盤の機能でクローン
  データの一貫性を保証する必要がある
• 理想はクローン用のスタンバイ機
▫ サービスに組み込まない
▫ 一貫性のあるクローンが影響なく素早く取れる
▫ 予算と相談……
© MATSUZAKI Yoshihiko   2013.1.24




実運用
© MATSUZAKI Yoshihiko   2013.1.24




実運用で大切なこと
• データサイズ
 ▫ 大きくなるとスケールが難しくなる
   ダンプ時間
   リストア時間
   クローン時間
 ▫ 目安は大きくても20GB程度
   マスター分割
   不要データの定期削除
 ▫ バイナリログのサイズ
 ▫ InnoDBログのサイズ
© MATSUZAKI Yoshihiko   2013.1.24




実運用で大切なこと
• とにかく事前にテストをする
▫ すべてのDBサーバのダウンについて検証する
▫ 実際のスキーマ・実際の負荷で検証する
• 何を重視するか探って設計の着地点を見つける
▫   無停止性
▫   データロストの回避
▫   運用コスト
▫   予算
▫   スケジュール
© MATSUZAKI Yoshihiko   2013.1.24




まとめ
• 完全な無停止(停止時間ゼロ)はできない
▫ どんな構成でもだいたい十数秒はかかる
▫ できるだけ迅速に復旧できる体制作り
  サーバだけでなく人も
• さまざまな条件の中で落とし所を見つける
▫ 条件は技術的なことだけではない
© MATSUZAKI Yoshihiko   2013.1.24




ご清聴ありがとうございました。

More Related Content

What's hot

MySQL5.7 GA の Multi-threaded slave
MySQL5.7 GA の Multi-threaded slaveMySQL5.7 GA の Multi-threaded slave
MySQL5.7 GA の Multi-threaded slaveTakanori Sejima
 
MySQL 5.7とレプリケーションにおける改良
MySQL 5.7とレプリケーションにおける改良MySQL 5.7とレプリケーションにおける改良
MySQL 5.7とレプリケーションにおける改良Shinya Sugiyama
 
MySQL Cluster 7.4で楽しむスケールアウト @DB Tech Showcase 2015/06
MySQL Cluster 7.4で楽しむスケールアウト @DB Tech Showcase 2015/06MySQL Cluster 7.4で楽しむスケールアウト @DB Tech Showcase 2015/06
MySQL Cluster 7.4で楽しむスケールアウト @DB Tech Showcase 2015/06Mikiya Okuno
 
MySQL 4.0で9年動き続けたサーバを リプレイスしてバージョンアップした話
MySQL 4.0で9年動き続けたサーバを リプレイスしてバージョンアップした話MySQL 4.0で9年動き続けたサーバを リプレイスしてバージョンアップした話
MySQL 4.0で9年動き続けたサーバを リプレイスしてバージョンアップした話Takahiro Okumura
 
tcpdump & xtrabackup @ MySQL Casual Talks #1
tcpdump & xtrabackup @ MySQL Casual Talks #1tcpdump & xtrabackup @ MySQL Casual Talks #1
tcpdump & xtrabackup @ MySQL Casual Talks #1Ryosuke IWANAGA
 
MHA for MySQLとDeNAのオープンソースの話
MHA for MySQLとDeNAのオープンソースの話MHA for MySQLとDeNAのオープンソースの話
MHA for MySQLとDeNAのオープンソースの話Yoshinori Matsunobu
 
MHAの次を目指す mikasafabric for MySQL
MHAの次を目指す mikasafabric for MySQLMHAの次を目指す mikasafabric for MySQL
MHAの次を目指す mikasafabric for MySQLyoku0825
 
最近始めたあなたも今日から語れるようになるMySQLの{概要と最新情報}入門@
最近始めたあなたも今日から語れるようになるMySQLの{概要と最新情報}入門@最近始めたあなたも今日から語れるようになるMySQLの{概要と最新情報}入門@
最近始めたあなたも今日から語れるようになるMySQLの{概要と最新情報}入門@sakaik
 
dimSTATから見るベンチマーク
dimSTATから見るベンチマークdimSTATから見るベンチマーク
dimSTATから見るベンチマークhiroi10
 
MHAを検証して導入した話
MHAを検証して導入した話MHAを検証して導入した話
MHAを検証して導入した話Yu Komiya
 
MySQLやSSDとかの話 前編
MySQLやSSDとかの話 前編MySQLやSSDとかの話 前編
MySQLやSSDとかの話 前編Takanori Sejima
 
What's New in MySQL 5.7 InnoDB
What's New in MySQL 5.7 InnoDBWhat's New in MySQL 5.7 InnoDB
What's New in MySQL 5.7 InnoDBMikiya Okuno
 
MySQl 5.6新機能解説@第一回 中国地方DB勉強会
MySQl 5.6新機能解説@第一回 中国地方DB勉強会MySQl 5.6新機能解説@第一回 中国地方DB勉強会
MySQl 5.6新機能解説@第一回 中国地方DB勉強会Mikiya Okuno
 
MySQL 初めてのチューニング
MySQL 初めてのチューニングMySQL 初めてのチューニング
MySQL 初めてのチューニングCraft works
 
MySQLトラブル解析入門
MySQLトラブル解析入門MySQLトラブル解析入門
MySQLトラブル解析入門Mikiya Okuno
 
What's New in MySQL 5.7 Security
What's New in MySQL 5.7 SecurityWhat's New in MySQL 5.7 Security
What's New in MySQL 5.7 SecurityMikiya Okuno
 
カジュアルにMySQL Clusterを使ってみよう@MySQL Cluster Casual Talks 2013.09
カジュアルにMySQL Clusterを使ってみよう@MySQL Cluster Casual Talks 2013.09カジュアルにMySQL Clusterを使ってみよう@MySQL Cluster Casual Talks 2013.09
カジュアルにMySQL Clusterを使ってみよう@MySQL Cluster Casual Talks 2013.09Mikiya Okuno
 
MySQLバックアップの基本
MySQLバックアップの基本MySQLバックアップの基本
MySQLバックアップの基本yoyamasaki
 
初心者向け負荷軽減のはなし
初心者向け負荷軽減のはなし初心者向け負荷軽減のはなし
初心者向け負荷軽減のはなしOonishi Takaaki
 

What's hot (20)

MySQL5.7 GA の Multi-threaded slave
MySQL5.7 GA の Multi-threaded slaveMySQL5.7 GA の Multi-threaded slave
MySQL5.7 GA の Multi-threaded slave
 
MySQL 5.7とレプリケーションにおける改良
MySQL 5.7とレプリケーションにおける改良MySQL 5.7とレプリケーションにおける改良
MySQL 5.7とレプリケーションにおける改良
 
MySQL Cluster 7.4で楽しむスケールアウト @DB Tech Showcase 2015/06
MySQL Cluster 7.4で楽しむスケールアウト @DB Tech Showcase 2015/06MySQL Cluster 7.4で楽しむスケールアウト @DB Tech Showcase 2015/06
MySQL Cluster 7.4で楽しむスケールアウト @DB Tech Showcase 2015/06
 
MySQL 4.0で9年動き続けたサーバを リプレイスしてバージョンアップした話
MySQL 4.0で9年動き続けたサーバを リプレイスしてバージョンアップした話MySQL 4.0で9年動き続けたサーバを リプレイスしてバージョンアップした話
MySQL 4.0で9年動き続けたサーバを リプレイスしてバージョンアップした話
 
tcpdump & xtrabackup @ MySQL Casual Talks #1
tcpdump & xtrabackup @ MySQL Casual Talks #1tcpdump & xtrabackup @ MySQL Casual Talks #1
tcpdump & xtrabackup @ MySQL Casual Talks #1
 
MHA for MySQLとDeNAのオープンソースの話
MHA for MySQLとDeNAのオープンソースの話MHA for MySQLとDeNAのオープンソースの話
MHA for MySQLとDeNAのオープンソースの話
 
MHAの次を目指す mikasafabric for MySQL
MHAの次を目指す mikasafabric for MySQLMHAの次を目指す mikasafabric for MySQL
MHAの次を目指す mikasafabric for MySQL
 
最近始めたあなたも今日から語れるようになるMySQLの{概要と最新情報}入門@
最近始めたあなたも今日から語れるようになるMySQLの{概要と最新情報}入門@最近始めたあなたも今日から語れるようになるMySQLの{概要と最新情報}入門@
最近始めたあなたも今日から語れるようになるMySQLの{概要と最新情報}入門@
 
dimSTATから見るベンチマーク
dimSTATから見るベンチマークdimSTATから見るベンチマーク
dimSTATから見るベンチマーク
 
MHAを検証して導入した話
MHAを検証して導入した話MHAを検証して導入した話
MHAを検証して導入した話
 
MySQLやSSDとかの話 前編
MySQLやSSDとかの話 前編MySQLやSSDとかの話 前編
MySQLやSSDとかの話 前編
 
What's New in MySQL 5.7 InnoDB
What's New in MySQL 5.7 InnoDBWhat's New in MySQL 5.7 InnoDB
What's New in MySQL 5.7 InnoDB
 
WindowsでMySQL入門
WindowsでMySQL入門WindowsでMySQL入門
WindowsでMySQL入門
 
MySQl 5.6新機能解説@第一回 中国地方DB勉強会
MySQl 5.6新機能解説@第一回 中国地方DB勉強会MySQl 5.6新機能解説@第一回 中国地方DB勉強会
MySQl 5.6新機能解説@第一回 中国地方DB勉強会
 
MySQL 初めてのチューニング
MySQL 初めてのチューニングMySQL 初めてのチューニング
MySQL 初めてのチューニング
 
MySQLトラブル解析入門
MySQLトラブル解析入門MySQLトラブル解析入門
MySQLトラブル解析入門
 
What's New in MySQL 5.7 Security
What's New in MySQL 5.7 SecurityWhat's New in MySQL 5.7 Security
What's New in MySQL 5.7 Security
 
カジュアルにMySQL Clusterを使ってみよう@MySQL Cluster Casual Talks 2013.09
カジュアルにMySQL Clusterを使ってみよう@MySQL Cluster Casual Talks 2013.09カジュアルにMySQL Clusterを使ってみよう@MySQL Cluster Casual Talks 2013.09
カジュアルにMySQL Clusterを使ってみよう@MySQL Cluster Casual Talks 2013.09
 
MySQLバックアップの基本
MySQLバックアップの基本MySQLバックアップの基本
MySQLバックアップの基本
 
初心者向け負荷軽減のはなし
初心者向け負荷軽減のはなし初心者向け負荷軽減のはなし
初心者向け負荷軽減のはなし
 

Viewers also liked

OSSで実現するハイブリッドクラウド4ノードクラスタ ~Pacemakerのチケット機能で災害対策~
OSSで実現するハイブリッドクラウド4ノードクラスタ ~Pacemakerのチケット機能で災害対策~OSSで実現するハイブリッドクラウド4ノードクラスタ ~Pacemakerのチケット機能で災害対策~
OSSで実現するハイブリッドクラウド4ノードクラスタ ~Pacemakerのチケット機能で災害対策~tkomachi
 
CloudFront構築事例 ハートビーツ 20121025
CloudFront構築事例 ハートビーツ 20121025CloudFront構築事例 ハートビーツ 20121025
CloudFront構築事例 ハートビーツ 20121025Toshiaki Baba
 
プロレス 夏サミ 20140731(公開版)
プロレス 夏サミ 20140731(公開版)プロレス 夏サミ 20140731(公開版)
プロレス 夏サミ 20140731(公開版)Daisuke Kawada
 
物理サーバとクラウドの運用管理の違い 2010 03 24 馬場
物理サーバとクラウドの運用管理の違い 2010 03 24 馬場物理サーバとクラウドの運用管理の違い 2010 03 24 馬場
物理サーバとクラウドの運用管理の違い 2010 03 24 馬場Toshiaki Baba
 
宣伝費ゼロで累計200万DLに至った経緯 - 写真加工スマホアプリMy Heart Camera と Pico Sweet
宣伝費ゼロで累計200万DLに至った経緯 - 写真加工スマホアプリMy Heart Camera と Pico Sweet宣伝費ゼロで累計200万DLに至った経緯 - 写真加工スマホアプリMy Heart Camera と Pico Sweet
宣伝費ゼロで累計200万DLに至った経緯 - 写真加工スマホアプリMy Heart Camera と Pico SweetRyo Kawanobe
 
インフラエンジニアになろう!
インフラエンジニアになろう!インフラエンジニアになろう!
インフラエンジニアになろう!Toshiaki Baba
 
プロジェクトとプロジェクトマネジメントの基本
プロジェクトとプロジェクトマネジメントの基本プロジェクトとプロジェクトマネジメントの基本
プロジェクトとプロジェクトマネジメントの基本Toshiaki Baba
 
著名PHPアプリの脆弱性に学ぶセキュアコーディングの原則
著名PHPアプリの脆弱性に学ぶセキュアコーディングの原則著名PHPアプリの脆弱性に学ぶセキュアコーディングの原則
著名PHPアプリの脆弱性に学ぶセキュアコーディングの原則Hiroshi Tokumaru
 
コミュニケーション for MSP
コミュニケーション for MSPコミュニケーション for MSP
コミュニケーション for MSPwhywaita
 
MySQL 5.7の罠があなたを狙っている
MySQL 5.7の罠があなたを狙っているMySQL 5.7の罠があなたを狙っている
MySQL 5.7の罠があなたを狙っているyoku0825
 

Viewers also liked (11)

OSSで実現するハイブリッドクラウド4ノードクラスタ ~Pacemakerのチケット機能で災害対策~
OSSで実現するハイブリッドクラウド4ノードクラスタ ~Pacemakerのチケット機能で災害対策~OSSで実現するハイブリッドクラウド4ノードクラスタ ~Pacemakerのチケット機能で災害対策~
OSSで実現するハイブリッドクラウド4ノードクラスタ ~Pacemakerのチケット機能で災害対策~
 
hbstudy#06
hbstudy#06hbstudy#06
hbstudy#06
 
CloudFront構築事例 ハートビーツ 20121025
CloudFront構築事例 ハートビーツ 20121025CloudFront構築事例 ハートビーツ 20121025
CloudFront構築事例 ハートビーツ 20121025
 
プロレス 夏サミ 20140731(公開版)
プロレス 夏サミ 20140731(公開版)プロレス 夏サミ 20140731(公開版)
プロレス 夏サミ 20140731(公開版)
 
物理サーバとクラウドの運用管理の違い 2010 03 24 馬場
物理サーバとクラウドの運用管理の違い 2010 03 24 馬場物理サーバとクラウドの運用管理の違い 2010 03 24 馬場
物理サーバとクラウドの運用管理の違い 2010 03 24 馬場
 
宣伝費ゼロで累計200万DLに至った経緯 - 写真加工スマホアプリMy Heart Camera と Pico Sweet
宣伝費ゼロで累計200万DLに至った経緯 - 写真加工スマホアプリMy Heart Camera と Pico Sweet宣伝費ゼロで累計200万DLに至った経緯 - 写真加工スマホアプリMy Heart Camera と Pico Sweet
宣伝費ゼロで累計200万DLに至った経緯 - 写真加工スマホアプリMy Heart Camera と Pico Sweet
 
インフラエンジニアになろう!
インフラエンジニアになろう!インフラエンジニアになろう!
インフラエンジニアになろう!
 
プロジェクトとプロジェクトマネジメントの基本
プロジェクトとプロジェクトマネジメントの基本プロジェクトとプロジェクトマネジメントの基本
プロジェクトとプロジェクトマネジメントの基本
 
著名PHPアプリの脆弱性に学ぶセキュアコーディングの原則
著名PHPアプリの脆弱性に学ぶセキュアコーディングの原則著名PHPアプリの脆弱性に学ぶセキュアコーディングの原則
著名PHPアプリの脆弱性に学ぶセキュアコーディングの原則
 
コミュニケーション for MSP
コミュニケーション for MSPコミュニケーション for MSP
コミュニケーション for MSP
 
MySQL 5.7の罠があなたを狙っている
MySQL 5.7の罠があなたを狙っているMySQL 5.7の罠があなたを狙っている
MySQL 5.7の罠があなたを狙っている
 

Similar to MySQLの冗長化 2013-01-24

Always on 可用性グループ 構築時のポイント
Always on 可用性グループ 構築時のポイントAlways on 可用性グループ 構築時のポイント
Always on 可用性グループ 構築時のポイントMasayuki Ozawa
 
Immutable Infrastructure in nanapi
Immutable Infrastructure in nanapiImmutable Infrastructure in nanapi
Immutable Infrastructure in nanapi晃 遠山
 
入門 Chef Server #biglobetechtalk
入門 Chef Server #biglobetechtalk入門 Chef Server #biglobetechtalk
入門 Chef Server #biglobetechtalkBIGLOBE Tech Talk
 
[B31,32]SQL Server Internal と パフォーマンスチューニング by Yukio Kumazawa
[B31,32]SQL Server Internal と パフォーマンスチューニング by Yukio Kumazawa[B31,32]SQL Server Internal と パフォーマンスチューニング by Yukio Kumazawa
[B31,32]SQL Server Internal と パフォーマンスチューニング by Yukio KumazawaInsight Technology, Inc.
 
オープンソース・データベースの最新事情
オープンソース・データベースの最新事情オープンソース・データベースの最新事情
オープンソース・データベースの最新事情Meiji Kimura
 
20121115 オープンソースでハイアベイラビリティ! ~クラスタ管理の設計構築ハウツー&エンジニア思考力~
20121115 オープンソースでハイアベイラビリティ! ~クラスタ管理の設計構築ハウツー&エンジニア思考力~20121115 オープンソースでハイアベイラビリティ! ~クラスタ管理の設計構築ハウツー&エンジニア思考力~
20121115 オープンソースでハイアベイラビリティ! ~クラスタ管理の設計構築ハウツー&エンジニア思考力~Iwasaki Noboru
 
オンプレのDbaがazureのデータベースを使ってみた
オンプレのDbaがazureのデータベースを使ってみたオンプレのDbaがazureのデータベースを使ってみた
オンプレのDbaがazureのデータベースを使ってみたMasayuki Ozawa
 
PostgreSQL V9 レプリケーション解説
PostgreSQL V9 レプリケーション解説PostgreSQL V9 レプリケーション解説
PostgreSQL V9 レプリケーション解説Masao Fujii
 
大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック
大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック
大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニックinfinite_loop
 
小規模アプリ開発者が中から見るモンスターストライク
小規模アプリ開発者が中から見るモンスターストライク小規模アプリ開発者が中から見るモンスターストライク
小規模アプリ開発者が中から見るモンスターストライクyoshiteru kawamata
 
MySQL SYSスキーマのご紹介
MySQL SYSスキーマのご紹介MySQL SYSスキーマのご紹介
MySQL SYSスキーマのご紹介Shinya Sugiyama
 
M20_Azure SQL Database 最新アップデートをまとめてキャッチアップ [Microsoft Japan Digital Days]
M20_Azure SQL Database 最新アップデートをまとめてキャッチアップ [Microsoft Japan Digital Days]M20_Azure SQL Database 最新アップデートをまとめてキャッチアップ [Microsoft Japan Digital Days]
M20_Azure SQL Database 最新アップデートをまとめてキャッチアップ [Microsoft Japan Digital Days]日本マイクロソフト株式会社
 
[db tech showcase Tokyo 2014] D17:こだわろう、一貫性! はじめよう、分散KVS!! ~分散KVSの弱点と、それを克服する...
[db tech showcase Tokyo 2014] D17:こだわろう、一貫性! はじめよう、分散KVS!! ~分散KVSの弱点と、それを克服する...[db tech showcase Tokyo 2014] D17:こだわろう、一貫性! はじめよう、分散KVS!! ~分散KVSの弱点と、それを克服する...
[db tech showcase Tokyo 2014] D17:こだわろう、一貫性! はじめよう、分散KVS!! ~分散KVSの弱点と、それを克服する...Insight Technology, Inc.
 
20150920 中国地方db勉強会
20150920 中国地方db勉強会20150920 中国地方db勉強会
20150920 中国地方db勉強会yoyamasaki
 
20150131 ChugokuDB-Shimane-MySQL
20150131 ChugokuDB-Shimane-MySQL20150131 ChugokuDB-Shimane-MySQL
20150131 ChugokuDB-Shimane-MySQLRyusuke Kajiyama
 
CloudWatch(+sns+sqs)で障害対応を自動化してみた
CloudWatch(+sns+sqs)で障害対応を自動化してみたCloudWatch(+sns+sqs)で障害対応を自動化してみた
CloudWatch(+sns+sqs)で障害対応を自動化してみたTerui Masashi
 
使ってわかった!現場担当者が語るOpenStack運用管理の課題:OpenStack Days 2015 Tokyo 講演
使ってわかった!現場担当者が語るOpenStack運用管理の課題:OpenStack Days 2015 Tokyo 講演使ってわかった!現場担当者が語るOpenStack運用管理の課題:OpenStack Days 2015 Tokyo 講演
使ってわかった!現場担当者が語るOpenStack運用管理の課題:OpenStack Days 2015 Tokyo 講演VirtualTech Japan Inc.
 

Similar to MySQLの冗長化 2013-01-24 (20)

Always on 可用性グループ 構築時のポイント
Always on 可用性グループ 構築時のポイントAlways on 可用性グループ 構築時のポイント
Always on 可用性グループ 構築時のポイント
 
Immutable Infrastructure in nanapi
Immutable Infrastructure in nanapiImmutable Infrastructure in nanapi
Immutable Infrastructure in nanapi
 
Eight meets AWS
Eight meets AWSEight meets AWS
Eight meets AWS
 
入門 Chef Server #biglobetechtalk
入門 Chef Server #biglobetechtalk入門 Chef Server #biglobetechtalk
入門 Chef Server #biglobetechtalk
 
[B31,32]SQL Server Internal と パフォーマンスチューニング by Yukio Kumazawa
[B31,32]SQL Server Internal と パフォーマンスチューニング by Yukio Kumazawa[B31,32]SQL Server Internal と パフォーマンスチューニング by Yukio Kumazawa
[B31,32]SQL Server Internal と パフォーマンスチューニング by Yukio Kumazawa
 
Couchbaseの紹介 2015/03/05
Couchbaseの紹介 2015/03/05Couchbaseの紹介 2015/03/05
Couchbaseの紹介 2015/03/05
 
オープンソース・データベースの最新事情
オープンソース・データベースの最新事情オープンソース・データベースの最新事情
オープンソース・データベースの最新事情
 
20121115 オープンソースでハイアベイラビリティ! ~クラスタ管理の設計構築ハウツー&エンジニア思考力~
20121115 オープンソースでハイアベイラビリティ! ~クラスタ管理の設計構築ハウツー&エンジニア思考力~20121115 オープンソースでハイアベイラビリティ! ~クラスタ管理の設計構築ハウツー&エンジニア思考力~
20121115 オープンソースでハイアベイラビリティ! ~クラスタ管理の設計構築ハウツー&エンジニア思考力~
 
オンプレのDbaがazureのデータベースを使ってみた
オンプレのDbaがazureのデータベースを使ってみたオンプレのDbaがazureのデータベースを使ってみた
オンプレのDbaがazureのデータベースを使ってみた
 
PostgreSQL V9 レプリケーション解説
PostgreSQL V9 レプリケーション解説PostgreSQL V9 レプリケーション解説
PostgreSQL V9 レプリケーション解説
 
大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック
大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック
大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック
 
小規模アプリ開発者が中から見るモンスターストライク
小規模アプリ開発者が中から見るモンスターストライク小規模アプリ開発者が中から見るモンスターストライク
小規模アプリ開発者が中から見るモンスターストライク
 
PostgreSQLの運用・監視にまつわるエトセトラ
PostgreSQLの運用・監視にまつわるエトセトラPostgreSQLの運用・監視にまつわるエトセトラ
PostgreSQLの運用・監視にまつわるエトセトラ
 
MySQL SYSスキーマのご紹介
MySQL SYSスキーマのご紹介MySQL SYSスキーマのご紹介
MySQL SYSスキーマのご紹介
 
M20_Azure SQL Database 最新アップデートをまとめてキャッチアップ [Microsoft Japan Digital Days]
M20_Azure SQL Database 最新アップデートをまとめてキャッチアップ [Microsoft Japan Digital Days]M20_Azure SQL Database 最新アップデートをまとめてキャッチアップ [Microsoft Japan Digital Days]
M20_Azure SQL Database 最新アップデートをまとめてキャッチアップ [Microsoft Japan Digital Days]
 
[db tech showcase Tokyo 2014] D17:こだわろう、一貫性! はじめよう、分散KVS!! ~分散KVSの弱点と、それを克服する...
[db tech showcase Tokyo 2014] D17:こだわろう、一貫性! はじめよう、分散KVS!! ~分散KVSの弱点と、それを克服する...[db tech showcase Tokyo 2014] D17:こだわろう、一貫性! はじめよう、分散KVS!! ~分散KVSの弱点と、それを克服する...
[db tech showcase Tokyo 2014] D17:こだわろう、一貫性! はじめよう、分散KVS!! ~分散KVSの弱点と、それを克服する...
 
20150920 中国地方db勉強会
20150920 中国地方db勉強会20150920 中国地方db勉強会
20150920 中国地方db勉強会
 
20150131 ChugokuDB-Shimane-MySQL
20150131 ChugokuDB-Shimane-MySQL20150131 ChugokuDB-Shimane-MySQL
20150131 ChugokuDB-Shimane-MySQL
 
CloudWatch(+sns+sqs)で障害対応を自動化してみた
CloudWatch(+sns+sqs)で障害対応を自動化してみたCloudWatch(+sns+sqs)で障害対応を自動化してみた
CloudWatch(+sns+sqs)で障害対応を自動化してみた
 
使ってわかった!現場担当者が語るOpenStack運用管理の課題:OpenStack Days 2015 Tokyo 講演
使ってわかった!現場担当者が語るOpenStack運用管理の課題:OpenStack Days 2015 Tokyo 講演使ってわかった!現場担当者が語るOpenStack運用管理の課題:OpenStack Days 2015 Tokyo 講演
使ってわかった!現場担当者が語るOpenStack運用管理の課題:OpenStack Days 2015 Tokyo 講演
 

Recently uploaded

スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdftaisei2219
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNetToru Tamaki
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...Toru Tamaki
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Yuma Ohgami
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A surveyToru Tamaki
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Danieldanielhu54
 

Recently uploaded (9)

スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
 

MySQLの冗長化 2013-01-24

  • 1. MySQLの冗長化 ~無停止運用を実現するには~ 株式会社ハートビーツ 運用エンジニア 松崎 慶彦
  • 2. © MATSUZAKI Yoshihiko 2013.1.24 自己紹介 • 松崎 慶彦 (MATSUZAKI Yoshihiko) • 株式会社ハートビーツ 運用エンジニア ▫ MSP(サーバ運用・監視)の会社 ▫ 24時間有人監視を提供している ▫ ベンダ非依存なサーバ運用(どこでもやる) • 普段やっている業務 ▫ サービス特性に合ったインフラの設計・構築 ▫ サービス特性に合った運用の設計 ▫ すでに動いているサービスの移設
  • 3. © MATSUZAKI Yoshihiko 2013.1.24 MySQL • 世界シェアトップのオープンソースRDBMS • 導入が楽 • 枯れているので運用も楽 • 十分に高速 • 開発が活発でどんどん新機能が増えている
  • 4. © MATSUZAKI Yoshihiko 2013.1.24 MySQLの最新情報 http://dev.mysql.com/
  • 5. © MATSUZAKI Yoshihiko 2013.1.24 MySQLを使う上で大事なこと • ちゃんとしたスキーマ設計 • ちゃんとしたクエリ設計 ▫ パフォーマンスはほとんどここで決まる
  • 6. © MATSUZAKI Yoshihiko 2013.1.24 MySQL冗長化についての要望 • 動作を速くしてほしい! • 負荷を下げてほしい! • 無停止にしてほしい! • データをロストさせたくない! • 無停止でバックアップを取りたい! • いざというときにスケールさせたい! • でもアプリはなるべく変更したくない…… ▫ スキーマやクエリはなかなか変えられない
  • 7. © MATSUZAKI Yoshihiko 2013.1.24 MySQLの冗長化手段 • MySQL Cluster • DRBD • MySQL Replication
  • 8. © MATSUZAKI Yoshihiko 2013.1.24 MySQL Cluster • 監視・起動・停止・復旧まで自動でやってくれる • クラスタウェアが不要でmysqldだけで動作する • マスターの負荷分散ができる • トランザクション分離レベルやインデックスの制限がある ▫ スキーマ設計・クエリ設計での配慮が必要になる
  • 9. © MATSUZAKI Yoshihiko 2013.1.24 トランザクション分離レベル • 待ち時間と一貫性のトレードオフ ▫ 分離レベルが高いほど一貫性が強く待ち時間が長くなる • 分離レベルが低いと起きる現象 ▫ Dirty Read  並列実行されている別トランザクションによる 未コミットの更新を読み込んでしまう ▫ Non-Repeatable Read  並列実行されている別トランザクションによる コミット済みのレコード変更を読み込んでしまう ▫ Phantom Read  並列実行されている別トランザクションによる コミット済みのレコード追加・削除を読み込んでしまう
  • 10. © MATSUZAKI Yoshihiko 2013.1.24 トランザクション分離レベル • SERIALIZABLE ▫ 他トランザクションのコミットの影響を受けない • REPEATABLE READ ▫ 参照中レコードのみ他トランザクションの影響を受けない ▫ Phantom Read • READ COMMITTED ←MySQL Clusterで使用できるのはこれのみ ▫ 他トランザクションのコミット済みデータを読み込む ▫ Non-Repeatable Read, Phantom Read • READ UNCOMMITTED ▫ 他トランザクションの未コミットデータを読み込む ▫ Dirty Read, Non-Repeatable Read, Phantom Read
  • 11. © MATSUZAKI Yoshihiko 2013.1.24 DRBD • ネットワーク越しにブロックデバイスをミラーリング ▫ ネットワークのレイテンシの影響を受けやすい • コア機能がカーネルモジュール ▫ クラウドでは採用しにくい • Failoverの仕組みを別に用意する必要がある
  • 12. © MATSUZAKI Yoshihiko 2013.1.24 MySQL Replication • マスターで実行したSQLをスレーブでも実行することで データを複製する • 最も導入が簡単 • スキーマやクエリの制限もほとんどない • Failoverの仕組みを別に用意する必要がある
  • 13. © MATSUZAKI Yoshihiko 2013.1.24 Replication
  • 14. © MATSUZAKI Yoshihiko 2013.1.24 レプリケーションの仕組み
  • 15. © MATSUZAKI Yoshihiko 2013.1.24 レプリケーションの仕組み
  • 16. © MATSUZAKI Yoshihiko 2013.1.24 レプリケーションの仕組み
  • 17. © MATSUZAKI Yoshihiko 2013.1.24 レプリケーションの仕組み
  • 18. © MATSUZAKI Yoshihiko 2013.1.24 レプリケーションの仕組み
  • 19. © MATSUZAKI Yoshihiko 2013.1.24 ログポジション • スレーブがバイナリログを読み込み始める位置 ▫ CHANGE MASTER文で指定する
  • 20. © MATSUZAKI Yoshihiko 2013.1.24 ログポジションを誤ると… • データが抜け落ちてしまう ▫ 抜け落ちたデータへのUPDATEやDELETEで壊れる
  • 21. © MATSUZAKI Yoshihiko 2013.1.24 ログポジションを誤ると… • データが二重で更新されてしまう ▫ UNIQUEなキーを含んでいると失敗して壊れる
  • 22. © MATSUZAKI Yoshihiko 2013.1.24 レプリケーションの注意点 • スレーブに書き込むと壊れる ▫ スレーブのread_onlyを有効にする • ログポジションに十分気を付ける ▫ 不整合が起きるまでエラーがないので気付けない マスターが更新されていない状態で取得する ▫ なるべく自分で入力しない  mysqldump --master-data ▫ GTID (after MySQL 5.6) • 壊れたら再構築するしかないので慎重に…
  • 23. © MATSUZAKI Yoshihiko 2013.1.24 準同期レプリケーション • 準同期 (Semi-Synchronous) ▫ I/Oスレッドは同期 ▫ SQLスレッドは非同期 • after MySQL 5.5 • スレーブへのバイナリログ転送が保証される
  • 24. © MATSUZAKI Yoshihiko 2013.1.24 準同期レプリケーションの仕組み
  • 25. © MATSUZAKI Yoshihiko 2013.1.24 準同期レプリケーションの仕組み
  • 26. © MATSUZAKI Yoshihiko 2013.1.24 準同期レプリケーションの仕組み
  • 27. © MATSUZAKI Yoshihiko 2013.1.24 準同期レプリケーションの仕組み
  • 28. © MATSUZAKI Yoshihiko 2013.1.24 準同期レプリケーションの仕組み
  • 29. © MATSUZAKI Yoshihiko 2013.1.24 準同期レプリケーションの注意点 • 複数台のスレーブがある場合 1台がAckを返した時点でCOMMIT完了になる ▫ 用途に応じて構成を決める • マスターはAckを待っている間COMMITが止まる ▫ スレーブ障害がマスターに伝播する可能性がある ▫ rpl_semi_sync_master_timeoutを短くする  Webサーバのタイムアウト時間  ブラウザのタイムアウト時間
  • 30. © MATSUZAKI Yoshihiko 2013.1.24 Failover
  • 31. © MATSUZAKI Yoshihiko 2013.1.24 簡単なFailover構成の一例
  • 32. © MATSUZAKI Yoshihiko 2013.1.24 簡単なFailover構成の一例
  • 33. © MATSUZAKI Yoshihiko 2013.1.24 簡単なFailover構成の一例
  • 34. © MATSUZAKI Yoshihiko 2013.1.24 簡単なFailover構成の一例
  • 35. © MATSUZAKI Yoshihiko 2013.1.24 簡単なFailover構成の一例
  • 36. © MATSUZAKI Yoshihiko 2013.1.24 Failoverの基本的な流れ • マスターの障害を検知 • マスターを仮想IPから除外 • マスターとのレプリケーションを停止 • (新マスターに昇格するスレーブを決定) • (新マスターのログポジションを保存) • 新マスターに仮想IPを切り替え • (残りのスレーブを新マスターに接続) • MySQLとは別に実装する必要がある
  • 37. © MATSUZAKI Yoshihiko 2013.1.24 MySQLまわりのFailover • マスターの障害を検知 • マスターを仮想IPから除外 • マスターとのレプリケーションを停止 • (新マスターに昇格するスレーブを決定) • (新マスターのログポジションを保存) • 新マスターに仮想IPを切り替え • (残りのスレーブを新マスターに接続)
  • 38. © MATSUZAKI Yoshihiko 2013.1.24 MySQLまわりのFailover • MySQL MHA ▫ マスターがダウンしたら最新のスレーブをマスターにする ▫ ManagerとNode(各DB)の構成でやや構築コストが高い • mysqlfailover (after MySQL 5.6) ▫ マスターがダウンしたら最新のスレーブをマスターにする ▫ Pythonで書かれたMySQL公式のFailoverスクリプト • 自前 ▫ 最新のスレーブ判別は準同期レプリケーションで代用可能 ▫ そんなに複雑な処理でもないのでわりと簡単に書ける
  • 39. © MATSUZAKI Yoshihiko 2013.1.24 仮想IPアドレスまわりのFailover • マスターの障害を検知 • マスターを仮想IPから除外 • マスターとのレプリケーションを停止 • (新マスターに昇格するスレーブを決定) • (新マスターのログポジションを保存) • 新マスターに仮想IPを切り替え • (残りのスレーブを新マスターに接続)
  • 40. © MATSUZAKI Yoshihiko 2013.1.24 仮想IPアドレスまわりのFailover • LVS (keepalived) ▫ keepalived自身の冗長化が簡単にできる ▫ ヘルスチェックがTCPぐらいしかないので作り込みが必要 ▫ スケールする構成にしやすい • Pacemaker ▫ スケールする構成にできない • HAProxy ▫ HAProxy自身の冗長化が自力でできない • MySQL Proxy ▫ MySQL Proxy自身の冗長化が自力でできない ▫ 正式版リリースではない
  • 41. © MATSUZAKI Yoshihiko 2013.1.24 Failoverの注意点 • 最新のデータがどこにあるかを把握する ▫ 準同期レプリケーション (after MySQL 5.5) ▫ 更新系クエリの経路を常に1つに維持する • 復旧前の誤ったサービス復帰を防止する ▫ reset slave ▫ skip-slave-start ▫ chkconfig mysqld off • 書き込み可能な状態にする ▫ スレーブを昇格させるときにread_onlyを外す
  • 42. © MATSUZAKI Yoshihiko 2013.1.24 LVS (keepalived)
  • 43. © MATSUZAKI Yoshihiko 2013.1.24 LVS (keepalived) • 仮想IPへのアクセスを別のサーバに振り分ける • 自分自身のFailoverができる • 自前のスクリプトでヘルスチェックができる ▫ 要求定義に応じた柔軟なヘルスチェック ▫ 障害発生時にFailoverを発動したりもできる • 一つの仮想IPへのアクセスを複数のサーバに振 り分けられる ▫ 単純なラウンドロビンだけでなく接続数を見て ロードバランシングしたりもできる
  • 44. © MATSUZAKI Yoshihiko 2013.1.24 LVS (keepalived)の設定例 virtual_server 192.168.0.1 3306 { delay_loop 6 Failover時以外はスレーブに lb_algo wrr アクセスが行かないように lb_kind DR protocol TCP ↓sorry_serverで設定する sorry_server 192.168.0.102 3306 real_server 192.168.0.101 3306 { weight 1 MISC_CHECK { misc_path "/path/to/mysql-check.sh 192.168.0.101" misc_timeout 60 ↑ } 自前のスクリプトでヘルスチェック } }
  • 45. © MATSUZAKI Yoshihiko 2013.1.24 スケールアウト
  • 46. © MATSUZAKI Yoshihiko 2013.1.24 簡単なスケールする構成の一例 (スケールする構成への変更前)
  • 47. © MATSUZAKI Yoshihiko 2013.1.24 簡単なスケールする構成の一例 (スケールする構成への変更後)
  • 48. © MATSUZAKI Yoshihiko 2013.1.24 簡単なスケールする構成の一例 (更新系Failover)
  • 49. © MATSUZAKI Yoshihiko 2013.1.24 簡単なスケールする構成の一例 (更新系Failover)
  • 50. © MATSUZAKI Yoshihiko 2013.1.24 簡単なスケールする構成の一例 (更新系Failover)
  • 51. © MATSUZAKI Yoshihiko 2013.1.24 簡単なスケールする構成の一例 (更新系Failover)
  • 52. © MATSUZAKI Yoshihiko 2013.1.24 簡単なスケールする構成の一例 (中段スレーブ障害での参照系Failover)
  • 53. © MATSUZAKI Yoshihiko 2013.1.24 簡単なスケールする構成の一例 (中段スレーブ障害での参照系Failover)
  • 54. © MATSUZAKI Yoshihiko 2013.1.24 簡単なスケールする構成の一例 (中段スレーブ障害での参照系Failover)
  • 55. © MATSUZAKI Yoshihiko 2013.1.24 簡単なスケールする構成の一例 (スレーブ障害での切り離し・Failover)
  • 56. © MATSUZAKI Yoshihiko 2013.1.24 簡単なスケールする構成の一例 (スレーブ障害での切り離し・Failover)
  • 57. © MATSUZAKI Yoshihiko 2013.1.24 簡単なスケールする構成の一例 (スレーブ障害での切り離し・Failover)
  • 58. © MATSUZAKI Yoshihiko 2013.1.24 簡単なスケールする構成の一例 (スレーブ障害での切り離し・Failover)
  • 59. © MATSUZAKI Yoshihiko 2013.1.24 簡単なスケールする構成の一例 (スレーブ障害での切り離し・Failover)
  • 60. © MATSUZAKI Yoshihiko 2013.1.24 スケールアウトの注意点 • 現用系に影響を与えないようにする • server_idがユニークであることを担保する ▫ 同じserver_idのスレーブがぶら下がると壊れる ▫ LAN内でユニークな値を使用する ▫ オートスケールなら自動で書き換える ▫ 手動なら書き換える前に接続しないようにする  skip-slave-start  chkconfig mysqld off • Replicationで実行される更新系の負荷は分散できない ▫ SQLスレッドはシングルスレッドなのでスケールアップでも無理  マスターの分割
  • 61. © MATSUZAKI Yoshihiko 2013.1.24 スケールアウトの注意点 • 無停止で稼働中のスレーブを増やす ▫ mysqldump --single-transaction --master-data  MyISAMでやるとテーブルロックで障害になる ▫ 仮想化基盤の機能でクローン  データの一貫性を保証する必要がある • 理想はクローン用のスタンバイ機 ▫ サービスに組み込まない ▫ 一貫性のあるクローンが影響なく素早く取れる ▫ 予算と相談……
  • 62. © MATSUZAKI Yoshihiko 2013.1.24 実運用
  • 63. © MATSUZAKI Yoshihiko 2013.1.24 実運用で大切なこと • データサイズ ▫ 大きくなるとスケールが難しくなる  ダンプ時間  リストア時間  クローン時間 ▫ 目安は大きくても20GB程度  マスター分割  不要データの定期削除 ▫ バイナリログのサイズ ▫ InnoDBログのサイズ
  • 64. © MATSUZAKI Yoshihiko 2013.1.24 実運用で大切なこと • とにかく事前にテストをする ▫ すべてのDBサーバのダウンについて検証する ▫ 実際のスキーマ・実際の負荷で検証する • 何を重視するか探って設計の着地点を見つける ▫ 無停止性 ▫ データロストの回避 ▫ 運用コスト ▫ 予算 ▫ スケジュール
  • 65. © MATSUZAKI Yoshihiko 2013.1.24 まとめ • 完全な無停止(停止時間ゼロ)はできない ▫ どんな構成でもだいたい十数秒はかかる ▫ できるだけ迅速に復旧できる体制作り  サーバだけでなく人も • さまざまな条件の中で落とし所を見つける ▫ 条件は技術的なことだけではない
  • 66. © MATSUZAKI Yoshihiko 2013.1.24 ご清聴ありがとうございました。