“MHA for MySQL”の話
               モニカジ#3
               kazeburo




2013年3月8日金曜日
me
               • Masahiro Nagano
               • @kazeburo
               • NHN Japan
               • Operations Engineer
                 Site Reliability 運用系小姑
                 Perl Monger


2013年3月8日金曜日
MHA for MySQLとは
               • 元DeNA・現facebookの松信さんによる
                MySQLのmaster冗長化ツール

               • Master High Availability の略
               • MySQLサーバを監視してのフェイルオーバー
                とオンラインでのマスター切り替えをサポート

               • Proxy型ではないのでSPOFにならない
               • サーバの切り替えは別スクリプトを起動
2013年3月8日金曜日
MHAの構成
                                             mha-node

                                     dbs1
               mha-node




               dbm                               mha-node


                                          dbs2



               ssh/mysql

                           manager

                                     masterha-
                                     manager



2013年3月8日金曜日
MHAの構成
                                             mha-node

                                     dbs1
               mha-node




               dbm                               mha-node


                                          dbs2



               ssh/mysql

                           manager

                                     masterha-
                                     manager



2013年3月8日金曜日
MHAの構成
                                             mha-node

                                     dbs1
               mha-node




               dbm                               mha-node


                                          dbs2



               ssh/mysql

                           manager

                                     masterha-
                                     manager



2013年3月8日金曜日
MHAの構成
                                             mha-node

                                     dbs1
               mha-node




               dbm                               mha-node


                                          dbs2



               ssh/mysql

                           manager

                                     masterha-
                                     manager



2013年3月8日金曜日
MHAの構成
                                                           mha-node

                                                   dbs1
                         mha-node




                       dbm                                     mha-node


                                                        dbs2



                        ssh/mysql

                                         manager

                                                   masterha-
               master_ip_failover_script!!         manager



2013年3月8日金曜日
MHAの構成
                                                            mha-node

                                                    dbs1
                          mha-node




                        dbm                                     mha-node


                                                         dbs2



          DNS
                         ssh/mysql

                                          manager

                                                    masterha-
                master_ip_failover_script!!         manager



2013年3月8日金曜日
local DNS/PowerDNS
        • RDBMSをバックエンドとして使える
        • DNS-RRをサポート
        • 使いやすい
               static build rpm




2013年3月8日金曜日
local DNS 構成
                            Compute
                            Amazon Elastic Compute Cloud (Amazon EC2)




                                                PDNS

                            Amazon Elastic       Instance          Instances        AMI         DB on Instance       Instance
                            Compute Cloud                                                                        with CloudWatch
                               (EC2)
               tcp/udp 53                                        replication
                            Compute
                            Amazon Elastic MapReduce                           Auto Scaling
                            Amazon Elastic Compute Cloud (Amazon EC2)
                                                                                                       WebUI/API
      server                LVS

                                               PDNS
                             Amazon Elastic      Cluster        HDFS Cluster     Auto Scaling
                            Amazon Elastic
                              MapReduce          Instance         Instances         AMI         DB on Instance       Instance
                            Compute Cloud                                                                        with CloudWatch
                               (EC2)


                             Storage
                            Amazon Elastic MapReduce                           Auto Scaling
                            Amazon Simple Storage Service (Amazon S3)                            AWS Import/Export




2013年3月8日金曜日
PDNSManager




2013年3月8日金曜日
PDNSManager




2013年3月8日金曜日
PDNSManager API




                MHAからAPIを通してDNSを更新
2013年3月8日金曜日
MHA configuration
    [server default]
    user=...
    master_ip_failover_script=/home/user/mhaweb/masterha_failover.pl --
    app_name=dbm.service --mode=failover --config=/home/user/mhaweb/
    config_production.pl

    [server1]
    hostname=10.xx.xx.77                          この中でDNSの書き換え
    candidate_master=0
    no_master=0

    [server2]
    hostname=10.xx.xx.49
    candidate_master=0
    no_master=0


2013年3月8日金曜日
masterha_manger
    $ masterha_manager --conf /var/mha/app21.conf
    ...
    ..
    .
    Tue Dec 11 14:09:22 2012 - [info] Starting ping health
    check on 10.xx.xx.xxx(10.xx.xx.xxx:3306)..
    Tue Dec 11 14:09:22 2012 - [info] Ping(SELECT)
    succeeded, waiting until MySQL doesn't respond..

                                          この状態で動き続ける


                 わーい起動したー
