SlideShare ist ein Scribd-Unternehmen logo
1 von 67
Downloaden Sie, um offline zu lesen
「クラウドソーシングLancers」
を支えるRDS for MySQL
http://www.lancers.jp/
「時間と場所に囚われない新しい働き方の創出」
[2014/03/15 JAWS DAYS 2014]
ランサーズ株式会社
インフラエンジニア
金澤 裕毅 [Kanazawa Yuki]
© 2014 for LANCERS, inc All Rights Reserved
自己紹介(基本情報)
氏名 金澤 裕毅
世代 1976年生まれ
出身 宮城県仙台市
・大学時代はネットワークを専攻
・第一期(2002年~2010年)
・ Windowsパッケージ開発
・ ASP開発、インフラ担当
・札幌に2年間転勤
・第二期(2010年~2013年11月)
・不動産ポータル、地域SNS
・第三期(2013年11月~現在)
・ランサーズのインフラ担当
略歴
1
© 2014 for LANCERS, inc All Rights Reserved
自己紹介(基本情報)
CloudWatch
・ロードアベレージ
・HDD使用状況
・メモリ使用状況
・月額利用料金
・2週間以上の値
も見れると嬉しい…
好きなAWSのサービス
2
© 2014 for LANCERS, inc All Rights Reserved
ランサーズ社内における役割
3
CTO
ディレクター デザイナー エンジニア
ココ
インフラ
【社外インフラ】
 AWS
 チューニング全般
【社内インフラ】
 ルーター設定
 開発環境の支援
 PC設定
© 2014 for LANCERS, inc All Rights Reserved
本日お話しさせていただく内容
4
①ランサーズ(株)のご紹介
②AWS移行の背景
③RDS→EC2→RDSに移行した経緯
④RDSのメリット・デメリット
⑤RDS移行のポイント
⑥ランサーズのRDS運用
© 2014 for LANCERS, inc All Rights Reserved 5
①ランサーズ(株)のご紹介
②AWS移行の背景
③RDS→EC2→RDSに移行した経緯
④RDSのメリット・デメリット
⑤RDS移行のポイント
⑥今後の取組み
© 2014 for LANCERS, inc All Rights Reserved
会社紹介(概要)
6
ランサーズ株式会社
設立
事業内容
ビジョン
2008年4月1日
クラウドソーシングサービス「Lancers」の運営
「時間と場所に囚われない新しい働き方の創出」
2013年6月 鎌倉→渋谷に移転しました
© 2014 for LANCERS, inc All Rights Reserved
クラウドソーシングとは?
• 米国で2000年頃に誕生したインターネットサービスの一つ
• 仕事を頼みたい人や企業と、自分のスキルや労働力を売りたい人を
ネット上でマッチングすること
満員電車にサヨナラする方法
~時間と場所にとらわれない新しい働き方~
秋好 陽介(著)
Cloud(雲)ではなく
Crowd(群衆)
7
© 2014 for LANCERS, inc All Rights Reserved
サービス紹介「Lancers」
8
日本初+国内最大級の
オンライン完結型アウトソーシングサービス
依頼数
約28万件
依頼総額
約220億円
会員数
約26万人
依頼案件の例
• ロゴ、イラスト
• Webシステム、スマホ
• データ入力、記事作成
© 2014 for LANCERS, inc All Rights Reserved
依頼可能な仕事カテゴリは「74」
9
© 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制作・アプリ開発等 記事/コラム・データ収集等
© 2014 for LANCERS, inc All Rights Reserved
ランサーズの会員詳細
11
毎月報酬を得ている
2,000人
生活できる報酬を得ている
200人
© 2014 for LANCERS, inc All Rights Reserved
ランサーズが実現する世界
12
2016年に1万人がランサーズだけで
生活できるレベルの報酬を獲得する
© 2014 for LANCERS, inc All Rights Reserved
ランサーズ依頼件数の推移
13
年間300%成長中!
2012201120102009 2013
2012年5月
AWSに移行
2013年11月
金澤JOIN
© 2014 for LANCERS, inc All Rights Reserved
ランサーズを支える技術
14
Web DB Monitor
RDS S3EC2 CloudWatch
App
© 2014 for LANCERS, inc All Rights Reserved
開発環境
15
subversion
■ バージョン管理、コーディングチェック
■リリース
移行中
FablicでApp全台に一括適用
(Python製の一括デプロイツール)
デプロイ後にAPIでリリース
情報を自動通知
© 2014 for LANCERS, inc All Rights Reserved 16
②AWS移行の背景
③RDS→EC2→RDSに移行した経緯
④RDSのメリット・デメリット
⑤RDS移行のポイント
⑥今後の取組み
①ランサーズ(株)のご紹介
© 2014 for LANCERS, inc All Rights Reserved
なぜAWSに移行しようと思ったのか
17
 HDD圧迫(大容量プランにするか???)
 Appサーバメモリ逼迫(4GBだったため、不足。。。)
 スケールしない(AP2台 DB2台の構成 DNSラウンドロビンだった)
