Your SlideShare is downloading. ×
0
【JAWS DAYS 2014】ランサーズを支えるRDS
【JAWS DAYS 2014】ランサーズを支えるRDS
【JAWS DAYS 2014】ランサーズを支えるRDS
【JAWS DAYS 2014】ランサーズを支えるRDS
【JAWS DAYS 2014】ランサーズを支えるRDS
【JAWS DAYS 2014】ランサーズを支えるRDS
【JAWS DAYS 2014】ランサーズを支えるRDS
【JAWS DAYS 2014】ランサーズを支えるRDS
【JAWS DAYS 2014】ランサーズを支えるRDS
【JAWS DAYS 2014】ランサーズを支えるRDS
【JAWS DAYS 2014】ランサーズを支えるRDS
【JAWS DAYS 2014】ランサーズを支えるRDS
【JAWS DAYS 2014】ランサーズを支えるRDS
【JAWS DAYS 2014】ランサーズを支えるRDS
【JAWS DAYS 2014】ランサーズを支えるRDS
【JAWS DAYS 2014】ランサーズを支えるRDS
【JAWS DAYS 2014】ランサーズを支えるRDS
【JAWS DAYS 2014】ランサーズを支えるRDS
【JAWS DAYS 2014】ランサーズを支えるRDS
【JAWS DAYS 2014】ランサーズを支えるRDS
【JAWS DAYS 2014】ランサーズを支えるRDS
【JAWS DAYS 2014】ランサーズを支えるRDS
【JAWS DAYS 2014】ランサーズを支えるRDS
【JAWS DAYS 2014】ランサーズを支えるRDS
【JAWS DAYS 2014】ランサーズを支えるRDS
【JAWS DAYS 2014】ランサーズを支えるRDS
【JAWS DAYS 2014】ランサーズを支えるRDS
【JAWS DAYS 2014】ランサーズを支えるRDS
【JAWS DAYS 2014】ランサーズを支えるRDS
【JAWS DAYS 2014】ランサーズを支えるRDS
【JAWS DAYS 2014】ランサーズを支えるRDS
【JAWS DAYS 2014】ランサーズを支えるRDS
【JAWS DAYS 2014】ランサーズを支えるRDS
【JAWS DAYS 2014】ランサーズを支えるRDS
【JAWS DAYS 2014】ランサーズを支えるRDS
【JAWS DAYS 2014】ランサーズを支えるRDS
【JAWS DAYS 2014】ランサーズを支えるRDS
【JAWS DAYS 2014】ランサーズを支えるRDS
【JAWS DAYS 2014】ランサーズを支えるRDS
【JAWS DAYS 2014】ランサーズを支えるRDS
【JAWS DAYS 2014】ランサーズを支えるRDS
【JAWS DAYS 2014】ランサーズを支えるRDS
【JAWS DAYS 2014】ランサーズを支えるRDS
【JAWS DAYS 2014】ランサーズを支えるRDS
【JAWS DAYS 2014】ランサーズを支えるRDS
【JAWS DAYS 2014】ランサーズを支えるRDS
【JAWS DAYS 2014】ランサーズを支えるRDS
【JAWS DAYS 2014】ランサーズを支えるRDS
【JAWS DAYS 2014】ランサーズを支えるRDS
【JAWS DAYS 2014】ランサーズを支えるRDS
【JAWS DAYS 2014】ランサーズを支えるRDS
【JAWS DAYS 2014】ランサーズを支えるRDS
【JAWS DAYS 2014】ランサーズを支えるRDS
【JAWS DAYS 2014】ランサーズを支えるRDS
【JAWS DAYS 2014】ランサーズを支えるRDS
【JAWS DAYS 2014】ランサーズを支えるRDS
【JAWS DAYS 2014】ランサーズを支えるRDS
【JAWS DAYS 2014】ランサーズを支えるRDS
【JAWS DAYS 2014】ランサーズを支えるRDS
【JAWS DAYS 2014】ランサーズを支えるRDS
【JAWS DAYS 2014】ランサーズを支えるRDS
【JAWS DAYS 2014】ランサーズを支えるRDS
【JAWS DAYS 2014】ランサーズを支えるRDS
【JAWS DAYS 2014】ランサーズを支えるRDS
【JAWS DAYS 2014】ランサーズを支えるRDS
【JAWS DAYS 2014】ランサーズを支えるRDS
【JAWS DAYS 2014】ランサーズを支えるRDS
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

【JAWS DAYS 2014】ランサーズを支えるRDS

2,083

Published on

JAWS DAYS 2014で発表させて頂きました、ランサーズのRDS移行に関する資料です。

JAWS DAYS 2014で発表させて頂きました、ランサーズのRDS移行に関する資料です。

