์์ฑ ์๋ณ์
bsr์ ๋ณต์ ๋ฐ์ดํ ์์ฑ์ ์๋ณํ๊ธฐ ์ํด ์์ฑ ์๋ณ์(GI, Generation Identifiers)๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์ด๊ฒ์ bsr ๋ด๋ถ ๋ฉ์นด๋์ฆ์์ ์๋์ ๊ฐ์ ์ฉ๋๋ก ์ฌ์ฉ๋ฉ๋๋ค.
๋ ๋ ธ๋๊ฐ ์ค์ ํด๋ฌ์คํฐ์ ๋ฉค๋ฒ์ธ์ง ๊ฒฐ์ ํ ๋ (๊ฐ์ ํด๋ฌ์คํฐ ๋ด์ ๋ ธ๋๊ฐ ์๋ ์ฐ์ฐํ ์ฐ๊ฒฐ์ ๋ํ ์๋ณ)
๋ ธ๋ ๊ฐ ๋ฐฑ๊ทธ๋ผ์ด๋ ์ฌ๋๊ธฐํ์ ๋ฐฉํฅ์ ๊ฒฐ์ ํ ๋
์ ์ฒด ์ฌ๋๊ธฐํ๊ฐ ํ์ํ์ง ํน์ ๋ถ๋ถ ์ฌ๋๊ธฐํ๋ก ์ถฉ๋ถํ์ง ๊ฒฐ์ ํ ๋
์คํ๋ฆฟ ๋ธ๋ ์ธ(์ดํ SB)์ ์๋ณํ ๋
์์ฑ ์๋ณ์
bsr์ ๋ค์์ ๊ฒฝ์ฐ์ ์๋ก์ดย ๋ฐ์ดํฐ ์์ฑ(Data Generation)์ด ์์๋ ๊ฒ์ผ๋ก ๊ฐ์ฃผํ๊ณ ์๋ก์ด GI ๋ฅผ ์์ฑํฉ๋๋ค.
์ด๊ธฐ ์ ์ฒด ๋๊ธฐํ ์
disconnected ๋ ๋ฆฌ์์ค๊ฐ Primary ์ญํ ๋ก ์น๊ฒฉํ ๋
Primaryย ์ญํ ์ ๋ฆฌ์์ค๊ฐ disconnecting ๋ ๋
์๋ก์ด GI ๊ฐ ์์ฑ๋๋ ์์ ์ ๋์คํฌ์ ์ฐ๊ธฐ I/O ๊ฐ ๋ฐ์ํ์ฌ ์ค์ ๋ฐ์ดํฐ๊ฐ ๋ณ๊ฒฝ๋ ๋ ์ ๋๋ค.
๋ฐ๋ผ์, ๋ฆฌ์์ค๊ฐ Connected ์ฐ๊ฒฐ ์ํ์ ์๊ณ ์ ๋
ธ๋์ ๋์คํฌ ์ํ๊ฐ UpToDate ์ด๋ฉด ์ ๋
ธ๋์ ํ์ฌ GI๋ ๋์ผํ๋ค ๋ผ๊ณ ํ ์ ์์ต๋๋ค. ๋ฐ๋์ ๊ฒฝ์ฐ๋ ๋ง์ฐฌ๊ฐ์ง์
๋๋ค.
๋ชจ๋ ์๋ก์ด ๋ฐ์ดํฐ ์์ฑ์ 8 ๋ฐ์ดํธ์ UUID(universally unique identifier) ๋ก ์๋ณํฉ๋๋ค. UUID์ ์ตํ์ ๋นํธ๋ ๋
ธ๋์ ์ญํ ์ ํํํ๋ฉฐ Primary๋ 1, Secondary๋ 0์ผ๋ก ์ค์ ๋ฉ๋๋ค.ย
GI ํํ
bsr์ ๋ก์ปฌ ๋ฆฌ์์ค ๋ฉํ ๋ฐ์ดํ ๋ด์ ํ์ฌ์ ๊ณผ๊ฑฐ์ย ๋ฐ์ดํฐ ์์ฑ(data generation)ย ์ ๋ณด๋ฅผ ๊ธฐ๋ณธ์ ์ผ๋ก 4๊ฐ(Tuple)๋ก ๊ด๋ฆฌํฉ๋๋ค.
Current UUIDย - ๋ก์ปฌ๋ ธ๋์ ํ์ฌ data generation์ ๋ํ GI(์์ฑ ์๋ณ์)์ ๋๋ค. ๋ฆฌ์์ค๊ฐ Connected ์ํ์ด๊ณ ๋๊ธฐํ๊ฐ ๋ ์ํ๋ผ๋ฉด ์ด Current UUID ๋ ์ ๋ ธ๋ ๋์ผํฉ๋๋ค.
Bitmap UUIDย - ๋์คํฌ์์ ๋๊ธฐํ ๋นํธ๋งต์ ๋ณํ๋ฅผ ์ถ์ ํ๋ UUID์ ๋๋ค. ๋์คํฌ์ ๋๊ธฐํ ๋นํธ๋งต ์์ฒด๋ฅผ ๋ณด๋ฉด, ์ด ์๋ณ์๋ disconnected ๋ชจ๋ ์ํ์์๋ง ๊ด๋ จ์ด ์์ต๋๋ค. ๋ง์ผ ๋ฆฌ์์ค๊ฐ Connected ๋ผ๋ฉด ์ด UUID๋ ํญ์ ๋น์ด(zero)์๊ฒ ๋ฉ๋๋ค.
Two Historical UUIDsย - ํ์ฌ์ Current UUID์ ์ด์ ์ ์ํ์๋ data generation ์๋ณ์๋ค์ด๋ฉฐ 2๊ฐ๋ฅผ ๊ธฐ์ตํ๊ณ ์์ต๋๋ค.ย
์ด 4๊ฐ์ง ๋ชจ๋๋ฅผ ๋ฌถ์ด์ "generation identifier tuple" ๋๋ ์งง๊ฒ "GI ํํ" ์ด๋ผ๊ณ ํฉ๋๋ค.
GI ๋ณ๊ฒฝ ๊ณผ์
์๋ก์ด ๋ฐ์ดํฐ ์์ฑ ์์
๋ ธ๋๊ฐ ์ฐ๊ฒฐ์ด ๋์ด ์ง ๋ (๋คํธ์ํฌ ์ค๋ฅ, ์๋์กฐ์ ํฌํจ)
์ฐ๊ฒฐ๋ ์ํ์์ ์๋ ๋ ธ๋์ ๋์คํฌ๊ฐ ๋ณต์ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ํ ์ ์๋ ์ํ ์ผ ๊ฒฝ์ฐ(peer-disk:Outdated)ย
bsr์ ์ ๋ ๊ฐ์ง ๊ฒฝ์ฐ์ ๋ํดย ๋ก์ปฌ GI๋ฅผ ๋ค์๊ณผ ๊ฐ์ ๋ฐฉ๋ฒ์ผ๋ก ์์ ํฉ๋๋ค.
์๋ก์ด ๋ฐ์ดํฐ ์์ฑ์ ์ํด ์ ๊ท UUID๋ฅผ ์์ฑํฉ๋๋ค. ์ด UUID๋ Primary ๋ ธ๋๋ฅผ ์ํ ์๋ก์ด Current UUID๊ฐ ๋ฉ๋๋ค.ย
์ด์ ์ UUID๋ ์ด์ ๋นํธ๋งต ๋ณํ ์ํฉ์ ์ถ์ ํ๋ generation์ ์๋ฏธํ๊ธฐ ๋๋ฌธ์, Primary ๋ ธ๋์ ๋ํ ์๋ก์ด Bitmap UUID๊ฐ ๋ฉ๋๋ค.
Secondary ๋ ธ๋์์๋ GI ํํ์ ๋ณํ๊ฐ ์์ต๋๋ค.
UUID๋ ๋ณผ๋ฅจ์ ์ฐ๊ธฐ I/O ๊ฐ ๋ฐ์ ๋์์ ๋ ์ ๊ท๋ก ์์ฑ๋ฉ๋๋ค. ๋ฐ๋ผ์ GI๊ฐ ์์ฑ๋๋ ๋ณด๋ค ๋ ์ ํํ ์กฐ๊ฑด์ ์ฐ๊ฒฐ์ด ๋์ด์ง๋ ๋ฑ์ ๊ธฐ์กด ์กฐ๊ฑด์ ๋ํด ๋ณผ๋ฅจ์ ์ฐ๊ธฐ I/O ๋ฐ์์ด ์๊ตฌ๋ฉ๋๋ค.
์ฌ๋๊ธฐํ ์์
์ฌ๋๊ธฐํ๊ฐ ์์๋ ๋ GI ํํ์ ๋ณํ๋ ์์ต๋๋ค.
์ฌ๋๊ธฐํ ์๋ฃ
์ฌ๋๊ธฐํ๊ฐ ์๋ฃ๋๋ฉด ๋๊ธฐํ ์์ค๋ ๋นํธ๋งต uuid ๋ฅผ rotate ์ํค๊ณ ๋๊ธฐํ ํ๊ฒ์ ๋๊ธฐํ ์์ค์ GI ํํ ์ ์ฒด ์ ์ ์์ ํ์ฌ ๋์ผํ๊ฒ ๋ฐ์ํฉ๋๋ค.
GI ์ํ ์๋ณ
๋ ธ๋๊ฐ์ ์ฐ๊ฒฐ์ด ๋งบ์ด์ง๋ฉด ๋ ๋ ธ๋๋ ํ์ฌ ์ฌ์ฉํ ์ ์๋ GI ๋ฅผ ๊ตํํ๊ณ , ๊ฑฐ๊ธฐ์ ๋ง์ถฐ์ ์ ์ ํ ๋์์ ์งํํ๋๋ฐ ์ฌ๊ธฐ์ ๋ช๊ฐ์ง ๋์์ด ์กด์ฌํฉ๋๋ค.
์์ชฝ์ Current UUID๊ฐ ๋น์ด ์๋ ๊ฒฝ์ฐ
์์ชฝ Current UUID๊ฐ ๋น์ด ์๋ ๊ฒ์ผ๋ก ๊ฐ์งํ์๋ค๋ฉด, ์ด๋ฐ ๊ฒฝ์ฐ๋ ๋ณดํต ์๋กญ๊ฒ ๋ฆฌ์์ค๋ฅผ ๊ตฌ์ฑํ๊ณ ๋๊ธฐํ๊ฐ ์์๋ ์ ์ด ์๋ ์ํฉ์ ๋๋ค. ์ฌ๊ธฐ์๋ ๋๊ธฐํ๊ฐ ์๋์ผ๋ก ์งํ๋์ง ์์ผ๋ฉฐ ์๋์ผ๋ก ๋๊ธฐํ๋ฅผ ์์ํด์ฃผ์ด์ผ ํฉ๋๋ค.ํ์ชฝ ๋ ธ๋์ Current UUID๊ฐ ๋น์ด ์๋ ๊ฒฝ์ฐ
์๋ ๋ ธ๋์ Current UUID๋ ๋น์ด์๊ณ ์์ ์ ๊ฒ์ ๊ทธ๋ ์ง ์์ ๊ฒ์ ๊ฐ์งํ์๋ค๋ฉด, ์ด๋ฐ ๊ฒฝ์ฐ๋ ๋ณดํต ์๋กญ๊ฒ ๊ตฌ์ฑ๋ ๋ฆฌ์์ค์์ ์ ์ฒด ๋๊ธฐํ๋ฅผ ๋ฐ๋ก ์๋ํ ์ํ์ด๊ณ , ๋ก์ปฌ๋ ธ๋๊ฐ ๋๊ธฐํ์ ์์ค๋ก ์ ํ๋ ๊ฒฝ์ฐ์ ๋๋ค. bsr ๋ด๋ถ์ ์ผ๋ก๋ ์ฌ์ฉํ๊ณ ์๋ ์์ญ์ ๋ชจ๋ ๋นํธ๋ฅผ on-disk sync bitmap์ ์ค์ ํ๊ณ ์์ค๋ก์จ ๋๊ธฐํ๋ฅผ ์์ํฉ๋๋ค. ๋ฐ๋์ ๊ฒฝ์ฐ๋ (๋ก์ปฌ UUID๊ฐ ๋น์ด์๊ณ , ์๋๊ฐ ๋น์ด์์ง ์์ ๋) bsr์ด ๋์ผํ ์ ์ฐจ๋ฅผ ์งํํ๊ฒ ์ง๋ง ๋ก์ปฌ ๋ ธ๋๊ฐ ํ๊ฒ์ผ๋ก ๋๊ธฐํ ๋๋ ๊ฒ๋ง ๋ค๋ฆ ๋๋ค.์์ชฝ์ Current UUID๊ฐ ๋์ผํ ๊ฒฝ์ฐ
์์ ์ Current UUID์ ์๋์ UUID๊ฐ ๋น์ด์์ง ์๊ณ ๊ฐ์ผ๋ฉด, ์ด๋ฐ ๊ฒฝ์ฐ๋ ๋ณดํต Secondary ์ญํ ์ค disconnected ๋ชจ๋๊ฐ ๋๊ณ disconnected ์ค์ ์ด๋ค ๋ ธ๋์์๋ ์น๊ฒฉ์ด ์์์ ๋ ๋ฐ์ํ๋ ๊ฒฝ์ฐ์ ๋๋ค. ๋๊ธฐํ๊ฐ ํ์ํ์ง ์์ ์ํ์ด๊ณ ๋๊ธฐํ๊ฐ ์งํ๋์ง๋ ์์ต๋๋ค.Bitmap UUID๊ฐ ์๋ ๋ ธ๋์ Current UUID์ ์ผ์นํ๋ ๊ฒฝ์ฐ
์์ ์ Bitmap UUID๊ฐ ์๋์ Current UUID์ ๊ฐ๊ณ ์๋์ Bitmap UUID ๊ฐ ๋น์ด์์์ ๊ฐ์งํ์๋ค๋ฉด, ์ด๋ฐ ๊ฒฝ์ฐ๋ ์ ์์ ์ธ ์ํ์ด๋ฉฐ Secondary ์ญํ ์ผ ๋ ์ฅ์ ์ํฉ์ด ์๊ฒจ์ Primary ์ญํ ๋ก ์น๊ฒฉ์ํจ ๊ฒฝ์ฐ์ ๋๋ค. ์ด๊ฒ์ ์๋ ๋ ธ๋๋ Primary๊ฐ ๋ ์ ์ด ์์ผ๋ฉฐ ๊ทธ ์ ๊น์ง๋ ๋์ผํ data generation์ผ๋ก ์์ ๋์์์ ์๋ฏธํฉ๋๋ค. bsr์ ๋ก์ปฌ๋ ธ๋๋ฅผ ๋๊ธฐํ ์์ค๋ก ์ค์ ํ๊ณ ๋ฐฑ๊ทธ๋ผ์ด๋ ์ฌ๋๊ธฐํ๋ฅผ ํ ์ ์๋๋ก ์ค๋น ํฉ๋๋ค.
๋ฐ๋๋ก ๋ก์ปฌ๋ ธ๋๊ฐ ์์ ์ Bitmap UUID๋ ๋น์ด์๊ณ ์๋์ Bitmap์ด ์์ ์ Current UUID์ ๋์ผํ๋ค๋ ๊ฒ์ ์ธ์งํ๋ค๋ฉด ์ด๊ฒ๋ ์ ์์ ์ด๋ฉฐ ๋ก์ปฌ ๋ ธ๋์ ์คํจ ์ดํ์ ๋ฐ์ํ ๊ฒ์ ๋๋ค. bsr์ ๋ก์ปฌ๋ ธ๋๋ฅผ ๋๊ธฐํ ํ๊ฒ์ผ๋ก ๋๊ณ ๋ฐฑ๊ทธ๋ผ์ด๋ ์ฌ๋๊ธฐํ๋ฅผ ์ค๋นํฉ๋๋ค.Current UUID๊ฐ ์๋ ๋ ธ๋์ Historical UUID์ ์ผ์นํ๋ ๊ฒฝ์ฐ
์์ ์ Current UUID๊ฐ ์๋ ๋ ธ๋์ Historicalย UUID์ ์ผ์นํ๋ ๊ฒ์ ๊ฐ์งํ์๋ค๋ฉด, ์ด๋ ๋ค์๊ณผ ๊ฐ์ ์ํฉ์ ์๋ฏธํฉ๋๋ค.ย 2๊ฐ์ ๋ฐ์ดํ ์ (data sets)์ด ๊ณตํต์ ์ด์ ย ์ธ๋ย ๋ด์ฉ์ ๊ณต์ ํ๋ ๋์, ์๋ ๋ ธ๋๋ ์ต์ ์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง์ง๋ง Bitmap ์ ๋ณด๋ ์ง๋ ์์ ์ ๊ฒ์ด๊ธฐ์ ์ฌ์ฉํ ์ ์๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ๋ฐ๋ผ์ ์ผ๋ฐ์ ์ธ ๋๊ธฐํ๋ก๋ ์ถฉ๋ถํ์ง ๋ชปํ ์ ์์ต๋๋ค.ย ์ด๋ฐ ๊ฒฝ์ฐ bsr์ ๋๋ฐ์ด์ค ์ ์ฒด๋ฅผ out-of-sync ๋ก ๋งํน์ ํ๊ณ ๋ก์ปฌ ๋ ธ๋๋ฅผ ๋๊ธฐํ ํ๊ฒ์ด ๋๊ฒํ์ฌ ์ ์ฒด ๋ฐฑ๊ทธ๋ผ์ด๋ ์ฌ๋๊ธฐํ๋ฅผ ์๋ํฉ๋๋ค. ์ด์ ๋ฐ๋๋ก ๋ก์ปฌ ๋ ธ๋์ Historicalย UUID ์ค์ ์๋์ Current UUID์ ๋งค์นญ๋๋ ๊ฒฝ์ฐ์๋ ๋ก์ปฌ ๋ ธ๋๋ฅผ ๋๊ธฐํ ์์ค๊ฐ ๋๊ฒํ๊ณ ๊ทธ ์ธ์๋ ๋์ผํ ์ ์ฐจ๋ฅผ ์ํํฉ๋๋ค.Bitmap UUID๋ ์ผ์น, Current UUID๋ ๋ถ์ผ์นํ๋ ๊ฒฝ์ฐ
์์ ์ Current UUID์ ์๋์ Current UUID์๋ ๋ค๋ฅด๊ณ Bitmap UUID๋ ์ผ์นํ๋ ๊ฒ์ ๊ฐ์งํ์๋ค๋ฉด ์คํ๋ฆฟ ๋ธ๋ ์ธ(Split-brain)์ด ๋ฐ์ํ ๊ฒ์ ๋๋ค.ย ์ ๋ ธ๋๋ disconnect ์ํ๋ก ๋จ๊ฒจ์ง๊ณ ์๋ํด๊ฒฐ์ด ์ค์ ๋์ด ์์ง ์๋ ํ ์์ ์๊ฐ ์ง์ ์๋์ผ๋ก ์คํ๋ฆฟ ๋ธ๋ ์ธ ์ํฉ์ ํด๊ฒฐํด์ผ ํฉ๋๋ค.Current / Bitmap UUID ๋ชจ๋ ๋ถ์ผ์น ํ๊ณ Historical UUID ๊ฐ ์ผ์นํ๋ ๊ฒฝ์ฐ
์์ ์ Current, Bitmap UUID๊ฐ ๊ฐ๊ฐ์ ์๋ UUID์ ๋ค๋ฅด๊ณ Historical UUID ์ค ํ๋๊ฐ ์ผ์นํ๋ ๊ฒ์ ๊ฐ์ง ํ์๋ค๋ฉด ์ด์ ์กฐ์ ์ธ๋์์์ ์คํ๋ฆฟ ๋ธ๋ ์ธ ์ํฉ์ ๋๋ค. ๋ฐ๋ผ์ ์๋๋ณต๊ตฌ ์ค์ ์ด ๋์ด์๋ค ํ๋๋ผ๋ ์๋ฏธ๊ฐ ์์ผ๋ฉฐ ์๋์ผ๋ก ๋ณต๊ตฌํด์ผ ํฉ๋๋ค. BSR์ disconnect ์ํ๊ฐ ๋๊ณ ์์ ์๊ฐ ์ง์ ์คํ๋ฆฟ ๋ธ๋ ์ธ ์ํฉ์ ํด๊ฒฐํด์ผ ํฉ๋๋ค.์ด๋ ํ UUID๋ ์ผ์นํ์ง ์๋ ๊ฒฝ์ฐ
๋ง์ง๋ง์ผ๋ก, ๋ ๋ ธ๋์ GI ํํ์์ ๋งค์นญ๋๋ ๊ฒ์ด ํ๊ฐ์ง๋ ์๋ค๋ฉด ๊ด๋ จ์๋ ๋ฐ์ดํ๋ผ๊ณ ๊ฒฝ๊ณ ๋ฅผ ๋จ๊ธฐ๊ณ disconnect ํฉ๋๋ค. ์ด๊ฒ์ ์ ํ ๊ด๋ จ ์๋ ๋ ธ๋๊ฐ์ ์ฐ๊ฒฐ๋ ๊ฒ์ ๋๋นํ ์์ ์กฐ์น์ ๋๋ค.
ย