⇒契約したプラン上、1台だけ増やす、HDD増量が出来ない
移行を考え出した「きっかけ」
 2012年からサービス拡大期へ
 TV紹介も狙い出す
AWS移行前の「問題例」
どれぐらいアクセス
が増えるのか?
TV効果は一時的?
© 2014 for LANCERS, inc All Rights Reserved
AWSに決定するまで
18
どのクラウドサービスにするか
判
断
ポ
イ
ン
ト
1
現行レンタルサーバでいくか?クラウドにするか?
費用とスペックなら「sakura」
 スケーラブル、運用コストを下げるなら「AWS」
⇒sakuraは、アクセス急増に対応できない、初期導入コストあり、
時間もかかる(用意してもらう時間、設定する時間)
⇒『成長するサービスならAWSだ!』
判
断
ポ
イ
ン
ト
2
 sakuraクラウドを選ぶ際のメリデメ(例)
 niftyクラウドを選ばなかった理由
・・・単純に高く、価格面で折り合わなかった
[メリット] ホスティングサービスが従量課金のように使用可能、IO高性能、安価
[デメリット] サービス種類、管理ツール、ウェブでの情報
sakura
AWS
vs
sakura
クラウド
nifty
クラウド
vs
© 2014 for LANCERS, inc All Rights Reserved
CentOSの入手
19
開発環境と同じ
CentOSを使いたい
当初、自作しようと
試みるがハマッて
しまった・・
時間がないため、
既に構築済みの物を選択
Cloudpackさん提供のAMI
© 2014 for LANCERS, inc All Rights Reserved
ファイルデータの移行
20
500GBほどあった画像などのファイルデータをS3へ移動
① PHP の SDK を使ったアップロードバッチスクリプトを作成
② 社内のESXiをインスタンスフル稼働させて叩きまくる
③ 何10時間もかけて移動
ESXi
VM VM VM
バックアップ
DB
バッチ処理 バッチ処理 バッチ処理
© 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ラウンド
ロビン
© 2014 for LANCERS, inc All Rights Reserved 22
④RDSのメリット・デメリット
⑤RDS移行のポイント
⑥今後の取組み
①ランサーズ(株)のご紹介
③RDS→EC2に移行した経緯
②AWS移行の背景
© 2014 for LANCERS, inc All Rights Reserved
AWS移行直後(2012年5月)のRDS問題
23
困った点①
ログが見れない!!
(スローログ、クエリログはテーブル出力)
(バイナリログ参照不可)
デフォルトタイムゾーンがUTCで変更できない!!
※コネクションを張るたびに +9 時間する必要
困った点②
MyIsamのスナップショットは未サポート
→MyIsamのFullTextインデックスを利用していた
困った点③
© 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を運用
© 2014 for LANCERS, inc All Rights Reserved 25
④RDSのメリット・デメリット
⑤RDS移行のポイント
⑥今後の取組み
①ランサーズ(株)のご紹介
③RDS→EC2→RDSに移行した経緯
②AWS移行の背景
© 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 | イン ンタ ター ーネ ネッ ット トサ サー ービ ビス スを を企 企画 画
+----+---------+------------------------+--------------------------------------------------------------------
© 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への移行を決断
© 2014 for LANCERS, inc All Rights Reserved 28
⑤RDS移行のポイント
⑥今後の取組み
①ランサーズ(株)のご紹介
④RDSのメリット・デメリット
②AWS移行の背景
③RDS→EC2→RDSに移行した経緯
© 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化後
© 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
© 2014 for LANCERS, inc All Rights Reserved
RDS(MySQL)のメリット
• リードレプリカ(参照専用スレーブ)を手軽に作成できる
• メニューから選択するだけ
© 2014 for LANCERS, inc All Rights Reserved 32
RDS(MySQL)のメリット
• ポイントタイムリカバリ
• 任意の時間にDBを戻すことが可能
• 35日前まで保管可能(要設定)
© 2014 for LANCERS, inc All Rights Reserved
RDS(MySQL)のメリット
• ClowdWatch
• EC2よりも豊富(空きメモリ、空きHDDも確認可)
© 2014 for LANCERS, inc All Rights Reserved 34
RDS(MySQL)のメリット
• スナップショット機能
• Manual Snapshot
• 手動スナップショット
• インスタンス削除時に取得するか訊かれる
• Automated Snapshot
• 毎日自動的に取得される差分スナップショット
• 35日間まで取得可能
• マスターDBが消えると削除される
© 2014 for LANCERS, inc All Rights Reserved 35
RDS(MySQL)のメリット
• パフォーマンス
• 適切なデフォルトパラメータ設定
• EBS ボリュームのストライプによるIOPSパフォーマンスの向上
EC2 RDS移行後
DB
PHP
DB
PHP
© 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
バックアップ専用
利用不可
© 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
© 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する…
© 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)
© 2014 for LANCERS, inc All Rights Reserved 40
RDS(MySQL)のデメリット
• インスタンスをSTOPできない
• 稼働したくない場合はfinal snapshotを取得して削除
• 稼働したい場合はfinal snapshotから復旧
• 10分超かかる
• (EC2と比べて)スケールアップ、ダウンに時間がかかる
• 10分~50分
• バイナリログの保持期間は7日間まで
• 35日間ではない
• 7日間以上保持したい場合はEC2に転送しておく
• 後述します
© 2014 for LANCERS, inc All Rights Reserved 41
④RDSのメリット・デメリット
⑥今後の取組み
①ランサーズ(株)のご紹介
⑤RDS移行のポイント
②AWS移行の背景
③RDS→EC2→RDSに移行した経緯
© 2014 for LANCERS, inc All Rights Reserved 42
RDS採用時の注意点
• 1マスターにつきリードレプリカは5台まで
• それ以上作成したい場合は多層構成にする
• バージョン5.6以上で可能
© 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)
© 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レベルの障害を想定
© 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レベルの障害を想定
© 2014 for LANCERS, inc All Rights Reserved 46
スナップショット取得期間の設定
• 最大35日まで設定可能
• 1日以上に設定するとバイナリログが出力されるようになる
バイナリログの
保持期間は
別途設定が必要
© 2014 for LANCERS, inc All Rights Reserved 47
パラメーターの設定
• Parameter Groupで設定
設定できない
パラメータ
空欄は
デフォルト値
© 2014 for LANCERS, inc All Rights Reserved 48
パラメーターの設定
• 設定後は必ず再起動する
• 不適切な設定があると以下のエラーが表示される
• 例:t1.microでquery_cache_sizeを32MB以上に設定
© 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 |
© 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'
© 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日以上になっているか確認
© 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で確認可能
© 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から最新まで取得+最新を常時取得し続ける
© 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権限を付与する
• データベース単位で与えると以下のエラーに加え…
全スレーブのレプリケ
ーションが停止してし
まうので注意!!
© 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
© 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
© 2014 for LANCERS, inc All Rights Reserved 57
⑥ランサーズのRDS運用
②AWS移行の背景
③RDS→EC2→RDSに移行した経緯
④RDSのメリット・デメリット
⑤RDS移行のポイント
①ランサーズ(株)のご紹介
© 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
© 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)
© 2014 for LANCERS, inc All Rights Reserved 60
スローログの取得
• Management Consoleからも取得可能
© 2014 for LANCERS, inc All Rights Reserved 61
Visual Explain
• MySQL5.6の新機能
• MySQL WorkBenchで利用可能
アカウント名が日本語だと
動作しないので注意!
© 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
© 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
© 2014 for LANCERS, inc All Rights Reserved 64
最後に、今後やりたいこと
• RDSのオートスケーリング
• EC2と同様のオートスケーリング機能を実現したい
• CPU利用率での判定は難しそう
• Appと違い、パルス的な負荷が多い
• →夜間帯、土日にリードレプリカの台数を減らす方向で検討中
• 台数変更前後にhaproxy.confの設定を変更
• fablicで複数台のAppサーバーに一括設定
EC2 App RDS
© 2014 for LANCERS, inc All Rights Reserved
エンジニア積極採用中
65
• 働き方を変えたい方
• 最新の技術が好きな方
• 世界に打って出たい方
お気軽にご連絡下さい!
jinji@lancers.co.jp
RDS最高!!
ご清聴ありがとうございました
[2014/03/15 JAWS DAYS 2014]
ランサーズ株式会社
インフラエンジニア
金澤 裕毅 [Kanazawa Yuki]
「時間と場所に囚われない新しい働き方の創出」

