Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
HeatWave on AWS の PrivateLink インバウンドレプリケーション...
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
hmatsu47
PRO
October 17, 2024
Technology
0
71
HeatWave on AWS の PrivateLink インバウンドレプリケーションで Aurora フェイルオーバーに追従する
HeatWavejp Meetup #10 2024/10/17
hmatsu47
PRO
October 17, 2024
Tweet
Share
More Decks by hmatsu47
See All by hmatsu47
IPv6 に関する話
hmatsu47
PRO
0
4
さいきんの光ファイバーの話
hmatsu47
PRO
0
28
低いほうのレイヤを見てみる話
hmatsu47
PRO
0
8
IPv6 VPC の実装パターンをいくつか
hmatsu47
PRO
0
26
光ファイバーと IPv6 絡みの話
hmatsu47
PRO
0
36
AWS で試して学ぶ IPv6
hmatsu47
PRO
0
33
今年の MySQL/HeatWave ネタ登壇振り返り
hmatsu47
PRO
0
32
今年の DB ネタ登壇振り返り
hmatsu47
PRO
0
23
RDS/Aurora アップデート 2025
hmatsu47
PRO
0
81
Other Decks in Technology
See All in Technology
Blue/Green Deployment を用いた PostgreSQL のメジャーバージョンアップ
kkato1
0
130
私がよく使うMCPサーバー3選と社内で安全に活用する方法
kintotechdev
0
110
Kubernetesの「隠れメモリ消費」によるNode共倒れと、Request適正化という処方箋
g0xu
0
130
DMBOKを使ってレバレジーズのデータマネジメントを評価した
leveragestech
0
260
スピンアウト講座06_認証系(API-OAuth-MCP)入門
overflowinc
0
1.2k
FlutterでPiP再生を実装した話
s9a17
0
170
Windows ファイル共有(SMB)を再確認する
murachiakira
PRO
0
280
データマネジメント戦略Night - 4社のリアルを語る会
ktatsuya
1
240
ADK + Gemini Enterprise で 外部 API 連携エージェント作るなら OAuth の仕組みを理解しておこう
kaz1437
0
200
DDD×仕様駆動で回す高品質開発のプロセス設計
littlehands
6
2.4k
【社内勉強会】新年度からコーディングエージェントを使いこなす - 構造と制約で引き出すClaude Codeの実践知
nwiizo
24
12k
QA組織のAI戦略とAIテスト設計システムAITASの実践
sansantech
PRO
1
140
Featured
See All Featured
Exploring anti-patterns in Rails
aemeredith
2
290
How to build an LLM SEO readiness audit: a practical framework
nmsamuel
1
690
The Curse of the Amulet
leimatthew05
1
10k
Building AI with AI
inesmontani
PRO
1
820
Noah Learner - AI + Me: how we built a GSC Bulk Export data pipeline
techseoconnect
PRO
0
150
How to Think Like a Performance Engineer
csswizardry
28
2.5k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
54k
Git: the NoSQL Database
bkeepers
PRO
432
67k
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
310
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
0
170
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
130
SEOcharity - Dark patterns in SEO and UX: How to avoid them and build a more ethical web
sarafernandez
0
150
Transcript
HeatWave on AWS の PrivateLink インバウンドレプリケーションで Aurora フェイルオーバーに追従する HeatWavejp Meetup
#10 2024/10/17 まつひさ(hmatsu47)
自己紹介 松久裕保(@hmatsu47) • https://qiita.com/hmatsu47 • 現在: ◦ 名古屋で Web インフラのお守り係をしています
◦ SRE チームに所属しつつ技術検証の支援をしています ◦ HeatWave は諸事情で検証を一旦中止→最近復活しました ◦ 昨年 10 月(#04)以来の発表参加です 2
余談ですが • Oracle Cloud ホーム画面 3
余談ですが • サービスに移動後 🤔 4
本日お話しする内容 • HeatWave on AWS のインバウンドレプリケーション ◦ ソース DB が
Aurora → binlog を流せるのは Writer のみ ▪ Writer フェイルオーバーで新 Writer に接続し直す必要あり ◦ PrivateLink 経由→ NLB ターゲットが IP アドレスベース ▪ DNS でのフェイルオーバー追従ができない ◦ Aurora クラスターのイベントを捕捉してフェイルオーバー追従 →実際に試してみた • https://zenn.dev/hmatsu47/articles/heatwave-on-aws-privatelink 5
図にすると 6
設定の流れ…の前に • ここでフェイルオーバーのデモ①:仕込み ◦ Aurora 側のデータを確認 ◦ HeatWave 側のデータを確認 ◦
Aurora クラスターをフェイルオーバー ◦ インバウンドレプリケーションの異常が検知されたことを確認 ◦ Aurora 側でデータを追加 7
設定の流れ • ターゲットグループの属性を微調整 ◦ 旧ターゲット登録解除→新ターゲット登録が正常動作するように • Aurora クラスターに Reader を追加
• ターゲット入れ替え用の Lambda 関数を作成 • SNS トピックとサブスクリプションを作成 • Aurora(RDS)のイベントサブスクリプションを作成 ◦ クラスター failover イベント 8
ターゲットグループの属性を微調整 • ターゲットが入れ替わってもフェイルオープンは維持 ◦ ターゲットが 1 つの場合はデフォルト動作だが念のため設定 • ターゲットが入れ替わったときにできるだけ速く再接続 ◦
ターゲット登録解除で即接続終了(Draining なし) • クロスゾーン負荷分散を有効化 ◦ Aurora クラスターのインスタンスを複数 AZ で冗長化している ケースではこの設定が必要 9
Aurora クラスターに Reader を追加 • Writer 1 インスタンスのみの場合 ◦ フェイルオーバー先の
Reader インスタンスを追加しておく ◦ 通常は 1 インスタンス目の Writer とは別 AZ に(AZ 冗長化) 10
ターゲット入れ替え用の Lambda 関数を作成 • SNS のメッセージ内容を見てターゲットを入れ替える ◦ メッセージから切り替え後のインスタンス名を抽出 ◦ 現ターゲットと異なる場合、現ターゲットを外して切り替え後の
インスタンスを新たに登録する Python コードを実装 https://zenn.dev/hmatsu47/articles/heatwave-on-aws-privatelink-failover#%E3%82 %BF%E3%83%BC%E3%82%B2%E3%83%83%E3%83%88%E5%85%A5%E3% 82%8C%E6%9B%BF%E3%81%88%E7%94%A8%E3%81%AE-lambda-%E9%96 %A2%E6%95%B0%E3%82%92%E4%BD%9C%E6%88%90 11
SNS トピックとサブスクリプションを作成 • Aurora のイベントを Lambda に受け渡すためのもの ◦ SNS トピックとサブスクリプションを作成
◦ サブスクリプションフィルターで failover 開始イベントのみを通 知 12
Aurora のイベントサブスクリプションを作成 • Aurora で発生したイベントを捕捉するためのもの ◦ ターゲット:先ほどの SNS トピックを指定 ◦
ソース:Aurora クラスターの failover イベントを指定 13
ところで • NLB ターゲットグループのヘルスチェックは? ◦ MySQL プロトコルを喋れない ◦ ヘルスチェックが「異常なリクエスト」と見なされないように TCP:40000
など MySQL に無関係なポート番号で上書き ▪ あえてヘルスチェックが効かないように設定(フェイルオープン狙い) ◦ 複数のターゲットを同時に登録すると誤動作リスクあり 14
ひととおり説明が終わったところで • フェイルオーバーのデモ②:結果確認 ◦ Aurora クラスターの Writer インスタンスを確認 ◦ インバウンドレプリケーションが復旧したことを確認
◦ HeatWave 側のデータを確認 15
まとめ • on AWS の PrivateLink インバウンドレプリケーション ◦ そのままではソース DB
のフェイルオーバーに追従できない ◦ Aurora の場合はフェイルオーバーイベントを捕捉して Lambda を実行して PrivateLink 内部 NLB のターゲット切り替えが可能 • 切り替え後の再接続タイムラグに注意が必要 ◦ フェイルオーバー開始を捕捉する場合、概ね 4 分程度 ▪ 同・完了を捕捉する場合、概ね 5 分程度 16
おまけ:PrivateLink 料金 • HeatWave on AWS 東京の PrivateLink 料金は割安? ◦
AWS のインターフェイスエンドポイント料金: USD 0.014/h + USD 0.01/GB(~ 1 PB) ◦ 同・NLB: USD 0.0243/h + USD 0.006/h(/NLCU) 17 3.317 円 1.643 円 出典:https://www.oracle.com/jp/mysql/pricing/#heatwave-on-aws