๐ YugabyteDB ํ ์ด๋ธ์คํ์ด์ค๋ฅผ ์ฌ์ฉํ ์ง๋ฆฌ์ ๋ถํฌ
12365 ๋จ์ด sqlyugabytedbpostgresdistributed
YugabyteDB ํด๋ฌ์คํฐ ์ค์
5๊ฐ์ ๋ ธ๋๋ฅผ ์์ํฉ๋๋ค.
docker network create -d bridge yb
docker run -d --network yb --name yb-eu-1 -p5001:5433 -p7001:7000 -p9001:9000 \
yugabytedb/yugabyte:2.15.0.0-b11 \
yugabyted start --daemon=false --listen yb-eu-1 \
--master_flags="placement_zone=1,placement_region=eu,placement_cloud=cloud" \
--tserver_flags="placement_zone=1,placement_region=eu,placement_cloud=cloud"
docker run -d --network yb --name yb-eu-2 -p5002:5433 -p7002:7000 -p9002:9000 \
yugabytedb/yugabyte:2.15.0.0-b11 \
yugabyted start --daemon=false --listen yb-eu-2 --join yb-eu-1 \
--master_flags="placement_zone=2,placement_region=eu,placement_cloud=cloud" \
--tserver_flags="placement_zone=2,placement_region=eu,placement_cloud=cloud"
docker run -d --network yb --name yb-us-1 -p5003:5433 -p7003:7000 -p9003:9000 \
yugabytedb/yugabyte:2.15.0.0-b11 \
yugabyted start --daemon=false --listen yb-us-1 --join yb-eu-1 \
--master_flags="placement_zone=1,placement_region=us,placement_cloud=cloud" \
--tserver_flags="placement_zone=1,placement_region=us,placement_cloud=cloud"
docker run -d --network yb --name yb-ap-1 -p5004:5433 -p7004:7000 -p9004:9000 \
yugabytedb/yugabyte:2.15.0.0-b11 \
yugabyted start --daemon=false --listen yb-ap-1 --join yb-eu-1 \
--master_flags="placement_zone=1,placement_region=ap,placement_cloud=cloud" \
--tserver_flags="placement_zone=1,placement_region=ap,placement_cloud=cloud"
docker run -d --network yb --name yb-au-1 -p5005:5433 -p7005:7000 -p9005:9000 \
yugabytedb/yugabyte:2.15.0.0-b11 \
yugabyted start --daemon=false --listen yb-au-1 --join yb-eu-1 \
--master_flags="placement_zone=1,placement_region=au,placement_cloud=cloud" \
--tserver_flags="placement_zone=1,placement_region=au,placement_cloud=cloud"
yugabyted
๊ฐ cloud1.datacenter1.rack1
๋ฅผ ์ ์ํ์ง๋ง ๋ค๋ฅธ ์ด๋ฆ์ ์ฌ์ฉํ๋ฏ๋ก RF=3์ ์ ์งํ๋ฉด์ ๊ธฐ๋ณธ ๋ฐฐ์น๋ฅผ ์ ์ํ์ง๋ง ๋ ๋คeu
์ ํ๋ ์ด์์ ํ๋ธ๋ฆฟ์ ํฌํจํฉ๋๋ค.docker exec -i yb-eu-1 yb-admin -master_addresses yb-eu-1:7100,yb-eu-2:7100,yb-us-1:7100 \
modify_placement_info \
cloud.eu.1:1,cloud.eu.2:1,cloud.us.1:0,cloud.ap.1:0,cloud.au.1:0 \
3
docker exec -i yb-eu-1 yb-admin -master_addresses yb-eu-1:7100,yb-eu-2:7100,yb-us-1:7100 \
set_preferred_zones cloud.eu.1 cloud.eu.2
ํ ์ด๋ธ์คํ์ด์ค
์ด ์๋ฆฌ์ฆ์ ์ฒซ ๋ฒ์งธ ๊ฒ์๋ฌผ์์๋
yb-admin modify_placement_info cloud.eu.1:1,cloud.eu.2:1,cloud.us.1:1,cloud.ap.1:1,cloud.au.1:1 \
5
๋ก ๋ณต์ ๋ณธ ๋ฐ ๋ฐฐ์น ๋ธ๋ก ์๋ฅผ ์ ์ํ๊ณ yb-admin set_preferred_zones cloud.eu.1 cloud.eu.2
๋ก ๋ฆฌ๋ ์ ํธ๋๋ฅผ ์ ์ํ์ต๋๋ค. ์ด๊ฒ์ ํด๋ฌ์คํฐ ์์ค์ด์์ต๋๋ค. ์ฌ๊ธฐ์๋ ๊ธฐ๋ณธ๊ฐ(๋ฆฌ๋๊ฐ ๋ชจ๋ ํด๋ฌ์คํฐ์ ๋ถ์ฐ๋ RF=3)์ ๊ทธ๋๋ก ๋์ง๋ง ๋์ผํ ๋ฐฐ์น๋ก eu_preferred
๋ฅผ ์์ฑํฉ๋๋ค.psql -p 5001 -c '
create tablespace eu_preferred with (
replica_placement=$placement$
{
"num_replicas": 5,
"placement_blocks": [{
"cloud": "cloud",
"region": "eu",
"zone": "1",
"min_num_replicas": 1,
"leader_preference": 1
},
{
"cloud": "cloud",
"region": "eu",
"zone": "2",
"min_num_replicas": 1,
"leader_preference": 1
},
{
"cloud": "cloud",
"region": "us",
"zone": "1",
"min_num_replicas": 1
},
{
"cloud": "cloud",
"region": "ap",
"zone": "1",
"min_num_replicas": 1
},
{
"cloud": "cloud",
"region": "au",
"zone": "1",
"min_num_replicas": 1
}
]
}$placement$)
'
๋ฆฌ๋ ๋ฐ ์ถ์ข ์ ๋ฐฐ์น
์ด์ ๊ฒ์๋ฌผ๊ณผ ๋์ผํ๊ฒ ์คํํ์ง๋ง ์ ํ ์ด๋ธ์คํ์ด์ค์ ํ ์ด๋ธ์ ์์ฑํฉ๋๋ค.
psql -p 5005 -e <<SQL
drop table if exists demo;
create table demo tablespace eu_preferred
as select generate_series(1,1000) n;
update demo set n=n+1;
\watch 0.01
SQL
๋ฆฌ๋๋
eu
์ ์์ผ๋ฉฐ ์ฌ๊ธฐ์์ ์ฝ๊ธฐ ๋ฐ ์ฐ๊ธฐ๊ฐ ๋ฐ์ํฉ๋๋ค.๋ชจ๋ ์ง์ญ์ ํ๋ก์๊ฐ ์์ต๋๋ค.
์ด ํ ์ด๋ธ์คํ์ด์ค์ ํ ์ด๋ธ์ ์ด ์๋ฆฌ์ฆ์ ๋์ผํ ๋ถํฌ๋ฅผ ๊ฐ์ง๋๋ค.
๊ธฐ๋ณธ ๋ถํฌ
ํ ์ด๋ธ์คํ์ด์ค๋ ํน์ ํ ์ด๋ธ์ ๋ํ ์ ์ด๋ฅผ ์ ๊ณตํฉ๋๋ค. ๊ทธ๋ฌ๋ ํด๋ฌ์คํฐ ๊ตฌ์ฑ์ ๋ค๋ฅธ ์ฌ์ฉ์์๊ฒ๋ ๊ธฐ๋ณธ๊ฐ์ ๋๋ค. ํ ์ด๋ธ์คํ์ด์ค๋ฅผ ์ธ๊ธํ์ง ์์ผ๋ฉด ๋ฐฐํฌ๋ ํด๋ฌ์คํฐ์ ๊ธฐ๋ณธ ํ๋ธ๋ฆฟ ๋ฐฐ์น๋ฅผ ๋ฐ๋ฆ ๋๋ค.
psql -p 5005 -e <<SQL
drop table if exists simple ;
create table simple
as select generate_series(1,1000) n;
update simple set n=n+1;
\watch 0.01
SQL
์ด๊ฒ์
eu
์ ๋ ๊ฐ์ ํ๋ธ๋ฆฟ์ด ์๋ ๋ด ํด๋ฌ์คํฐ์ ๊ธฐ๋ณธ๊ฐ์ ์ฌ์ฉํ๊ณ ๊ฑฐ๊ธฐ์ ์ ํธํ๋ ๋ฆฌ๋๊ฐ ์๊ณ ๋ค๋ฅธ ์ง์ญ์ ํ๋ก์๊ฐ ํ ๋ช
์์ต๋๋ค.์ ๋ฐ์ดํธ๋ ๋ฆฌ๋์๊ฒ ์ ๋ฌ๋ฉ๋๋ค.
์ด์
au
์ ์ฐ๊ฒฐํ๊ณ ํ๋ก์ด ์ฝ๊ธฐ๋ฅผ ํ์ฑํํฉ๋๋ค.psql -p 5005 -e <<SQL
set yb_read_from_followers=on;
set default_transaction_read_only = on;
explain analyze select * from simple;
\watch 0.01
SQL
๊ธฐ๋ณธ ํด๋ฌ์คํฐ ๋ฐฐํฌ(RF=3์ธ 5๊ฐ ๋ ธ๋)๋ฅผ ์ฌ์ฉํ๋ ์ด ๊ฐ๋จํ ํ ์ด๋ธ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ๋ชจ๋ ๋ ธ๋์ ๋ชจ๋ ๋ฐ์ดํฐ์ ๋ณต์ฌ๋ณธ์ด ์์ผ๋ฉฐ ์ฝ๊ธฐ๊ฐ ๋ชจ๋ ๋ ธ๋์ ๋ฐฐํฌ๋ฉ๋๋ค.
์ด๊ฒ์ ํ๋ก์ด ์ฝ๊ธฐ์ ๋ ๋ค๋ฅธ ์ฅ์ ์ ๋๋ค. ๋ฆฌ๋๊ฐ ์๋ ๊ฒฝ์ฐ์๋ ์ฝ๊ธฐ๊ฐ ๋ถ์ฐ๋ฉ๋๋ค.
๊ธฐ๋ณธ ๋ฐฐ์น ๋ฐ ํ ์ด๋ธ์คํ์ด์ค ๋๋ถ์ ๋ ๊ฒฝ์ฐ ๋ชจ๋ ํ๋ธ๋ฆฟ ๋ฆฌ๋๋ฅผ ํน๋ณํ ๊ณ ๋ คํ์ฌ ๋ชจ๋ ์ง์ญ์์ ๋ณต์ ํ ํ ์ด๋ธ๊ณผ ๋ฐฐํฌํ ํ ์ด๋ธ์ ๊ฒฐ์ ํ ์ ์์ต๋๋ค. ํ ์ด๋ธ์ด๋ ์ธ๋ฑ์ค์ ํํฐ์ ๋ ์๋ฏธํฉ๋๋ค. ์ฌ๊ธฐ์๋ ๋ฆฌ๋๋ฅผ ๋ฐฐ์นํ ์ฃผ์ ์ง์ญ์ผ๋ก
eu
๋ฅผ ๊ณ ๋ คํ์ง๋ง ์ ์ธ์ ํํฐ์
๋์ ์ฌ์ฉํ๋ฉด ์ฌ์ฉ์ ๊ตญ๊ฐ์ ๊ฐ์ ํ
์ด๋ธ ์ด์ ๋น์ฆ๋์ค ๊ฐ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง ์๋ ์์ต๋๋ค.
Reference
์ด ๋ฌธ์ ์ ๊ดํ์ฌ(๐ YugabyteDB ํ ์ด๋ธ์คํ์ด์ค๋ฅผ ์ฌ์ฉํ ์ง๋ฆฌ์ ๋ถํฌ), ์ฐ๋ฆฌ๋ ์ด๊ณณ์์ ๋ ๋ง์ ์๋ฃ๋ฅผ ๋ฐ๊ฒฌํ๊ณ ๋งํฌ๋ฅผ ํด๋ฆญํ์ฌ ๋ณด์๋ค https://dev.to/yugabyte/geo-distribution-with-yugabytedb-tablespaces-4ko6ํ ์คํธ๋ฅผ ์์ ๋กญ๊ฒ ๊ณต์ ํ๊ฑฐ๋ ๋ณต์ฌํ ์ ์์ต๋๋ค.ํ์ง๋ง ์ด ๋ฌธ์์ URL์ ์ฐธ์กฐ URL๋ก ๋จ๊ฒจ ๋์ญ์์ค.
์ฐ์ํ ๊ฐ๋ฐ์ ์ฝํ ์ธ ๋ฐ๊ฒฌ์ ์ ๋ (Collection and Share based on the CC Protocol.)
์ข์ ์นํ์ด์ง ์ฆ๊ฒจ์ฐพ๊ธฐ
๊ฐ๋ฐ์ ์ฐ์ ์ฌ์ดํธ ์์ง
๊ฐ๋ฐ์๊ฐ ์์์ผ ํ ํ์ ์ฌ์ดํธ 100์ ์ถ์ฒ ์ฐ๋ฆฌ๋ ๋น์ ์ ์ํด 100๊ฐ์ ์์ฃผ ์ฌ์ฉํ๋ ๊ฐ๋ฐ์ ํ์ต ์ฌ์ดํธ๋ฅผ ์ ๋ฆฌํ์ต๋๋ค