GSLB란?
GSLB는 Global Server Load Balancing으로
로드밸런서가 아니라 전세계 어디에서든지 빠르고 신뢰성 있는 응답을 제공하기 위한 지능적인 DNS이다.
대부분으로 글로벌 DNS 브랜드는 GSLB를 제공하고있다.
통상적으로 아래와 같은 기능들을 제공한다.
- Performance : 클라이언트의 요청을 네트워크상 가까운 서버로 연결할 수 있다. 트래픽을 지역에 맞게 분산해서 연결할 수 있다.
- Customized Content : 지역/언어별로 커스텀한 콘텐츠를 자동으로 제공할 수 있다.
- Disaster Recovery : 장애가 발생했을 때 다른 지역의 서버로 redirect해서 HA(고가용성) 구성이 가능하다.
- Maintenance : 연결 규칙이나 구성이 변경 가능해야한다.
- Compliance : 국가나 지역의 규제에 맞게 요청을 전다할 수 있다.
AWS Route53에서 Routing 설정하기
Failover로 이중화하기
Failover는 연결 대상인 서비스(DNS,IP,Server 등)로 연결이 안될때 대체 서비스로 연결되도록 하는 것이다.
이를 통해 예상치 못한 장애를 대비하여 서비스를 안정적으로 제공할 수 있다.
하지만 여분의 인프라가 필요하다.
Failover 설정해보기
우선 2개의 Ec2서버를 준비한다.
1. 서버 띄우기
하나의 서버에 간단하게 2000포트로 netcat으로 띄워본다.
nc -l -p 2000 -k
자신의 컴퓨터에서 해당 서버로 요청으로 보내보고 제대로 Echo가 이루어지는지 확인한다.
echo hi | nc $ec2_public_ip 2000
잘 되면 2대의 서버 모두 띄워놓는다.
2. Health Check 생성
서버의 정상/비정상이 판단되어야 Failover를 확이할 수 있기에
AWS에서 2대의 ec2 서버 모두 Health Check를 생성한다.
- HealthCheck Home 에서 Create HealthCheck
- What to monitor: Endpoint
- Specify endpoint by: IP address
- Protocol: TCP
- IP address: 자신의 EC2 public IP
- port: 자신이 띄운 nc process의 port
- Advanced Configuration 에서 자신의 서비스에 필요한 것을 설정한다.
- Alarm 연동이 필요한 경우(cloudwatch등) 설정한다.
3. Record 생성
다음 record를 생성한다.
- Record 1에 대해서
- Record name: failover
- Record type: A
- Value: 첫번째 서버의 IP주소
- TTL: 1m
- Routing Policy: Failover
- Failover record type: Primary
health check 가 정상이라면, 이 연결로만 라우팅한다. - Health check ID: 첫번째 서버에 해당하는 healthcheck
- Record ID: failover-primary
같은 record name에 대해서 구분하기 위해서 사용
- Add another record 버튼을 눌러서 Record 2를 만든다.
- 아래 설정 외에는 Record 1과 동일하다.
- Failover record type: Secondary
Primary 가 unhealthy 상태라면 이 연결로 라우팅한다. - Health check ID: 두번째 서버에 해당하는 healthcheck
- Record ID: failover-secondary
같은 record name에 대해서 구분하기 위해서 사용
4. Failover 확인해보기
- HealthChecks에서 생성한 두개의 health check 가 모두 healthy인지 확인한다.
- host(또는 nslookup) 명령어로 failover.$yourdomain 으로 domain에 해당하는 IP address를 확인한다.
Primary 에 해당하는 IP address 가 나와야 정상이다. - Primary 에 해당하는 EC2 서버에서 ns 프로세스를 종료한다.
- HealthChecks에서 Primary에 해당하는 EC2서버의 health check 가 unhealthy인지 확인한다.
- 다시 host 명령어로 도메인에 해당하는 IP address 를 확인한다.
Secondary 에 해당하는 IP address 가 나와야 정상이다. - Secondary 에 해당하는 EC2 서버에서 ns 프로세스를 종료한다.
- HealthChecks에서 모든 EC2서버의 health check 가 unhealthy인지 확인한다.
- 다시 host 명령어로 도메인에 해당하는 IP address 를 확인한다.
모든 health check 가 unhealthy일때, route53의 failover 전략은 라우팅을 Primary로 변경한다.
가중치 기반(Weighted) 라우팅
Failover의 경우 Secondary 서버가 아무것도 안했다면
이번에는 가중치 값에 따라 트래픽을 분산시킬 수 있다.
이렇게 하면 장애 대비와 함께 구축 후에도 지속적으로 사용할 수 있다.
Canary Deployment(카나리 배포 : 미리 조금만 배포 해보는 것)로 활용할 수 있다.
부하 분산도 가능하다.
Failover 방식과 Health Check까지는 같으며
Record 생성시 설정값이 다르다.
Routing Policy : Weighted
Weight: {원하는 정수 값}
위에 부분과 Record ID만 다르게 설정해주면 된다.
확인해볼때도 굳이 하나의 서버에서 프로세스를 종료 안해도
가중치 비율에 근사하게 접속되는 것을 확인할 수 있다.
지역 기반(Geo) 라우팅
지역 기반 라우팅은
해당 지역에서 들어온 IP로 판단되면 해당 지역에 매칭되도록 설정한 DNS/IP/Server로 라우팅해준다.
이렇게해서 지역별로 서로 다른 서비스를 제공할 수 있으며 응답시간도 빠르게 할 수 있다.
하지만 빠른 latency를 제공하지 않을 수도 있다. (해당 지역이 그 국가의 땅이라고 해서 그 국가의 서버와 가장 가깝다는 보장은 없음)
지역기반 라우팅에서는 Health Chekc의 등록도 선택할 수 있다. 해당 지역의 모든 Record가 unhealthy면 클라이언트는 host를 못찾는다.
Routing Policy : Geolocation
Location : 원하는 지역 선택
Health check ID : 설정 안함
이번에도 이 설정들과 Record ID만 바꿔서 Record 2도 똑같이 진행한다.
확인할 때는 2개의 서버의 region을 다르게 해서 접속해본다.
지리 근접(Geo-Proximity) 라우팅
지리 근접 라우팅은
접속한 클라이언트의 지리적으로 근접한 지역으로 라우팅하는 것이다.
지리 근접의 규칙도 변경가능하다.
클라이언트의 접속량의 변화에 따라서 규칙을 변경하며 유연하게 대처할 수 있다.
하지만 Traffic-flow의 추가과금이 있다.
지연 시간 기반(Latency) 라우팅
접속한 클라이언트가 가장 빠른 응답을 받을 것으로 기대되는 곳으로 라우팅하는 것이다.
빠른 응답을 받을 수 있다는 큰 장점이 있지만
AWS의 자체 로직으로 결정되기에 튜닝이 불가하며 100% 확률로 가장 낮은 Latency를 제공할 수는 없다.
이 밖에도 여러 라우팅 정책들이 있다.
'Data Engineering > Server' 카테고리의 다른 글
AWS Route 53으로 DNS 사용해보기 (0) | 2023.12.28 |
---|---|
DNS의 원리와 과정에 대해서 알아보자 (0) | 2023.12.28 |
Redis 여러 응용 방법 - Sliding window rate limiter, HyperLogLog (1) | 2023.12.28 |
CacheDB - Redis로 빠르게 데이터 불러오기 (1) | 2023.12.28 |