[CockroachDB] ์†Œ๊ฐœ

[์›๋ณธ ๋งํฌ]

CockroachDB๋Š” ๋Œ€ํ˜• ๋ถ„์‚ฐ์‹œ์Šคํ…œ์— ์ตœ์ ํ™”๋œ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋‹ค.
์ „์„ธ๊ณ„์— ์ง€๋ฆฌ์ ์œผ๋กœ ๋ถ„ํฌ๋œ ๊ธ€๋กœ๋ฒŒ ์„œ๋น„์Šค์— ์ ํ•ฉํ•˜๋‹ค.

๊ธฐ์กด์˜ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋“ค์€ ๋Œ€๋ถ€๋ถ„ ์ดˆ๋Œ€ํ˜•-๊ณ ์„ฑ๋Šฅ ์Šค์ผ€์ผ์•„์›ƒ์— ํ•œ๊ณ„๊ฐ€ ๋Œ€๋‹จํžˆ ๋งŽ๊ณ  ๋ถˆํŽธํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ๋‚˜๋ฆ„ ๋…์ž์ ์ธ ์œ„์น˜๋ฅผ ์ฐจ์ง€ํ•˜๊ณ  ์žˆ๋‹ค.

GCP์˜ ์ดˆ๋Œ€ํ˜• ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์ธ Cloud Spanner์˜ ์˜ํ–ฅ์„ ๋งŽ์ด ๋ฐ›์•˜์œผ๋ฉฐ, ์‹ค์ œ๋กœ ์ด๊ฑธ Cloud Spanner์˜ ๊ฐœ๋ฐœ์ž๋“ค์ด ๋งŒ๋“ค๊ธฐ๋„ ํ–ˆ๋‹ค. ์ง€ํ–ฅ์ ๋„ ๊ฑฐ์˜ ๋™์ผํ•˜๋‹ค.

๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋‹ต๊ฒŒ ACID๋ฅผ ์ž˜ ์ง€์›ํ•˜๋ฉฐ, PostgreSQL๊ณผ ๊ฑฐ์˜ ์œ ์‚ฌํ•œ ๊ตฌ์กฐ๋ฅผ ๊ฐ–๊ณ ์žˆ๋‹ค. ํ”„๋กœํ† ์ฝœ๋„ postgres ๊ฑธ ๊ทธ๋Œ€๋กœ ๊ฐ–๋‹ค์“ด๋‹ค.

๋ˆ์ด ๋งŽ๋‹ค๋ฉด Cloud Spanner๋ฅผ ์“ฐ๋Š”๊ฒŒ ๊ฐ€์žฅ ํŽธ๋ฆฌํ•˜๊ณ  ์ข‹์ง€๋งŒ, ๋ˆ์ด ์—†๋‹ค๋ฉด ๊ทธ ๋‹ค์Œ ๋Œ€์•ˆ์œผ๋กœ ์“ธ๋งŒํ•˜๋‹ค. ์‹ค์ œ๋กœ๋„ ๊ทธ๋ ‡๊ฒŒ ์ฑ„ํƒ๋˜๊ณ  ์žˆ๊ณ .




Raft ์•Œ๊ณ ๋ฆฌ์ฆ˜

CockroachDB๋Š” Raft๋ผ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ํ†ตํ•ด ๋…ธ๋“œ๋“ค ๊ฐ„์˜ replication, ํ•ฉ์˜๋ฅผ ๊ตฌํ˜„ํ•œ๋‹ค.
๋”ฐ์ง€์ž๋ฉด multi-master๊ธด ํ•œ๋ฐ, ๋ชจ๋“  ๋…ธ๋“œ๊ฐ€ ๋งˆ์Šคํ„ฐ๊ฐ€ ๋˜์ง€๋Š” ์•Š๋Š”๋‹ค.

Raft ๊ตฌ์กฐ์—์„œ ๋…ธ๋“œ๋Š” ์ด 3๊ฐ€์ง€๋กœ ๋ถ„๋ฅ˜๋œ๋‹ค. ๋ฆฌ๋”(Leader), ํŒ”๋กœ์›Œ(Follower), ํ›„๋ณด์ž(Candidate)๋‹ค.


