Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Akka Cluster Split Brain Resolver 実機検証
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
cwkajiwara
October 17, 2020
Programming
180
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Akka Cluster Split Brain Resolver 実機検証
cwkajiwara
October 17, 2020
Other Decks in Programming
See All in Programming
[Rails World 2026] Durable orchestration on Rails: from continuation to workflow
palkan
1
750
npm との違いを手がかりにGo の依存管理を理解したい
optim
0
780
なぜCTOを降りてFDEを選んだのか?〜なぜプロダクト企業がFDEで顧客の現場に踏み込むのか〜
gonta
1
220
Atomic Design, Enforced: Scaling Mobile Design Systems (next.app devCon / droidCon Berlin 2026)
steliosf
PRO
0
170
IBM Bob でAI駆動開発『QC-Playbook』
ichirokano2
0
110
JIS keyboard support in Omarchy
lef237
0
130
[2026-09-26]空論ジェネリックプロセス~テスト資産とAIで紡ぐ、再現可能なパフォーマンスチューニングの話~
tosite
0
270
sbt 2.0: takeoff
eed3si9n
0
160
ハーネス設計入門 〜 基礎知識の整理から実務へのステップアップ 〜
kinopeee
28
33k
コーディング自動化の次へ。人の介入をゼロにするファクトリーとサポートAIによる実践
timakin
5
3.9k
Event is what happens
moro
2
860
[JA] Domain Modeling with Vanilla Rails: 「操作」から再考するRailsの設計論
yasaichi
3
440
Featured
See All Featured
Rebuilding a faster, lazier Slack
samanthasiow
85
9.7k
[SF Ruby Conf 2025] Rails X
palkan
3
1.5k
Building AI with AI
inesmontani
PRO
1
1.3k
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
330
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
1
440
Making the Leap to Tech Lead
cromwellryan
135
10k
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
Kristin Tynski - Automating Marketing Tasks With AI
techseoconnect
PRO
0
550
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.7k
Bootstrapping a Software Product
garrettdimon
PRO
306
120k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
128
56k
Transcript
Chatwork株式会社 サーバーサイド開発部Scala 梶原 拓也 Akka Cluster Split Brain Resolver 実機検証
Akka Cluster Split Brain Resolverを Raspberry Piクラスタ上で動作検証します
目次 - Akka Clusterとは - Split Brain とは - Split
Brain Resolverとは - なぜ実機でやるのか - 実機検証開始 - SBRのない世界 - SBRのある世界 3
Akka Cluster とは https://doc.akka.io/docs/akka/current/typed/cluster.html Akka拡張 - Akka Actorのクラスタを構築できるようになる - クラスタメンバのメンバーシップ管理
- Phi Accrual Failure Detectorで死活監視、Gosship Protocolで非中央集権的 なクラスタ形成を可能にしている Chatworkでは、Akka Cluster + Akka Cluster Sharding を使う予定 - データ不整合を起こさないためにSplit Brainを防ぐ必要がある - 一意な識別子を持つアクターがAkka Cluster 上に1つしか存在しないよ うにする 4
Split Brainとは Clusterが、ネットワーク分断などにより分割され、お互いがお互いをDownしたものと して2つ以上のクラスタが動き続けてしまう状態 - データの不整合を引き起こす可能性がある(どちらのクラスタも自身の状態に応じ てデータの永続化を行っている場合など) Unreachableノードの原因 - ノード故障
- ハードウェア故障 - アプリケーションエラー - ネットワーク分断 他のノードからレスポンス(ハートビート)が返ってこない 原因が何かは判断できない! - タイムアウトでも実は処理が間に合わなかったの かもしれない 5
Split Brain Resolverとは Split Brain が起きた時に設定したDowning戦略に従って他のノードの管理を行うアク ター Strategyの種類 - Keep-oldest(今回検証予定)
- Reachable側にoldestノードがいるかどうかで判断する - Keep-Majority - Reachable側のノード数が過半数かどうかで判断する - Keep-Refree - Reachable側にRefreeノードがいるかで判断する … 6
Split Brain Resolverとは 設定方法 - 以下の設定を追加する 7 akka.cluster.downing-provider-class = "akka.cluster.sbr.SplitBrainResolverProvider"
akka.cluster.split-brain-resolver.active-strategy = keep-oldest # Strategyごとのconfigを追加する akka.cluster.split-brain-resolver.keep-oldest { # クラスタの分割が oldest : それ以外 のようになった場合は oldestを停止する down-if-alone = on }
なぜ実機でやるのか
なぜ実機でやるのか 各ノードからネットワークを切ればよいんじゃないか - route add(del) -host x.x.x.x reject をノードで実行して通信を遮断(復旧)させる -
コマンド実行ユーザにroot権限が必要になる( = production環境での設定と変わっ てしまうかもしれない) ノードを落とせばよいのではないか - ノード故障を再現するにはcoordinated shutdownを無効化にしないといけない( = production環境での設定と変わってしまうかもしれない) 9
なぜ実機でやるのか 実機でAkka Clusterを形成することで以下の2ケースをよりリアルに再現できる ネットワーク分断 - LANケーブルを引っこ抜けば/WiFi接続を切断すれば、再現可能 ノード故障 - 電源をきれば再現可能 10
なぜ実機でやるのか Raspberry Pi で動かしている時点で production環境 とは違うのでは - そこはJVMが違いを吸収してくれていると信じる お気づきかもしれませんが、前ページで述べた理由たちは後付けです。 -
Raspberry Piクラスタで動かしてみたい、というのが先に来ています 11
検証環境 Kubernetes クラスタ - Raspberry Pi * 4 (Kubernetes master
* 1, Kubernetes worker * 3) - ブリッジ (Pis を繋ぐ用) Akka Cluster - 1 node に 1 pod に固定(anti-affinity) - コードはakka-sampleから取得(Split Brain Resolverの設定だけ追加) 12
実機検証開始
SBRがない世界
SBRがある世界
検証項目 • down-if-aloneあり ◦ 通信遮断 ▪ リーダーノード以外 ▪ リーダーノード ◦
ノード故障 ▪ リーダーノード以外 ▪ リーダーノード • down-if-aloneなし ◦ 通信遮断 ▪ リーダーノード以外 ▪ リーダーノード ◦ ノード故障 ▪ リーダーノード以外 ▪ リーダーノード 16
注意点 今回の環境だと検証できないSplit Brain Resolverの挙動があります - Indirectly Connected Node (https://doc.akka.io/docs/akka/current/split-brain-resolver.html#indirectly -connected-nodes)
- Node 1 -> Node 2 は疎通していないが、 Node 1 -> Node 3 -> Node 2 の経路であれば通信できる、といったように間接的につながっている状態 - SBRではDownの対象 Kubernetes上であれば Node 1 -> Node 2 の通信だけを遮断するといったことが可能 なので、再現することができます。 17
働くをもっと楽しく、創造的に