Weitere ähnliche Inhalte

Was ist angesagt?

[Aurora事例祭り]AWS Database Migration Service と Schema Conversion Tool の使いドコロ
[Aurora事例祭り]AWS Database Migration Service と Schema Conversion Tool の使いドコロ[Aurora事例祭り]AWS Database Migration Service と Schema Conversion Tool の使いドコロ
[Aurora事例祭り]AWS Database Migration Service と Schema Conversion Tool の使いドコロAmazon Web Services Japan
 
はじめてのAmazon RDS for PostgreSQL
はじめてのAmazon RDS for PostgreSQLはじめてのAmazon RDS for PostgreSQL
はじめてのAmazon RDS for PostgreSQLJunpei Nakada
 
NoSQL on AWSで作る最新ソーシャルゲームアーキテクチャ
NoSQL on AWSで作る最新ソーシャルゲームアーキテクチャNoSQL on AWSで作る最新ソーシャルゲームアーキテクチャ
NoSQL on AWSで作る最新ソーシャルゲームアーキテクチャYasuhiro Matsuo
 
Amazon Aurora Deep Dive (re:Invent 2015 DAT405 日本語翻訳版)
Amazon Aurora Deep Dive (re:Invent 2015 DAT405 日本語翻訳版)Amazon Aurora Deep Dive (re:Invent 2015 DAT405 日本語翻訳版)
Amazon Aurora Deep Dive (re:Invent 2015 DAT405 日本語翻訳版)Amazon Web Services Japan
 