๋ฆฌ๋”๋Š” ์ „ํ†ต์ ์ธ master replica์˜ ์—ญํ• ์„ ํ•œ๋‹ค๊ณ  ๋ณด๋ฉด ๋œ๋‹ค. ์ฝ๊ธฐ์™€ ์“ฐ๊ธฐ๋ฅผ ๋‹ค ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.
ํŒ”๋กœ์›Œ๋Š” slave replica๊ณ , read only๋กœ ์‚ฌ์šฉ๋œ๋‹ค.

๋Œ€์ถฉ ์ด๋Ÿฌํ•œ ๊ตฌ์กฐ๋ฅผ ํ†ตํ•ด์„œ ๋ฆฌ๋”<>ํŒ”๋กœ์›Œ ๊ฐ„ ๋ณต์ œ๊ฐ€ ์ˆ˜ํ–‰๋œ๋‹ค.

  1. ๋ฆฌ๋”๊ฐ€ write๋ฅผ ๋ฐ›์œผ๋ฉด, ๊ทธ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ "๋กœ๊ทธ"๋กœ ์ €์žฅํ•ด์„œ ํŒ”๋กœ์›Œ๋“ค์—๊ฒŒ ๊ณต์œ ํ•ด์ค€๋‹ค.
  2. ํŒ”๋กœ์›Œ๊ฐ€ ๋ฆฌ๋”์—๊ฒŒ์„œ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ๊ณต์œ ๋ฐ›๊ณ  ๋ฌธ์ œ์—†์ด ์ฒ˜๋ฆฌํ–ˆ๋‹ค๋ฉด, ๋ฆฌ๋”์—๊ฒŒ ์„ฑ๊ณตํ–ˆ๋‹ค๊ณ  ๋‹ต์‹ ์„ ์ค€๋‹ค.
  3. ์ด๋•Œ ํŒ”๋กœ์›Œ ์ค‘ ์ผ๋ถ€๊ฐ€ ์‹คํŒจํ–ˆ๋”๋ผ๋„, ๋ฆฌ๋”๋Š” ํŒ”๋กœ์›Œ์˜ ๊ณผ๋ฐ˜์ˆ˜๊ฐ€ ์„ฑ๊ณตํ–ˆ๋‹ค๊ณ  ์•Œ๋ ค์˜ค๋ฉด, ์‹คํŒจํ•œ ํŒ”๋กœ์›Œ๋“ค์—๊ฒŒ ์„ฑ๊ณตํ• ๋•Œ๊นŒ์ง€ ๋กœ๊ทธ๋ฅผ ์žฌ์ „์†กํ•ด์ค€๋‹ค.

๊ทธ๋ฆฌ๊ณ  Candidate๋Š” ๋ง ๊ทธ๋Œ€๋กœ ๋ฆฌ๋”๊ฐ€ ๋  ์ˆ˜ ์žˆ๋Š” ํ›„๋ณด๋‹ค.
๋งŒ์•ฝ ๋ฆฌ๋”์— ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธด๋‹ค๋ฉด,

  1. ์ž„์˜์˜ ํŒ”๋กœ์›Œ๊ฐ€ ํ›„๋ณด๋กœ ์„ ์ถœ์ด ๋œ๋‹ค. ์ด๊ฑด election timeout์ด๋ผ๋Š” ๋ฌด์ž‘์œ„ ๋Œ€๊ธฐ์‹œ๊ฐ„์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ฒฐ์ •๋œ๋‹ค.
  2. ํ›„๋ณด๋Š” ๋‹ค๋ฅธ ํŒ”๋กœ์›Œ๋“ค์—๊ฒŒ ํˆฌํ‘œ๋ฅผ ์š”๊ตฌํ•œ๋‹ค.
  3. ํ›„๋ณด๊ฐ€ ์ •์ƒ ์‘๋‹ต์„ ๊ณผ๋ฐ˜ ์–ป๋Š”๋‹ค๋ฉด ๋ฐ”๋กœ ๋ฆฌ๋”๊ฐ€ ๋œ๋‹ค.

