Skip to main content

์ด ๋ฒ„์ „์˜ GitHub Enterprise๋Š” ๋‹ค์Œ ๋‚ ์งœ์— ์ค‘๋‹จ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. 2025-06-19. ์ค‘์š”ํ•œ ๋ณด์•ˆ ๋ฌธ์ œ์— ๋Œ€ํ•ด์„œ๋„ ํŒจ์น˜ ๋ฆด๋ฆฌ์Šค๊ฐ€ ์ด๋ฃจ์–ด์ง€์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋” ๋›ฐ์–ด๋‚œ ์„ฑ๋Šฅ, ํ–ฅ์ƒ๋œ ๋ณด์•ˆ, ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์œ„ํ•ด ์ตœ์‹  ๋ฒ„์ „์˜ GitHub Enterprise Server๋กœ ์—…๊ทธ๋ ˆ์ด๋“œํ•ฉ๋‹ˆ๋‹ค. ์—…๊ทธ๋ ˆ์ด๋“œ์— ๋Œ€ํ•œ ๋„์›€๋ง์€ GitHub Enterprise ์ง€์›์— ๋ฌธ์˜ํ•˜์„ธ์š”.

ํด๋Ÿฌ์Šคํ„ฐ ๋…ธ๋“œ ๋ฐ”๊พธ๊ธฐ

GitHub Enterprise Server ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ๋…ธ๋“œ๊ฐ€ ์‹คํŒจํ•˜๊ฑฐ๋‚˜ ๋ฆฌ์†Œ์Šค๊ฐ€ ๋” ๋งŽ์€ ์ƒˆ ๋…ธ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜๋ ค๋Š” ๊ฒฝ์šฐ ๋Œ€์ฒดํ•  ๋…ธ๋“œ๋ฅผ ์˜คํ”„๋ผ์ธ์œผ๋กœ ํ‘œ์‹œํ•œ ๋‹ค์Œ ์ƒˆ ๋…ธ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

๋ˆ„๊ฐ€ ์ด ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‚˜์š”?

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

GitHub Enterprise Server ํด๋Ÿฌ์Šคํ„ฐ ๋…ธ๋“œ ๋Œ€์ฒด ์ •๋ณด

GitHub Enterprise Server ํด๋Ÿฌ์Šคํ„ฐ์˜ ๊ธฐ๋Šฅ ๋…ธ๋“œ๋ฅผ ๋Œ€์ฒดํ•˜๊ฑฐ๋‚˜ ์˜ˆ๊ธฐ์น˜ ์•Š๊ฒŒ ์‹คํŒจํ•œ ๋…ธ๋“œ๋ฅผ ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋…ธ๋“œ๋ฅผ ๋Œ€์ฒดํ•œ ํ›„ GitHub Enterprise Server ์ธ์Šคํ„ด์Šค๋Š” ์ž‘์—…์„ ์ƒˆ ๋…ธ๋“œ์— ์ž๋™์œผ๋กœ ๋ถ„์‚ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ธ์Šคํ„ด์Šค๊ฐ€ ๋…ธ๋“œ ๊ฐ„์— ์ž‘์—…์„ ๋ฐธ๋Ÿฐ์‹ฑํ•˜๋„๋ก ๊ฐ•์ œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ํด๋Ÿฌ์Šคํ„ฐ ์›Œํฌ๋กœ๋“œ ๋ฆฌ๋ฐธ๋Ÿฐ์‹ฑ์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.

๊ฒฝ๊ณ 

์ถฉ๋Œ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด, ์ด์ „์— ํด๋Ÿฌ์Šคํ„ฐ์˜ ๋…ธ๋“œ์— ํ• ๋‹น๋œ ํ˜ธ์ŠคํŠธ ์ด๋ฆ„์„ ๋‹ค์‹œ ์‚ฌ์šฉํ•˜์ง€ ๋งˆ์„ธ์š”.

๊ธฐ๋Šฅ ๋…ธ๋“œ ๋ฐ”๊พธ๊ธฐ