2013年3月8日金曜日
Many services
                                            dbs
                                dbm

                        dbs                 dbs

                dbm
                                                    dbm     dbs
                        dbs


                                    manager




               dbm    dbs
                                      dbs         dbm     dbs

                              dbm
           設定とプロセスの管理面倒               dbs

2013年3月8日金曜日
わたし、Ops も Dev もできる
                 スーパーエンジニア!

                                  ¦
                              \  __  /
                              _ (m) _ピコーン
                                 ¦ミ¦
                               /  `́  \
                                ('A`)
                                ノヽノヽ
                                  くく



2013年3月8日金曜日
MHA WebUI&Manager




2013年3月8日金曜日
制御ボタン




                オンラインでの
               マスター切り替え


                  sshでの疎通確認




2013年3月8日金曜日
レプリケーション構成の確認




               masterha_managerのログ




2013年3月8日金曜日
MHA WebUI&Manager
    -+= 70422 perl mhaweb.pl --conf config_mydev.pl

                             masterha_managerのプロセス
     |--- 70424 perl mhaweb.pl --conf config_mydev.pl
     |-+- 70425 perl mhaweb.pl --conf config_mydev.pl
     | |--- 70440 perl masterha_manager --conf /tmp/app/dbm.sample/app1
     | |--- 70440 perl masterha_manager --conf /tmp/app/dbm.sample/app2
     | --- 70440 perl masterha_manager --conf /tmp/app/dbm.sample/app3
     -+- 70426 perl mhaweb.pl --conf config_mydev.pl
      |--- 70427 perl mhaweb.pl --conf config_mydev.pl
      |--- 70428 perl mhaweb.pl --conf config_mydev.pl
      |--- 70429 perl mhaweb.pl --conf config_mydev.pl
      |--- 70430 perl mhaweb.pl --conf config_mydev.pl
      --- 70431 perl mhaweb.pl --conf config_mydev.pl


        Perl + Proclet + Custom Process Manager
2013年3月8日金曜日
MHA WebUI&Manager

               ikachan連携アリ




2013年3月8日金曜日
MHA WebUI&Manager
                       Pros
               • 20+ のサービスで使用中
               • オンラインでのマスター変更にも使用
                          Cons
               • Master障害童貞
               • sshの設定がいまいち
2013年3月8日金曜日
               • オープンソース化は予定nashi..
まとめ


               • MHA for MySQL 便利 & 怖くない
               • Perl 萎んでない


2013年3月8日金曜日