AWS Database Migration Serviceの紹介
AWS Database Migration Serviceの紹介AWS Database Migration Serviceの紹介
AWS Database Migration Serviceの紹介Kunio Kawahara
 
AWS初心者向けWebinar RDBのAWSへの移行方法(Oracleを例に)
AWS初心者向けWebinar RDBのAWSへの移行方法(Oracleを例に)AWS初心者向けWebinar RDBのAWSへの移行方法(Oracleを例に)
AWS初心者向けWebinar RDBのAWSへの移行方法(Oracleを例に)Amazon Web Services Japan
 
ついに解禁!Amazon Aurora徹底検証!
ついに解禁!Amazon Aurora徹底検証!ついに解禁!Amazon Aurora徹底検証!
ついに解禁!Amazon Aurora徹底検証!Terui Masashi
 
日本のお客様におけるAmazon Auroraへの移行・検証事例と技術ポイント
日本のお客様におけるAmazon Auroraへの移行・検証事例と技術ポイント日本のお客様におけるAmazon Auroraへの移行・検証事例と技術ポイント
日本のお客様におけるAmazon Auroraへの移行・検証事例と技術ポイントAmazon Web Services Japan
 
AWSのデータベースサービス全体像
AWSのデータベースサービス全体像AWSのデータベースサービス全体像
AWSのデータベースサービス全体像Amazon Web Services Japan
 
20140315 jawsdays i2 instance io performance
20140315 jawsdays i2 instance io performance20140315 jawsdays i2 instance io performance
20140315 jawsdays i2 instance io performanceMatsumoto Hiroki
 
