Upload
yuki-kanazawa
View
1.989
Download
7
Embed Size (px)
DESCRIPTION
JAWS DAYS 2014で発表させて頂きました、ランサーズのRDS移行に関する資料です。
Citation preview
「クラウドソーシング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 月~現在) ・ランサーズのインフラ担当
略歴
2
© 2014 for LANCERS, inc All Rights Reserved
自己紹介(基本情報)
CloudWatch
・ロードアベレージ・ HDD 使用状況・メモリ使用状況・月額利用料金・2週間以上の値
も見れると嬉しい…
好きな AWS のサービス
3
© 2014 for LANCERS, inc All Rights Reserved
ランサーズ社内における役割
4
CTO
ディレクター デザイナー エンジニア
ココ
インフラ
【社外インフラ】 AWS チューニング全般
【社内インフラ】 ルーター設定 開発環境の支援 PC 設定
© 2014 for LANCERS, inc All Rights Reserved
本日お話しさせていただく内容
5
① ランサーズ ( 株 ) のご紹介
②AWS 移行の背景
③RDS→EC2→RDS に移行した経緯
④RDS のメリット・デメリット
⑤RDS 移行のポイント
⑥ ランサーズの RDS 運用
© 2014 for LANCERS, inc All Rights Reserved 6
① ランサーズ ( 株 ) のご紹介
②AWS 移行の背景
③RDS→EC2→RDS に移行した経緯
④RDS のメリット・デメリット
⑤RDS 移行のポイント
⑥ 今後の取組み
© 2014 for LANCERS, inc All Rights Reserved
会社紹介(概要)
7
ランサーズ株式会社
設立
事業内容
ビジョン
2008 年 4 月 1 日
クラウドソーシングサービス「 Lancers 」の運営
「時間と場所に囚われない新しい働き方の創出」
2013 年 6 月 鎌倉→渋谷に移転しました
© 2014 for LANCERS, inc All Rights Reserved
クラウドソーシングとは?
• 米国で 2000 年頃に誕生したインターネットサービスの一つ
• 仕事を頼みたい人や企業と、自分のスキルや労働力を売りたい人をネット上でマッチングすること
満員電車にサヨナラする方法 ~ 時間と場所にとらわれない新しい働き方~
秋好 陽介 ( 著 )
Cloud (雲)ではなくCrowd (群衆)
8
© 2014 for LANCERS, inc All Rights Reserved
サービス紹介「 Lancers 」
9
日本初+国内最大級のオンライン完結型アウトソーシングサービス
依頼数
約 28 万件依頼総額
約 220 億円会員数
約 26 万人依頼案件の例
• ロゴ、イラスト• Web システム、スマホ• データ入力、記事作成
© 2014 for LANCERS, inc All Rights Reserved
依頼可能な仕事カテゴリは「 74 」
10
© 2014 for LANCERS, inc All Rights Reserved
仕事タイプに合わせて選べる3つの依頼方式
11
歯科医院のロゴマーク作成提案: 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
ランサーズの会員詳細
12
毎月報酬を得ている
2,000 人
生活できる報酬を得ている
200 人
© 2014 for LANCERS, inc All Rights Reserved
ランサーズが実現する世界
13
2016 年に 1 万人がランサーズだけで
生活できるレベルの報酬を獲得する
© 2014 for LANCERS, inc All Rights Reserved
ランサーズ依頼件数の推移
14
年間 300%成長中!
2012201120102009 2013
2012 年 5 月AWS に移行
2013 年 11月
金澤 JOIN
© 2014 for LANCERS, inc All Rights Reserved
ランサーズを支える技術
15
Web DB Monitor
RDS S3EC2 CloudWatch
App
© 2014 for LANCERS, inc All Rights Reserved
開発環境
16
subversion
■ バージョン管理、コーディングチェック
■リリース
移行中
Fablic で App 全台に一括適用(Python製の一括デプロイツール )
デプロイ後に API でリリース情報を自動通知
© 2014 for LANCERS, inc All Rights Reserved 17
②AWS 移行の背景
③RDS→EC2→RDS に移行した経緯
④RDS のメリット・デメリット
⑤RDS 移行のポイント
⑥ 今後の取組み
① ランサーズ ( 株 ) のご紹介
© 2014 for LANCERS, inc All Rights Reserved
なぜAWS に移行しようと思ったのか
18
HDD圧迫(大容量プランにするか???) App サーバメモリ逼迫( 4GB だったため、不足。。。) スケールしない( AP2 台 DB2 台の構成 DNS ラウンドロビンだった) ⇒契約したプラン上、 1 台だけ増やす、 HDD増量が出来ない
移行を考え出した「きっかけ」
2012 年からサービス拡大期へ TV 紹介も狙い出す
AWS 移行前の「問題例」
どれぐらいアクセスが増えるのか? TV効果は一時的?
© 2014 for LANCERS, inc All Rights Reserved
AWS に決定するまで
19
どのクラウドサービスにするか
判断ポイント1
現行レンタルサーバでいくか?クラウドにするか?
費用とスペックなら「 sakura 」 スケーラブル、運用コストを下げるなら「 AWS 」⇒sakura は、アクセス急増に対応できない、初期導入コストあり、 時間もかかる(用意してもらう時間、設定する時間) ⇒『成長するサービスなら AWS だ!』
判断ポイント2
sakura クラウドを選ぶ際のメリデメ(例)
nifty クラウドを選ばなかった理由・・・単純に高く、価格面で折り合わなかった
[ メリット ] ホスティングサービスが従量課金のように使用可能、 IO高性能、安価
[ デメリット ] サービス種類、管理ツール、ウェブでの情報
sakura
AWS
vs
sakuraクラウド
niftyクラウド
vs
© 2014 for LANCERS, inc All Rights Reserved
CentOS の入手
20
開発環境と同じCentOS を使いたい
当初、自作しようと試みるがハマッて
しまった・・
時間がないため、既に構築済みの物を選択Cloudpack さん提供の
AMI
© 2014 for LANCERS, inc All Rights Reserved
ファイルデータの移行
21
500GBほどあった画像などのファイルデータを S3へ移動
① PHP の SDK を使ったアップロードバッチスクリプトを作成② 社内の ESXi をインスタンスフル稼働させて叩きまくる③ 何 10 時間もかけて移動
ESXi
VM VM VMバックアップ
DBバッチ処理 バッチ処理 バッチ処理
© 2014 for LANCERS, inc All Rights Reserved
AWS 移行前後のシステム構成
S3 Bucket
ElasticLoad Balancer
EC2WebServer
ElasticLoad Balancer
EC2DB Slave
EC2DB Slave
EC2DB Master
ap-northeast-1a
移行後
App App
移行前
DB Master DB Slave
Internet
Internet
Data Center
DNS ラウンドロビン
© 2014 for LANCERS, inc All Rights Reserved 23
④RDS のメリット・デメリット
⑤RDS 移行のポイント
⑥ 今後の取組み
① ランサーズ ( 株 ) のご紹介
③RDS→EC2 に移行した経緯
②AWS 移行の背景
© 2014 for LANCERS, inc All Rights Reserved
AWS 移行直後( 2012 年 5 月)の RDS問題
24
困った点①
ログが見れない!!(スローログ、クエリログはテーブル出力)(バイナリログ参照不可)
デフォルトタイムゾーンが UTC で変更できない!!
※コネクションを張るたびに +9 時間する必要
困った点②
MyIsam のスナップショットは未サポート→MyIsam の FullText インデックスを利用していた
困った点③
© 2014 for LANCERS, inc All Rights Reserved
AWS 移行直後( 2012 年 5 月)の RDS問題
25
移行リリース直後、アクセス増加に連れて負荷が高まっていた⇒原因調査の結果、どうやら DBかもしれないとの仮説 しかし RDS で細かいデータが見れず詳細調査が出来ない (= vmstat, sysstat, top 等 が利用不可)
⇒ EC2 への移行を決断
移行したが・・・結果、 EC2 でも重いまま ⇒さらに調査すると、 I/Oがボトルネックになっていることが発覚
ログを解析し、チューニング移行前のレンタルサーバでは 高性能な HDDが使われていたため、問題が発覚しなかった
⇒その後、 2013 年 11 月まで EC2 で MySQL を運用
© 2014 for LANCERS, inc All Rights Reserved 26
④RDS のメリット・デメリット
⑤RDS 移行のポイント
⑥ 今後の取組み
① ランサーズ ( 株 ) のご紹介
③RDS→EC2→RDS に移行した経緯
②AWS 移行の背景
© 2014 for LANCERS, inc All Rights Reserved
EC2 の MySQL 運用で困ったこと
27
• 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が改善されてきた…
28
• 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 29
⑤RDS 移行のポイント
⑥ 今後の取組み
① ランサーズ ( 株 ) のご紹介
④RDS のメリット・デメリット
②AWS 移行の背景
③RDS→EC2→RDS に移行した経緯
© 2014 for LANCERS, inc All Rights Reserved30
RDS化前後のシステム構成
S3 Bucket
ElasticLoad Balancer
EC2WebServer
ElasticLoad Balancer
EC2DB Slave
EC2DB Slave
EC2DB Master
ap-northeast-1a
S3 Bucket
ElasticLoad Balancer
EC2WebServer
ap-northeast-1a
RDSMaster
RDS Read Replica
RDS Multi AZ
ap-northeast-1c
RDS化前
RDS化後
© 2014 for LANCERS, inc All Rights Reserved 31
RDS(MySQL) のメリット
• Multi AZ配置• マスタ DB と異なる AZ にスタンバイを用意• 障害時に自動フェイルオーバー
• 停止時間は 2 分~ 7 分(計測値)
S3 Bucket
ElasticLoad Balancer
EC2WebServer
ap-northeast-1a
RDSMaster
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 33
RDS(MySQL) のメリット
• ポイントタイムリカバリ• 任意の時間に DB を戻すことが可能
• 35 日前まで保管可能(要設定)
© 2014 for LANCERS, inc All Rights Reserved
RDS(MySQL) のメリット
• ClowdWatch• EC2よりも豊富(空きメモリ、空き HDD も確認可)
© 2014 for LANCERS, inc All Rights Reserved 35
RDS(MySQL) のメリット
• スナップショット機能• Manual Snapshot
• 手動スナップショット• インスタンス削除時に取得するか訊かれる
• Automated Snapshot• 毎日自動的に取得される差分スナップショット• 35 日間まで取得可能• マスター DBが消えると削除される
© 2014 for LANCERS, inc All Rights Reserved 36
RDS(MySQL) のメリット
• パフォーマンス• 適切なデフォルトパラメータ設定• EBS ボリュームのストライプによる IOPS パフォーマンスの向上
EC2 RDS 移行後
DB
PHP
DB
PHP
© 2014 for LANCERS, inc All Rights Reserved 37
RDS(MySQL) のデメリット
• EC2 に比べて若干割高• m3.medium: $0.17/h (東京リージョン)• db.m1.medium: $0.215/h (東京リージョン)
• MultiAZ スタンバイ機は使えない• でも料金は 2 台分
S3 Bucket
ElasticLoad Balancer
EC2WebServer
ap-northeast-1a
RDSMaster
RDS Read Replica
RDS Multi AZ
ap-northeast-1c
バックアップ専用利用不可
© 2014 for LANCERS, inc All Rights Reserved 38
RDS(MySQL) のデメリット
• SSH ログインできない• RDS接続用の EC2 サーバーを用意しておく• mysqldump のエクスポート結果もここに格納
MySQLClient
EC2
RDSdb-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 39
RDS(MySQL) のデメリット
• リードレプリカに ELB利用不可• 自前でロードバランシングする必要がある
• ランサーズでは HAProxy を利用
S3 Bucket
ElasticLoad Balancer
EC2WebServer
ap-northeast-1a
RDSMaster
RDS Read Replica
RDS Multi AZ
ap-northeast-1c
S3 Bucket
ElasticLoad Balancer
EC2WebServer
ElasticLoad Balancer
EC2DB Slave
EC2DB Slave
EC2DB Master
ap-northeast-1a
HAProxy をインストール
実はたまにLost する…
© 2014 for LANCERS, inc All Rights Reserved 40
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 41
RDS(MySQL) のデメリット
• インスタンスを STOP できない• 稼働したくない場合は final snapshot を取得して削除• 稼働したい場合は final snapshotから復旧
• 10 分超かかる
• ( EC2 と比べて)スケールアップ、ダウンに時間がかかる• 10 分〜 50 分
• バイナリログの保持期間は 7 日間まで• 35 日間ではない• 7 日間以上保持したい場合は EC2 に転送しておく
• 後述します
© 2014 for LANCERS, inc All Rights Reserved 42
④RDS のメリット・デメリット
⑥ 今後の取組み
① ランサーズ ( 株 ) のご紹介
⑤RDS 移行のポイント
②AWS 移行の背景
③RDS→EC2→RDS に移行した経緯
© 2014 for LANCERS, inc All Rights Reserved 43
RDS採用時の注意点
• 1マスターにつきリードレプリカは 5 台まで• それ以上作成したい場合は多層構成にする
• バージョン 5.6 以上で可能
© 2014 for LANCERS, inc All Rights Reserved 44
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
EC2instance
ELB
App
EC2instance
App
EC2instance
RDS Multi AZ RDS Read Replica
App
ap-northeast-1c
EC2instance
ELB
App
EC2instance
App
EC2instance
AZ 間の通信遅延は数ミリ〜数十ミリ
sec レベル
• リードレプリカを複数の AZ に均等に配置する• AZ レベルの障害を想定
© 2014 for LANCERS, inc All Rights Reserved
RDS Multi AZ
Multi AZ にリードレプリカを配置
RDS MasterRDS Read Replica
App
ap-northeast-1a
EC2instance
ELB
App
EC2instance
App
EC2instance
RDS Read Replica
App
ap-northeast-1c
EC2instance
ELB
App
EC2instance
App
EC2instance
• リードレプリカを複数の AZ に均等に配置する• AZ レベルの障害を想定
© 2014 for LANCERS, inc All Rights Reserved 47
スナップショット取得期間の設定
• 最大 35 日まで設定可能• 1 日以上に設定するとバイナリログが出力されるようになる
バイナリログの保持期間は別途設定が必要
© 2014 for LANCERS, inc All Rights Reserved 48
パラメーターの設定
• Parameter Group で設定
設定できないパラメータ
空欄はデフォルト値
© 2014 for LANCERS, inc All Rights Reserved 49
パラメーターの設定
• 設定後は必ず再起動する• 不適切な設定があると以下のエラーが表示される
• 例: t1.micro で query_cache_size を 32MB 以上に設定
© 2014 for LANCERS, inc All Rights Reserved 50
パラメーターの設定
• 設定値を 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 51
クライアントを 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.sqlmysqldump: 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.002375mysqlbinlog: unknown option '--raw'
© 2014 for LANCERS, inc All Rights Reserved 52
バイナリログの保持期間設定
• デフォルトの保持期間は 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 53
バイナリログの確認( 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 54
バイナリログの転送( 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 55
バイナリログ転送専用ユーザーの作成
• バイナリログの転送には以下の権限が必要• REPLICATION SLAVE• REPLICATION CLIENT
mysql> GRANT REPLICATION SLAVE, REPLICATION CLIENT ON testdb.* TO [email protected] IDENTIFIED BY 'XXXXXXXX';ERROR 1221 (HY000): Incorrect usage of DB GRANT and GLOBAL PRIVILEGES
mysql> GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO [email protected] IDENTIFIED BY 'XXXXXXXX';
• ※必ず GLOBAL権限を付与する• データベース単位で与えると以下のエラーに加え…
全スレーブのレプリケーションが停止し
てしまうので注意!!
© 2014 for LANCERS, inc All Rights Reserved 56
バイナリログ転送バッチの作成
#!/bin/sh
MYSQL=/usr/bin/mysqlMYSQLBINLOG=/usr/bin/mysqlbinlogLOGDIR=/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 57
バイナリログ転送起動スクリプト
#!/bin/sh## description: Get MySQL Binary Log# chkconfig: 2345 98 20# processname: mysqlbinlog
SERVICE=GetMySQLBinaryLogUSER=rootCOMMAND=/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 instart) start ;;stop) stop ;;restart) stop start ;;*) echo "Usage: $SERVICE [start|stop|restart]" ;;esacexit
/etc/init.d/getmysqlbinlog
© 2014 for LANCERS, inc All Rights Reserved 58
⑥ ランサーズの RDS 運用
②AWS 移行の背景
③RDS→EC2→RDS に移行した経緯
④RDS のメリット・デメリット
⑤RDS 移行のポイント
① ランサーズ ( 株 ) のご紹介
© 2014 for LANCERS, inc All Rights Reserved 59
運用専用のリードレプリカ
• ロードバランサ( HAProxy )に設定しないリードレプリカを用意• 制限ユーザーアカウントで参照
S3 Bucket
ElasticLoad Balancer
EC2WebServer
ap-northeast-1a
RDSMaster
RDS Read Replica
RDS Multi AZ
ap-northeast-1c
© 2014 for LANCERS, inc All Rights Reserved 60
スローログの取得
• スローログを取得する設定
• 何秒以上のクエリを記録するかの設定
• スローログの取得
• スローログのローテート
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 61
スローログの取得
• Management Consoleからも取得可能
© 2014 for LANCERS, inc All Rights Reserved 62
Visual Explain
• MySQL5.6 の新機能• MySQL WorkBench で利用可能
アカウント名が日本語だと動作しないので注意!
© 2014 for LANCERS, inc All Rights Reserved 63
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 64
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-tunnelDAEMON=/usr/bin/sshNAME=ssh
# LOCAL SettingLOCAL_PORT=8025
# INTER SettingINTER_SERVER=ec2 の IP アドレスINTER_PORT=22INTER_USER=ec2_userINTER_KEY=/home/mysqluser/.ssh/ec2.id_rsa
# REMOTE SettingREMOTE_SERVER=db-slave.xxx.ap-northeast-1.rds.amazonaws.comREMOTE_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 65
最後に、今後やりたいこと
• RDS のオートスケーリング• EC2 と同様のオートスケーリング機能を実現したい• CPU利用率での 判 定は難しそう
• App と違い、パルス的な負荷が多い
• →夜間帯、土日にリードレプリカの台数を減らす方向で検討中
• 台数変更前後に haproxy.conf の設定を変更• fablic で複数台の App サーバーに一括設定
EC2 App RDS
© 2014 for LANCERS, inc All Rights Reserved
エンジニア積極採用中
66
• 働き方を変えたい方• 最新の技術が好きな方• 世界に打って出たい方
お気軽にご連絡下さい![email protected]
RDS 最高!!ご清聴ありがとうございました
[2014/03/15 JAWS DAYS 2014 ]
ランサーズ株式会社インフラエンジニア金澤 裕毅 [Kanazawa Yuki]
「時間と場所に囚われない新しい働き方の創出」