MHA for MySQL の話

  • 1.
    “MHA for MySQL”の話 モニカジ#3 kazeburo 2013年3月8日金曜日
  • 2.
    me • Masahiro Nagano • @kazeburo • NHN Japan • Operations Engineer Site Reliability 運用系小姑 Perl Monger 2013年3月8日金曜日
  • 3.
    MHA for MySQLとは • 元DeNA・現facebookの松信さんによる MySQLのmaster冗長化ツール • Master High Availability の略 • MySQLサーバを監視してのフェイルオーバー とオンラインでのマスター切り替えをサポート • Proxy型ではないのでSPOFにならない • サーバの切り替えは別スクリプトを起動 2013年3月8日金曜日
  • 4.
    MHAの構成 mha-node dbs1 mha-node dbm mha-node dbs2 ssh/mysql manager masterha- manager 2013年3月8日金曜日
  • 5.
    MHAの構成 mha-node dbs1 mha-node dbm mha-node dbs2 ssh/mysql manager masterha- manager 2013年3月8日金曜日
  • 6.
    MHAの構成 mha-node dbs1 mha-node dbm mha-node dbs2 ssh/mysql manager masterha- manager 2013年3月8日金曜日
  • 7.
    MHAの構成 mha-node dbs1 mha-node dbm mha-node dbs2 ssh/mysql manager masterha- manager 2013年3月8日金曜日
  • 8.
    MHAの構成 mha-node dbs1 mha-node dbm mha-node dbs2 ssh/mysql manager masterha- master_ip_failover_script!! manager 2013年3月8日金曜日
  • 9.
    MHAの構成 mha-node dbs1 mha-node dbm mha-node dbs2 DNS ssh/mysql manager masterha- master_ip_failover_script!! manager 2013年3月8日金曜日
  • 10.
    local DNS/PowerDNS • RDBMSをバックエンドとして使える • DNS-RRをサポート • 使いやすい static build rpm 2013年3月8日金曜日
  • 11.
    local DNS 構成 Compute Amazon Elastic Compute Cloud (Amazon EC2) PDNS Amazon Elastic Instance Instances AMI DB on Instance Instance Compute Cloud with CloudWatch (EC2) tcp/udp 53 replication Compute Amazon Elastic MapReduce Auto Scaling Amazon Elastic Compute Cloud (Amazon EC2) WebUI/API server LVS PDNS Amazon Elastic Cluster HDFS Cluster Auto Scaling Amazon Elastic MapReduce Instance Instances AMI DB on Instance Instance Compute Cloud with CloudWatch (EC2) Storage Amazon Elastic MapReduce Auto Scaling Amazon Simple Storage Service (Amazon S3) AWS Import/Export 2013年3月8日金曜日
  • 12.
  • 13.
  • 14.
    PDNSManager API MHAからAPIを通してDNSを更新 2013年3月8日金曜日
  • 15.
    MHA configuration [server default] user=... master_ip_failover_script=/home/user/mhaweb/masterha_failover.pl -- app_name=dbm.service --mode=failover --config=/home/user/mhaweb/ config_production.pl [server1] hostname=10.xx.xx.77 この中でDNSの書き換え candidate_master=0 no_master=0 [server2] hostname=10.xx.xx.49 candidate_master=0 no_master=0 2013年3月8日金曜日
  • 16.
    masterha_manger $ masterha_manager --conf /var/mha/app21.conf ... .. . Tue Dec 11 14:09:22 2012 - [info] Starting ping health check on 10.xx.xx.xxx(10.xx.xx.xxx:3306).. Tue Dec 11 14:09:22 2012 - [info] Ping(SELECT) succeeded, waiting until MySQL doesn't respond.. この状態で動き続ける わーい起動したー 2013年3月8日金曜日
  • 17.
    Many services dbs dbm dbs dbs dbm dbm dbs dbs manager dbm dbs dbs dbm dbs dbm 設定とプロセスの管理面倒 dbs 2013年3月8日金曜日
  • 18.
    わたし、Ops も Devもできる スーパーエンジニア!        ¦    \  __  /    _ (m) _ピコーン       ¦ミ¦     /  `́  \      ('A`)      ノヽノヽ        くく 2013年3月8日金曜日
  • 19.
  • 20.
    制御ボタン オンラインでの マスター切り替え sshでの疎通確認 2013年3月8日金曜日
  • 21.
    レプリケーション構成の確認 masterha_managerのログ 2013年3月8日金曜日
  • 22.
    MHA WebUI&Manager -+= 70422 perl mhaweb.pl --conf config_mydev.pl masterha_managerのプロセス |--- 70424 perl mhaweb.pl --conf config_mydev.pl |-+- 70425 perl mhaweb.pl --conf config_mydev.pl | |--- 70440 perl masterha_manager --conf /tmp/app/dbm.sample/app1 | |--- 70440 perl masterha_manager --conf /tmp/app/dbm.sample/app2 | --- 70440 perl masterha_manager --conf /tmp/app/dbm.sample/app3 -+- 70426 perl mhaweb.pl --conf config_mydev.pl |--- 70427 perl mhaweb.pl --conf config_mydev.pl |--- 70428 perl mhaweb.pl --conf config_mydev.pl |--- 70429 perl mhaweb.pl --conf config_mydev.pl |--- 70430 perl mhaweb.pl --conf config_mydev.pl --- 70431 perl mhaweb.pl --conf config_mydev.pl Perl + Proclet + Custom Process Manager 2013年3月8日金曜日
  • 23.
    MHA WebUI&Manager ikachan連携アリ 2013年3月8日金曜日
  • 24.
    MHA WebUI&Manager Pros • 20+ のサービスで使用中 • オンラインでのマスター変更にも使用 Cons • Master障害童貞 • sshの設定がいまいち 2013年3月8日金曜日 • オープンソース化は予定nashi..
  • 25.
    まとめ • MHA for MySQL 便利 & 怖くない • Perl 萎んでない 2013年3月8日金曜日