オンプレからAuroraへの移行とその効果
オンプレからAuroraへの移行とその効果オンプレからAuroraへの移行とその効果
オンプレからAuroraへの移行とその効果Masato Kataoka
 
MongoDB on AWSクラウドという選択
MongoDB on AWSクラウドという選択MongoDB on AWSクラウドという選択
MongoDB on AWSクラウドという選択Yasuhiro Matsuo
 
Oracle racからaurora my sqlへの移行
Oracle racからaurora my sqlへの移行Oracle racからaurora my sqlへの移行
Oracle racからaurora my sqlへの移行recotech
 
AWS上で使えるストレージ十番勝負
AWS上で使えるストレージ十番勝負AWS上で使えるストレージ十番勝負
AWS上で使えるストレージ十番勝負Akio Katayama
 
RDBからの脱却: 新ERP"HUE"におけるCassandra
RDBからの脱却: 新ERP"HUE"におけるCassandraRDBからの脱却: 新ERP"HUE"におけるCassandra
RDBからの脱却: 新ERP"HUE"におけるCassandra2t3
 

Was ist angesagt? (20)

[Aurora事例祭り]AWS Database Migration Service と Schema Conversion Tool の使いドコロ
[Aurora事例祭り]AWS Database Migration Service と Schema Conversion Tool の使いドコロ[Aurora事例祭り]AWS Database Migration Service と Schema Conversion Tool の使いドコロ
[Aurora事例祭り]AWS Database Migration Service と Schema Conversion Tool の使いドコロ
 
はじめてのAmazon RDS for PostgreSQL
はじめてのAmazon RDS for PostgreSQLはじめてのAmazon RDS for PostgreSQL
はじめてのAmazon RDS for PostgreSQL
 
AWS Black Belt Techシリーズ Amazon EBS
AWS Black Belt Techシリーズ  Amazon EBSAWS Black Belt Techシリーズ  Amazon EBS
AWS Black Belt Techシリーズ Amazon EBS
 
NoSQL on AWSで作る最新ソーシャルゲームアーキテクチャ
NoSQL on AWSで作る最新ソーシャルゲームアーキテクチャNoSQL on AWSで作る最新ソーシャルゲームアーキテクチャ
NoSQL on AWSで作る最新ソーシャルゲームアーキテクチャ
 
Amazon Aurora Deep Dive (re:Invent 2015 DAT405 日本語翻訳版)
Amazon Aurora Deep Dive (re:Invent 2015 DAT405 日本語翻訳版)Amazon Aurora Deep Dive (re:Invent 2015 DAT405 日本語翻訳版)
Amazon Aurora Deep Dive (re:Invent 2015 DAT405 日本語翻訳版)
 
AWS Database Migration Serviceの紹介
AWS Database Migration Serviceの紹介AWS Database Migration Serviceの紹介
AWS Database Migration Serviceの紹介
 
AWS初心者向けWebinar RDBのAWSへの移行方法(Oracleを例に)
AWS初心者向けWebinar RDBのAWSへの移行方法(Oracleを例に)AWS初心者向けWebinar RDBのAWSへの移行方法(Oracleを例に)
AWS初心者向けWebinar RDBのAWSへの移行方法(Oracleを例に)
 
ついに解禁!Amazon Aurora徹底検証!
ついに解禁!Amazon Aurora徹底検証!ついに解禁!Amazon Aurora徹底検証!
ついに解禁!Amazon Aurora徹底検証!
 
日本のお客様におけるAmazon Auroraへの移行・検証事例と技術ポイント
日本のお客様におけるAmazon Auroraへの移行・検証事例と技術ポイント日本のお客様におけるAmazon Auroraへの移行・検証事例と技術ポイント
日本のお客様におけるAmazon Auroraへの移行・検証事例と技術ポイント
 
AWSのデータベースサービス全体像
AWSのデータベースサービス全体像AWSのデータベースサービス全体像
AWSのデータベースサービス全体像
 
Aurora
AuroraAurora
Aurora
 
20140315 jawsdays i2 instance io performance
20140315 jawsdays i2 instance io performance20140315 jawsdays i2 instance io performance
20140315 jawsdays i2 instance io performance
 
