17E. Route 53 DNS Failover ํ์ฉํ๊ธฐ
17E. Route 53 DNS Failover ํ์ฉํ๊ธฐ ๊ด๋ จ
Route 53์ DNS Failover ๊ธฐ๋ฅ์ ํ์ฉํด๋ณด๊ฒ ์ต๋๋ค. DNS Failover ๊ธฐ๋ฅ์ด ๋์ํ๋์ง ํ์ธํ๊ธฐ ์ํด EC2 ์ธ์คํด์ค 2๊ฐ๊ฐ ํ์ํฉ๋๋ค. '4.3 EC2 ์ธ์คํด์ค ์์ฑํ๊ธฐ'๋ฅผ ์ฐธ์กฐํ์ฌ EC2 ์ธ์คํด์ค๋ฅผ 2๊ฐ ์์ฑํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ '6์ฅ ๊ณ ์ IP๋ฅผ ์ ๊ณตํ๋ Elastic IP'๋ฅผ ์ฐธ์กฐํ์ฌ EC2 ์ธ์คํด์ค์ Elastic IP๋ฅผ ์ฐ๊ฒฐํฉ๋๋ค.
์ด๋ฏธ EC2 ์ธ์คํด์ค(Example Server)๋ฅผ ๋ง๋ค์ด๋์๋ค๋ฉด ์ถ๊ฐ๋ก ํ๋ ๋ ์์ฑํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ '12.3.1 EC2์ CloudFront ์ฐ๋ํ๊ธฐ'๋ฅผ ์ฐธ์กฐํ์ฌ EC2 ์ธ์คํด์ค์ Node.js๋ฅผ ์ค์นํ๊ณ ์น ์๋ฒ๋ฅผ ์คํํ ์ ์๋๋ก ์ค๋นํฉ๋๋ค. ์ด๋ฒ ์ค์ต์ EC2 ์ธ์คํด์ค ์์ฑ, ์น ์๋ฒ ์ค์น ๋ฑ ์๋ต๋๋ ๋ถ๋ถ์ด ๋ง๊ธฐ ๋๋ฌธ์ ์ ๋ถ๋ถ์ ํ์ตํ ๋ค ์งํํ๋ ๊ฒ์ ๊ถ์ฅํฉ๋๋ค.
์ฒซ ๋ฒ์งธ EC2 ์ธ์คํด์ค๋ฅผ Primary๋ก ์ฌ์ฉํ๊ฒ ์ต๋๋ค. EC2 ์ธ์คํด์ค(Primary)์ ์ ์ํ์ฌ ํ
์คํธ ํธ์ง๊ธฐ๋ฅผ ์ด๊ณ ์๋์ ๊ฐ์ด ์์ฑํ ๋ค app.js
๋ก ์ ์ฅํฉ๋๋ค.
app.js
var express = require('express');
var app = express();
app.get(['/', '/index.html'], function (req, res) {
res.send('EC2 Primary');
});
app.listen(<span class="token number">80);
ํ์ผ ์ ์ฅ์ด ๋๋ฌ์ผ๋ฉด ๋ค์ ๋ช ๋ น์ ์ ๋ ฅํ์ฌ ์๋ฒ๋ฅผ ์คํํฉ๋๋ค.
sudo node app.js
๋ ๋ฒ์งธ ์ธ์คํด์ค๋ Failover ๊ธฐ๋ฅ์ ์ํ Secondary๋ก ์ฌ์ฉํ๊ฒ ์ต๋๋ค. EC2 ์ธ์คํด์ค(Secondary)์ ์ ์ํ์ฌ ํ
์คํธ ํธ์ง๊ธฐ๋ฅผ ์ด๊ณ ์๋์ ๊ฐ์ด ์์ฑํ ๋ค app.js
๋ก ์ ์ฅํฉ๋๋ค.
app.js
var express = require('express');
var app = express();
app.get(['/', '/index.html'], function (req, res) {
res.send('EC2 Secondary');
});
app.listen(<span class="token number">80);
ํ์ผ ์ ์ฅ์ด ๋๋ฌ์ผ๋ฉด ๋ค์ ๋ช ๋ น์ ์ ๋ ฅํ์ฌ ์๋ฒ๋ฅผ ์คํํฉ๋๋ค.
sudo node app.js
EC2 ์ธ์คํด์ค(Primary)์ ๋ํ Health Check๋ฅผ ์์ฑํฉ๋๋ค.
- Name: ์๋ฒ ๋์ ์ํ ์ฒดํฌ์ ์ด๋ฆ์ ๋๋ค. ๊ธฐ๋ณธ๊ฐ ๊ทธ๋๋ก ๋น์๋ก๋๋ค.
- Protocol: ์๋ฒ ๋์ ์ํ๋ฅผ ์ฒดํฌํ ํ๋กํ ์ฝ์ ์ค์ ํฉ๋๋ค. HTTP, HTTPS, TCP๋ฅผ ์ ํํ ์ ์์ต๋๋ค. ๊ธฐ๋ณธ๊ฐ ๊ทธ๋๋ก ์ฌ์ฉํฉ๋๋ค.
- Specify Endpoint By: ์๋ฒ ๋์ ์ํ๋ฅผ ์ฒดํฌํ ๋ IP ์ฃผ์๋ก ํ ์ง, ๋๋ฉ์ธ์ผ๋ก ํ ์ง ์ค์ ํฉ๋๋ค. ๊ธฐ๋ณธ๊ฐ ๊ทธ๋๋ก ์ฌ์ฉํฉ๋๋ค.
- IP Address: ์๋ฒ ๋์ ์ํ๋ฅผ ์ฒดํฌํ ๋ ์ ๊ทผํ IP ์ฃผ์๋ฅผ ์ค์ ํฉ๋๋ค. EC2 ์ธ์คํด์ค(Primary)์ ๊ณต์ธ IP ์ฃผ์๋ฅผ ์ ๋ ฅํฉ๋๋ค.
- Host Name: ๋์ ์ํ๋ฅผ ์ฒดํฌํ๋ ์๋ฒ์ ์ด๋ฆ์ ๋๋ค. ์ ๋ ฅํ์ง ์์๋ ์๊ด ์์ต๋๋ค.
- Port: ์๋ฒ ๋์ ์ํ๋ฅผ ์ฒดํฌํ ๋ ์ ๊ทผํ ํฌํธ ๋ฒํธ์ ๋๋ค. ๊ธฐ๋ณธ๊ฐ ๊ทธ๋๋ก ์ฌ์ฉํฉ๋๋ค.
- Path: ์๋ฒ ๋์ ์ํ๋ฅผ ์ฒดํฌํ ๋ ์ ๊ทผํ ํ์ผ์ URL์ ๋๋ค. /index.html, /hello/healthckeck.html๊ณผ ๊ฐ์ด ์ ๋ ฅํ๋ฉด ๋ฉ๋๋ค. ๊ธฐ๋ณธ๊ฐ ๊ทธ๋๋ก ๋น์๋ก๋๋ค.
- Request Interval: ์๋ฒ ๋์ ์ํ ์ฒดํฌ ์ฃผ๊ธฐ๋ฅผ ์ค์ ํฉ๋๋ค. 30์ด์ 10์ด๋ฅผ ์ ํํ ์ ์์ต๋๋ค. ์ฌ๊ธฐ์๋ 10์ด๋ฅผ ์ ํํฉ๋๋ค.
- Failure Threshold: ์๋ฒ ์ ๊ทผ์ ์คํจํ์ ๋ ์ฌ์๋ ํ์์ ๋๋ค. ๊ธฐ๋ณธ๊ฐ ๊ทธ๋๋ก ์ฌ์ฉํฉ๋๋ค.
- Enable String Match: ์๋ฒ์์ ์ถ๋ ฅํ๋ ํ์ผ์ ๋ด์ฉ(body)์์ ํน์ ๋ฌธ์์ด๋ก ์ํ๋ฅผ ํ๋จํ ์ง ์ค์ ํฉ๋๋ค. ๊ธฐ๋ณธ๊ฐ ๊ทธ๋๋ก ์ฌ์ฉํฉ๋๋ค.
- Search String: ํ์ผ ๋ด์ฉ์์ ๊ฒ์ํ ๋ฌธ์์ด์ ์ค์ ํฉ๋๋ค.
- URL: ์๋ฒ ๋์ ์ํ๋ฅผ ์ฒดํฌํ ๋ ์ ๊ทผํ URL ์ ๋๋ค. ์์์ ์ค์ ํ ๋ด์ฉ๋๋ก ์๋ ์์ฑ๋ฉ๋๋ค.
- Health Check Type: ์๋ฒ ๋์ ์ํ ์ฒดํฌ ์ข ๋ฅ์ ๋๋ค. ์์์ ์ค์ ํ ๋ด์ฉ๋๋ก ์๋ ์์ฑ๋ฉ๋๋ค. ์๊ธ์ ๊ดํด์๋ View Pricing ๋งํฌ๋ฅผ ์ฐธ์กฐํด์ฃผ์ญ์์ค.
EC2 ์ธ์คํด์ค(Primary)์ ๋ํ A ๋ ์ฝ๋๋ฅผ ์์ฑํฉ๋๋ค.
- Name: ์์ฑํ ๋๋ฉ์ธ ์ด๋ฆ์ ์ค์ ํฉ๋๋ค. examplefailover๋ฅผ ์ ๋ ฅํฉ๋๋ค.
- Type: ๋ ์ฝ๋ ์ข ๋ฅ๋ฅผ ์ค์ ํฉ๋๋ค. ๊ธฐ๋ณธ๊ฐ ๊ทธ๋๋ก A - IPv4 address๋ฅผ ์ ํํฉ๋๋ค.
- Alias: IP ์ฃผ์๋ฅผ ์ฌ์ฉํ ๊ฒ์ด๋ฏ๋ก ๊ธฐ๋ณธ๊ฐ ๊ทธ๋๋ก ์ฌ์ฉํฉ๋๋ค.
- TTL: Time To Live์ ์ฝ์์ด๋ฉฐ A ๋ ์ฝ๋๊ฐ ๊ฐฑ์ ๋๋ ์ฃผ๊ธฐ๋ฅผ ์ค์ ํฉ๋๋ค. ์ด ๋จ์๋ก ์ค์ ํฉ๋๋ค. DNS Failover ๊ธฐ๋ฅ์ 60์ด๋ฅผ ๊ถ์ฅํ๊ณ ์์ผ๋ฏ๋ก 60์ ์ ๋ ฅํฉ๋๋ค.
- Value: ๋๋ฉ์ธ ๋ค์์ ์ฟผ๋ฆฌํ์ ๋ ์๋ ค์ค IP ์ฃผ์๋ฅผ ์ค์ ํฉ๋๋ค. EC2 ์ธ์คํด์ค(Primary)์ ๊ณต์ธ IP ์ฃผ์๋ฅผ ์ ๋ ฅํฉ๋๋ค.
- Routing Policy: ๋ผ์ฐํ ์ ์ฑ ์ ์ค์ ํฉ๋๋ค. Failover๋ฅผ ์ ํํฉ๋๋ค.
- Failover Record Type: ํ์ฌ ๋ ์ฝ๋๊ฐ Primary์ธ์ง, Secondary์ธ์ง ์ค์ ํฉ๋๋ค. Primary์ด๋ฏ๋ก ๊ธฐ๋ณธ๊ฐ ๊ทธ๋๋ก ์ฌ์ฉํฉ๋๋ค.
- Set ID: Failover ๋ ์ฝ๋๋ผ๋ฆฌ ์๋ก ๊ตฌ๋ถํ๋ ID์ ๋๋ค. ๊ธฐ๋ณธ๊ฐ ๊ทธ๋๋ก ์ฌ์ฉํฉ๋๋ค.
- Associate with Health Check: Health Check ์ค์ ๊ณผ ์ฐ๋ํ ์ง ์ค์ ํฉ๋๋ค. Yes๋ฅผ ์ ํํฉ๋๋ค.
- Health Check to Associate: ํ์ฌ ์์ฑ๋์ด ์๋ ๋ชจ๋ Health Check ๋ชฉ๋ก์ด ํ์๋ฉ๋๋ค. ๋ฐฉ๊ธ ์์ฑํ EC2 ์ธ์คํด์ค(Primary) Health Check๋ฅผ ์ ํํฉ๋๋ค.
๋๋ฉ์ธ์ Primary A ๋ ์ฝ๋๊ฐ ์์ฑ๋์์ต๋๋ค.
EC2 ์ธ์คํด์ค(Secondary) ๋ํ A ๋ ์ฝ๋๋ฅผ ์์ฑํฉ๋๋ค.
- Name: ์์ฑํ ๋๋ฉ์ธ ์ด๋ฆ์ ์ค์ ํฉ๋๋ค. examplefailover๋ฅผ ์ ๋ ฅํฉ๋๋ค.
- Type: ๋ ์ฝ๋ ์ข ๋ฅ๋ฅผ ์ค์ ํฉ๋๋ค. ๊ธฐ๋ณธ๊ฐ ๊ทธ๋๋ก A - IPv4 address๋ฅผ ์ ํํฉ๋๋ค.
- Alias: IP ์ฃผ์๋ฅผ ์ฌ์ฉํ ๊ฒ์ด๋ฏ๋ก ๊ธฐ๋ณธ๊ฐ ๊ทธ๋๋ก ์ฌ์ฉํฉ๋๋ค.
- TTL: Time To Live์ ์ฝ์์ด๋ฉฐ A ๋ ์ฝ๋๊ฐ ๊ฐฑ์ ๋๋ ์ฃผ๊ธฐ๋ฅผ ์ค์ ํฉ๋๋ค. ์ด ๋จ์๋ก ์ค์ ํฉ๋๋ค. DNS Failover ๊ธฐ๋ฅ์ 60์ด๋ฅผ ๊ถ์ฅํ๊ณ ์์ผ๋ฏ๋ก 60์ ์ ๋ ฅํฉ๋๋ค.
- Value: ๋๋ฉ์ธ ๋ค์์ ์ฟผ๋ฆฌํ์ ๋ ์๋ ค์ค IP ์ฃผ์๋ฅผ ์ค์ ํฉ๋๋ค. EC2 ์ธ์คํด์ค(Secondary)์ ๊ณต์ธ IP ์ฃผ์๋ฅผ ์ ๋ ฅํฉ๋๋ค.
- Routing Policy: ๋ผ์ฐํ ์ ์ฑ ์ ์ค์ ํฉ๋๋ค. Failover๋ฅผ ์ ํํฉ๋๋ค.
- Failover Record Type: ํ์ฌ ๋ ์ฝ๋๊ฐ Primary์ธ์ง, Secondary์ธ์ง ์ค์ ํฉ๋๋ค. Secondary์ด๋ฏ๋ก Secondary๋ฅผ ์ ํํฉ๋๋ค.
- Set ID: Failover ๋ ์ฝ๋๋ผ๋ฆฌ ์๋ก ๊ตฌ๋ถํ๋ ID์ ๋๋ค. ๊ธฐ๋ณธ๊ฐ ๊ทธ๋๋ก ์ฌ์ฉํฉ๋๋ค.
- Associate with Health Check: Health Check ์ค์ ๊ณผ ์ฐ๋ํ ์ง ์ค์ ํฉ๋๋ค. Secondary๋ Health Check๊ฐ ํ์ ์์ผ๋ฏ๋ก ๊ธฐ๋ณธ๊ฐ ๊ทธ๋๋ก No๋ฅผ ์ ํํฉ๋๋ค.
์ด์ EC2 ์ธ์คํด์ค(Primary)์ ์น ์๋ฒ(Node.js)๋ฅผ ์ข ๋ฃํ๊ณ , ์ฝ 1๋ถ ์ ๋ ํ์ ์๋ก๊ณ ์นจ์ ํด๋ด ๋๋ค. Failover ๊ธฐ๋ฅ์ด ์ ๋์ํ์ฌ EC2 ์ธ์คํด์ค(Secondary)์ ๋ด์ฉ์ด ํ์๋ฉ๋๋ค.
์ ์์ด ์ ๋ ๋๋ EC2 ์ธ์คํด์ค์ Security Group์ 80๋ฒ ํฌํธ๊ฐ ์ด๋ ค์๋์ง ํ์ธํฉ๋๋ค. ์น ๋ธ๋ผ์ฐ์ ์์ ๊ฐ๊ฐ์ IP ์ฃผ์๋ก ์ ์ํด์ ํ์ธํ๋ฉด ๋ฉ๋๋ค.
DNS Failover์ ELB
ELB๋ฅผ ์ฌ์ฉํ ๋๋ A ๋ ์ฝ๋์ Alias๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฉ๋๋ค. ELB ์ ์ ์ฃผ์๋ IP ์ฃผ์๊ฐ ์๋ ๋๋ฉ์ธ์ผ๋ก ์ ๊ณต๋ฉ๋๋ค. A ๋ ์ฝ๋ Alias๋ IP ์ฃผ์ ๋์ ๋๋ฉ์ธ์ ์ฐ๊ฒฐํ๋ ๊ธฐ๋ฅ์ ๋๋ค.