GitHub Enterprise Server ํด๋ฌ์คํฐ ๋ ธ๋ ๋์ฒด ์ ๋ณด
GitHub Enterprise Server ํด๋ฌ์คํฐ์ ๊ธฐ๋ฅ ๋ ธ๋๋ฅผ ๋์ฒดํ๊ฑฐ๋ ์๊ธฐ์น ์๊ฒ ์คํจํ ๋ ธ๋๋ฅผ ๋์ฒดํ ์ ์์ต๋๋ค.
๋ ธ๋๋ฅผ ๋์ฒดํ ํ GitHub Enterprise Server ์ธ์คํด์ค๋ ์์ ์ ์ ๋ ธ๋์ ์๋์ผ๋ก ๋ถ์ฐํ์ง ์์ต๋๋ค. ์ธ์คํด์ค๊ฐ ๋ ธ๋ ๊ฐ์ ์์ ์ ๋ฐธ๋ฐ์ฑํ๋๋ก ๊ฐ์ ํ ์ ์์ต๋๋ค. ์์ธํ ๋ด์ฉ์ ํด๋ฌ์คํฐ ์ํฌ๋ก๋ ๋ฆฌ๋ฐธ๋ฐ์ฑ์(๋ฅผ) ์ฐธ์กฐํ์ธ์.
๊ฒฝ๊ณ
์ถฉ๋์ ๋ฐฉ์งํ๊ธฐ ์ํด, ์ด์ ์ ํด๋ฌ์คํฐ์ ๋ ธ๋์ ํ ๋น๋ ํธ์คํธ ์ด๋ฆ์ ๋ค์ ์ฌ์ฉํ์ง ๋ง์ธ์.
๊ธฐ๋ฅ ๋ ธ๋ ๋ฐ๊พธ๊ธฐ
ํด๋ฌ์คํฐ์ ๊ธฐ์กด ๊ธฐ๋ฅ ๋ ธ๋๋ฅผ ๋์ฒดํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด VM(๊ฐ์ ๋จธ์ )์ ์ถ๊ฐ CPU, ๋ฉ๋ชจ๋ฆฌ ๋๋ ์คํ ๋ฆฌ์ง ๋ฆฌ์์ค๋ฅผ ์ ๊ณตํ ์ ์์ต๋๋ค.
๊ธฐ๋ฅ ๋ ธ๋๋ฅผ ๋์ฒดํ๋ ค๋ฉด ์ VM์ GitHub Enterprise Server ์ดํ๋ผ์ด์ธ์ค๋ฅผ ์ค์นํ๊ณ , IP ์ฃผ์๋ฅผ ๊ตฌ์ฑํ๊ณ , ํด๋ฌ์คํฐ ๊ตฌ์ฑ ํ์ผ์ ์ ๋ ธ๋๋ฅผ ์ถ๊ฐํ๊ณ , ํด๋ฌ์คํฐ๋ฅผ ์ด๊ธฐํํ๊ณ ๊ตฌ์ฑ์ ์ ์ฉํ ๋ค์, ๋์ฒด๋ ๋ ธ๋๋ฅผ ์คํ๋ผ์ธ์ผ๋ก ์ ํํฉ๋๋ค.
์ฐธ๊ณ ํญ๋ชฉ
์ฃผ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ ธ๋๋ฅผ ๊ต์ฒดํ๋ ๊ฒฝ์ฐ, ์ฃผ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ ธ๋ ๊ต์ฒด๋ฅผ ์ฐธ์กฐํ์ธ์.
-
๋์ฒด ๋ ธ๋์ ๊ณ ์ ํ ํธ์คํธ ์ด๋ฆ์ ์ฌ์ฉํ์ฌ GitHub Enterprise Server๋ฅผ ํ๋ก๋น์ ๋ํ๊ณ ์ค์นํฉ๋๋ค.
-
๊ด๋ฆฌ ์ ธ ๋๋ DHCP๋ฅผ ์ฌ์ฉํ์ฌ ๋์ฒด ๋ ธ๋์ IP ์ฃผ์๋ง ๊ตฌ์ฑํฉ๋๋ค. ๋ค๋ฅธ ์ค์ ์ ๊ตฌ์ฑํ์ง ๋ง์ธ์.
-
๋ชจ๋ ๋ ธ๋์์ ์๋ก ํ๋ก๋น์ ๋๋ ๋์ฒด ๋ ธ๋๋ฅผ ์ถ๊ฐํ๋ ค๋ฉด
cluster.confํ์ผ์ ์์ ํ์ฌ ์คํจํ ๋ ธ๋๋ฅผ ์ ๊ฑฐํ๊ณ ๋์ฒด ๋ ธ๋๋ฅผ ์ถ๊ฐํฉ๋๋ค. ์๋ฅผ ๋ค์ด ์ด ์์ ๋cluster.confํ์ผ์ghe-data-node-3์ ์๋ก ํ๋ก๋น์ ๋๋ ๋ ธ๋์ธghe-replacement-data-node-3์ผ๋ก ๋ฐ๊ฟ๋๋ค.[cluster "ghe-replacement-data-node-3"] hostname = ghe-replacement-data-node-3 ipv4 = 192.168.0.7 # ipv6 = fd12:3456:789a:1::7 consul-datacenter = PRIMARY-DATACENTER git-server = true pages-server = true mysql-server = true elasticsearch-server = true redis-server = true memcache-server = true metrics-server = true storage-server = true
์ MySQL ๋ณต์ ๋ณธ(replica) ๋ ธ๋์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์๋๋ฅผ ์ฐ๊ธฐํ๋๋ก ์ ํํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ฉด ํธ๋ํฝ์ ๋ํ ์ดํ๋ผ์ด์ธ์ค๋ฅผ ๋ ๋นจ๋ฆฌ ์ด ์ ์์ต๋๋ค. ์์ธํ ๋ด์ฉ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์๋ ์ฐ๊ธฐ์(๋ฅผ) ์ฐธ์กฐํ์ธ์.
-
์์ ๋
cluster.conf๋ฅผ ์ฌ์ฉํ์ฌ ๋ ธ๋์ ๊ด๋ฆฌ ์ ธ์์ghe-cluster-config-init๋ฅผ ์คํํฉ๋๋ค. ๊ทธ๋ฌ๋ฉด ํด๋ฌ์คํฐ์์ ์๋ก ์ถ๊ฐ๋ ๋ ธ๋๊ฐ ์ด๊ธฐํ๋ฉ๋๋ค. -
๋์ผํ ๋ ธ๋์์
ghe-cluster-config-apply๋ฅผ ์คํํฉ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ๊ตฌ์ฑ ํ์ผ์ ์ ํจ์ฑ์ด ๊ฒ์ฌ๋๊ณ , ํด๋ฌ์คํฐ์ ๊ฐ ๋ ธ๋์ ๋ณต์ฌ๋๊ณ , ์์ ๋cluster.confํ์ผ์ ๋ฐ๋ผ ๊ฐ ๋ ธ๋๊ฐ ๊ตฌ์ฑ๋ฉ๋๋ค. -
๊ต์ฒดํ ๋ ธ๋๋ฅผ ์คํ๋ผ์ธ์ผ๋ก ์ค์ ํ๋ ค๋ฉด ํด๋ฌ์คํฐ์ ๊ธฐ๋ณธ MySQL ๋ ธ๋์์ ๋ค์ ๋ช ๋ น์ ์คํํฉ๋๋ค.
ghe-remove-node NODE-HOSTNAME์ด ๋ช ๋ น์ ์คํํ๋ฉด ๋ ธ๋์์ ์คํ ์ค์ธ ๋ชจ๋ ๋ฐ์ดํฐ ์๋น์ค์์ ๋ฐ์ดํฐ๋ฅผ ์ด๋ํ๊ณ , ํด๋น ๋ ธ๋๋ฅผ ๊ตฌ์ฑ์์ ์คํ๋ผ์ธ์ผ๋ก ํ์ํ๋ฉฐ ํธ๋ํฝ์ด ํด๋น ๋ ธ๋๋ก ๋ผ์ฐํ ๋์ง ์๊ฒ ์ค์ง์ํต๋๋ค. ์์ธํ ๋ด์ฉ์ ๋ช ๋ น์ค ์ ํธ๋ฆฌํฐ์(๋ฅผ) ์ฐธ์กฐํ์ธ์.
์๊ธ ์ํฉ์์ ๋ ธ๋ ๋ฐ๊พธ๊ธฐ
ํด๋ฌ์คํฐ์์ ์คํจํ ๋ ธ๋๋ฅผ ๋์ฒดํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ์ํํธ์จ์ด ๋๋ ํ๋์จ์ด ๋ฌธ์ ๊ฐ ๋ ธ๋์ ๊ฐ์ฉ์ฑ์ ์ํฅ์ ์ค ์ ์์ต๋๋ค.
์ฐธ๊ณ ํญ๋ชฉ
์ฃผ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ ธ๋๋ฅผ ๊ต์ฒดํ๋ ๊ฒฝ์ฐ, ์ฃผ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ ธ๋ ๊ต์ฒด๋ฅผ ์ฐธ์กฐํ์ธ์.
์๊ธ ์ํฉ์์ ๋ ธ๋๋ฅผ ๊ต์ฒดํ๋ ค๋ฉด ์คํจํ ๋ ธ๋๋ฅผ ์คํ๋ผ์ธ์ผ๋ก ์ค์ ํ๊ณ , ํด๋ฌ์คํฐ์ ๊ต์ฒด ๋ ธ๋๋ฅผ ์ถ๊ฐํ ๋ค์, ๋ช ๋ น์ ์คํํด ์ ๊ฑฐ๋ ๋ ธ๋์ ๋ฐ์ดํฐ ์๋น์ค์ ๋ํ ์ฐธ์กฐ๋ฅผ ์ ๊ฑฐํฉ๋๋ค.
-
ํด๋ฌ์คํฐ์์ ๋ฌธ์ ๊ฐ ๋ฐ์ ์ค์ธ ๋ ธ๋๋ฅผ ์ ๊ฑฐํ๋ ค๋ฉด, ํด๋ฌ์คํฐ์ ๊ธฐ๋ณธ MySQL ๋ ธ๋์์ ๋ค์ ๋ช ๋ น์ ์คํํฉ๋๋ค. ์ฌ๊ธฐ์์ NODE-HOSTNAME์ ์คํ๋ผ์ธ์ผ๋ก ์ ํํ๋ ค๋ ๋ ธ๋์ ํธ์คํธ ์ด๋ฆ์ผ๋ก ๊ต์ฒดํฉ๋๋ค.
ghe-remove-node --no-evacuate NODE-HOSTNAME์ด ๋ช ๋ น์ ์คํํ๋ฉด ํด๋น ๋ ธ๋๋ฅผ ๊ตฌ์ฑ์์ ์คํ๋ผ์ธ์ผ๋ก ํ์ํ๊ณ , ํธ๋ํฝ์ด ํด๋น ๋ ธ๋๋ก ๋ผ์ฐํ ๋์ง ์๊ฒ ์ค์ง์ํต๋๋ค. ์ด์ ์ด ๋ช ๋ น์
no-evacuate๋ชจ๋์์ ์คํํ ์ ์์ต๋๋ค. ์ด ์ ์ฐจ ํ๋ฐ์ ๋ ธ๋์ ๋ฐ์ดํฐ ์๋น์ค์ ๋ชจ๋ ๋ณต์ ๋ณธ์ ํด๋ฌ์คํฐ์์ ๋ค๋ฅธ ์ด์ฉ ๊ฐ๋ฅํ ๋ ธ๋๋ก ๋ณต์ฌํ๋ผ๊ณ ์ง์ํ๋ ๋ช ๋ น์ ์คํํ๊ฒ ๋๊ธฐ ๋๋ฌธ์ ๋๋ค. ์์ธํ ๋ด์ฉ์ ๋ช ๋ น์ค ์ ํธ๋ฆฌํฐ์(๋ฅผ) ์ฐธ์กฐํ์ธ์. -
๊ต์ฒด ๋ ธ๋๋ฅผ ํด๋ฌ์คํฐ์ ์ถ๊ฐํฉ๋๋ค.
- ๋์ฒด ๋ ธ๋์ ๊ณ ์ ํ ํธ์คํธ ์ด๋ฆ์ ์ฌ์ฉํ์ฌ GitHub Enterprise Server๋ฅผ ํ๋ก๋น์ ๋ํ๊ณ ์ค์นํฉ๋๋ค.
-
๊ด๋ฆฌ ์ ธ ๋๋ DHCP๋ฅผ ์ฌ์ฉํ์ฌ ๋์ฒด ๋ ธ๋์ IP ์ฃผ์๋ง ๊ตฌ์ฑํฉ๋๋ค. ๋ค๋ฅธ ์ค์ ์ ๊ตฌ์ฑํ์ง ๋ง์ธ์.
-
์๋ก ํ๋ก๋น์ ๋๋ ๋ ธ๋๋ฅผ ์ถ๊ฐํ๋ ค๋ฉด ์๋ฌด ๋ ธ๋์์๋
cluster.confํ์ผ์ ์์ ํ์ฌ ๊ต์ฒด ๋ ธ๋๋ฅผ ์ถ๊ฐํ๋ฉด ๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด ์ด ์์ ๋cluster.confํ์ผ์ ์๋ก ํ๋ก๋น์ ๋๋ ๋ ธ๋ghe-replacement-data-node-3์(๋ฅผ) ์ถ๊ฐํฉ๋๋ค.[cluster "ghe-replacement-data-node-3"] hostname = ghe-replacement-data-node-3 ipv4 = 192.168.0.7 # ipv6 = fd12:3456:789a:1::7 git-server = true pages-server = true mysql-server = true elasticsearch-server = true redis-server = true memcache-server = true metrics-server = true storage-server = true
-
์์ ๋
cluster.conf๋ฅผ ์ฌ์ฉํ์ฌ ๋ ธ๋์ ๊ด๋ฆฌ ์ ธ์์ghe-cluster-config-init๋ฅผ ์คํํฉ๋๋ค. ๊ทธ๋ฌ๋ฉด ํด๋ฌ์คํฐ์์ ์๋ก ์ถ๊ฐ๋ ๋ ธ๋๊ฐ ์ด๊ธฐํ๋ฉ๋๋ค.
-
-
๋์ผํ ๋ ธ๋์์
ghe-cluster-config-apply๋ฅผ ์คํํฉ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ๊ตฌ์ฑ ํ์ผ์ ์ ํจ์ฑ์ด ๊ฒ์ฌ๋๊ณ , ํด๋ฌ์คํฐ์ ๊ฐ ๋ ธ๋์ ๋ณต์ฌ๋๊ณ , ์์ ๋cluster.confํ์ผ์ ๋ฐ๋ผ ๊ฐ ๋ ธ๋๊ฐ ๊ตฌ์ฑ๋ฉ๋๋ค. -
์ ๊ฑฐํ ๋ ธ๋์ ๋ฐ์ดํฐ ์๋น์ค์ ๋ํ ์ฐธ์กฐ๋ฅผ ์ ๊ฑฐํฉ๋๋ค.
-
์ ๊ฑฐํ ๋ ธ๋์ UUID๋ฅผ ์ฐพ์ต๋๋ค. UUID๋ฅผ ์ฐพ์ผ๋ ค๋ฉด ๋ค์ ๋ช ๋ น์ ์คํํ์ฌ
HOSTNAME์(๋ฅผ) ํด๋น ๋ ธ๋์ ํธ์คํธ ์ด๋ฆ์ผ๋ก ๊ต์ฒดํฉ๋๋ค. ์ด UUID๋ฅผ ๋ค์ ๋จ๊ณ์์ ์ฌ์ฉํ๊ฒ ๋ฉ๋๋ค.ghe-config cluster.HOSTNAME.uuid -
๋ฐ์ดํฐ ์๋น์ค์ ๋ํ ์ฐธ์กฐ๋ฅผ ์ ๊ฑฐํ๋ ค๋ฉด ๋ค์ ๋ช ๋ น์ ์คํํฉ๋๋ค.
UUID์(๋ฅผ) ๋ ธ๋์ UUID๋ก ๋ฐ๊ฟ๋๋ค.์ด๋ฌํ ๋ช ๋ น์ ๋ ธ๋์ ๊ฐ ์๋น์ค๊ฐ ์๊ตฌ์ ์ผ๋ก ์ ๊ฑฐ๋๋ค๋ ์๋ฏธ์ ๋๋ค. ์๋น์ค๊ฐ ํด๋น ๋ ธ๋์ ํฌํจ๋ ๋ชจ๋ ๋ณต์ ๋ณธ์ ํด๋ฌ์คํฐ ๋ด ์ด์ฉ ๊ฐ๋ฅํ ๋ ธ๋์์ ์ฌ์์ฑํฉ๋๋ค.
์ฐธ๊ณ ํญ๋ชฉ
์ด๋ฌํ ๋ช ๋ น ๋๋ฌธ์ ๋ฐ์ดํฐ๊ฐ ๋ณต์ ๋ณธ ์ ์ฒด์์ ๋ฆฌ๋ฐธ๋ฐ์ค๋๋ ๋์ ์๋ฒ์์ ๋ถํ๊ฐ ์ฆ๊ฐํ ์ ์์ต๋๋ค.
git-server์๋น์ค์ ๊ฒฝ์ฐ(๋ฆฌํฌ์งํ ๋ฆฌ ๋ฐ์ดํฐ์ ์ฌ์ฉ):ghe-spokesctl server destroy git-server-UUIDpages-server์๋น์ค์ ๊ฒฝ์ฐ(GitHub Pages ์ฌ์ดํธ ๋น๋์ ์ฌ์ฉ):ghe-dpages remove pages-server-UUIDstorage-server์๋น์ค์ ๊ฒฝ์ฐ(Git LFS ๋ฐ์ดํฐ, ์๋ฐํ ์ด๋ฏธ์ง, ํ์ผ ์ฒจ๋ถํ์ผ ๋ฐ ๋ฆด๋ฆฌ์ค ์์นด์ด๋ธ์ ์ฌ์ฉ):ghe-storage destroy-host storage-server-UUID --force
-
-
์๋๋ฉด,
cluster.confํ์ผ์์ ์ ๊ฑฐ๋ ๋ ธ๋์ ๋ํ ํญ๋ชฉ์ ์ญ์ ํด๋ ๋ฉ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉดcluster.confํ์ผ์ ๊ตฌ์ฑ๋ ์ํ๋ก ์ ์งํ๊ณ , ํฅํconfig-apply์คํ ์ ์๊ฐ์ด ์ ์ฝ๋ฉ๋๋ค.-
ํ์ผ์์ ํญ๋ชฉ์ ์ ๊ฑฐํ๋ ค๋ฉด ๋ค์ ๋ช ๋ น์ ์คํํ๊ณ ,
HOSTNAME์(๋ฅผ) ์ ๊ฑฐ๋ ๋ ธ๋์ ํธ์คํธ ์ด๋ฆ์ผ๋ก ๊ต์ฒดํฉ๋๋ค.ghe-config --remove-section "cluster.HOSTNAME" -
๊ตฌ์ฑ์ ํด๋ฌ์คํฐ์ ๋ค๋ฅธ ๋ ธ๋๋ก ๋ณต์ฌํ๋ ค๋ฉด
cluster.conf์(๋ฅผ) ์์ ํ ๋ ธ๋์ ๊ด๋ฆฌ ์ ธ์์ghe-cluster-config-apply์(๋ฅผ) ์คํํฉ๋๋ค.
-
์ฃผ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ ธ๋ ๋ฐ๊พธ๊ธฐ(MySQL ๋๋ MySQL ๋ฐ MSSQL)
๋ฐ์ดํฐ๋ฒ ์ด์ค ์๋น์ค๋ฅผ ์ ๊ณตํ๋ ค๋ฉด ํด๋ฌ์คํฐ์ ๊ธฐ๋ณธ MySQL ๋ ธ๋์ ํ๋ ์ด์์ ๋ณต์ ๋ณธ(replica) MySQL ๋ ธ๋๊ฐ ํ์ํฉ๋๋ค. ์์ธํ ๋ด์ฉ์ ํด๋ฌ์คํฐ ๋ ธ๋ ์ ๋ณด์(๋ฅผ) ์ฐธ์กฐํ์ธ์.
ํด๋ฌ์คํฐ์ GitHub Actions๊ฐ ์ฌ์ฉํ๋๋ก ์ค์ ๋ ๊ฒฝ์ฐ ๋ค์ ๋จ๊ณ์์ MSSQL๋ ๊ณ ๋ คํด์ผ ํฉ๋๋ค.
์ฃผ MySQL(๋๋ MySQL ๋ฐ MSSQL) ๋ ธ๋์ ๋ ๋ง์ ๋ฆฌ์์ค๋ฅผ ํ ๋นํด์ผ ํ๊ฑฐ๋ ์คํจํ ๋ ธ๋๋ฅผ ๊ต์ฒดํด์ผ ํ๋ ๊ฒฝ์ฐ ํด๋ฌ์คํฐ์ ์ ๋ ธ๋๋ฅผ ์ถ๊ฐํ ์ ์์ต๋๋ค. ๊ฐ๋ ์ค์ง ์๊ฐ์ ์ต์ํํ๋ ค๋ฉด ์ ๋ ธ๋๋ฅผ ์ถ๊ฐํ๊ณ MySQL(๋๋ MySQL ๋ฐ MSSQL) ๋ฐ์ดํฐ๋ฅผ ๋ณต์ ํ ๋ค์, ์ฃผ ๋ ธ๋๋ก ์น๊ฒฉํฉ๋๋ค. ์น๊ฒฉ ๊ณผ์ ์๋ ์ฝ๊ฐ์ ๊ฐ๋ ์ค์ง ์๊ฐ์ด ํ์ํฉ๋๋ค.
-
๋์ฒด ๋ ธ๋์ ๊ณ ์ ํ ํธ์คํธ ์ด๋ฆ์ ์ฌ์ฉํ์ฌ GitHub Enterprise Server๋ฅผ ํ๋ก๋น์ ๋ํ๊ณ ์ค์นํฉ๋๋ค.
-
๊ด๋ฆฌ ์ ธ ๋๋ DHCP๋ฅผ ์ฌ์ฉํ์ฌ ๋์ฒด ๋ ธ๋์ IP ์ฃผ์๋ง ๊ตฌ์ฑํฉ๋๋ค. ๋ค๋ฅธ ์ค์ ์ ๊ตฌ์ฑํ์ง ๋ง์ธ์.
-
GitHub Enterprise Server ์ธ์คํด์ค์ ์ฐ๊ฒฐํ๋ ค๋ฉด ํด๋ฌ์คํฐ์ ๋ ธ๋ ์ค ํ๋์ SSHํฉ๋๋ค. ์ํฌ์คํ ์ด์ ์์ ๋ค์ ๋ช ๋ น์ ์คํํฉ๋๋ค. HOSTNAME์ ๋ ธ๋์ ํธ์คํธ ์ด๋ฆ์ผ๋ก ๋ฐ๊ฟ๋๋ค. ์์ธํ ๋ด์ฉ์ ๊ด๋ฆฌ ์ ธ(SSH)์ ์ก์ธ์ค์(๋ฅผ) ์ฐธ์กฐํ์ธ์.
Shell ssh -p 122 admin@HOSTNAME
ssh -p 122 admin@HOSTNAME -
ํ ์คํธ ํธ์ง๊ธฐ์
/data/user/common/cluster.conf์์ ํด๋ฌ์คํฐ ๊ตฌ์ฑ ํ์ผ์ ์ฝ๋๋ค. ์๋ฅผ ๋ค์ด Vim์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ํ์ผ์ ํธ์งํ๊ธฐ ์ ์cluster.confํ์ผ์ ๋ฐฑ์ ์ ๋ง๋ญ๋๋ค.Shell sudo vim /data/user/common/cluster.conf
sudo vim /data/user/common/cluster.conf -
ํด๋ฌ์คํฐ ๊ตฌ์ฑ ํ์ผ์๋
[cluster "HOSTNAME"]์ ๋ชฉ ์๋์ ๊ฐ ๋ ธ๋๊ฐ ๋์ด๋ฉ๋๋ค. ๋ ธ๋์ ๋ํ ์ ์ ๋ชฉ์ ์ถ๊ฐํ๊ณ ๊ตฌ์ฑ์ ์ํ ํค-๊ฐ ์์ ์ ๋ ฅํ์ฌ ์๋ฆฌ ํ์์๋ฅผ ์ค์ ๊ฐ์ผ๋ก ๋ฐ๊ฟ๋๋ค.mysql-server = trueํค-๊ฐ ์์ ํฌํจํด์ผ ํฉ๋๋ค.- ํด๋ฌ์คํฐ์์ GitHub Actions๋ฅผ ์ฌ์ฉํ๋๋ก ์ค์ ํ ๊ฒฝ์ฐ
mssql-server = trueํค-๊ฐ ์๋ ํฌํจํด์ผ ํฉ๋๋ค. - ๋ค์ ์น์ ์ ์์์ด๋ฉฐ ๋ ธ๋์ ๊ตฌ์ฑ์ ๋ค๋ฅผ ์ ์์ต๋๋ค.
... [cluster "HOSTNAME"] hostname = HOSTNAME ipv4 = IPV4-ADDRESS # ipv6 = IPV6-ADDRESS consul-datacenter = PRIMARY-DATACENTER datacenter = DATACENTER mysql-server = true redis-server = true ... ...
-
์์ ๋
cluster.conf๋ฅผ ์ฌ์ฉํ์ฌ ๋ ธ๋์ ๊ด๋ฆฌ ์ ธ์์ghe-cluster-config-init๋ฅผ ์คํํฉ๋๋ค. ๊ทธ๋ฌ๋ฉด ํด๋ฌ์คํฐ์์ ์๋ก ์ถ๊ฐ๋ ๋ ธ๋๊ฐ ์ด๊ธฐํ๋ฉ๋๋ค. -
์์ ๋
cluster.conf๋ฅผ ์ฌ์ฉํ์ฌ ๋ ธ๋์ ๊ด๋ฆฌ ์ ธ์์ghe-cluster-config-apply๋ฅผ ์คํํฉ๋๋ค. ์๋ก ์ถ๊ฐ๋ ๋ ธ๋๋ ๋ณต์ ๋ณธ MySQL ๋ ธ๋๊ฐ ๋๋ฉฐ ๋ค๋ฅธ ๊ตฌ์ฑ๋ ์๋น์ค๋ ๊ทธ๊ณณ์์ ์คํ๋ฉ๋๋ค.์ฐธ๊ณ ํญ๋ชฉ
์ด์ ์ฝ๋ ์กฐ๊ฐ์์๋ ํด๋ฌ์คํฐ์์ GitHub Actions๊ฐ ์ฌ์ฉํ๋๋ก ์ค์ ๋์ด ์๋ค๊ณ ๊ฐ์ ํ์ง ์์ต๋๋ค.
-
MySQL ๋ณต์ ๊ฐ ์๋ฃ๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฝ๋๋ค. ํด๋ฌ์คํฐ์ ๋ชจ๋ ๋ ธ๋์์ MySQL ๋ณต์ ๋ฅผ ๋ชจ๋ํฐ๋งํ๋ ค๋ฉด
ghe-cluster-status -v์(๋ฅผ) ์คํํฉ๋๋ค.ํด๋ฌ์คํฐ์์ GitHub Actions๋ฅผ ์ฌ์ฉํ๋๋ก ์ค์ ํ ๊ฒฝ์ฐ MSSQL ๋ณต์ ๊ฐ ์๋ฃ๋ ๋๊น์ง ๊ธฐ๋ค๋ ค์ผ ํฉ๋๋ค.
ํด๋ฌ์คํฐ์ ๋ ธ๋๋ฅผ ์ถ๊ฐํ ์งํ, ๋ณต์ ๊ฐ ์๋ฃ๋๋ ๋์ ๋ณต์ ์ํ์ ๋ํ ์ค๋ฅ๊ฐ ํ์ ๋ ์ ์์ต๋๋ค. ๋ณต์ ๋ ์ธ์คํด์ค์ ๋ก๋, ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฐ์ดํฐ์ ์ ๋ฐ ์ธ์คํด์ค๊ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์๋๋ฅผ ๋ง์ง๋ง์ผ๋ก ์์ฑํ ์๊ฐ์ ๋ฐ๋ผ ๋ช ์๊ฐ์ด ๊ฑธ๋ฆด ์ ์์ต๋๋ค.
-
์์ฝ๋ ์ ์ง ๊ด๋ฆฌ ๊ธฐ๊ฐ ๋์ ์ ์ง ๊ด๋ฆฌ ๋ชจ๋๋ฅผ ์ฌ์ฉํ๋๋ก ์ค์ ํฉ๋๋ค. ์์ธํ ๋ด์ฉ์ ์ ์ง ๊ด๋ฆฌ ๋ชจ๋ ์ฌ์ฉ ์ค์ ๋ฐ ์์ฝ์(๋ฅผ) ์ฐธ์กฐํ์ธ์.
-
ghe-cluster-status -v๋ฅผ ์คํํ์ฌ ํด๋ฌ์คํฐ์ ๋ชจ๋ ๋ ธ๋์์ MySQL(๋๋ MySQL ๋ฐ MSSQL) ๋ณต์ ๊ฐ ์๋ฃ๋์๋์ง ํ์ธํฉ๋๋ค.๊ฒฝ๊ณ
MySQL(๋๋ MySQL ๋ฐ MSSQL) ๋ณต์ ๊ฐ ์๋ฃ๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฌ์ง ์์ผ๋ฉด ์ธ์คํด์ค์์ ๋ฐ์ดํฐ๊ฐ ์์ค๋ ์ํ์ด ์์ต๋๋ค.
-
ํ์ฌ MySQL ๊ธฐ๋ณธ ๋ ธ๋๋ฅผ ์ฝ๊ธฐ ์ ์ฉ ๋ชจ๋๋ก ์ค์ ํ๋ ค๋ฉด MySQL ๊ธฐ๋ณธ ๋ ธ๋์์ ๋ค์ ๋ช ๋ น์ ์คํํฉ๋๋ค.
Shell echo "SET GLOBAL super_read_only = 1;" | sudo mysql
echo "SET GLOBAL super_read_only = 1;" | sudo mysql -
๊ธฐ๋ณธ ๋ฐ ๋ณต์ ๋ณธ MySQL ๋ ธ๋์ ์ค์ ๋ GTID(์ ์ญ ํธ๋์ญ์ ์๋ณ์)๊ฐ ๋์ผํด์ง ๋๊น์ง ๊ธฐ๋ค๋ฆฝ๋๋ค. GTID๋ฅผ ๊ฒ์ฌํ๋ ค๋ฉด ํด๋ฌ์คํฐ ๋ ธ๋์์ ๋ค์ ๋ช ๋ น์ ์คํํฉ๋๋ค.
Shell ghe-cluster-each -r mysql -- 'echo "SELECT @@global.gtid_executed;" | sudo mysql'
ghe-cluster-each -r mysql -- 'echo "SELECT @@global.gtid_executed;" | sudo mysql'- ์ ์ญ MySQL ๋ณ์๊ฐ ์ฑ๊ณต์ ์ผ๋ก ์ค์ ๋์๋์ง ํ์ธํ๋ ค๋ฉด ๋ค์ ๋ช ๋ น์ ์คํํฉ๋๋ค.
Shell echo "SHOW GLOBAL VARIABLES LIKE 'super_read_only';" | sudo mysql
echo "SHOW GLOBAL VARIABLES LIKE 'super_read_only';" | sudo mysql -
ํด๋ฌ์คํฐ์์ GitHub Actions๊ฐ ํ์ฑํ๋๋ฉด SSH๊ฐ ์๋ก์ด ์ฃผ MSSQL ๋ ธ๋๊ฐ ๋ ๋ ธ๋๋ก ์ฐ๊ฒฐ๋ฉ๋๋ค.
Shell ssh -p 122 admin@NEW_MSSQL_NODE_HOSTNAME
ssh -p 122 admin@NEW_MSSQL_NODE_HOSTNAMEscreen์ธ์ ๋ด์์ ๋ค์ ๋ช ๋ น์ ์คํํ์ฌ MSSQL์ ์ ๋ ธ๋๋ก ์น๊ฒฉํฉ๋๋ค.
Shell /usr/local/share/enterprise/ghe-mssql-repl-promote
/usr/local/share/enterprise/ghe-mssql-repl-promote์ด๋ ๊ฒ ํ๋ฉด ํ์ฌ ์ฃผ MSSQL ๋ ธ๋์ ์ก์ธ์คํ๊ณ ์ ์์ ์ธ ์ฅ์ ์กฐ์น(failover)๋ฅผ ์ํํ ์ ์์ต๋๋ค.
-
๊ธฐ๋ณธ ๋ฐ ๋ณต์ ๋ณธ MySQL ๋ ธ๋์ GTID๊ฐ ์ผ์นํ๋ฉด ํ ์คํธ ํธ์ง๊ธฐ์์
/data/user/common/cluster.conf์ ์๋ ํด๋ฌ์คํฐ ๊ตฌ์ฑ ํ์ผ์ ์ด์ด ํด๋ฌ์คํฐ ๊ตฌ์ฑ์ ์ ๋ฐ์ดํธํฉ๋๋ค.- ํ์ผ์ ํธ์งํ๊ธฐ ์ ์
cluster.confํ์ผ์ ๋ฐฑ์ ์ ๋ง๋ญ๋๋ค. - ์ต์์
[cluster]์น์ ์์mysql-masterํค-๊ฐ ์์์ ๋์ฒดํ ๋ ธ๋์ ํธ์คํธ ์ด๋ฆ์ ์ ๊ฑฐํ ๋ค์, ๋์ ์ ๋ ธ๋๋ฅผ ํ ๋นํฉ๋๋ค. ์ ๋ ธ๋๊ฐ ๊ธฐ๋ณธ Redis ๋ ธ๋์ด๊ธฐ๋ ํ ๊ฒฝ์ฐredis-masterํค-๊ฐ ์์ ์กฐ์ ํฉ๋๋ค. - ํด๋ฌ์คํฐ์์ GitHub Actions๋ฅผ ์ฌ์ฉํ๋๋ก ์ค์ ํ ๊ฒฝ์ฐ
mssql-server = trueํค-๊ฐ ์๋ ํฌํจํด์ผ ํฉ๋๋ค.
[cluster] mysql-master = NEW-NODE-HOSTNAME redis-master = NEW-NODE-HOSTNAME primary-datacenter = primary ...
- ํ์ผ์ ํธ์งํ๊ธฐ ์ ์
-
cluster.conf๋ฅผ ์์ ํ ๋ ธ๋์ ์ ธ์์screen์ ์์ํ๊ณghe-cluster-config-apply๋ฅผ ์คํํฉ๋๋ค. ์ด ๋ช ๋ น์ ํด๋ฌ์คํฐ๋ฅผ ๋ค์ ๊ตฌ์ฑํ์ฌ ์๋ก ์ถ๊ฐ๋ ๋ ธ๋๋ฅผ ์ฃผ MySQL ๋ ธ๋๋ก ์น๊ฒฉํ๊ณ ์๋ ์ฃผ MySQL ๋ ธ๋๋ฅผ ๋ณต์ ๋ณธ์ผ๋ก ๋ณํํฉ๋๋ค.์ฐธ๊ณ ํญ๋ชฉ
์ด์ ์ฝ๋ ์กฐ๊ฐ์์๋ ํด๋ฌ์คํฐ์์ GitHub Actions๊ฐ ์ฌ์ฉํ๋๋ก ์ค์ ๋์ด ์๋ค๊ณ ๊ฐ์ ํ์ง ์์ต๋๋ค.
-
ghe-cluster-status -v๋ฅผ ์คํํ์ฌ ํด๋ฌ์คํฐ์ ๋ชจ๋ ๋ ธ๋์์ MySQL(๋๋ MySQL ๋ฐ MSSQL) ๋ณต์ ์ํ๋ฅผ ํ์ธํฉ๋๋ค. -
ํด๋ฌ์คํฐ์์ GitHub Actions๊ฐ ํ์ฑํ๋ ๊ฒฝ์ฐ ์ MySQL ๋ฐ MSSQL ๋ ธ๋์์ ๋ค์ ๋ช ๋ น์ ์คํํฉ๋๋ค.
Shell /usr/local/share/enterprise/ghe-repl-post-failover-mssql
/usr/local/share/enterprise/ghe-repl-post-failover-mssql -
MySQL(๋๋ MySQL ๋ฐ MSSQL) ๋ณต์ ๊ฐ ์๋ฃ๋๋ฉด ํด๋ฌ์คํฐ์ ๋ชจ๋ ๋ ธ๋์์ ์ ์ง ๊ด๋ฆฌ ๋ชจ๋๋ฅผ ์ฌ์ฉํ์ง ์๋๋ก ์ค์ ํฉ๋๋ค. ์ ์ง ๊ด๋ฆฌ ๋ชจ๋ ์ฌ์ฉ ์ค์ ๋ฐ ์์ฝ์(๋ฅผ) ์ฐธ์กฐํ์ธ์.