オンプレからAuroraへの移行とその効果
オンプレからAuroraへの移行とその効果オンプレからAuroraへの移行とその効果
オンプレからAuroraへの移行とその効果
 
MongoDB on AWSクラウドという選択
MongoDB on AWSクラウドという選択MongoDB on AWSクラウドという選択
MongoDB on AWSクラウドという選択
 
Rds徹底入門
Rds徹底入門Rds徹底入門
Rds徹底入門
 
Redshift勉強会
Redshift勉強会Redshift勉強会
Redshift勉強会
 
Oracle racからaurora my sqlへの移行
Oracle racからaurora my sqlへの移行Oracle racからaurora my sqlへの移行
Oracle racからaurora my sqlへの移行
 
AWS上で使えるストレージ十番勝負
AWS上で使えるストレージ十番勝負AWS上で使えるストレージ十番勝負
AWS上で使えるストレージ十番勝負
 
RDBからの脱却: 新ERP"HUE"におけるCassandra
RDBからの脱却: 新ERP"HUE"におけるCassandraRDBからの脱却: 新ERP"HUE"におけるCassandra
RDBからの脱却: 新ERP"HUE"におけるCassandra
 
AWS Black Belt Techシリーズ Amazon EMR
AWS Black Belt Techシリーズ  Amazon EMRAWS Black Belt Techシリーズ  Amazon EMR
AWS Black Belt Techシリーズ Amazon EMR
 

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

【JAWS DAYS 2013】ランサーズを支えるAWS
【JAWS DAYS 2013】ランサーズを支えるAWS【JAWS DAYS 2013】ランサーズを支えるAWS
【JAWS DAYS 2013】ランサーズを支えるAWSKei Kinoshita
 
PowerDNSのご紹介
PowerDNSのご紹介PowerDNSのご紹介
PowerDNSのご紹介Akira Matsuda
 
スマートフォン×Cassandraによるハイパフォーマンス基盤の構築事例
スマートフォン×Cassandraによるハイパフォーマンス基盤の構築事例スマートフォン×Cassandraによるハイパフォーマンス基盤の構築事例
スマートフォン×Cassandraによるハイパフォーマンス基盤の構築事例terurou
 
20210127 AWS Black Belt Online Seminar Amazon Redshift 運用管理
20210127 AWS Black Belt Online Seminar Amazon Redshift 運用管理20210127 AWS Black Belt Online Seminar Amazon Redshift 運用管理
20210127 AWS Black Belt Online Seminar Amazon Redshift 運用管理Amazon Web Services Japan
 
LambdaとMobileの美味しいかもしれない関係
LambdaとMobileの美味しいかもしれない関係LambdaとMobileの美味しいかもしれない関係
LambdaとMobileの美味しいかもしれない関係Hiraku Komuro
 
既存システムへの新技術活用法 ~fluntd/MongoDB~
既存システムへの新技術活用法 ~fluntd/MongoDB~既存システムへの新技術活用法 ~fluntd/MongoDB~
既存システムへの新技術活用法 ~fluntd/MongoDB~じゅん なかざ
 
Lampで作るソーシャルアプリの負荷対策~アプリとインフラの調和のテクニック~
Lampで作るソーシャルアプリの負荷対策~アプリとインフラの調和のテクニック~Lampで作るソーシャルアプリの負荷対策~アプリとインフラの調和のテクニック~
Lampで作るソーシャルアプリの負荷対策~アプリとインフラの調和のテクニック~KLab株式会社
 
Yahoo! JAPANのOracle構成-2017年版
Yahoo! JAPANのOracle構成-2017年版Yahoo! JAPANのOracle構成-2017年版
Yahoo! JAPANのOracle構成-2017年版Makoto Sato
 
【dots. IT勉強会】開発環境のDocker化
【dots. IT勉強会】開発環境のDocker化【dots. IT勉強会】開発環境のDocker化
【dots. IT勉強会】開発環境のDocker化Yuki Kanazawa
 
