1台から500台までの   MySQL運用(YAPC::Asia2012編)    長野雅広 (kazeburo)
Me• 長野雅広• @kazeburo• CPAN:KAZEBURO• Operations Engineer  Site Reliability, 運用系小姑,  NHN Japan
Me
Me
perlの話
Recent CPAN modules •   Apache::BumpyLife •   Twiggy::Prefork •   Module::Install::ShareFile •   App::LoadWatcher •   File...
Proclet          minimalistic supervisoruse Proclet::Declare;env(   PLACK_ENV => development,   LM_COLOR => 1,);service(we...
proclet           foreman for perl% cat Procfileworker: ./bin/workerweb: plackup web.psgi% proclet start --color
1台から500台までの  MySQL運用
MySQL Beginners Talks  http://www.slideshare.net/kazeburo/1500mysql-mysql-beginners   491 users
MySQL Beginners Talks       振り返り                  1
MySQL Beginners Talks       振り返り                  2
MySQL Beginners Talks       振り返り                  3
MySQL Beginners Talks       振り返り                  4
MySQL Begineersで話した 5つのMySQL運用ポイント• MySQL 5.1 or 5.5 InnoDB Plugin• my.cnfの共通化• no-MyISAM• ログ系テーブルに注意• モニタリング
今日のお題
livedoor Blog    since 2003
livedoorBlog• 来年で10年• 国内最大級 • 80億PV/month • 1億PV/monthを超えるblog多数• 総トラフィック: 20+Gbps• 記事データ: 2+TB
構成  PC         mobile          PC          mobileCMS APP     CMS APP          APP          APP                            ...
Database ShardingSELECT node from blog   where  id = 941                                         App              ①       ...
dbm           dbm           dbm           dbm           dbmdbs     dbs   dbs     dbs   dbs     dbs   dbs     dbs   dbs    ...
歴史の積み重ね• CPU: Pen4 ∼ Quad Core Xeon• Memory: 2GB ∼ 16GB• OS: FeeBSD・CentOS4.x∼5.x• サーバによって異なるmy.cnf・ MyISAMのテーブル・Index不足
      ,,、,、、,,,;i;i,}、,、       ヾ、i,;¦¦i !} i, ゙〃        ゙、;¦i,!  i i"i,       、__人_从_人__/し、_人_入         `、¦¦i ¦i i l¦,    ...