ํด๋Ÿฌ์Šคํ„ฐ์˜ ๊ธฐ์กด ๊ธฐ๋Šฅ ๋…ธ๋“œ๋ฅผ ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด VM(๊ฐ€์ƒ ๋จธ์‹ )์— ์ถ”๊ฐ€ CPU, ๋ฉ”๋ชจ๋ฆฌ ๋˜๋Š” ์Šคํ† ๋ฆฌ์ง€ ๋ฆฌ์†Œ์Šค๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ธฐ๋Šฅ ๋…ธ๋“œ๋ฅผ ๋Œ€์ฒดํ•˜๋ ค๋ฉด ์ƒˆ VM์— GitHub Enterprise Server ์–ดํ”Œ๋ผ์ด์–ธ์Šค๋ฅผ ์„ค์น˜ํ•˜๊ณ , IP ์ฃผ์†Œ๋ฅผ ๊ตฌ์„ฑํ•˜๊ณ , ํด๋Ÿฌ์Šคํ„ฐ ๊ตฌ์„ฑ ํŒŒ์ผ์— ์ƒˆ ๋…ธ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ , ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜๊ณ  ๊ตฌ์„ฑ์„ ์ ์šฉํ•œ ๋‹ค์Œ, ๋Œ€์ฒด๋œ ๋…ธ๋“œ๋ฅผ ์˜คํ”„๋ผ์ธ์œผ๋กœ ์ „ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

์ฐธ๊ณ  ํ•ญ๋ชฉ

์ฃผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋…ธ๋“œ๋ฅผ ๊ต์ฒดํ•˜๋Š” ๊ฒฝ์šฐ, ์ฃผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋…ธ๋“œ ๊ต์ฒด๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

  1. ๋Œ€์ฒด ๋…ธ๋“œ์— ๊ณ ์œ ํ•œ ํ˜ธ์ŠคํŠธ ์ด๋ฆ„์„ ์‚ฌ์šฉํ•˜์—ฌ GitHub Enterprise Server๋ฅผ ํ”„๋กœ๋น„์ €๋‹ํ•˜๊ณ  ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.

  2. ๊ด€๋ฆฌ ์…ธ ๋˜๋Š” DHCP๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋Œ€์ฒด ๋…ธ๋“œ์˜ IP ์ฃผ์†Œ๋งŒ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์„ค์ •์€ ๊ตฌ์„ฑํ•˜์ง€ ๋งˆ์„ธ์š”.

  3. ๋ชจ๋“  ๋…ธ๋“œ์—์„œ ์ƒˆ๋กœ ํ”„๋กœ๋น„์ €๋‹๋œ ๋Œ€์ฒด ๋…ธ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜๋ ค๋ฉด 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) ๋…ธ๋“œ์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‹œ๋“œ๋ฅผ ์—ฐ๊ธฐํ•˜๋„๋ก ์„ ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ํŠธ๋ž˜ํ”ฝ์— ๋Œ€ํ•œ ์–ดํ”Œ๋ผ์ด์–ธ์Šค๋ฅผ ๋” ๋นจ๋ฆฌ ์—ด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‹œ๋“œ ์—ฐ๊ธฐ์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.

  4. ์ˆ˜์ •๋œ cluster.conf๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋…ธ๋“œ์˜ ๊ด€๋ฆฌ ์…ธ์—์„œ ghe-cluster-config-init๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ์ƒˆ๋กœ ์ถ”๊ฐ€๋œ ๋…ธ๋“œ๊ฐ€ ์ดˆ๊ธฐํ™”๋ฉ๋‹ˆ๋‹ค.

  5. ๋™์ผํ•œ ๋…ธ๋“œ์—์„œ ghe-cluster-config-apply๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๊ตฌ์„ฑ ํŒŒ์ผ์˜ ์œ ํšจ์„ฑ์ด ๊ฒ€์‚ฌ๋˜๊ณ , ํด๋Ÿฌ์Šคํ„ฐ์˜ ๊ฐ ๋…ธ๋“œ์— ๋ณต์‚ฌ๋˜๊ณ , ์ˆ˜์ •๋œ cluster.conf ํŒŒ์ผ์— ๋”ฐ๋ผ ๊ฐ ๋…ธ๋“œ๊ฐ€ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค.

  6. ๊ต์ฒดํ•  ๋…ธ๋“œ๋ฅผ ์˜คํ”„๋ผ์ธ์œผ๋กœ ์„ค์ •ํ•˜๋ ค๋ฉด ํด๋Ÿฌ์Šคํ„ฐ์˜ ๊ธฐ๋ณธ MySQL ๋…ธ๋“œ์—์„œ ๋‹ค์Œ ๋ช…๋ น์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

    ghe-remove-node NODE-HOSTNAME
    

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