新事業がどんどん出来て組織が拡大中のフェーズのランサーズがどんな感じでプロジェクトを回しているのかまとめてみました
新事業がどんどん出来て組織が拡大中のフェーズのランサーズがどんな感じでプロジェクトを回しているのかまとめてみました新事業がどんどん出来て組織が拡大中のフェーズのランサーズがどんな感じでプロジェクトを回しているのかまとめてみました
新事業がどんどん出来て組織が拡大中のフェーズのランサーズがどんな感じでプロジェクトを回しているのかまとめてみましたSatoshi Yokoi
 
DBMotoで異種間DBらくらく移行 Auroraも使っちゃうよ! - JAWS-UG Kyoto 第5回勉強会
DBMotoで異種間DBらくらく移行 Auroraも使っちゃうよ! - JAWS-UG Kyoto 第5回勉強会DBMotoで異種間DBらくらく移行 Auroraも使っちゃうよ! - JAWS-UG Kyoto 第5回勉強会
DBMotoで異種間DBらくらく移行 Auroraも使っちゃうよ! - JAWS-UG Kyoto 第5回勉強会株式会社クライム
 
Lenovo seminar rancher_200513
Lenovo seminar rancher_200513Lenovo seminar rancher_200513
Lenovo seminar rancher_200513Junji Nishihara
 
クラウド概要 by Engine Yard
クラウド概要 by Engine Yardクラウド概要 by Engine Yard
クラウド概要 by Engine YardYu Kitazume
 
デスクトップ仮想化の実践 - powered by Windows Server 2016 & Azure - (Microsoft de:code 2016)
デスクトップ仮想化の実践 - powered by Windows Server 2016 & Azure - (Microsoft de:code 2016)デスクトップ仮想化の実践 - powered by Windows Server 2016 & Azure - (Microsoft de:code 2016)
デスクトップ仮想化の実践 - powered by Windows Server 2016 & Azure - (Microsoft de:code 2016)Takamasa Maejima
 
Classmethod awsstudy ec2rds20160114
Classmethod awsstudy ec2rds20160114Classmethod awsstudy ec2rds20160114
Classmethod awsstudy ec2rds20160114Satoru Ishikawa
 
Okuyama説明資料 20120119 ss
Okuyama説明資料 20120119 ssOkuyama説明資料 20120119 ss
Okuyama説明資料 20120119 ssTakahiro Iwase
 
[SAPPORO CEDEC] サービスの効果を高めるグリー内製ツールの技術と紹介
[SAPPORO CEDEC] サービスの効果を高めるグリー内製ツールの技術と紹介[SAPPORO CEDEC] サービスの効果を高めるグリー内製ツールの技術と紹介
[SAPPORO CEDEC] サービスの効果を高めるグリー内製ツールの技術と紹介gree_tech
 

Ähnlich wie 【JAWS DAYS 2014】ランサーズを支えるRDS (20)

【JAWS DAYS 2013】ランサーズを支えるAWS
【JAWS DAYS 2013】ランサーズを支えるAWS【JAWS DAYS 2013】ランサーズを支えるAWS
【JAWS DAYS 2013】ランサーズを支えるAWS
 
PowerDNSのご紹介
PowerDNSのご紹介PowerDNSのご紹介
PowerDNSのご紹介
 
スマートフォン×Cassandraによるハイパフォーマンス基盤の構築事例
スマートフォン×Cassandraによるハイパフォーマンス基盤の構築事例スマートフォン×Cassandraによるハイパフォーマンス基盤の構築事例
スマートフォン×Cassandraによるハイパフォーマンス基盤の構築事例
 
20210127 AWS Black Belt Online Seminar Amazon Redshift 運用管理
20210127 AWS Black Belt Online Seminar Amazon Redshift 運用管理20210127 AWS Black Belt Online Seminar Amazon Redshift 運用管理
20210127 AWS Black Belt Online Seminar Amazon Redshift 運用管理
 
Yahoo! JAPANのOracle構成-2017年版
Yahoo! JAPANのOracle構成-2017年版Yahoo! JAPANのOracle構成-2017年版
Yahoo! JAPANのOracle構成-2017年版
 
LambdaとMobileの美味しいかもしれない関係
LambdaとMobileの美味しいかもしれない関係LambdaとMobileの美味しいかもしれない関係
LambdaとMobileの美味しいかもしれない関係
 