集約化によって目指すもの• TCO削減• 安定性• パフォーマンス向上
集約化方法    m           ms       s   s       s    dbm    m           m       dbs   dbss       s   s       s    (1) 1台のサーバに複数の...
集約化方法 (1)•   Pros                     Cluster                               1                                       Cluste...
集約化方法(2)•                         Cluster   Cluster   Cluster   Cluster    Pros                   1         2         3   ...
採用           集約化方法(2)•                         Cluster   Cluster   Cluster   Cluster    Pros                   1         2...
2011-09-14        未明実施8/27            10/13-15
手順(前日まで)Cluster   Cluster   Cluster   Cluster  1         2         3         4Cluster   Cluster   Cluster   Cluster   mysq...
手順(前日まで)Cluster   Cluster   Cluster   Cluster  1         2         3         4       レプリケーション                             ...
手順(前日まで)Cluster   Cluster   Cluster   Cluster  1         2         3         4       レプリケーション                             ...
手順(当日)Cluster   Cluster   Cluster   Cluster  1         2         3         4Cluster   Cluster   Cluster   Cluster   mysqld...
手順(当日)Cluster   Cluster   Cluster   Cluster  1         2         3         4Cluster   Cluster   Cluster   Cluster   mysqld...
手順(当日)Cluster   Cluster   Cluster   Cluster  1         2         3         4                                        Cluste...
手順(後日)       Cluster   Cluster   Cluster   Cluster         1         2         3         4                    mysqld      ...
手順(後日)       Cluster   Cluster   Cluster   Cluster         1         2         3         4                    mysqld      ...
集約対象160 cluster => 20+ cluster         = 作業対象サーバ
えーマジ        手作業!?自動化必須        手作業が許されるのは        小学生までだよねー
自動化• 実行時に外から情報を与える (コマンド引数などとして)
自動化• 実行時に外から情報を与える (コマンド引数などとして)• 事前情報からサーバ自身でなすべきこと を知る
Matrix (表)#cluster id        #work2dbm#from #to          #id #work         #dbm1     1            1   10.94.18.30   10.94....
Matrixからの設定生成while(my $l=<DATA>){   my ($cluster, $node) = split /s+/, $l;   push @{$nodes{$node}}, $cluster;}for my $node...
Matrixからの設定生成[mysqld]innodb_buffer_pool_size = 4Ginnodb_flush_log_at_trx_commit = 2innodb_flush_method = O_DIRECT: for $cl...
Matrixを利用した自動化set -eCDIR=$(cd $(dirname $0) && pwd)#id #work       #dbmSRV=$(cat <<"EOF"1   10.94.18.30 10.94.14.302   10....
atnodes を使った一括実行$ cpanm SSH::Batch$ atnodes ‘git   clone git://./setup.git’ dbs02.[01-20].cluster==============   dbs02.01...
当日
コマンド1つ!$ atnodes -c 10 ‘sh ./setup/copy.sh’ dbs02.[01..20].cluster============== dbs02.01.cluster =============..=========...
無事に朝を迎える
後作業
Recreate Slave   Cluster   Cluster   Cluster    Cluster      1        2         3          4データ             mysqld 複製     ...
Recreate Slave   Cluster   Cluster   Cluster    Cluster      1        2         3          4データ             mysqld 複製     ...
$ mysqldump --single-transaction    --master-data
$ mysqldump --single-transaction    --master-data    MySQL 4.0.x の場合
mysqldump (4.0.x)      “$ mysqldump --master-data”           blocks update query       MySQL 5.1.x                        ...
mysql40dump
MySQL                                  mysql40dump   FLUSH TABLES WITH READ LOCK   SHOW MASTER/SLAVE STATUS               ...
mysql40dump$dbh->do(FLUSH TABLES WITH READ LOCK);$dbh->select(SHOW MASTER STATUS);pipe my $logrh, my $logwh;my $pid = fork...
mysql40dump$ mysql40dump --master --repl-- [2012-09-25T09:00:01] Done "FLUSH TABLES WITH READ LOCK"-- [2012-09-25T09:00:01...
mysql40dumpの利用例 • slave作成# masterからslave$ mysql40dump --master --repl | ssh slave ‘cat | mysql’# slave から slave$ mysql40du...
監視(後処理2)
システム監視• データホテルの独自システム(DHW)• Nagios
Nagios MySQL監視• 死活監視• レプリケーション遅延
Nagios MySQL監視• 死活監視• レプリケーション遅延• uptime
Uptime監視   OK∼               OK∼              OK∼ Nagios           Nagios          Nagios           5min            5min  ...
Uptime監視      > 5min              < 5min             > 5min       OK∼                NG!!1               OK∼     Nagios   ...
監視としてのスパム対策 (後処理3)
スパムブログ(splog)によるシステムへの影響• レプリケーションの遅延• buffer_pool の効率性ダウン• パフォーマンス悪化     集約化によって影響範囲拡大
Splogの痕跡
Splogの痕跡
Splogの痕跡    大量の   記事投稿?
Splogの痕跡                 バイナリログの調査% mysqlbinlog --start-datetime ‘2012-09-21 22:50’ --end-datetime ‘2012-09-21 23:00’ mysq...
Splogの痕跡MySQL                 バイナリログの調査                       5.0∼% mysqlbinlog --start-datetime ‘2012-09-21 22:50’ --end-...
対Splog• アプリケーションエンジニアによる ツールでの監視• サポート・パトロールチームの目視に よる監視• オペレーションエンジニアによる システム監視  => スパム対策と共に安定稼働を実現
今後のこと
MySQL 5.x?
さらなる集約化20+ clusters=> N servers
HDD/SSD    Performance Test                   HDD-RAID10        SSD-RAID1                   Intel SSD 910     某Flush Devic...
ソーシャルメディアのデータベースにおけるストレージデバイスの   選択基準バイト単価 > IOPS   *個人的見解です
Open & Share
mysql40dump
github.com/kazeburo/mysql40dump
my.cnf
github.com/kazeburo/mysetup
おわり
Upcoming SlideShare
Loading in...5
×

1台から500台までのMySQL運用(YAPC::Asia編)

27,895

Published on

0 Comments
46 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
27,895
On Slideshare
0
From Embeds
0
Number of Embeds
8
Actions
Shares
0
Downloads
103
Comments
0
Likes
46
Embeds 0
No embeds

No notes for slide
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • 1台から500台までのMySQL運用(YAPC::Asia編)

    1. 1. 1台から500台までの MySQL運用(YAPC::Asia2012編) 長野雅広 (kazeburo)
    2. 2. Me• 長野雅広• @kazeburo• CPAN:KAZEBURO• Operations Engineer Site Reliability, 運用系小姑, NHN Japan
    3. 3. Me
    4. 4. Me
    5. 5. perlの話
    6. 6. Recent CPAN modules • Apache::BumpyLife • Twiggy::Prefork • Module::Install::ShareFile • App::LoadWatcher • File::RotateLogs • Plack::Middleware::AxsLog • Proclet • DBIx::DSN::Resolver [new!]
    7. 7. Proclet minimalistic supervisoruse Proclet::Declare;env( PLACK_ENV => development, LM_COLOR => 1,);service(web, plackup -p 9413 app.psgi);service(memcached, qw!/usr/bin/memcached -p 11211!);service(worker, sub { MyWorker->run });worker( worker => 2 );run;
    8. 8. proclet foreman for perl% cat Procfileworker: ./bin/workerweb: plackup web.psgi% proclet start --color
    9. 9. 1台から500台までの MySQL運用
    10. 10. MySQL Beginners Talks http://www.slideshare.net/kazeburo/1500mysql-mysql-beginners 491 users
    11. 11. MySQL Beginners Talks 振り返り 1
    12. 12. MySQL Beginners Talks 振り返り 2
    13. 13. MySQL Beginners Talks 振り返り 3
    14. 14. MySQL Beginners Talks 振り返り 4
    15. 15. MySQL Begineersで話した 5つのMySQL運用ポイント• MySQL 5.1 or 5.5 InnoDB Plugin• my.cnfの共通化• no-MyISAM• ログ系テーブルに注意• モニタリング
    16. 16. 今日のお題
    17. 17. livedoor Blog since 2003
    18. 18. livedoorBlog• 来年で10年• 国内最大級 • 80億PV/month • 1億PV/monthを超えるblog多数• 総トラフィック: 20+Gbps• 記事データ: 2+TB
    19. 19. 構成 PC mobile PC mobileCMS APP CMS APP APP APP Spam STF Analyzer Filter Job Main Clusteredmemcached Queue DB DB コア 画像 ログ スパム
    20. 20. Database ShardingSELECT node from blog where id = 941 App ① ② Mapping Cluster Cluster Cluster Cluster Cluster (Main DB) 1 2 3 4 5 すごく.. 古典的です..///
    21. 21. dbm dbm dbm dbm dbmdbs dbs dbs dbs dbs dbs dbs dbs dbs dbs dbm dbm dbm dbm dbmdbs dbs 160cluster dbs dbs dbs dbs dbs dbs dbs dbs dbm dbm*1 dbs*2+ dbm dbm dbm dbmdbs dbs => 500 servers dbs dbs dbs dbs dbs dbs dbs dbs dbm dbm dbm dbm dbmdbs dbs dbs dbs dbs dbs dbs dbs dbs dbs
    22. 22. 歴史の積み重ね• CPU: Pen4 ∼ Quad Core Xeon• Memory: 2GB ∼ 16GB• OS: FeeBSD・CentOS4.x∼5.x• サーバによって異なるmy.cnf・ MyISAMのテーブル・Index不足
    23. 23.       ,,、,、、,,,;i;i,}、,、       ヾ、i,;¦¦i !} i, ゙〃        ゙、;¦i,!  i i"i,       、__人_从_人__/し、_人_入         `、¦¦i ¦i i l¦,      、_)          ,¦¦i }i ¦ ;,〃,,     _) 集約だ∼っ!!          .}.¦¦¦¦ ¦ ! l- 、ミ    `)         ,<.}¦¦¦ il/,-liヾ;;ミ   ́͡V^^Y͡V^V͡W^Y͡        .{/゙、}¦¦¦//  .i¦ };;;ミ        Y,;-   ー、  .i¦,];;彡        iil¦¦¦¦¦liill¦¦¦¦¦¦¦¦li!=H;;;ミミ        {  く;ァソ  ;;,; ゙};;彡ミ         ゙i [` ヾ. ¦¦^!,彡ミ   _,,__          ゙i }  } ;;:;li, ゙iミミミ=三=-;;;;;;;;;,,,,---} ̄ フハ, 二゙́ ,;/;;_,;,7 ,-::;;;;;;;;;;;;;,,= ;;;;;;;;/_  / ¦ ¦ `ー--́_,,,-,,r `ヽ;;:;;;;;;;, ;;;-  ,r `V ヽニニニ二、-{ 十 )__;;;;/
    24. 24. 集約化によって目指すもの• TCO削減• 安定性• パフォーマンス向上
    25. 25. 集約化方法 m ms s s s dbm m m dbs dbss s s s (1) 1台のサーバに複数のmysqld(2) 1つのmysqldに複数のデータベース
    26. 26. 集約化方法 (1)• Pros Cluster 1 Cluster 2 Cluster 3 Cluster 4 • レプリケーションを使いなが ら、サービスの停止なく移行 可能• Cluster Cluster Cluster Cluster Cons 1 2 3 4 • 元のサーバの性能差やデータ mysqld (3401) mysqld (3402) mysqld (3403) mysqld (3404) 量を考慮にいれたbuffer_pool サイズの調整が必要 dbm • 複数プロセスの管理
    27. 27. 集約化方法(2)• Cluster Cluster Cluster Cluster Pros 1 2 3 4 • 細かい buffer_pool の調整が必要なく、効率性も 高い • プロセスが1つなので運用の Cluster Cluster Cluster Cluster 手間は少ない 1 2 3 4• Cons mysqld • データベース名を変更するた めのメンテナンス時間が必要 dbm
    28. 28. 採用 集約化方法(2)• Cluster Cluster Cluster Cluster Pros 1 2 3 4 • 細かい buffer_pool の調整が必要なく、効率性も 高い • プロセスが1つなので運用の Cluster Cluster Cluster Cluster 手間は少ない 1 2 3 4• Cons mysqld • データベース名を変更するた めのメンテナンス時間が必要 dbm
    29. 29. 2011-09-14 未明実施8/27 10/13-15
    30. 30. 手順(前日まで)Cluster Cluster Cluster Cluster 1 2 3 4Cluster Cluster Cluster Cluster mysqld 1 2 3 4 dbmmysqld mysqld mysqld mysqld(3401) (3402) (3403) (3404) 仮db mysqld dbs
    31. 31. 手順(前日まで)Cluster Cluster Cluster Cluster 1 2 3 4 レプリケーション 構築と ALTER TABLECluster Cluster Cluster Cluster mysqld 1 2 3 4 dbmmysqld mysqld mysqld mysqld(3401) (3402) (3403) (3404) 仮db mysqld dbs
    32. 32. 手順(前日まで)Cluster Cluster Cluster Cluster 1 2 3 4 レプリケーション 構築と ALTER TABLECluster Cluster Cluster Cluster mysqld 1 2 3 4 dbmmysqld mysqld mysqld mysqld(3401) (3402) (3403) (3404) レプリケーション 仮db mysqld dbs
    33. 33. 手順(当日)Cluster Cluster Cluster Cluster 1 2 3 4Cluster Cluster Cluster Cluster mysqld 1 2 3 4 dbmmysqld mysqld mysqld mysqld(3401) (3402) (3403) (3404) 仮db mysqld dbs
    34. 34. 手順(当日)Cluster Cluster Cluster Cluster 1 2 3 4Cluster Cluster Cluster Cluster mysqld 1 2 3 4 dbmmysqld mysqld mysqld mysqld(3401) (3402) (3403) (3404) 仮db mysqld dbs
    35. 35. 手順(当日)Cluster Cluster Cluster Cluster 1 2 3 4 Cluster Cluster Cluster Cluster 1 2 3 4Cluster Cluster Cluster Cluster mysqld 1 2 3 4 dbmmysqld mysqld mysqld mysqld(3401) (3402) (3403) (3404) mysqldump cluster ¦ 仮db mysqld ssh dbm cat ¦ mysql ${n}_cluster dbs
    36. 36. 手順(後日) Cluster Cluster Cluster Cluster 1 2 3 4 mysqld dbm mysqld仮db dbs
    37. 37. 手順(後日) Cluster Cluster Cluster Cluster 1 2 3 4 mysqld dbm mysqld mysqld仮db dbs dbs
    38. 38. 集約対象160 cluster => 20+ cluster = 作業対象サーバ
    39. 39. えーマジ 手作業!?自動化必須 手作業が許されるのは 小学生までだよねー
    40. 40. 自動化• 実行時に外から情報を与える (コマンド引数などとして)
    41. 41. 自動化• 実行時に外から情報を与える (コマンド引数などとして)• 事前情報からサーバ自身でなすべきこと を知る
    42. 42. Matrix (表)#cluster id #work2dbm#from #to #id #work #dbm1 1 1 10.94.18.30 10.94.14.3051 1 2 10.94.18.31 10.94.14.3157 1 3 10.94.18.32 10.94.14.3265 1 4 10.94.18.33 10.94.14.332 2 5 10.94.18.34 10.94.14.3439 2 6 10.94.19.30 10.94.15.3077 2 7 10.94.19.31 10.94.15.3191 2 8 10.94.19.32 10.94.15.323 3 9 10.94.19.33 10.94.15.3329 3 10 10.94.19.34 10.94.15.3485 3 11 10.94.14.35 10.94.16.354 4 12 10.94.14.36 10.94.16.3652 4 13 10.94.14.37 10.94.16.3778 4 14 10.94.14.38 10.94.16.38
    43. 43. Matrixからの設定生成while(my $l=<DATA>){ my ($cluster, $node) = split /s+/, $l; push @{$nodes{$node}}, $cluster;}for my $node ( sort { $a <=> $b } keys %nodes ) { open( my $fh, >, sprintf("my_%d.cnf",$node)); print $fh $tx->render(my.cnf.tx, { clusters => $nodes{$node} });}#from #to__DATA__1 151 12 2
    44. 44. Matrixからの設定生成[mysqld]innodb_buffer_pool_size = 4Ginnodb_flush_log_at_trx_commit = 2innodb_flush_method = O_DIRECT: for $clusters -> $cluster {[mysqld<: $~cluster.count :>]server-id = <: $cluster + 10000 :>datadir = /var/lib/mysql_<: $cluster + 13000 :>socket = /tmp/mysql_<: $cluster + 13000 :>.sockpid-file = /var/run/mysql_<: $cluster + 13000 :>.pidport = <: $cluster + 13000 :>: }
    45. 45. Matrixを利用した自動化set -eCDIR=$(cd $(dirname $0) && pwd)#id #work #dbmSRV=$(cat <<"EOF"1 10.94.18.30 10.94.14.302 10.94.18.31 10.94.14.313 ...EOF)IPADDR=$(ifconfig eth1 |grep inet| awk -F: {print $2}|awk {print $1})CID=$(echo "$SRV" | grep $IPADDR | awk {print $1})cp $CDIR/my_$CID.cnf /etc/my.cnffor datadir in $(grep datadir /etc/my.cnf|sed s/datadir=//)do /mysql_install_db --datadir=$datadirdone
    46. 46. atnodes を使った一括実行$ cpanm SSH::Batch$ atnodes ‘git clone git://./setup.git’ dbs02.[01-20].cluster============== dbs02.01.cluster =============..============== dbs02.02.cluster =============..$ atnodes -c 4 ‘sh ./setup/setup.sh’ dbs02.[01-20].cluster============== dbs02.01.cluster =============..============== dbs02.02.cluster =============..
    47. 47. 当日
    48. 48. コマンド1つ!$ atnodes -c 10 ‘sh ./setup/copy.sh’ dbs02.[01..20].cluster============== dbs02.01.cluster =============..============== dbs02.02.cluster =============..
    49. 49. 無事に朝を迎える
    50. 50. 後作業
    51. 51. Recreate Slave Cluster Cluster Cluster Cluster 1 2 3 4データ mysqld 複製 dbm mysqld dbs01
    52. 52. Recreate Slave Cluster Cluster Cluster Cluster 1 2 3 4データ mysqld 複製 dbm mysqld mysqld dbs02 dbs01
    53. 53. $ mysqldump --single-transaction --master-data
    54. 54. $ mysqldump --single-transaction --master-data MySQL 4.0.x の場合
    55. 55. mysqldump (4.0.x) “$ mysqldump --master-data” blocks update query MySQL 5.1.x MySQL 4.0.xFLUSH LOCAL TABLES FLUSH TABLES WITH READ LOCKFLUSH TABLES WITH READ LOCK BEGINSET SESSION TRANSACTION ISOLATION DB選択LEVEL REPEATABLE READ テーブルからデータの読み込みSTART TRANSACTION WITH CONSISTENT SNAPSHOT COMMIT;SHOW MASTER STATUS SHOW MASTER STATUSUNLOCK TABLES UNLOCK TABLES;DB選択テーブルからデータの読み込み
    56. 56. mysql40dump
    57. 57. MySQL mysql40dump FLUSH TABLES WITH READ LOCK SHOW MASTER/SLAVE STATUS pipe my $rh, my $wh; mysqldump fork open STDOUT, >&, $wh exec(mysqldump --single-transaction) BEGIN while(<$rh>) { print } pipe UNLOCK TABLES m!^CREATE TABLE! データ読み込み COMMIT wait($child) exit print “CHANGE MASTER”
    58. 58. mysql40dump$dbh->do(FLUSH TABLES WITH READ LOCK);$dbh->select(SHOW MASTER STATUS);pipe my $logrh, my $logwh;my $pid = forkif ( $pid == 0 ) { #子プロセス open STDOUT, >&, $logwh; exec("mysqldump","--single-transaction","--databases","...");}while(<$logrh>){ print; if ( m!^CREATE DATABASE!) { $dbh->do(UNLOCK TABLE); }}
    59. 59. mysql40dump$ mysql40dump --master --repl-- [2012-09-25T09:00:01] Done "FLUSH TABLES WITH READ LOCK"-- [2012-09-25T09:00:01] [FROM MASTER STATUS] * CHANGE MASTER TOMASTER_HOST=10.9.41.3, MASTER_USER=repl, MASTER_PASSWORD=xxx,MASTER_LOG_FILE=mysql-bin.176, MASTER_LOG_POS=789372555;-- [2012-09-25T09:00:01] [FROM SLAVE STATUS] CHANGE MASTER TOMASTER_HOST=10.9.41.4, MASTER_USER=repl, MASTER_PASSWORD=xxx,MASTER_LOG_FILE=mysql-bin.178, MASTER_LOG_POS=103928719;-- [2012-09-25T09:00:01] [START] mysqldump --quick --add-locks --extended-insert --single-transaction --databases tbl1 tbl2 tbl3set FOREIGN_KEY_CHECKS=0; -- for mysql4.0-- MySQL dump 9.11...DUMP DATA...CHANGE MASTER TO MASTER_HOST=10.9.41.3, MASTER_USER=repl,MASTER_PASSWORD=xxx, MASTER_LOG_FILE=mysql-bin.176,MASTER_LOG_POS=789372555;START SLAVE;
    60. 60. mysql40dumpの利用例 • slave作成# masterからslave$ mysql40dump --master --repl | ssh slave ‘cat | mysql’# slave から slave$ mysql40dump --slave --repl | ssh slave2 ‘cat | mysql’ • 定期的なバックアップ実行mysql40dump --master | gzip > /backup/mysql-$(date +%Y%m%d%H%M).sql.gz
    61. 61. 監視(後処理2)
    62. 62. システム監視• データホテルの独自システム(DHW)• Nagios
    63. 63. Nagios MySQL監視• 死活監視• レプリケーション遅延
    64. 64. Nagios MySQL監視• 死活監視• レプリケーション遅延• uptime
    65. 65. Uptime監視 OK∼ OK∼ OK∼ Nagios Nagios Nagios 5min 5min tDOWN UP MySQL 4.0.xの再起動は速い
    66. 66. Uptime監視 > 5min < 5min > 5min OK∼ NG!!1 OK∼ Nagios Nagios Nagiosshow status like show status like show status like Uptime Uptime Uptime 5min 5min tDOWN UP
    67. 67. 監視としてのスパム対策 (後処理3)
    68. 68. スパムブログ(splog)によるシステムへの影響• レプリケーションの遅延• buffer_pool の効率性ダウン• パフォーマンス悪化 集約化によって影響範囲拡大
    69. 69. Splogの痕跡
    70. 70. Splogの痕跡
    71. 71. Splogの痕跡 大量の 記事投稿?
    72. 72. Splogの痕跡 バイナリログの調査% mysqlbinlog --start-datetime ‘2012-09-21 22:50’ --end-datetime ‘2012-09-21 23:00’ mysql-bin.941 | perl -ewhile(<>){ chomp; next if m!^#!; if ( m{/*!*/;$} ) { $p .=$_; print "$pn"; $p="" } else { $p .= $_." "} }|perl -nlem!^(DELETE FROM|REPLACE INTO|INSERT INTO|UPDATE)s+([^ ]+)!i&& print "$1 $2" | sort | uniq -c | sort -nr | head43 INSERT INTO entry 33 UPDATE entry 19 INSERT INTO tag2entry 18 UPDATE tag 17 INSERT INTO category
    73. 73. Splogの痕跡MySQL バイナリログの調査 5.0∼% mysqlbinlog --start-datetime ‘2012-09-21 22:50’ --end-datetime ‘2012-09-21 23:00’ mysql-bin.941 | perl -ewhile(<>){ chomp; next if m!^#!; if ( m{/*!*/;$} ) { $p .=$_; print "$pn"; $p="" } else { $p .= $_." "} }|perl -nlem!^(DELETE FROM|REPLACE INTO|INSERT INTO|UPDATE)s+([^ ]+)!i&& print "$1 $2" | sort | uniq -c | sort -nr | head43 INSERT INTO entry 33 UPDATE entry 19 INSERT INTO tag2entry 18 UPDATE tag 17 INSERT INTO category
    74. 74. 対Splog• アプリケーションエンジニアによる ツールでの監視• サポート・パトロールチームの目視に よる監視• オペレーションエンジニアによる システム監視 => スパム対策と共に安定稼働を実現
    75. 75. 今後のこと
    76. 76. MySQL 5.x?
    77. 77. さらなる集約化20+ clusters=> N servers
    78. 78. HDD/SSD Performance Test HDD-RAID10 SSD-RAID1 Intel SSD 910 某Flush Device50,000 43,11737,50025,000 14,15312,500 9,440 751 0 4並列 2GB Random Read
    79. 79. ソーシャルメディアのデータベースにおけるストレージデバイスの 選択基準バイト単価 > IOPS *個人的見解です
    80. 80. Open & Share
    81. 81. mysql40dump
    82. 82. github.com/kazeburo/mysql40dump
    83. 83. my.cnf
    84. 84. github.com/kazeburo/mysetup
    85. 85. おわり
    1. A particular slide catching your eye?

      Clipping is a handy way to collect important slides you want to go back to later.

    ×