Mais conteúdo relacionado
Semelhante a 【JAWS DAYS 2014】ランサーズを支えるRDS (20)
【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