既存システムへの新技術活用法 ~fluntd/MongoDB~
既存システムへの新技術活用法 ~fluntd/MongoDB~既存システムへの新技術活用法 ~fluntd/MongoDB~
既存システムへの新技術活用法 ~fluntd/MongoDB~
 
Lampで作るソーシャルアプリの負荷対策~アプリとインフラの調和のテクニック~
Lampで作るソーシャルアプリの負荷対策~アプリとインフラの調和のテクニック~Lampで作るソーシャルアプリの負荷対策~アプリとインフラの調和のテクニック~
Lampで作るソーシャルアプリの負荷対策~アプリとインフラの調和のテクニック~
 
Yahoo! JAPANのOracle構成-2017年版
Yahoo! JAPANのOracle構成-2017年版Yahoo! JAPANのOracle構成-2017年版
Yahoo! JAPANのOracle構成-2017年版
 
【dots. IT勉強会】開発環境のDocker化
【dots. IT勉強会】開発環境のDocker化【dots. IT勉強会】開発環境のDocker化
【dots. IT勉強会】開発環境のDocker化
 
新事業がどんどん出来て組織が拡大中のフェーズのランサーズがどんな感じでプロジェクトを回しているのかまとめてみました
新事業がどんどん出来て組織が拡大中のフェーズのランサーズがどんな感じでプロジェクトを回しているのかまとめてみました新事業がどんどん出来て組織が拡大中のフェーズのランサーズがどんな感じでプロジェクトを回しているのかまとめてみました
新事業がどんどん出来て組織が拡大中のフェーズのランサーズがどんな感じでプロジェクトを回しているのかまとめてみました
 
DBMotoで異種間DBらくらく移行 Auroraも使っちゃうよ! - JAWS-UG Kyoto 第5回勉強会
DBMotoで異種間DBらくらく移行 Auroraも使っちゃうよ! - JAWS-UG Kyoto 第5回勉強会DBMotoで異種間DBらくらく移行 Auroraも使っちゃうよ! - JAWS-UG Kyoto 第5回勉強会
DBMotoで異種間DBらくらく移行 Auroraも使っちゃうよ! - JAWS-UG Kyoto 第5回勉強会
 
Lenovo seminar rancher_200513
Lenovo seminar rancher_200513Lenovo seminar rancher_200513
Lenovo seminar rancher_200513
 
クラウド概要 by Engine Yard
クラウド概要 by Engine Yardクラウド概要 by Engine Yard
クラウド概要 by Engine Yard
 
Couchbaseの紹介 2015/03/05
Couchbaseの紹介 2015/03/05Couchbaseの紹介 2015/03/05
Couchbaseの紹介 2015/03/05
 
商用RDBMSのAWSへの移行
商用RDBMSのAWSへの移行商用RDBMSのAWSへの移行
商用RDBMSのAWSへの移行
 
デスクトップ仮想化の実践 - powered by Windows Server 2016 & Azure - (Microsoft de:code 2016)
デスクトップ仮想化の実践 - powered by Windows Server 2016 & Azure - (Microsoft de:code 2016)デスクトップ仮想化の実践 - powered by Windows Server 2016 & Azure - (Microsoft de:code 2016)
デスクトップ仮想化の実践 - powered by Windows Server 2016 & Azure - (Microsoft de:code 2016)
 
Classmethod awsstudy ec2rds20160114
Classmethod awsstudy ec2rds20160114Classmethod awsstudy ec2rds20160114
Classmethod awsstudy ec2rds20160114
 
Okuyama説明資料 20120119 ss
Okuyama説明資料 20120119 ssOkuyama説明資料 20120119 ss
Okuyama説明資料 20120119 ss
 
[SAPPORO CEDEC] サービスの効果を高めるグリー内製ツールの技術と紹介
[SAPPORO CEDEC] サービスの効果を高めるグリー内製ツールの技術と紹介[SAPPORO CEDEC] サービスの効果を高めるグリー内製ツールの技術と紹介
[SAPPORO CEDEC] サービスの効果を高めるグリー内製ツールの技術と紹介
 

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

  • 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] 「時間と場所に囚われない新しい働き方の創出」