[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๋ก ์ฌ์ฉ๋๋ค.
๋์ถฉ ์ด๋ฌํ ๊ตฌ์กฐ๋ฅผ ํตํด์ ๋ฆฌ๋<>ํ๋ก์ ๊ฐ ๋ณต์ ๊ฐ ์ํ๋๋ค.
- ๋ฆฌ๋๊ฐ write๋ฅผ ๋ฐ์ผ๋ฉด, ๊ทธ ๋ณ๊ฒฝ์ฌํญ์ "๋ก๊ทธ"๋ก ์ ์ฅํด์ ํ๋ก์๋ค์๊ฒ ๊ณต์ ํด์ค๋ค.
- ํ๋ก์๊ฐ ๋ฆฌ๋์๊ฒ์ ๋ณ๊ฒฝ์ฌํญ์ ๊ณต์ ๋ฐ๊ณ ๋ฌธ์ ์์ด ์ฒ๋ฆฌํ๋ค๋ฉด, ๋ฆฌ๋์๊ฒ ์ฑ๊ณตํ๋ค๊ณ ๋ต์ ์ ์ค๋ค.
- ์ด๋ ํ๋ก์ ์ค ์ผ๋ถ๊ฐ ์คํจํ๋๋ผ๋, ๋ฆฌ๋๋ ํ๋ก์์ ๊ณผ๋ฐ์๊ฐ ์ฑ๊ณตํ๋ค๊ณ ์๋ ค์ค๋ฉด, ์คํจํ ํ๋ก์๋ค์๊ฒ ์ฑ๊ณตํ ๋๊น์ง ๋ก๊ทธ๋ฅผ ์ฌ์ ์กํด์ค๋ค.
๊ทธ๋ฆฌ๊ณ Candidate๋ ๋ง ๊ทธ๋๋ก ๋ฆฌ๋๊ฐ ๋ ์ ์๋ ํ๋ณด๋ค.
๋ง์ฝ ๋ฆฌ๋์ ๋ฌธ์ ๊ฐ ์๊ธด๋ค๋ฉด,
- ์์์ ํ๋ก์๊ฐ ํ๋ณด๋ก ์ ์ถ์ด ๋๋ค. ์ด๊ฑด election timeout์ด๋ผ๋ ๋ฌด์์ ๋๊ธฐ์๊ฐ์ ๊ธฐ๋ฐ์ผ๋ก ๊ฒฐ์ ๋๋ค.
- ํ๋ณด๋ ๋ค๋ฅธ ํ๋ก์๋ค์๊ฒ ํฌํ๋ฅผ ์๊ตฌํ๋ค.
- ํ๋ณด๊ฐ ์ ์ ์๋ต์ ๊ณผ๋ฐ ์ป๋๋ค๋ฉด ๋ฐ๋ก ๋ฆฌ๋๊ฐ ๋๋ค.
๊ณผ๋ฐ์ ๊ธฐ์ค์ผ๋ก ์ฅ์ ๋ฅผ ์ฒ๋ฆฌํ๋ ์ด๋ฌํ ๊ตฌ์กฐ ํ์, 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)