15. Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.15
テーブルの肥大化が進み
参照クエリのレイテンシが顕著に増加し始め
た...
slaveを追加し、対応を実施したが現状の
ペースでデータ量が増加した場合の懸念が
あった...
16. Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.
当時の垂直分割サーバ構成
IIS 8.5 (Amazon EC2 Windows Server 2012 R2)
.NET Framework 4.5 + ASP.NET MVC 5
c4.8xlarge x 45
MySQL 5.6 (Amazon Aurora)
db.r4.16xlarge x 18(master x 6、slave x 12)
Redis 2.8 (Amazon ElastiCache)
cache.r3.4xlarge x 2
Memcached (Amazon ElastiCache)
cache.r3.2xlarge
17. Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.17
今回はまだ十分に検討する時間がある...
前回出来なかった水平分割の再検討いつ
やるの?
今でしょう!!
33. Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.33
ログデータを利用する場合
アプリケーションから吐かれたlogを全
てkinesisで送りlambdaもしくは取り
込み専用のサーバを用意しデータを入れ
る
34. Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.34
では最終的にどのように移行を行うか?
答えは、案①のDMSを利用する方針に決定
・ダウンタイムを極力減らす移行が可能
・ログデータはDB更新でエラー発生した際、
ログとDBに差異が発生するリスクがある
35. Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.35
ダウンタイムはどの程度必要か?
答えは、数時間...
DMSでのライブマイグレーション後の切
替作業の時間を想定
36. Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.36
失敗した場合の切り戻しは?
答えは、ダブルライト方式およびリカバ
リー環境をDMSで準備する
またXAトランザクションを検討する
37. Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.37
ダブルライト方式とは
・移行完了後、まだ移行前DBを残す
・参照クエリは移行後DBを参照する
・更新クエリは両方のDBを更新する
38. Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.38
XAトランザクションは
AWSよりAmazon Aurora MySQLではXAト
ランザクションはパフォーマンス面で影響が
出る可能性があるとの事で最終的には断念...
・Amazon Aurora MySQL での XA トランザクションの使用
https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/AuroraMySQL.BestPra
ctices.html#AuroraMySQL.BestPractices.XA
40. Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.40
移行課題を整理すると
・ユーザIDを分割IDとして利用する
・20分割で移行を行う
・DMSで移行を行う
・ダウンタイムは数時間(想定)
・切り戻しはダブルライト方式とDMSでリカバ
リー環境を準備する
48. Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.48
DMSによる移行方法の確立について
まず水平分割化に伴い、全てのテーブル
を精査・再設計を実施した
そしてDMSのタスクによる移行を実施
49. Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.49
DMSタスクとは
3つの主なフェーズで構成される
・既存のデータの全ロード(FullLoad)
・キャッシュされた変更の適用
・継続的なレプリケーション(CDC)
レプリケーションインスタンス上で実行されるタスク
50. Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.50
移行手順案として
最終的にこの2案をベースに検討した...
・移行元DB Dump→リストア→DMSタスクでCDCレプリ
ケーション
・移行元DB→DMSタスクでFullLoad→CDCレプリケーション
51. Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.51
AWS DMSを使用するには
・レプリケーションサーバーを作成する
・データストアに関する接続情報を持つソースエンドポイン
トとターゲットエンドポイントを作成する
・ソースデータストアとターゲットデータストアの間でデー
タを移行するには、1つ以上の移行タスクを作成する
ソースエンドポイント
ターゲットエンドポイント
52. Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.52
最終的なDMS移行手順として
・移行先DBにスキーマ流し込み(index定義
無し)→ FullLoad →Index作成→CDCレプ
リケーション
53. Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.53
なぜこの手順に
最初にスキーマだけを流しておくと、あとは
DMSが全て移行してくれる
Indexを事前に作成しておくと、FullLoadに時
間が掛かり移行が完了しない...
54. Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.54
DMSのタスクで移行を行うには
当初ソースフィルタにてソースからターゲッ
トに指定した条件(ユーザID % 20)
でデータを移行を想定...
55. Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.55
しかし想定外の事が
ソースフィルタの条件に関数がサポート
されていないため、フィルタ用カラムを
追加する必要が発生...
56. Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.56
移行先DB指定(0~19)するカラム
を追加するには
FastDDL(lab mode)によるカラム追加を検討した...
問題なく数十億レコードのテーブルでも1秒以下で完了するこ
とができた
※本番でのlab mode利用は推薦されていない為、十分検証が必要です。
今回はメンテナンス時に、一時的に利用しました...
57. Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.57
そして追加カラムに分割IDを挿入するに
は
稼働中に負荷を掛けないように時間を掛
けて分割IDを挿入する方法で実施
58. Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.58
移行方法を整理すると
・事前にFastDDLで分割用カラムを追加
・カラムにソースフィルタの分割IDを追加
・DMSで移行を実施
移行先DBにスキーマ流し込み(index定義無し)→
FullLoad →Index作成→CDCレプリケーション
59. Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.59
負荷試験の実施について
事前にこちらを準備する...
・本番環境同様の環境を準備する
・サーバアプリケーションの全APIを検証し、
シナリオ作成を準備する
60. Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.60
詳細はこの後のLTで
そして負荷試験ツールにより、本番同様のシ
ナリオを実行する事で、早期に問題を発見→
修正を繰り返すことで開発期間の短縮および
信頼性を担保することが実現できた
また限界・耐久テストを実施し、正常動作の
処理上限値を確認できた
61. Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.61
リハーサルの実施について
事前にリハーサル用のDMS環境を準備する...
ソースは本番DBクロスリージョンレプリカ
62. Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.62
しかし高負荷を掛けた環境では
DMSのCDCレイテンシが増加し続ける事象
が発生した...
そのため同一リージョン(AZ)に別slave環
境を準備したが、それでも事象が改善され
ず...
63. Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.63
原因は複数のタスクで一つのSlave環境の
Masterを参照させる場合、binlogスレッド
が複数起動し、mutexの奪い合いが発生し
た...
そのためbinlogの処理速度が落ち、結果レプ
リケーション遅延が発生することが判明...
64. Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.64
最終的には、負荷を掛けない環境で、
DMSによる移行を実施することを判断し、
併せて各ソースのbinlog保持期間を長め
に設定した
65. Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.65
次にDMS移行後の整合性確認は
当初、DMSタスクの検証機能を利用予定だった
が、フィルタを利用するとソースとターゲットで
データが異なるため、DMSの機能では検証でき
なくなるため、今回は利用できず...
・AWS DMS タスクの検証(制約事項を参照)
https://docs.aws.amazon.com/ja_jp/dms/latest/userguide/CHAP_Validating.html
66. Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.66
そのため他の方法を検討することに
mysqldbcompareでソースDBとリカバリーDBとの比較に
代用しようとしたが、データチェックで差分があるとデータ
比較でインスタンスが高負荷となり接続できなくなる事象が
発生...
結局、行数チェックとスキーマの比較にのみ利用、データの
整合性についてはchecksum tableを利用した...
67. Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.67
最後にDMS移行後の障害テストは
ダブルライト方式およびシングル切替時
の負荷を掛けた状況で、正常系・異常系
テストを実施し、想定通りの動作が確認
できた
68. Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.68
本番移行について
準備
・本番slave環境、DMSタスク、レプリケー
ションインスタンス、ターゲットDB
・ソースDBの各テーブルに分割用カラムを追加
・カラムにユーザーIDの剰余IDを追加
69. Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.69
移行メンテナンススケジュール
其の一
・夜間計画メンテナンスを実施
・DMSによる移行を実施
・ダブルライト方式に切替
其の二
・後日、データ整合性確認を実施
・問題なければダブルライトを停止
70. Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.70
本番移行作業の手順は
夜間計画メンテナンスを実施し、DMSによ
る移行作業を決行...
移行後、ダブルライト方式に切替を実施
稼働中の動作および負荷を監視した...
71. Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.71
移行後、後日に整合性確認を実施
しかし切り戻し環境でデータ不整合が見つ
かった...
すべてDMSによる移行後DB→切り戻しDB
へのFullLoad時のデータ移行漏れであった...
72. Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.72
原因は、ソース・ターゲットの
wait_timeoutが短かった為(60秒)
timeoutしたリクエストがロストされてい
た...
今回は28800秒に変更し、切り戻し環境への
再移行を実施する事で問題が解消した
73. Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.73
改めて整合性をすべて確認後、ダブルラ
イトを停止し、切替が完了した
最後に少し問題が発生したが、全ての移
行作業が完了!!
74. Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.
水平分割後サーバ構成
IIS 8.5 (Amazon EC2 Windows Server 2012 R2)
.NET Framework 4.5 + ASP.NET MVC 5
c4.8xlarge x 45
MySQL 5.6 (Amazon Aurora)
db.r4.16xlarge x 3(master x 1、slave x 2)
db.r4.4xlarge x 60(master x 20、slave x 40)
Redis 2.8 (Amazon ElastiCache)
cache.r3.4xlarge x 2
Memcached (Amazon ElastiCache)
cache.r3.2xlarge
75. Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.
まとめ
75
今回は十分な準備期間あり、負荷試験ツールの
存在やAWSサポート支援など受けれる環境と
揃っており、無事にやり切り事が出来ました!
76. Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.76
「ただ純粋に、面白いゲームを創ろう。」
ここには誰もが挑戦する場があります!
ぜひ仲間となり一緒に挑戦しましょう!!