Published in: Engineering
0 Comments
9 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
2,083
On Slideshare
0
From Embeds
0
Number of Embeds
5
Actions
Shares
0
Downloads
17
Comments
0
Likes
9
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. 「クラウドソーシングLancers」 を支えるRDS for MySQL http://www.lancers.jp/ 「時間と場所に囚われない新しい働き方の創出」 [2014/03/15 JAWS DAYS 2014] ランサーズ株式会社 インフラエンジニア 金澤 裕毅 [Kanazawa Yuki]
  • 2. © 2014 for LANCERS, inc All Rights Reserved 自己紹介(基本情報) 氏名 金澤 裕毅 世代 1976年生まれ 出身 宮城県仙台市 ・大学時代はネットワークを専攻 ・第一期(2002年~2010年) ・ Windowsパッケージ開発 ・ ASP開発、インフラ担当 ・札幌に2年間転勤 ・第二期(2010年~2013年11月) ・不動産ポータル、地域SNS ・第三期(2013年11月~現在) ・ランサーズのインフラ担当 略歴 1
  • 3. © 2014 for LANCERS, inc All Rights Reserved 自己紹介(基本情報) CloudWatch ・ロードアベレージ ・HDD使用状況 ・メモリ使用状況 ・月額利用料金 ・2週間以上の値 も見れると嬉しい… 好きなAWSのサービス 2
  • 4. © 2014 for LANCERS, inc All Rights Reserved ランサーズ社内における役割 3 CTO ディレクター デザイナー エンジニア ココ インフラ 【社外インフラ】  AWS  チューニング全般 【社内インフラ】  ルーター設定  開発環境の支援  PC設定
  • 5. © 2014 for LANCERS, inc All Rights Reserved 本日お話しさせていただく内容 4 ①ランサーズ(株)のご紹介 ②AWS移行の背景 ③RDS→EC2→RDSに移行した経緯 ④RDSのメリット・デメリット ⑤RDS移行のポイント ⑥ランサーズのRDS運用
  • 6. © 2014 for LANCERS, inc All Rights Reserved 5 ①ランサーズ(株)のご紹介 ②AWS移行の背景 ③RDS→EC2→RDSに移行した経緯 ④RDSのメリット・デメリット ⑤RDS移行のポイント ⑥今後の取組み
  • 7. © 2014 for LANCERS, inc All Rights Reserved 会社紹介(概要) 6 ランサーズ株式会社 設立 事業内容 ビジョン 2008年4月1日 クラウドソーシングサービス「Lancers」の運営 「時間と場所に囚われない新しい働き方の創出」 2013年6月 鎌倉→渋谷に移転しました
  • 8. © 2014 for LANCERS, inc All Rights Reserved クラウドソーシングとは? • 米国で2000年頃に誕生したインターネットサービスの一つ • 仕事を頼みたい人や企業と、自分のスキルや労働力を売りたい人を ネット上でマッチングすること 満員電車にサヨナラする方法 ~時間と場所にとらわれない新しい働き方~ 秋好 陽介(著) Cloud(雲)ではなく Crowd(群衆) 7
  • 9. © 2014 for LANCERS, inc All Rights Reserved サービス紹介「Lancers」 8 日本初+国内最大級の オンライン完結型アウトソーシングサービス 依頼数 約28万件 依頼総額 約220億円 会員数 約26万人 依頼案件の例 • ロゴ、イラスト • Webシステム、スマホ • データ入力、記事作成
  • 10. © 2014 for LANCERS, inc All Rights Reserved 依頼可能な仕事カテゴリは「74」 9
  • 11. © 2014 for LANCERS, inc All Rights Reserved 仕事タイプに合わせて選べる3つの依頼方式 10 歯科医院のロゴマーク作成 提案:32件 納期:7日間 発注額:5万円 特定地域不動産データ収集 1作業:5円 件数:1,400件 納期:10日 映画データの情報収集 1作業:25円 件数:100件 納期:3日 FLASHのゲーム制作 提案:9件 納期:3か月 発注額:100-500万円 美容室ホームページの制作 提案:8件 納期:1か月 発注額:10-50万円 Webサービスのネーミング 提案:305件 納期:7日間 発注額:2万円 【コンペ方式】 【プロジェクト方式】 【タスク方式】 ロゴ・ネーミング・バナー等 Web制作・アプリ開発等 記事/コラム・データ収集等
  • 12. © 2014 for LANCERS, inc All Rights Reserved ランサーズの会員詳細 11 毎月報酬を得ている 2,000人 生活できる報酬を得ている 200人
  • 13. © 2014 for LANCERS, inc All Rights Reserved ランサーズが実現する世界 12 2016年に1万人がランサーズだけで 生活できるレベルの報酬を獲得する
  • 14. © 2014 for LANCERS, inc All Rights Reserved ランサーズ依頼件数の推移 13 年間300%成長中! 2012201120102009 2013 2012年5月 AWSに移行 2013年11月 金澤JOIN
  • 15. © 2014 for LANCERS, inc All Rights Reserved ランサーズを支える技術 14 Web DB Monitor RDS S3EC2 CloudWatch App
  • 16. © 2014 for LANCERS, inc All Rights Reserved 開発環境 15 subversion ■ バージョン管理、コーディングチェック ■リリース 移行中 FablicでApp全台に一括適用 (Python製の一括デプロイツール) デプロイ後にAPIでリリース 情報を自動通知
  • 17. © 2014 for LANCERS, inc All Rights Reserved 16 ②AWS移行の背景 ③RDS→EC2→RDSに移行した経緯 ④RDSのメリット・デメリット ⑤RDS移行のポイント ⑥今後の取組み ①ランサーズ(株)のご紹介
  • 18. © 2014 for LANCERS, inc All Rights Reserved なぜAWSに移行しようと思ったのか 17  HDD圧迫(大容量プランにするか???)  Appサーバメモリ逼迫(4GBだったため、不足。。。)  スケールしない(AP2台 DB2台の構成 DNSラウンドロビンだった) ⇒契約したプラン上、1台だけ増やす、HDD増量が出来ない 移行を考え出した「きっかけ」  2012年からサービス拡大期へ  TV紹介も狙い出す AWS移行前の「問題例」 どれぐらいアクセス が増えるのか? TV効果は一時的?
  • 19. © 2014 for LANCERS, inc All Rights Reserved AWSに決定するまで 18 どのクラウドサービスにするか 判 断 ポ イ ン ト 1 現行レンタルサーバでいくか?クラウドにするか? 費用とスペックなら「sakura」  スケーラブル、運用コストを下げるなら「AWS」 ⇒sakuraは、アクセス急増に対応できない、初期導入コストあり、 時間もかかる(用意してもらう時間、設定する時間) ⇒『成長するサービスならAWSだ!』 判 断 ポ イ ン ト 2  sakuraクラウドを選ぶ際のメリデメ(例)  niftyクラウドを選ばなかった理由 ・・・単純に高く、価格面で折り合わなかった [メリット] ホスティングサービスが従量課金のように使用可能、IO高性能、安価 [デメリット] サービス種類、管理ツール、ウェブでの情報 sakura AWS vs sakura クラウド nifty クラウド vs
  • 20. © 2014 for LANCERS, inc All Rights Reserved CentOSの入手 19 開発環境と同じ CentOSを使いたい 当初、自作しようと 試みるがハマッて しまった・・ 時間がないため、 既に構築済みの物を選択 Cloudpackさん提供のAMI
  • 21. © 2014 for LANCERS, inc All Rights Reserved ファイルデータの移行 20 500GBほどあった画像などのファイルデータをS3へ移動 ① PHP の SDK を使ったアップロードバッチスクリプトを作成 ② 社内のESXiをインスタンスフル稼働させて叩きまくる ③ 何10時間もかけて移動 ESXi VM VM VM バックアップ DB バッチ処理 バッチ処理 バッチ処理
  • 22. © 2014 for LANCERS, inc All Rights Reserved AWS移行前後のシステム構成 S3 Bucket Elastic Load Balancer EC2 WebServer Elastic Load Balancer EC2 DB Slave EC2 DB Slave EC2 DB Master ap-northeast-1a 移行後 App App 移行前 DB Master DB Slave Internet Internet Data Center DNSラウンド ロビン
  • 23. © 2014 for LANCERS, inc All Rights Reserved 22 ④RDSのメリット・デメリット ⑤RDS移行のポイント ⑥今後の取組み ①ランサーズ(株)のご紹介 ③RDS→EC2に移行した経緯 ②AWS移行の背景
  • 24. © 2014 for LANCERS, inc All Rights Reserved AWS移行直後(2012年5月)のRDS問題 23 困った点① ログが見れない!! (スローログ、クエリログはテーブル出力) (バイナリログ参照不可) デフォルトタイムゾーンがUTCで変更できない!! ※コネクションを張るたびに +9 時間する必要 困った点② MyIsamのスナップショットは未サポート →MyIsamのFullTextインデックスを利用していた 困った点③
  • 25. © 2014 for LANCERS, inc All Rights Reserved AWS移行直後(2012年5月)のRDS問題 24 移行リリース直後、アクセス増加に連れて負荷が高まっていた ⇒原因調査の結果、どうやらDBかもしれないとの仮説 しかし RDS で細かいデータが見れず詳細調査が出来ない (=vmstat, sysstat, top 等 が利用不可) ⇒EC2 への移行を決断 移行したが・・・結果、EC2でも重いまま ⇒さらに調査すると、I/Oがボトルネックになっていることが発覚 ログを解析し、チューニング 移行前のレンタルサーバでは 高性能なHDDが使われていたため、 問題が発覚しなかった ⇒その後、2013年11月までEC2でMySQLを運用
  • 26. © 2014 for LANCERS, inc All Rights Reserved 25 ④RDSのメリット・デメリット ⑤RDS移行のポイント ⑥今後の取組み ①ランサーズ(株)のご紹介 ③RDS→EC2→RDSに移行した経緯 ②AWS移行の背景
  • 27. © 2014 for LANCERS, inc All Rights Reserved EC2のMySQL運用で困ったこと 26 • EC2の障害でリブート • 20台あって3,4ヶ月に1度くらい • DB Masterにリブートがかかり、MyIsamのFullTextIndexが壊れる • そしてスレーブ停止 • 半年で4回 +----+---------+------------------------+-------------------------------------------------------------------- | id | user_id | user | userprofile +----+---------+------------------------+-------------------------------------------------------------------- | 1 | 1 | la an nc ce er rs s | 仕事 事マ マー ーケ ケッ ット トプ プレ レイ イス ス「 「l la an nc | 2 | 2 | yo os su uk ke e | はじ じめ めま まし して て、 、y yo os su uk ke eと と申 申し しま | 3 | 3 | re ee et t | イン ンタ ター ーネ ネッ ット トサ サー ービ ビス スを を企 企画 画 +----+---------+------------------------+--------------------------------------------------------------------
  • 28. © 2014 for LANCERS, inc All Rights Reserved RDSが改善されてきた… 27 • RDSの値下げ • EC2の2倍近い費用 → 差がほとんどなくなってきた • MySQL 5.6対応(2013年7月) • バイナリログの転送が可能になった • mysqlbinlogのremote serverオプション • Inno DBのFullTextIndexがサポートされた • MySQL 5.6.4から対応 • Management Consoleの充実 • Web上でほぼ全てをコントロール可能になった • パラメータの設定等 ⇒再びRDSへの移行を決断
  • 29. © 2014 for LANCERS, inc All Rights Reserved 28 ⑤RDS移行のポイント ⑥今後の取組み ①ランサーズ(株)のご紹介 ④RDSのメリット・デメリット ②AWS移行の背景 ③RDS→EC2→RDSに移行した経緯
  • 30. © 2014 for LANCERS, inc All Rights Reserved 29 RDS化前後のシステム構成 S3 Bucket Elastic Load Balancer EC2 WebServer Elastic Load Balancer EC2 DB Slave EC2 DB Slave EC2 DB Master ap-northeast-1a S3 Bucket Elastic Load Balancer EC2 WebServer ap-northeast-1a RDS Master RDS Read Replica RDS Multi AZ ap-northeast-1c RDS化前 RDS化後
  • 31. © 2014 for LANCERS, inc All Rights Reserved 30 RDS(MySQL)のメリット • Multi AZ配置 • マスタDBと異なるAZにスタンバイを用意 • 障害時に自動フェイルオーバー • 停止時間は2分~7分(計測値) S3 Bucket Elastic Load Balancer EC2 WebServer ap-northeast-1a RDS Master RDS Read Replica RDS Multi AZ ap-northeast-1c db-master.xxxxx.ap-northeast-1.rds.amazonaws.com
  • 32. © 2014 for LANCERS, inc All Rights Reserved RDS(MySQL)のメリット • リードレプリカ(参照専用スレーブ)を手軽に作成できる • メニューから選択するだけ
  • 33. © 2014 for LANCERS, inc All Rights Reserved 32 RDS(MySQL)のメリット • ポイントタイムリカバリ • 任意の時間にDBを戻すことが可能 • 35日前まで保管可能(要設定)
  • 34. © 2014 for LANCERS, inc All Rights Reserved RDS(MySQL)のメリット • ClowdWatch • EC2よりも豊富(空きメモリ、空きHDDも確認可)
  • 35. © 2014 for LANCERS, inc All Rights Reserved 34 RDS(MySQL)のメリット • スナップショット機能 • Manual Snapshot • 手動スナップショット • インスタンス削除時に取得するか訊かれる • Automated Snapshot • 毎日自動的に取得される差分スナップショット • 35日間まで取得可能 • マスターDBが消えると削除される
  • 36. © 2014 for LANCERS, inc All Rights Reserved 35 RDS(MySQL)のメリット • パフォーマンス • 適切なデフォルトパラメータ設定 • EBS ボリュームのストライプによるIOPSパフォーマンスの向上 EC2 RDS移行後 DB PHP DB PHP
  • 37. © 2014 for LANCERS, inc All Rights Reserved 36 RDS(MySQL)のデメリット • EC2に比べて若干割高 • m3.medium:$0.17/h(東京リージョン) • db.m1.medium:$0.215/h(東京リージョン) • MultiAZスタンバイ機は使えない • でも料金は2台分 S3 Bucket Elastic Load Balancer EC2 WebServer ap-northeast-1a RDS Master RDS Read Replica RDS Multi AZ ap-northeast-1c バックアップ専用 利用不可
  • 38. © 2014 for LANCERS, inc All Rights Reserved 37 RDS(MySQL)のデメリット • SSHログインできない • RDS接続用のEC2サーバーを用意しておく • mysqldumpのエクスポート結果もここに格納 MySQL Client EC2 RDS db-master.xxx.ap-northeast-1.rds.amazonaws.com $ mysql -h db-master.xxx.ap-northeast-1.rds.amazonaws.com -u mysqluser –p
  • 39. © 2014 for LANCERS, inc All Rights Reserved 38 RDS(MySQL)のデメリット • リードレプリカにELB利用不可 • 自前でロードバランシングする必要がある • ランサーズではHAProxyを利用 S3 Bucket Elastic Load Balancer EC2 WebServer ap-northeast-1a RDS Master RDS Read Replica RDS Multi AZ ap-northeast-1c S3 Bucket Elastic Load Balancer EC2 WebServer Elastic Load Balancer EC2 DB Slave EC2 DB Slave EC2 DB Master ap-northeast-1a HAProxyを インストール 実はたまに Lostする…
  • 40. © 2014 for LANCERS, inc All Rights Reserved 39 RDS(MySQL)のデメリット • Tritonn、Mroongaが使えない • 日本語全文検索ができるMySQLパッケージ • RDSを選択したら全文検索は自前で構築しましょう! • Groongaとか • Solrとか • ErasticSearchとか mysql> SELECT * FROM timetable WHERE MATCH(title) AGAINST("クラウド"); +----+-----------------------------------------------------+---------------------+ | id | title | start | +----+-----------------------------------------------------+---------------------+ | 35 | 「クラウドソーシングLancers」を支えるRDS for MySQL | 2014-03-15 17:00:00 | +----+-----------------------------------------------------+---------------------+ 1 row in set (0.00 sec)
  • 41. © 2014 for LANCERS, inc All Rights Reserved 40 RDS(MySQL)のデメリット • インスタンスをSTOPできない • 稼働したくない場合はfinal snapshotを取得して削除 • 稼働したい場合はfinal snapshotから復旧 • 10分超かかる • (EC2と比べて)スケールアップ、ダウンに時間がかかる • 10分〜50分 • バイナリログの保持期間は7日間まで • 35日間ではない • 7日間以上保持したい場合はEC2に転送しておく • 後述します
  • 42. © 2014 for LANCERS, inc All Rights Reserved 41 ④RDSのメリット・デメリット ⑥今後の取組み ①ランサーズ(株)のご紹介 ⑤RDS移行のポイント ②AWS移行の背景 ③RDS→EC2→RDSに移行した経緯
  • 43. © 2014 for LANCERS, inc All Rights Reserved 42 RDS採用時の注意点 • 1マスターにつきリードレプリカは5台まで • それ以上作成したい場合は多層構成にする • バージョン5.6以上で可能
  • 44. © 2014 for LANCERS, inc All Rights Reserved 43 RDS採用時の注意点 • RDSの日付型はデフォルトでUTC(世界標準) • コネクション時にJPN時間に設定する処理を追加しておく mysql> SELECT now +---------------------+ | 2013-11-28 06:43:58 | +---------------------+ 1 row in set (0.08 sec) mysql> SET time_zone="+9:00"; Query OK, 0 rows affected (0.05 sec) mysql> SELECT now(); +---------------------+ | now() | +---------------------+ | 2013-11-28 15:44:16 | +---------------------+ 1 row in set (0.00 sec)
  • 45. © 2014 for LANCERS, inc All Rights Reserved Multi AZにリードレプリカを配置 RDS Master RDS Read Replica App ap-northeast-1a EC2 instance ELB App EC2 instance App EC2 instance RDS Multi AZ RDS Read Replica App ap-northeast-1c EC2 instance ELB App EC2 instance App EC2 instance AZ間の通信遅延は 数ミリ〜数十ミリsec レベル • リードレプリカを複数のAZに均等に配置する • AZレベルの障害を想定
  • 46. © 2014 for LANCERS, inc All Rights Reserved RDS Multi AZ Multi AZにリードレプリカを配置 RDS MasterRDS Read Replica App ap-northeast-1a EC2 instance ELB App EC2 instance App EC2 instance RDS Read Replica App ap-northeast-1c EC2 instance ELB App EC2 instance App EC2 instance • リードレプリカを複数のAZに均等に配置する • AZレベルの障害を想定
  • 47. © 2014 for LANCERS, inc All Rights Reserved 46 スナップショット取得期間の設定 • 最大35日まで設定可能 • 1日以上に設定するとバイナリログが出力されるようになる バイナリログの 保持期間は 別途設定が必要
  • 48. © 2014 for LANCERS, inc All Rights Reserved 47 パラメーターの設定 • Parameter Groupで設定 設定できない パラメータ 空欄は デフォルト値
  • 49. © 2014 for LANCERS, inc All Rights Reserved 48 パラメーターの設定 • 設定後は必ず再起動する • 不適切な設定があると以下のエラーが表示される • 例:t1.microでquery_cache_sizeを32MB以上に設定
  • 50. © 2014 for LANCERS, inc All Rights Reserved 49 パラメーターの設定 • 設定値をSHOW VARIABLESで確認 • デフォルト値を確認しておく • 特にquery_cache_typeがONか確認しておく • ONでないとクエリキャッシュが効かない mysql> SHOW VARIABLES; +-----------------------------------------+------------------+ | Variable_name | Value | +-----------------------------------------+------------------+ | auto_increment_increment | 1 | | auto_increment_offset | 1 | | autocommit | ON | | automatic_sp_privileges | ON | | back_log | 56 | | basedir | /rdsdbbin/mysql/ | | big_tables | OFF | | bind_address | * | | binlog_cache_size | 32768 | | binlog_checksum | CRC32 | | binlog_direct_non_transactional_updates | OFF | | binlog_format | MIXED | | binlog_max_flush_queue_time | 0 | | binlog_order_commits | ON | | binlog_row_image | FULL | | binlog_rows_query_log_events | OFF | | binlog_stmt_cache_size | 32768 | | bulk_insert_buffer_size | 8388608 | | character_set_client | utf8mb4 |
  • 51. © 2014 for LANCERS, inc All Rights Reserved 50 クライアントをMySQL5.6にする • MySQL5.1→5.6に接続時の不具合 • mysqlbinlogの転送ができない(rawオプションも使えない) • mysqldumpでエクスポートができない • MySQL5.6へのバージョンアップ方法(yumでの例) • MySQL5.6→5.1に接続時も不具合がある(EC2戻しテスト時に発覚) • old_passwords=1のユーザーでimportができない • old_password=0のユーザーを作って対処 $ sudo yum remove mysql* $ sudo yum -y install http://repo.mysql.com/mysql-community-release-el6-4.noarch.rpm $ sudo yum -y install mysql-community-server $ mysqldump -h db-master.xxx.ap-northeast-1.rds.amazonaws.com -u mysqluser -p testdb > testdb.sql mysqldump: Couldn't execute 'SET OPTION SQL_QUOTE_SHOW_CREATE=1': You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'OPTION SQL_QUOTE_SHOW_CREATE=1' at line 1 $ mysqlbinlog -h db-master.xxx.ap-northeast-1.rds.amazonaws.com -u mysqluser -p --read-from-remote- server --raw mysql-bin-changelog.002375 mysqlbinlog: unknown option '--raw'
  • 52. © 2014 for LANCERS, inc All Rights Reserved 51 バイナリログの保持期間設定 • デフォルトの保持期間は5分 • expire_logs_daysパラメータは設定できない • 専用のストアドで設定する(以下は100時間の例) • 設定の確認 • 正しく設定されれば、Binary Log Disk Usageが増加し始める • 最長で7日間(168時間)までしか設定できないので注意 • それ以上設定しても効果なし mysql> call mysql.rds_show_configuration; mysql> call mysql.rds_set_configuration('binlog retention hours', 100); 増加しない場合は スナップショット取得期間が 1日以上になっているか確認
  • 53. © 2014 for LANCERS, inc All Rights Reserved 52 バイナリログの確認(5.6のみ) mysql> SHOW BINLOG EVENTS LIMIT 5; +----------------------------+-----+-------------+-----------+-------------+-------------------------------- | Log_name | Pos | Event_type | Server_id | End_log_pos | Info +----------------------------+-----+-------------+-----------+-------------+-------------------------------- | mysql-bin-changelog.002375 | 4 | Format_desc | 970914784 | 120 | Server ver: 5.6.13-log, Binlog | mysql-bin-changelog.002375 | 120 | Query | 970914784 | 201 | BEGIN | mysql-bin-changelog.002375 | 201 | Query | 970914784 | 391 | use `mysql`; INSERT INTO mysql. | mysql-bin-changelog.002375 | 391 | Xid | 970914784 | 422 | COMMIT /* xid=129138 */ | mysql-bin-changelog.002375 | 422 | Rotate | 970914784 | 479 | mysql-bin-changelog.002376;pos= +----------------------------+-----+-------------+-----------+-------------+-------------------------------- 5 rows in set (0.00 sec) 5 rows in set (0.00 sec) mysql> SHOW BINARY LOGS; +----------------------------+-----------+ | Log_name | File_size | +----------------------------+-----------+ | mysql-bin-changelog.002375 | 479 | | mysql-bin-changelog.002376 | 479 | | mysql-bin-changelog.002377 | 1351 | | mysql-bin-changelog.002378 | 143 | | mysql-bin-changelog.002379 | 825 | | mysql-bin-changelog.002380 | 177 | • EC2に転送する場合は一番古いバイナリログを確認しておく • SHOW BIN LOG EVENTSで確認可能
  • 54. © 2014 for LANCERS, inc All Rights Reserved 53 バイナリログの転送(5.6のみ) 1.mysql-bin-changelog.002375を取得 $ mysqlbinlog –u root –p -h db-master.xxx.ap-northeast-1.rds.amazonaws.com --read-from-remote-server --raw mysql-bin-changelog.002375 $ mysqlbinlog -u root -p -h db-master.xxx.ap-northeast-1.rds.amazonaws.com --read-from-remote-server --raw mysql-bin-changelog.002375 mysql-bin-changelog.002380 $ mysqlbinlog –u root -p -h db-master.xxx.ap-northeast-1.rds.amazonaws.com --read-from-remote-server --raw - -to-last-log mysql-bin-changelog.02375 $ mysqlbinlog -u root –p -h db-master.xxx.ap-northeast-1.rds.amazonaws.com --read-from-remote-server --raw - -stop-never mysql-bin-changelog.002735 • →7日間以上保持したい場合は4.でEC2にリアルタイム転送させる • マスターがreboot(failover)すると切れるのが悩み… 2.mysql-bin-changelog.002375〜002380を取得 3.mysql-bin-changelog.002375から最新まで取得 4.mysql-bin-changelog.002375から最新まで取得+最新を常時取得し続け る
  • 55. © 2014 for LANCERS, inc All Rights Reserved 54 バイナリログ転送専用ユーザーの作成 • バイナリログの転送には以下の権限が必要 • REPLICATION SLAVE • REPLICATION CLIENT mysql> GRANT REPLICATION SLAVE, REPLICATION CLIENT ON testdb.* TO getbinlog@10.0.0.1 IDENTIFIED BY 'XXXXXXXX'; ERROR 1221 (HY000): Incorrect usage of DB GRANT and GLOBAL PRIVILEGES mysql> GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO getbinlog@10.0.0.1 IDENTIFIED BY 'XXXXXXXX'; • ※必ずGLOBAL権限を付与する • データベース単位で与えると以下のエラーに加え… 全スレーブのレプリ ケーションが停止して しまうので注意!!
  • 56. © 2014 for LANCERS, inc All Rights Reserved 55 バイナリログ転送バッチの作成 #!/bin/sh MYSQL=/usr/bin/mysql MYSQLBINLOG=/usr/bin/mysqlbinlog LOGDIR=/var/log/mysql-bin-changelog HOST="db-master.xxx.ap-northeast-1.rds.amazonaws.com" USER="getbinlog" PASS="XXXXXX" echo "mysql user="$USER OLDEST_LOG=`$MYSQL -h $HOST -u $USER --password=$PASS --execute="SHOW BINARY LOGS;" | sed -n '4p' | sed -e "s/ *[0-9]*$//g"` echo "oldest binlog="$OLDEST_LOG echo "Start get binlog." cd $LOGDIR $MYSQLBINLOG -h $HOST -u $USER --password=$PASS --read-from-remote-server --raw --stop-never $OLDEST_LOG & get_mysql-bin-changelog.sh
  • 57. © 2014 for LANCERS, inc All Rights Reserved 56 バイナリログ転送起動スクリプト #!/bin/sh # # description: Get MySQL Binary Log # chkconfig: 2345 98 20 # processname: mysqlbinlog SERVICE=GetMySQLBinaryLog USER=root COMMAND=/home/mysqluser/bin/get_mysql-bin-changelog.sh start() { su -l $USER -c "$COMMAND" echo "service $SERVICE started." } stop() { PID=`pgrep -f mysqlbinlog` kill -TERM $PID echo "service $SERVICE stopped." } case $1 in start) start ;; stop) stop ;; restart) stop start ;; *) echo "Usage: $SERVICE [start|stop|restart]" ;; esac exit /etc/init.d/getmysqlbinlog
  • 58. © 2014 for LANCERS, inc All Rights Reserved 57 ⑥ランサーズのRDS運用 ②AWS移行の背景 ③RDS→EC2→RDSに移行した経緯 ④RDSのメリット・デメリット ⑤RDS移行のポイント ①ランサーズ(株)のご紹介
  • 59. © 2014 for LANCERS, inc All Rights Reserved 58 運用専用のリードレプリカ • ロードバランサ(HAProxy)に設定しないリードレプリカを用意 • 制限ユーザーアカウントで参照 S3 Bucket Elastic Load Balancer EC2 WebServer ap-northeast-1a RDS Master RDS Read Replica RDS Multi AZ ap-northeast-1c
  • 60. © 2014 for LANCERS, inc All Rights Reserved 59 スローログの取得 • スローログを取得する設定 • 何秒以上のクエリを記録するかの設定 • スローログの取得 • スローログのローテート mysql> SELECT * FROM mysql.slow_log; mysql> CALL mysql.rds_rotate_slow_log; mysql> SHOW GLOBAL VARIABLES LIKE 'slow_query_log'; +----------------+-------+ | Variable_name | Value | +----------------+-------+ | slow_query_log | ON | +----------------+-------+ 1 row in set (0.00 sec) mysql> SHOW GLOBAL VARIABLES LIKE 'long_query_time'; +-----------------+-----------+ | Variable_name | Value | +-----------------+-----------+ | long_query_time | 3.000000 | +-----------------+-----------+ 1 row in set (0.01 sec)
  • 61. © 2014 for LANCERS, inc All Rights Reserved 60 スローログの取得 • Management Consoleからも取得可能
  • 62. © 2014 for LANCERS, inc All Rights Reserved 61 Visual Explain • MySQL5.6の新機能 • MySQL WorkBenchで利用可能 アカウント名が日本語だと 動作しないので注意!
  • 63. © 2014 for LANCERS, inc All Rights Reserved 62 SSH TunnelingでRDS接続 EC2 RDS ・MySQL WorkBench ・接続先:localhost ・接続ポート:8025(任意に 設定) ・Poderosa、putty等のPortforwardingツー ル ・転送元ホスト:localhost ・転送元ポート:8025(任意に設定) ・転送先ホスト:RDSのエンドポイン ト ・転送元ポート:3306(MySQLのポー ト) EC2 RDS 社内サーバー • Portforwardingツールを使う場合(接続中は常に起動) • SSH Tunnelingサーバーを立てる場合 ・MySQL WorkBench ・接続先:社内サーバー ・接続ポート:8025(任意に 設定) $ ssh -N -f -p 22 -i /home/mysqluser/.ssh/ec2.id_rsa ec2-user@EC2のIPアドレス -g -L 8025:db-slave.xxx.ap-northeast-1.rds.amazonaws.com:3306
  • 64. © 2014 for LANCERS, inc All Rights Reserved 63 SSH Tunnelingの起動スクリプト #!/bin/sh # # Startup script for the SSH-Tunnel # # chkconfig: 345 56 26 # How to regist # # chmod +x /etc/init.d/ssh-tunnel # # chkconfig --level 345 --add ssh-tunnel # # /etc/init.d/ssh-tunnel start DESC=ssh-tunnel DAEMON=/usr/bin/ssh NAME=ssh # LOCAL Setting LOCAL_PORT=8025 # INTER Setting INTER_SERVER=ec2のIPアドレス INTER_PORT=22 INTER_USER=ec2_user INTER_KEY=/home/mysqluser/.ssh/ec2.id_rsa # REMOTE Setting REMOTE_SERVER=db-slave.xxx.ap-northeast-1.rds.amazonaws.com REMOTE_PORT=3306 case "$1" in start) echo -n "Starting $DESC: " $DAEMON -N -f -4 -L ${LOCAL_PORT}:${REMOTE_SERVER}:${REMOTE_PORT} ${INTER_USER}@${INTER_SERVER} -p ${INTER_PORT} -i ${INTER_KEY} -g -o ServerAliveInterval=15 > /var/log/ssh-tunnel.log 2>&1 echo "$NAME Start OK." ;; stop) echo -n "Stopping $DESC: " killall $NAME echo "$NAME Stop OK." echo "How to stop ssh-tunneling:" echo "# ps auxww | grep ssh" echo "# kill xxxx" ;; esac /etc/init.d/ssh-tunnel
  • 65. © 2014 for LANCERS, inc All Rights Reserved 64 最後に、今後やりたいこと • RDSのオートスケーリング • EC2と同様のオートスケーリング機能を実現したい • CPU利用率での判定は難しそう • Appと違い、パルス的な負荷が多い • →夜間帯、土日にリードレプリカの台数を減らす方向で検討中 • 台数変更前後にhaproxy.confの設定を変更 • fablicで複数台のAppサーバーに一括設定 EC2 App RDS
  • 66. © 2014 for LANCERS, inc All Rights Reserved エンジニア積極採用中 65 • 働き方を変えたい方 • 最新の技術が好きな方 • 世界に打って出たい方 お気軽にご連絡下さい! jinji@lancers.co.jp
  • 67. RDS最高!! ご清聴ありがとうございました [2014/03/15 JAWS DAYS 2014] ランサーズ株式会社 インフラエンジニア 金澤 裕毅 [Kanazawa Yuki] 「時間と場所に囚われない新しい働き方の創出」

×