-
Notifications
You must be signed in to change notification settings - Fork 47
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. Weโll occasionally send you account related emails.
Already on GitHub? Sign in to your account
FIX: Handling abnormal swithover from zk. #867
base: develop
Are you sure you want to change the base?
Conversation
1286a78
to
0e988d2
Compare
@brido4125 |
ํน์ ์คํ๋ผ์ธ ์ค๋ช ์ด ํ์ํ๋ค๋ฉด ํธํ๊ฒ ๋งํด์ฃผ์ธ์ |
์ค๋ช
ํ ๋ฒ ํด์ฃผ์ธ์. |
PR ์ฝ๋ฉํธ ์ ๋ฐ์ดํธ ํ์ต๋๋ค. |
0e988d2
to
4657886
Compare
4657886
to
ce2f9fc
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
๋ฆฌ๋ทฐ ์๋ฃ
๋ค๋ฅธ ๊ฒฝ์ฐ๋ ํ์ธํ์ฌ ์์ ํ ๋ฐฉ์์ผ๋ก ๊ตฌํํฉ์๋ค.
ce2f9fc
to
542c8c4
Compare
์์ ์ฝ๋ฉํธ์ ๋ํด์๋ ๊ฒํ ๊ฐ ๋์๋์? |
542c8c4
to
3cad10c
Compare
@uhm0311 @oliviarla |
@uhm0311 ๋น ๋ฅธ ๋ฆฌ๋ทฐ ๋ฐ๋๋๋ค. |
์ฝ๋๊ฐ ๋ง์ด ๊ฐ๋ตํ๋์๋๋ฐ, ๊ฐ ๊ฒฝ์ฐ๋ฅผ ์ด๋ค ์๋ฆฌ๋ก ์ปค๋ฒํ ์ ์๋์ง ์ค๋ช ํด์ฃผ์์ผ๋ฉด ํฉ๋๋ค. |
@@ -485,13 +485,32 @@ private void updateReplConnections(List<InetSocketAddress> addrs) throws IOExcep | |||
// move operation slave -> master. | |||
taskList.add(new MoveOperationTask( | |||
oldSlaveNode, oldMasterNode, false)); | |||
// clear the masterCandidate if the removed slave is the masterCandidate. | |||
if (oldGroup.getMasterCandidate() == oldSlaveNode) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
oldMaster์ newMaster๊ฐ ๋์ผํ๊ณ
oldSlave๋ค ์ค masterCandidate๊ฐ ์๋ ๊ฒฝ์ฐ
์ด๋ฅผ clear ํ์ฌ null๋ก ์ค์ ์์ผ ์ค๋๋ค.
PR ์ฝ๋ฉํธ์ (M,X)์ (M,X,X) ์ธ ๊ฒฝ์ฐ๋ฅผ ์ฒ๋ฆฌ์์ผ์ค๋๋ค.
์ด ๊ฒฝ์ฐ๋ก ๋ณ๊ฒฝ๋ ์ด์ ๋ ์๋ ์ฝ๋ฉํธ๋ฅผ ์ฐธ๊ณ ํด์ฃผ์๊ธธ ๋ฐ๋๋๋ค.
#867 (comment)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
๊ทธ๋ผ ๊ทธ ์ดํ์ ์ฒ๋ฆฌ๋ ์ด๋ป๊ฒ ๋๋์?
- M S1 S2 ์ํ์์ M์๊ฒ ๋ค์ SWITCHOVER ์๋ต์ ๋ฐ์ ๊ฒฝ์ฐ
- M S1 S2 ์ํ์์ ZK๋ก๋ถํฐ S1 M S2๋ฅผ ๋ฐ์ ๊ฒฝ์ฐ
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
๋ค๋ฅธ ๊ทธ๋ฃน์ ๋ณ๊ฒฝ์ ์ํด M S1 S2 ์ํ๊ฐ ๋ฐ์ํ๋ ๊ฒฝ์ฐ
ํ์ฌ ๋ก์ง์ changedGroup์ ์ถ๊ฐ๋์ง ์์์
๋ณ๊ฒฝ์ด ์๊ธฐ์ง ์์ ๊ทธ๋ฃน์ ์๋ฌด๋ฐ ๋ก์ง์ ์ํํ์ง ์์ต๋๋ค.
M S1 S2 ์ํ์์ M์๊ฒ ๋ค์ SWITCHOVER ์๋ต์ ๋ฐ์ ๊ฒฝ์ฐ
์ด๋ฏธ masterCandidate๊ฐ ์ค์ ๋์ด ์๋ ์ํ๋ผ์ ์ฌ์ค์ ํ์ง ์๊ณ
swtichover ์์
์ด ์งํ ์์
M S1 S2 ์ํ์์ ZK๋ก๋ถํฐ S1 M S2๋ฅผ ๋ฐ์ ๊ฒฝ์ฐ
์ ์์ ์ธ switchover ๋ก์ง ์ํ
์ ๋ ์๋์ ๊ฐ์ด ์ดํดํ๋๋ฐ ํน์ ์๋๋ฉด ๋ง์ํด์ฃผ์ธ์
SWITCHOVER ์๋ต -> ๋ค๋ฅธ ๊ทธ๋ฃน์ ๋ณ๊ฒฝ์ ์ํด ๋์ผํ ํ์(M S1 S2) zk ์ด๋ฒคํธ ๋ฐ์ -> ๋ค์ SWITCHOVER ์๋ต or (S1 M S2) Switchover ์ด๋ฒคํธ ๋ฐ์
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
์ ๋ ์๋์ ๊ฐ์ด ์ดํดํ๋๋ฐ ํน์ ์๋๋ฉด ๋ง์ํด์ฃผ์ธ์
๋ง์ต๋๋ค.
ํ์ฌ ๋ก์ง์ changedGroup์ ์ถ๊ฐ๋์ง ์์์
๋ณ๊ฒฝ์ด ์๊ธฐ์ง ์์ ๊ทธ๋ฃน์ ์๋ฌด๋ฐ ๋ก์ง์ ์ํํ์ง ์์ต๋๋ค.
์ด ์ฝ๋ฉํธ์๋ changedGroup์ ๊ตฌํ๋ ๋ก์ง์ด ์ ๊ฑฐ๋๋ ๊ฒ๋ ์ผ๋ํ ๊ฒ์ฒ๋ผ ๋ณด์๋๋ฐ ๋น์ฅ์ ์ผ๋ํ์ง ์๋ ๊ฑด๊ฐ์?
์ด๋ฏธ masterCandidate๊ฐ ์ค์ ๋์ด ์๋ ์ํ๋ผ์ ์ฌ์ค์ ํ์ง ์๊ณ
swtichover ์์ ์ด ์งํ ์์
490๋ผ์ธ์์๋ clearMasterCandidate() ๋ฉ์๋๋ฅผ ํธ์ถํ๋๋ฐ, ์ดํ์ ์ธ์ ์ด๋์์ masterCandidate๊ฐ ๋ค์ ์ค์ ๋๋์?
์ ์์ ์ธ switchover ๋ก์ง ์ํ
Delayed switchover ์ธ๊ฐ์? ํน์ ์ฆ์ switchover ์ธ๊ฐ์?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
์ด ์ฝ๋ฉํธ์๋ changedGroup์ ๊ตฌํ๋ ๋ก์ง์ด ์ ๊ฑฐ๋๋ ๊ฒ๋ ์ผ๋ํ ๊ฒ์ฒ๋ผ ๋ณด์๋๋ฐ ๋น์ฅ์ ์ผ๋ํ์ง ์๋ ๊ฑด๊ฐ์?
๋ต, ์ผ๋ํ์ง ์๋๋ค๋ฉด 490๋ผ์ธ์ด ํธ์ถ๋์ง ์์ต๋๋ค.
์ฐ์ ์ ์ผ๋ํ์ง ์๊ณ ์ถํ์ changedGroup์ ๋ฆฌํฉํ ๋งํ ๋ ๊ณ ๋ คํ ์๊ฐ์
๋๋ค.
Delayed switchover ์ธ๊ฐ์? ํน์ ์ฆ์ switchover ์ธ๊ฐ์?
์๋ฒ ์๋ต์ ์ด๋ฏธ ๋ฐ์๊ธฐ ๋๋ฌธ์ ์ฆ์ swtichover ์ ๋๋ค.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
์๋ฒ ์๋ต์ ์ด๋ฏธ ๋ฐ์๊ธฐ ๋๋ฌธ์ ์ฆ์ swtichover ์ ๋๋ค.
ZK๋ก๋ถํฐ ์๋ก์ด ์บ์ ๋ฆฌ์คํธ๋ฅผ ๋ฐ์์ ๋ ์ด๋ฏธ ์บ์ ์๋ฒ๋ก๋ถํฐ ์๋ต์ ๋ฐ์ ๊ฒฝ์ฐ์ ๋ฐ์ง ์์ ๊ฒฝ์ฐ๋ก ๋๋๊ฒ ๋๋๋ฐ์.
์ด๋ฏธ ์บ์ ์๋ฒ ์๋ต์ ๋ฐ์ ๊ฒฝ์ฐ์๋ ์ฆ์ swtichover์ผ ๊ฒ์ด๊ณ , ์บ์ ์๋ฒ ์๋ต์ ์์ง ๋ฐ์ง ์๊ณ ZK์ ์บ์ ๋ฆฌ์คํธ๋ฅผ ๋จผ์ ๋ฐ์ ๊ฒฝ์ฐ์๋ ๊ธฐ์กด์ Delayed switchover์ผ๋ก ์ถฉ๋ถํ ์ฒ๋ฆฌ๊ฐ ๋๋์?
์ด๋ฏธ masterCandidate๊ฐ ์ค์ ๋์ด ์๋ ์ํ๋ผ์ ์ฌ์ค์ ํ์ง ์๊ณ
swtichover ์์ ์ด ์งํ ์์
490๋ผ์ธ์์๋ clearMasterCandidate() ๋ฉ์๋๋ฅผ ํธ์ถํ๋๋ฐ, ์ดํ์ ์ธ์ ์ด๋์์ masterCandidate๊ฐ ๋ค์ ์ค์ ๋๋์?
์ด ๋ถ๋ถ๋ ์ง๋ฌธํ๋๋ฐ, ๋ชป๋ณด๊ณ ์ง๋์น ๊ฒ ๊ฐ์ต๋๋ค.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
์คํ๋ผ์ธ์ผ๋ก ๋ง์ํด์ฃผ์ ๊ถ๊ธํ ์ผ์ด์ค์ ๋ํ ๋ต๋ณ์
๋๋ค.
์๋ ์ฝ๋ฉํธ์ 2๋ฒ ๊ฒฝ์ฐ์์๋ masterCandidate๊ฐ clear ๋์ง ์์ต๋๋ค.
์๋ํ๋ฉด ํด๋น oldSlave๋ newSlaves์ ํฌํจ๋์ด ์๊ธฐ ๋๋ฌธ์
๋๋ค.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
์ผ๋ถ ๋ฆฌ๋ทฐ
oldGroup.setMasterCandidateByAddr(newMasterAddr.getIPPort()); | ||
taskList.add(new MoveOperationTask( | ||
oldMasterCandidate, oldGroup.getMasterCandidate(), false)); | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@brido4125
์๋ ๊ฒฝ์ฐ์์ masterCandidate ์ค์ ์ clear๋์ด์ผ ํฉ๋๋ค.
์ด์ ๋ํ ์ฒ๋ฆฌ๊ฐ ์๋ ์ง๋ฅผ ํ์ธํด ์ฃผ์ธ์.
์ํ | ROLE1 | ROLE2 | ROLE3 | ์ฒ๋ฆฌ๋ก์ง |
---|---|---|---|---|
์ด๊ธฐ์ํ | M | S1 | S2 | |
SwitchOver ์๋ต ํ ์ํ | M | S1(masterCandidate) | S2 | |
๋น์ ์5 | X | X | M | Fail-Over ๋ก์ง์ด ์ฒ๋ฆฌ |
changeRoleGroups.add(oldGroup); | ||
if (!newMasterAddr.isSameAddress( | ||
((ArcusReplNodeAddress) oldMasterCandidate.getSocketAddress()))) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
์๋ ํํ๋ก ๋น๊ตํด๋ ๋์ง ์๋์?
if (oldMasterCandidate != newMasterAddr) {
๐ Related Issue
์บ์ ์๋ฒ๋ก๋ถํฐ์ ์๋ต์ ํตํด master candidate๋ฅผ ์ค์ ํ๊ณ ๋ ๋ค,
zk๋ก๋ถํฐ ๋น์ ์์ ์ธ switchover๋ฅผ ๊ฐ์งํ๋ ๊ฒฝ์ฐ์ ๋ํ ์ฒ๋ฆฌ์ด๋ค.
์ด์คํ
์ผ์คํ
์ฐธ๊ณ ๋ก ์๋์ ๊ฐ์ ์ผ์ด์ค๋ค์ zk ์ํ์ค ๋๋ฒ์ ์ํ
Repl Role ์ ์ ๋ฐฉ์์ ์ํด ๋ฐ์๋์ง ์์ต๋๋ค.
์ ํ๋ฅผ ์ฐธ๊ณ ํ์ฌ ๋ฐ์ ๊ฐ๋ฅํ ๋น์ ์ ๊ฒฝ์ฐ๋ค์ ์๋์ ๊ฐ๋ค.
์ด์คํ
์ผ์คํ
์๋ ์ผ์ด์ค์ ํจ๊ป ์ด์คํ์ ๋น์ ์ ์ผ์ด์ค์ฒ๋ผ
old Master๊ฐ newMaster์ด๊ณ slave๊ฐ ๋ชจ๋ ๋จ์ด์ง ์ผ์ด์ค
โจ๏ธ What I did
๋น์ ์ ์ด์คํ์ธ ๊ฒฝ์ฐ๋ oldMaster์ newMaster๊ฐ ๋์ผํ๊ธฐ ๋๋ฌธ์ ์๋ ๋ก์ง์ ๋ฐ๋ฅธ๋ค.
arcus-java-client/src/main/java/net/spy/memcached/MemcachedConnection.java
Line 470 in f60ed48
๋น์ ์ ์ผ์คํ์ธ ๊ฒฝ์ฐ๋ oldSlaves ๋ด์ newMaster๊ฐ ์๊ณ
newSlaves ๋ด์ oldMaster๊ฐ ์กด์ฌํ๊ธฐ์ ๊ธฐ์กด์ Switchover ๋ก์ง์ ๋ฐ๋ฅธ๋ค.
arcus-java-client/src/main/java/net/spy/memcached/MemcachedConnection.java
Lines 490 to 491 in daf6334
๋ ๊ฒฝ์ฐ ๋ชจ๋ cache server ์๋ต์ ์ํด ์ค์ ๋
master candidate์ ์์ธ ops ๊ฐ์ฒด๋ค์ oldmaster๋ก ์ฎ๊ฒจ์ค์ผํ๋ค.
์ด์คํ์ ๊ฒฝ์ฐ master candidate๋ฅผ null๋ก ์ค์ ํด์ master๋ก op๊ฐ ์ฒ๋ฆฌ๋๋๋ก ํ๋ค.
์ผ์คํ๋ zk๋ก๋ถํฐ ๋ฐ์ master๋ฅผ ์ค์ ํ์ฌ
์ต์ master์ op๊ฐ ์ฒ๋ฆฌ๋๋๋ก ํ๋ค.