์‘๊ธ‰ ์ƒํ™ฉ์—์„œ ๋…ธ๋“œ ๋ฐ”๊พธ๊ธฐ

ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ์‹คํŒจํ•œ ๋…ธ๋“œ๋ฅผ ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์†Œํ”„ํŠธ์›จ์–ด ๋˜๋Š” ํ•˜๋“œ์›จ์–ด ๋ฌธ์ œ๊ฐ€ ๋…ธ๋“œ์˜ ๊ฐ€์šฉ์„ฑ์— ์˜ํ–ฅ์„ ์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฐธ๊ณ  ํ•ญ๋ชฉ

์ฃผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋…ธ๋“œ๋ฅผ ๊ต์ฒดํ•˜๋Š” ๊ฒฝ์šฐ, ์ฃผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋…ธ๋“œ ๊ต์ฒด๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

์‘๊ธ‰ ์ƒํ™ฉ์—์„œ ๋…ธ๋“œ๋ฅผ ๊ต์ฒดํ•˜๋ ค๋ฉด ์‹คํŒจํ•œ ๋…ธ๋“œ๋ฅผ ์˜คํ”„๋ผ์ธ์œผ๋กœ ์„ค์ •ํ•˜๊ณ , ํด๋Ÿฌ์Šคํ„ฐ์— ๊ต์ฒด ๋…ธ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•œ ๋‹ค์Œ, ๋ช…๋ น์„ ์‹คํ–‰ํ•ด ์ œ๊ฑฐ๋œ ๋…ธ๋“œ์˜ ๋ฐ์ดํ„ฐ ์„œ๋น„์Šค์— ๋Œ€ํ•œ ์ฐธ์กฐ๋ฅผ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.

  1. ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒ ์ค‘์ธ ๋…ธ๋“œ๋ฅผ ์ œ๊ฑฐํ•˜๋ ค๋ฉด, ํด๋Ÿฌ์Šคํ„ฐ์˜ ๊ธฐ๋ณธ MySQL ๋…ธ๋“œ์—์„œ ๋‹ค์Œ ๋ช…๋ น์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—์„œ NODE-HOSTNAME์„ ์˜คํ”„๋ผ์ธ์œผ๋กœ ์ „ํ™˜ํ•˜๋ ค๋Š” ๋…ธ๋“œ์˜ ํ˜ธ์ŠคํŠธ ์ด๋ฆ„์œผ๋กœ ๊ต์ฒดํ•ฉ๋‹ˆ๋‹ค.

    ghe-remove-node --no-evacuate NODE-HOSTNAME
    

    ์ด ๋ช…๋ น์„ ์‹คํ–‰ํ•˜๋ฉด ํ•ด๋‹น ๋…ธ๋“œ๋ฅผ ๊ตฌ์„ฑ์—์„œ ์˜คํ”„๋ผ์ธ์œผ๋กœ ํ‘œ์‹œํ•˜๊ณ , ํŠธ๋ž˜ํ”ฝ์ด ํ•ด๋‹น ๋…ธ๋“œ๋กœ ๋ผ์šฐํŒ…๋˜์ง€ ์•Š๊ฒŒ ์ค‘์ง€์‹œํ‚ต๋‹ˆ๋‹ค. ์ด์ œ ์ด ๋ช…๋ น์„ no-evacuate ๋ชจ๋“œ์—์„œ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์ ˆ์ฐจ ํ›„๋ฐ˜์— ๋…ธ๋“œ์˜ ๋ฐ์ดํ„ฐ ์„œ๋น„์Šค์— ๋ชจ๋“  ๋ณต์ œ๋ณธ์„ ํด๋Ÿฌ์Šคํ„ฐ์ƒ์˜ ๋‹ค๋ฅธ ์ด์šฉ ๊ฐ€๋Šฅํ•œ ๋…ธ๋“œ๋กœ ๋ณต์‚ฌํ•˜๋ผ๊ณ  ์ง€์‹œํ•˜๋Š” ๋ช…๋ น์„ ์‹คํ–‰ํ•˜๊ฒŒ ๋˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋ช…๋ น์ค„ ์œ ํ‹ธ๋ฆฌํ‹ฐ์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.

  2. ๊ต์ฒด ๋…ธ๋“œ๋ฅผ ํด๋Ÿฌ์Šคํ„ฐ์— ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

    1. ๋Œ€์ฒด ๋…ธ๋“œ์— ๊ณ ์œ ํ•œ ํ˜ธ์ŠคํŠธ ์ด๋ฆ„์„ ์‚ฌ์šฉํ•˜์—ฌ GitHub Enterprise Server๋ฅผ ํ”„๋กœ๋น„์ €๋‹ํ•˜๊ณ  ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.
  3. ๊ด€๋ฆฌ ์…ธ ๋˜๋Š” DHCP๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋Œ€์ฒด ๋…ธ๋“œ์˜ IP ์ฃผ์†Œ๋งŒ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์„ค์ •์€ ๊ตฌ์„ฑํ•˜์ง€ ๋งˆ์„ธ์š”.

    1. ์ƒˆ๋กœ ํ”„๋กœ๋น„์ €๋‹๋œ ๋…ธ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜๋ ค๋ฉด ์•„๋ฌด ๋…ธ๋“œ์—์„œ๋‚˜ 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
      
    2. ์ˆ˜์ •๋œ cluster.conf๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋…ธ๋“œ์˜ ๊ด€๋ฆฌ ์…ธ์—์„œ ghe-cluster-config-init๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ์ƒˆ๋กœ ์ถ”๊ฐ€๋œ ๋…ธ๋“œ๊ฐ€ ์ดˆ๊ธฐํ™”๋ฉ๋‹ˆ๋‹ค.

  4. ๋™์ผํ•œ ๋…ธ๋“œ์—์„œ ghe-cluster-config-apply๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๊ตฌ์„ฑ ํŒŒ์ผ์˜ ์œ ํšจ์„ฑ์ด ๊ฒ€์‚ฌ๋˜๊ณ , ํด๋Ÿฌ์Šคํ„ฐ์˜ ๊ฐ ๋…ธ๋“œ์— ๋ณต์‚ฌ๋˜๊ณ , ์ˆ˜์ •๋œ cluster.conf ํŒŒ์ผ์— ๋”ฐ๋ผ ๊ฐ ๋…ธ๋“œ๊ฐ€ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค.

  5. ์ œ๊ฑฐํ•œ ๋…ธ๋“œ์˜ ๋ฐ์ดํ„ฐ ์„œ๋น„์Šค์— ๋Œ€ํ•œ ์ฐธ์กฐ๋ฅผ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.

    1. ์ œ๊ฑฐํ•œ ๋…ธ๋“œ์˜ UUID๋ฅผ ์ฐพ์Šต๋‹ˆ๋‹ค. UUID๋ฅผ ์ฐพ์œผ๋ ค๋ฉด ๋‹ค์Œ ๋ช…๋ น์„ ์‹คํ–‰ํ•˜์—ฌ HOSTNAME์„(๋ฅผ) ํ•ด๋‹น ๋…ธ๋“œ์˜ ํ˜ธ์ŠคํŠธ ์ด๋ฆ„์œผ๋กœ ๊ต์ฒดํ•ฉ๋‹ˆ๋‹ค. ์ด UUID๋ฅผ ๋‹ค์Œ ๋‹จ๊ณ„์—์„œ ์‚ฌ์šฉํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

      ghe-config cluster.HOSTNAME.uuid
      
    2. ๋ฐ์ดํ„ฐ ์„œ๋น„์Šค์— ๋Œ€ํ•œ ์ฐธ์กฐ๋ฅผ ์ œ๊ฑฐํ•˜๋ ค๋ฉด ๋‹ค์Œ ๋ช…๋ น์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. UUID์„(๋ฅผ) ๋…ธ๋“œ์˜ UUID๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

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

      ์ฐธ๊ณ  ํ•ญ๋ชฉ

      ์ด๋Ÿฌํ•œ ๋ช…๋ น ๋•Œ๋ฌธ์— ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณต์ œ๋ณธ ์ „์ฒด์—์„œ ๋ฆฌ๋ฐธ๋Ÿฐ์Šค๋˜๋Š” ๋™์•ˆ ์„œ๋ฒ„์—์„œ ๋ถ€ํ•˜๊ฐ€ ์ฆ๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

      git-server ์„œ๋น„์Šค์˜ ๊ฒฝ์šฐ(๋ฆฌํฌ์ง€ํ† ๋ฆฌ ๋ฐ์ดํ„ฐ์— ์‚ฌ์šฉ):

      ghe-spokesctl server destroy git-server-UUID
      

      pages-server ์„œ๋น„์Šค์˜ ๊ฒฝ์šฐ(GitHub Pages ์‚ฌ์ดํŠธ ๋นŒ๋“œ์— ์‚ฌ์šฉ):

      ghe-dpages remove pages-server-UUID
      

      storage-server ์„œ๋น„์Šค์˜ ๊ฒฝ์šฐ(Git LFS ๋ฐ์ดํ„ฐ, ์•„๋ฐ”ํƒ€ ์ด๋ฏธ์ง€, ํŒŒ์ผ ์ฒจ๋ถ€ํŒŒ์ผ ๋ฐ ๋ฆด๋ฆฌ์Šค ์•„์นด์ด๋ธŒ์— ์‚ฌ์šฉ):

      ghe-storage destroy-host storage-server-UUID --force
      
  6. ์•„๋‹ˆ๋ฉด, cluster.conf ํŒŒ์ผ์—์„œ ์ œ๊ฑฐ๋œ ๋…ธ๋“œ์— ๋Œ€ํ•œ ํ•ญ๋ชฉ์„ ์‚ญ์ œํ•ด๋„ ๋ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด cluster.conf ํŒŒ์ผ์„ ๊ตฌ์„ฑ๋œ ์ƒํƒœ๋กœ ์œ ์ง€ํ•˜๊ณ , ํ–ฅํ›„ config-apply ์‹คํ–‰ ์‹œ ์‹œ๊ฐ„์ด ์ ˆ์•ฝ๋ฉ๋‹ˆ๋‹ค.

    1. ํŒŒ์ผ์—์„œ ํ•ญ๋ชฉ์„ ์ œ๊ฑฐํ•˜๋ ค๋ฉด ๋‹ค์Œ ๋ช…๋ น์„ ์‹คํ–‰ํ•˜๊ณ , HOSTNAME์„(๋ฅผ) ์ œ๊ฑฐ๋œ ๋…ธ๋“œ์˜ ํ˜ธ์ŠคํŠธ ์ด๋ฆ„์œผ๋กœ ๊ต์ฒดํ•ฉ๋‹ˆ๋‹ค.

      ghe-config --remove-section "cluster.HOSTNAME"
      
    2. ๊ตฌ์„ฑ์„ ํด๋Ÿฌ์Šคํ„ฐ์˜ ๋‹ค๋ฅธ ๋…ธ๋“œ๋กœ ๋ณต์‚ฌํ•˜๋ ค๋ฉด cluster.conf์„(๋ฅผ) ์ˆ˜์ •ํ•œ ๋…ธ๋“œ์˜ ๊ด€๋ฆฌ ์…ธ์—์„œ ghe-cluster-config-apply์„(๋ฅผ) ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

์ฃผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋…ธ๋“œ ๋ฐ”๊พธ๊ธฐ(MySQL ๋˜๋Š” MySQL ๋ฐ MSSQL)

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•˜๋ ค๋ฉด ํด๋Ÿฌ์Šคํ„ฐ์— ๊ธฐ๋ณธ MySQL ๋…ธ๋“œ์™€ ํ•˜๋‚˜ ์ด์ƒ์˜ ๋ณต์ œ๋ณธ(replica) MySQL ๋…ธ๋“œ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ํด๋Ÿฌ์Šคํ„ฐ ๋…ธ๋“œ ์ •๋ณด์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.

ํด๋Ÿฌ์Šคํ„ฐ์— GitHub Actions๊ฐ€ ์‚ฌ์šฉํ•˜๋„๋ก ์„ค์ •๋œ ๊ฒฝ์šฐ ๋‹ค์Œ ๋‹จ๊ณ„์—์„œ MSSQL๋„ ๊ณ ๋ คํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ฃผ MySQL(๋˜๋Š” MySQL ๋ฐ MSSQL) ๋…ธ๋“œ์— ๋” ๋งŽ์€ ๋ฆฌ์†Œ์Šค๋ฅผ ํ• ๋‹นํ•ด์•ผ ํ•˜๊ฑฐ๋‚˜ ์‹คํŒจํ•œ ๋…ธ๋“œ๋ฅผ ๊ต์ฒดํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ ํด๋Ÿฌ์Šคํ„ฐ์— ์ƒˆ ๋…ธ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ€๋™ ์ค‘์ง€ ์‹œ๊ฐ„์„ ์ตœ์†Œํ™”ํ•˜๋ ค๋ฉด ์ƒˆ ๋…ธ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  MySQL(๋˜๋Š” MySQL ๋ฐ MSSQL) ๋ฐ์ดํ„ฐ๋ฅผ ๋ณต์ œํ•œ ๋‹ค์Œ, ์ฃผ ๋…ธ๋“œ๋กœ ์Šน๊ฒฉํ•ฉ๋‹ˆ๋‹ค. ์Šน๊ฒฉ ๊ณผ์ •์—๋Š” ์•ฝ๊ฐ„์˜ ๊ฐ€๋™ ์ค‘์ง€ ์‹œ๊ฐ„์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

  1. ๋Œ€์ฒด ๋…ธ๋“œ์— ๊ณ ์œ ํ•œ ํ˜ธ์ŠคํŠธ ์ด๋ฆ„์„ ์‚ฌ์šฉํ•˜์—ฌ GitHub Enterprise Server๋ฅผ ํ”„๋กœ๋น„์ €๋‹ํ•˜๊ณ  ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.

  2. ๊ด€๋ฆฌ ์…ธ ๋˜๋Š” DHCP๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋Œ€์ฒด ๋…ธ๋“œ์˜ IP ์ฃผ์†Œ๋งŒ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์„ค์ •์€ ๊ตฌ์„ฑํ•˜์ง€ ๋งˆ์„ธ์š”.

  3. GitHub Enterprise Server ์ธ์Šคํ„ด์Šค์— ์—ฐ๊ฒฐํ•˜๋ ค๋ฉด ํด๋Ÿฌ์Šคํ„ฐ์˜ ๋…ธ๋“œ ์ค‘ ํ•˜๋‚˜์— SSHํ•ฉ๋‹ˆ๋‹ค. ์›Œํฌ์Šคํ…Œ์ด์…˜์—์„œ ๋‹ค์Œ ๋ช…๋ น์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. HOSTNAME์„ ๋…ธ๋“œ์˜ ํ˜ธ์ŠคํŠธ ์ด๋ฆ„์œผ๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๊ด€๋ฆฌ ์…ธ(SSH)์— ์•ก์„ธ์Šค์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.

    Shell
    ssh -p 122 admin@HOSTNAME
    
  4. ํ…์ŠคํŠธ ํŽธ์ง‘๊ธฐ์˜ /data/user/common/cluster.conf์—์„œ ํด๋Ÿฌ์Šคํ„ฐ ๊ตฌ์„ฑ ํŒŒ์ผ์„ ์—ฝ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด Vim์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํŒŒ์ผ์„ ํŽธ์ง‘ํ•˜๊ธฐ ์ „์— cluster.conf ํŒŒ์ผ์˜ ๋ฐฑ์—…์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

    Shell
    sudo vim /data/user/common/cluster.conf
    
  5. ํด๋Ÿฌ์Šคํ„ฐ ๊ตฌ์„ฑ ํŒŒ์ผ์—๋Š” [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
      ...
    ...
    
  6. ์ˆ˜์ •๋œ cluster.conf๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋…ธ๋“œ์˜ ๊ด€๋ฆฌ ์…ธ์—์„œ ghe-cluster-config-init๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ์ƒˆ๋กœ ์ถ”๊ฐ€๋œ ๋…ธ๋“œ๊ฐ€ ์ดˆ๊ธฐํ™”๋ฉ๋‹ˆ๋‹ค.

  7. ์ˆ˜์ •๋œ cluster.conf๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋…ธ๋“œ์˜ ๊ด€๋ฆฌ ์…ธ์—์„œ ghe-cluster-config-apply๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ƒˆ๋กœ ์ถ”๊ฐ€๋œ ๋…ธ๋“œ๋Š” ๋ณต์ œ๋ณธ MySQL ๋…ธ๋“œ๊ฐ€ ๋˜๋ฉฐ ๋‹ค๋ฅธ ๊ตฌ์„ฑ๋œ ์„œ๋น„์Šค๋Š” ๊ทธ๊ณณ์—์„œ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

    ์ฐธ๊ณ  ํ•ญ๋ชฉ

    ์ด์ „ ์ฝ”๋“œ ์กฐ๊ฐ์—์„œ๋Š” ํด๋Ÿฌ์Šคํ„ฐ์—์„œ GitHub Actions๊ฐ€ ์‚ฌ์šฉํ•˜๋„๋ก ์„ค์ •๋˜์–ด ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

  8. MySQL ๋ณต์ œ๊ฐ€ ์™„๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฝ๋‹ˆ๋‹ค. ํด๋Ÿฌ์Šคํ„ฐ์˜ ๋ชจ๋“  ๋…ธ๋“œ์—์„œ MySQL ๋ณต์ œ๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๋ ค๋ฉด ghe-cluster-status -v์„(๋ฅผ) ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

    ํด๋Ÿฌ์Šคํ„ฐ์—์„œ GitHub Actions๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ์„ค์ •ํ•œ ๊ฒฝ์šฐ MSSQL ๋ณต์ œ๊ฐ€ ์™„๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ ค์•ผ ํ•ฉ๋‹ˆ๋‹ค.

    ํด๋Ÿฌ์Šคํ„ฐ์— ๋…ธ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•œ ์งํ›„, ๋ณต์ œ๊ฐ€ ์™„๋ฃŒ๋˜๋Š” ๋™์•ˆ ๋ณต์ œ ์ƒํƒœ์— ๋Œ€ํ•œ ์˜ค๋ฅ˜๊ฐ€ ํ‘œ์‹œ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ณต์ œ๋Š” ์ธ์Šคํ„ด์Šค์˜ ๋กœ๋“œ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ฐ์ดํ„ฐ์˜ ์–‘ ๋ฐ ์ธ์Šคํ„ด์Šค๊ฐ€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‹œ๋“œ๋ฅผ ๋งˆ์ง€๋ง‰์œผ๋กœ ์ƒ์„ฑํ•œ ์‹œ๊ฐ„์— ๋”ฐ๋ผ ๋ช‡ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  9. ์˜ˆ์•ฝ๋œ ์œ ์ง€ ๊ด€๋ฆฌ ๊ธฐ๊ฐ„ ๋™์•ˆ ์œ ์ง€ ๊ด€๋ฆฌ ๋ชจ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์œ ์ง€ ๊ด€๋ฆฌ ๋ชจ๋“œ ์‚ฌ์šฉ ์„ค์ • ๋ฐ ์˜ˆ์•ฝ์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.

  10. ghe-cluster-status -v๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ํด๋Ÿฌ์Šคํ„ฐ์˜ ๋ชจ๋“  ๋…ธ๋“œ์—์„œ MySQL(๋˜๋Š” MySQL ๋ฐ MSSQL) ๋ณต์ œ๊ฐ€ ์™„๋ฃŒ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

    ๊ฒฝ๊ณ 

    MySQL(๋˜๋Š” MySQL ๋ฐ MSSQL) ๋ณต์ œ๊ฐ€ ์™„๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š์œผ๋ฉด ์ธ์Šคํ„ด์Šค์—์„œ ๋ฐ์ดํ„ฐ๊ฐ€ ์†์‹ค๋  ์œ„ํ—˜์ด ์žˆ์Šต๋‹ˆ๋‹ค.

  11. ํ˜„์žฌ MySQL ๊ธฐ๋ณธ ๋…ธ๋“œ๋ฅผ ์ฝ๊ธฐ ์ „์šฉ ๋ชจ๋“œ๋กœ ์„ค์ •ํ•˜๋ ค๋ฉด MySQL ๊ธฐ๋ณธ ๋…ธ๋“œ์—์„œ ๋‹ค์Œ ๋ช…๋ น์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

    Shell
    echo "SET GLOBAL super_read_only = 1;" | sudo mysql
    
  12. ๊ธฐ๋ณธ ๋ฐ ๋ณต์ œ๋ณธ MySQL ๋…ธ๋“œ์— ์„ค์ •๋œ GTID(์ „์—ญ ํŠธ๋žœ์žญ์…˜ ์‹๋ณ„์ž)๊ฐ€ ๋™์ผํ•ด์งˆ ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฝ๋‹ˆ๋‹ค. GTID๋ฅผ ๊ฒ€์‚ฌํ•˜๋ ค๋ฉด ํด๋Ÿฌ์Šคํ„ฐ ๋…ธ๋“œ์—์„œ ๋‹ค์Œ ๋ช…๋ น์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

    Shell
    ghe-cluster-each -r mysql -- 'echo "SELECT @@global.gtid_executed;" | sudo mysql'
    
    • ์ „์—ญ MySQL ๋ณ€์ˆ˜๊ฐ€ ์„ฑ๊ณต์ ์œผ๋กœ ์„ค์ •๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•˜๋ ค๋ฉด ๋‹ค์Œ ๋ช…๋ น์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
    Shell
     echo "SHOW GLOBAL VARIABLES LIKE 'super_read_only';" | sudo mysql
    
  13. ํด๋Ÿฌ์Šคํ„ฐ์—์„œ GitHub Actions๊ฐ€ ํ™œ์„ฑํ™”๋˜๋ฉด SSH๊ฐ€ ์ƒˆ๋กœ์šด ์ฃผ MSSQL ๋…ธ๋“œ๊ฐ€ ๋  ๋…ธ๋“œ๋กœ ์—ฐ๊ฒฐ๋ฉ๋‹ˆ๋‹ค.

    Shell
    ssh -p 122 admin@NEW_MSSQL_NODE_HOSTNAME
    
    • screen ์„ธ์…˜ ๋‚ด์—์„œ ๋‹ค์Œ ๋ช…๋ น์„ ์‹คํ–‰ํ•˜์—ฌ MSSQL์„ ์ƒˆ ๋…ธ๋“œ๋กœ ์Šน๊ฒฉํ•ฉ๋‹ˆ๋‹ค.
    Shell
    /usr/local/share/enterprise/ghe-mssql-repl-promote
    

    ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ํ˜„์žฌ ์ฃผ MSSQL ๋…ธ๋“œ์— ์•ก์„ธ์Šคํ•˜๊ณ  ์ •์ƒ์ ์ธ ์žฅ์•  ์กฐ์น˜(failover)๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  14. ๊ธฐ๋ณธ ๋ฐ ๋ณต์ œ๋ณธ 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
    ...
    
  15. cluster.conf๋ฅผ ์ˆ˜์ •ํ•œ ๋…ธ๋“œ์˜ ์…ธ์—์„œ screen์„ ์‹œ์ž‘ํ•˜๊ณ  ghe-cluster-config-apply๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ช…๋ น์€ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๋‹ค์‹œ ๊ตฌ์„ฑํ•˜์—ฌ ์ƒˆ๋กœ ์ถ”๊ฐ€๋œ ๋…ธ๋“œ๋ฅผ ์ฃผ MySQL ๋…ธ๋“œ๋กœ ์Šน๊ฒฉํ•˜๊ณ  ์›๋ž˜ ์ฃผ MySQL ๋…ธ๋“œ๋ฅผ ๋ณต์ œ๋ณธ์œผ๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

    ์ฐธ๊ณ  ํ•ญ๋ชฉ

    ์ด์ „ ์ฝ”๋“œ ์กฐ๊ฐ์—์„œ๋Š” ํด๋Ÿฌ์Šคํ„ฐ์—์„œ GitHub Actions๊ฐ€ ์‚ฌ์šฉํ•˜๋„๋ก ์„ค์ •๋˜์–ด ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

  16. ghe-cluster-status -v๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ํด๋Ÿฌ์Šคํ„ฐ์˜ ๋ชจ๋“  ๋…ธ๋“œ์—์„œ MySQL(๋˜๋Š” MySQL ๋ฐ MSSQL) ๋ณต์ œ ์ƒํƒœ๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

  17. ํด๋Ÿฌ์Šคํ„ฐ์—์„œ GitHub Actions๊ฐ€ ํ™œ์„ฑํ™”๋œ ๊ฒฝ์šฐ ์ƒˆ MySQL ๋ฐ MSSQL ๋…ธ๋“œ์—์„œ ๋‹ค์Œ ๋ช…๋ น์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

    Shell
    /usr/local/share/enterprise/ghe-repl-post-failover-mssql
    
  18. MySQL(๋˜๋Š” MySQL ๋ฐ MSSQL) ๋ณต์ œ๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด ํด๋Ÿฌ์Šคํ„ฐ์˜ ๋ชจ๋“  ๋…ธ๋“œ์—์„œ ์œ ์ง€ ๊ด€๋ฆฌ ๋ชจ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋„๋ก ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ์œ ์ง€ ๊ด€๋ฆฌ ๋ชจ๋“œ ์‚ฌ์šฉ ์„ค์ • ๋ฐ ์˜ˆ์•ฝ์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.