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
hmatsu47
PRO
October 17, 2024
Technology
0
8
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
Claude 3.5 で Haiku
hmatsu47
PRO
0
8
大吉祥寺.pm の LT で ChatGPT の力を借りて Next.js App Router ベースの投句箱を作って、 Lambda Web Adapter を使って公開した話
hmatsu47
PRO
0
8
ある日突然 DB の性能が 1/2(サイズのインスタンス相当)になった話
hmatsu47
PRO
0
30
pgvectorscale と pgai の話(ざっくり)
hmatsu47
PRO
0
49
pgvector 0.7.0 の新機能と、これから来る(かもしれない)pgvectorscale
hmatsu47
PRO
0
35
大人の社会科見学 ~ NTT 技術史料館に行ってみよう!
hmatsu47
PRO
0
420
pgvector 0.6.0 以降の進化についてざっくり取り上げてみる
hmatsu47
PRO
0
64
Cloudflare Workes からMySQL 系 DB への接続事情(2024/4 現在)
hmatsu47
PRO
0
130
BuriKaigi2024 にボランティアスタッフとして参加した話
hmatsu47
PRO
0
77
Other Decks in Technology
See All in Technology
Amazon CloudWatch Network Monitor のススメ
yuki_ink
1
200
障害対応指揮の意思決定と情報共有における価値観 / Waroom Meetup #2
arthur1
5
470
複雑なState管理からの脱却
sansantech
PRO
1
140
オープンソースAIとは何か? --「オープンソースAIの定義 v1.0」詳細解説
shujisado
7
810
CysharpのOSS群から見るModern C#の現在地
neuecc
2
3.2k
【若手エンジニア応援LT会】ソフトウェアを学んできた私がインフラエンジニアを目指した理由
kazushi_ohata
0
150
AWS Lambdaと歩んだ“サーバーレス”と今後 #lambda_10years
yoshidashingo
1
170
Why does continuous profiling matter to developers? #appdevelopercon
salaboy
0
190
Incident Response Practices: Waroom's Features and Future Challenges
rrreeeyyy
0
160
誰も全体を知らない ~ ロールの垣根を超えて引き上げる開発生産性 / Boosting Development Productivity Across Roles
kakehashi
1
220
SREが投資するAIOps ~ペアーズにおけるLLM for Developerへの取り組み~
takumiogawa
1
180
EventHub Startup CTO of the year 2024 ピッチ資料
eventhub
0
110
Featured
See All Featured
Navigating Team Friction
lara
183
14k
Fireside Chat
paigeccino
34
3k
Mobile First: as difficult as doing things right
swwweet
222
8.9k
Scaling GitHub
holman
458
140k
Bootstrapping a Software Product
garrettdimon
PRO
305
110k
Happy Clients
brianwarren
98
6.7k
Unsuck your backbone
ammeep
668
57k
Intergalactic Javascript Robots from Outer Space
tanoku
269
27k
No one is an island. Learnings from fostering a developers community.
thoeni
19
3k
The Art of Programming - Codeland 2020
erikaheidi
52
13k
A designer walks into a library…
pauljervisheath
203
24k
Facilitating Awesome Meetings
lara
50
6.1k
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