๊ณผ๋ฐ˜์„ ๊ธฐ์ค€์œผ๋กœ ์žฅ์• ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ์ด๋Ÿฌํ•œ ๊ตฌ์กฐ ํƒ“์—, Raft ์•Œ๊ณ ๋ฆฌ์ฆ˜์—์„œ๋Š” ๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜๋ฅผ 3๊ฐœ ์ด์ƒ์˜ ํ™€์ˆ˜๋กœ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์„ ๊ฐ•๋ ฅํ•˜๊ฒŒ ๊ถŒ์žฅํ•œ๋‹ค.




์„ค์น˜ํ•˜๊ธฐ

Linux์—์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์„ค์น˜ํ•  ์ˆ˜ ์žˆ๋‹ค.
ํŒŒ์ผ ๋ฐ›์•„์„œ, ์••์ถ•๋งŒ ํ‘ผ๋‹ค.

curl -o cockroach.tgz https://binaries.cockroachdb.com/cockroach-v22.2.7.linux-amd64.tgz
tar zxvf cockroach.tgz

๊ทธ๋ฆฌ๊ณ  ํ’€์–ด๋†“์€๊ฑธ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ ์ ˆํžˆ ์žฌ๋ฐฐ์น˜ํ•˜๋ฉด ๋์ด๋‹ค.

sudo mkdir -p /usr/local/lib/cockroach
sudo cp -i  cockroach-v22.2.7.linux-amd64/lib/libgeos.so /usr/local/lib/cockroach/
sudo cp -i  cockroach-v22.2.7.linux-amd64/lib/libgeos_c.so /usr/local/lib/cockroach/

sudo cp -i cockroach-v22.2.7.linux-amd64/cockroach /usr/local/bin/cockroach




Demo ๋ฒ„์ „ ์‹คํ–‰

๋‹น์žฅ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๊ตฌ์ถ•ํ•˜๊ณ  ๋‚œ๋ฆฌ๋ฅผ ์น˜์ง€ ์•Š๋”๋ผ๋„, ๊ฐ„๋‹จํ•˜๊ฒŒ ํ…Œ์ŠคํŠธํ•ด๋ณผ ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ ์ •๋„๋Š” ์ œ๊ณตํ•œ๋‹ค.
demo ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ฐ”๋กœ ๋”ฑ ํ…Œ์ŠคํŠธ์—๋งŒ ์“ธ ์ˆ˜ ์žˆ๋Š” ์ž„์‹œ ์„ธ์…˜์ด ๋œฌ๋‹ค.

๊ทธ๋Ÿผ ๊ทธ๋ƒฅ postgresql ์“ฐ๋“ฏ์ด ์“ธ ์ˆ˜ ์žˆ๋‹ค.

๋ฌธ๋ฒ•์ด๋‚˜ ํ•จ์ˆ˜๋Š” ๊ฑฐ์˜ ๋™์ผํ•˜๋‹ค.

๋‹ค์Œ ํฌ์ŠคํŠธ์—์„œ๋Š” ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๊ตฌ์ถ•ํ•˜๊ณ  ๋…ธ๋“œ๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ๋ฒ• ๋“ฑ์„ ๋‹ค๋ค„๋ณด๊ฒ ๋‹ค.



์ฐธ์กฐ
CockroachDB in Production (devsisters.com)
๋ณต์ œ ๊ณ„์ธต (cockroachlabs.com)
๋ถ„์‚ฐ ์‹œ์Šคํ…œ์˜ ๋‚ด๊ฒฐํ•จ์„ฑ์„ ๋†’์ด๋Š” ๋—๋ชฉ ํ•ฉ์˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜(Raft Consensus Algorithm)๊ณผ ์ •์กฑ์ˆ˜(Quorum) ๊ฐœ๋… ์•Œ์•„๋ณด๊ธฐ (seongjin.me)