각각의 LB는 사용 용도에 따라 선택이 필요하며, 오늘 작성할 내용은 CLB(단순 LoadBalancing 역할)를 작성
2. CLB 생성하기
STEP 1.
- 첫 단계에서는 LB의 이름과 사용 포트를 정함.
CLB는 단순한 포트 포워딩만 가능. 위 캡쳐에서는 LB에 HTTP 80으로 들어온 통신을 LB에 연결된 EC2 80포트로 연결해주는 것을 나타냄.
- 내부에서만 사용하는 시스템에 적용하려면 'Internal Load Balancer'를 클릭 후 생성하면 외부에서 해당 LB를 통해 접속이 불가.(사실 여기서 Internal Load Balancer를 클릭하지 않더라도, LB의 Subnet을 Private으로 하면 외부에서 접속할 수 없음. 외부에서 nslookup 입력 시, 쿼리 확인 불가)
- Available Subnets는 LB가 위치할 Subnet을 추가.(AWS 권장은 LB를 Public에 두고, LB의 뒷 단(EC2)를 Private에 위치시켜 사용하는 방식. 즉, EC2는 외부에서 접속 불가하지만 LB를 통해 접속 가능
STEP 2, 3는 생략.(Security Group 설정)
STEP 4.
- LB는 기본적으로 Health Check를 통해 Healthy인 인스턴스로만 로드밸런싱 함.
- Healthy Check는 루트 경로의 파일의 ping port를 통해 진행되는데, 위와 같이 Ping Path에 해당 파일이 위치하고 있어야 한다. html을 사용하면 문제 없지만, 사용하지 않는 경우에는 'index.html'과 같이 비어있는 html 파일을 넣어둬도 체크가 가능하다.(단, 서비스에 이상이 생겼을 때, Healthy 상태를 유지한다는 단점이 있음.)
위 화면을 보면 조금 더 잘 보임. hello.html은 80포트를 이용하며, 30초 간격으로 Health Check. Timeout은 5초, 2번 체크가 되지 않으면 Unhealthy 상태로 변경되어, 해당 인스턴스는 밸런싱 되지 않음.
STEP 5.
- LB에 Attach 할 인스턴스를 지정하는 화면
- 하단에 Enable Cross-Zone Load Balancing은 해당 LB에 서로 다른 가용영역의 인스턴스를 넣을 수 있게 해줌. 위 화면에서는 둘 다 ap-northeast-2a를 사용했지만(보이지는 않음), ap-northeast-2c 등 다른 가용영역을 함께 사용할 수 있음
- 'Enable Connection Draining' 옵션은 LB에서 특정 인스턴스를 제거할 때, 해당 인스턴스에 신규 접속자는 차단하면서 기존에 인스턴스에 연결되어 서비스를 이용하는 사용자가 설정 시간동안 사용할 수 있도록 함.(위는 300초)
3. 포트 포워딩
* 예제에서 구성한 인스턴스는 80포트를 사용하는 중임.
- 'ELB주소:8080'을 입력하는 것과 'ELB주소:80'을 입력하는 것이 같은 페이지를 출력함.
- '여러 서비스를 사용할 때 쓸수 있나?'라는 생각을 가졌지만, 기본적으로 Health Check에서 80 포트를 체크하기 때문에 한 가지 서비스에 여러가지 포트를 사용할 때만 가능한 것 같다는 생각.(나중에 아닌 경우가 생각나면 수정해라)
4. AutoScaling과 연계
- LB를 설정하고 AutoScaling을 설정하여, 특정 임계치(CPU, Memory, Request Count 등의 지표)에 도달하면 새로운 인스턴스를 생성하여 LB에 Attach를 할 수 있다. 이 부분은 추후 작성예정이지만, 필요한 경우 구글링하면 금방 할 수 있을 것.
1. 신규 Instance 생성과 동시에 'Auto-assign Public IP' 기능을 사용할 경우
Step 1, 2(이미지 선택, 타입 선택은 건너 뜀)
- Instance를 생성하면서, 'Auto-assign Public IP'를 사용하면 EIP를 별도로 생성할 필요 없이 Public IP를 사용할 수 있다. 하지만, 해당 케이스는 Public IP가 변동되어도 상관 없다면 사용이 가능하다. 하지만, DDNS를 사용하지 않는다면 Public IP가 바뀔 때 마다, DNS 설정을 변경해줘야 하는 번거로움이 생긴다.
ex) Auto-assign Public IP 기능을 사용하여 받은 Public IP가 10.10.10.10일 때, DNS서버에
'www.dennsworld.com' == '10.10.10.10' 로 되어있을 것이고, 인스턴스가 Stop이 된다면 이미 할당받은 '10.10.10.10'은 사라지게 된다. 그렇게 된다면, 사용자들은 'www.dennsworld.com' 에 접속할 수 없다.(DNS 통신 불가)
- 'Auto-assign Public IP'는 서버 상태가 'STOP'이 될 경우, 할당 받은 Public IP가 사라진다. 사라진 Public IP는 'START'할 경우, '다른' Public IP와 함께 시작된다!
ex) 인스턴스를 시작하면서 '11.11.11.11'이라는 Public IP를 가지고 시작되었다면
DNS서버에서 'www.dennsworld.com' == '11.11.11.11' 로 변경해야 사용자가 접속 가능.
2. 변경되지 않는 Public IP를 사용하려면..
- Auto-assign Public IP를 기본 설정으로 둔다. 'Use subnet setting(Disable)'
- 인스턴스 생성 방법은 취향과 필요에 맞춰 생성하도록 하고.. 다 만들고 나면 EC2 서비스의 좌측 패널 중간에 위치한 'NETWORK & SECURITY' -> 'Elastic IPs'로 들어가서 새로운 EIP를 할당받는다. (영문버전에서는 Allocate new address)
새롭게 할당받은 EIP와 인스턴스를 연결해줘야 한다.
Associate address를 통해 연결해 줄 수 있으며, 아래를 참고.
할당받은 EIP와 Instance ID를 연결해주자.. Instance의 Name을 통해 입력해줘도 되고, Private IP를 입력해줘도 되니 편할대로 하면 된다.
* 경고 : 이렇게 할당받은 EIP는 서버를 중지시켜도 EIP에 대한 비용은 계속 청구되니, 별도의 주의가 필요하다.
* 서버가 STOP되어도 내가 가지고 있는 Public는 고정되어있다는 장점과 WEB 서버를 신규 구축하여 이전할 경우에도 할당받은 EIP를 신규 인스턴스와 연결해주면 새로운 서비스를 이용할 수 있다.(물론 대부분은 LB를 사용하기 때문에 EIP를 이동시키는 경우는 거의 없을 것이다..)
CLI는 Command Line Interface의 줄임말이며, 말 그대로 명령어를 입력하여 사용하는 방식. 대부분의 사람들이 AWS Console을 이용해 손쉽게 AWS를 컨트롤하지만, CLI를 사용하면 조금 더 쉽게 원하는 내용만 추출할 수 있다는 장점이 있으며, 지속적으로 활용해볼 가치가 있음.
2. CLI 활용이 필요한 상황
현재 사용하고 있는 여러개의 ALB 중 일부가 Access Log 기능이 활성화되어있지 않아 장애 발생 시, 로그 확인에 어려움을 겪을 수 있는 상황 발생. Access Log 기능이 활성화되어있는지를 확인하기 위해서는 한 개씩 모든 ALB를 확인하면 되지만 더 쉽게 찾아보기 위해 시도.
AWS 콘솔상에서 해당 버튼이 활성화되어있지 않은 경우 발생. (AWS 블로그에서 이미지 발췌)
CLI를 통해 해당 문제가 완전히 해결된 상황은 아니지만, 혹여나 저와 비슷한 생각을 가지고 계신 분이 있지 않을까 하여 우선 작성.
CLI를 활용하기 위해서는 사용자 PC에 AWS CLI를 설치해야하며, 설치 방법은 검색해보시길..
3. CLI 활용 방법
CLI는 리눅스와 마찬가지로 지속적으로 help 명령어를 통해 확인할 수 있음.
처음 사용을 어떻게 해야할지 모르겠을 때는, aws help를 입력하면 aws의 어떤 서비스들을 CLI를 통하여 사용가능한지 모든 서비스 확인 가능.
aws elbv2 describe-load-balancers
현재 aws cli를 설정한 계정에는 테스트를 위해 ALB 하나만 만들어 둔 상태이며, ALB에 대한 설명이 나옴.
하지만 제가 확인하고자 하는 정보는 해당 명령어를 통해 확인이 불가능하여 다른 명령어를 찾아 다시 입력.
- 해당 탭에 저장되지 않은 파일시스템이 있을 경우, 재부팅했을 때 기록되어 있지 않은 파일시스템은 마운트가 빠짐.
- /etc/fstab 에 위치하고 있으며, 지속적으로 마운트시키고 싶은 경우에는 에디터를 이용하여 내용 수정이 필요.
- 즉, 영구적 마운트를 설정하는 탭
2. FSTAB 구성
에디터를 이용하여 fstab의 내용 수정때 화면
명령어 : vi /etc/fstab
편집기를 사용하여 fstab을 수정할 경우, 위와 같은 화면이 나타난다.
[파일시스템장치] - [마운트 위치] - [파일시스템 종류] - [옵션] - [덤프] - [파일체크 옵션] 순으로 기록되어 있음.
[파일시스템 장치]
: 파일시스템 장치명이 입력되어야 하며, 명령어 df -h 를 입력할 경우 파일시스템 장치명을 확인할 수 있다.(ex. /dev/xvda1 과 같음.)
[마운트 위치]
: 말 그대로, 마운트 위치를 어느곳으로 할 지 입력하면 됨. 다른 글에도 작성했던 것 처럼, 마운트는 대체로 /mnt 에 위치시키기는 하지만 원하는 곳으로도 변경이 가능하다. /mnt 파일 안에 mkdir point1(point1 이라는 디렉토리 생성)을 입력하여 mnt 디렉토리 하위에 point1(이름은 알아서..)을 만들고 그 곳에 마운트 되도록 입력해주면 됨. 예시를 든 것이기 때문에 원하는 위치에 디렉토리를 생성하여 사용.
fstab은 현재 붙어있는 디스크를 영구적으로 마운트 시키는게 대부분이기 때문에 현재 마운트된 위치에 해주는 것이 바람직.
[파일시스템 종류]
: 파일 시스템은 다양. ext, ext2, ext3, ext4, nfs 등등이 있으며, 현재 마운트시키는 디스크의 종류가 무엇인지 필히 확인 후 입력해야한다.
파일시스템 타입을 확인하는 방법
명령어 : df -T (대소문자 구분)
해당 명령어를 입력해보면 현재 마운트되어있는 파일의 시스템 종류 확인이 가능.(옵션 T는 Type)
파일시스템 종류를 확인 후 fstab에 입력해주면 된다.
[옵션]
: 파일시스템을 용도에 맞게 사용하기 위한 속성을 설정하는 옵션. 옵션은 아래와 같은 종류가 있으며,
특별한 옵션 설정이 필요하지 않으면 default를 사용.
default : rw, suid, dev, exec, auto, nouser, async옵션을 모두 선택한 것과 같다.
auto :부팅시 자동으로 마운트 된다.
exec :실행파일이 실행되는 것을 허용하는 파일 시스템이다.
suid : SetUID와SetGID의 사용을 허용하는 파일 시스템이다.
ro :읽기 전용 파일시스템이다.(Read Only)
rw :읽고 쓰기(Read Write)파일시스템으로 사용된다.
user :일반 계정사용자들도 마운트를 할 수 있는 파일시스템이다.
nouser : root만 마운트할 수 있는 파일시스템이다.
noauto :부팅시 자동으로 마운트 되지 않게하는 파일시스템이다
noexec : 실행파일을 실행되지 못하게 하는 파일시스템이다.
nosuid : SetUID와SetGID의 사용을 허용하지 않은 파일시스템이다.
usrquota :개별 계정사용자의Quota설정이 가능한 파일시스템이다.(쿼터:사용자별로 디스크 할당을 조정(제한))
grp :그룹별Quota설정이 가능한 파일 시스템
[덤프]
: 0 or 1의 설정만 가능하며, 백업이 되어야 하는지 설정하는 필드.
0 - 백업이 불가능
1 - 백업이 가능
[파일체크 옵션]
: 0 or 1 or 2 의 옵션 설정이 가능.
0 - 무결성 검사를 진행하지 않음.
1 - 우선순위로 1순위. 보통 루트 파일시스템에 설정.(위 사진에서도 맨 윗줄에 1 옵션이 기록되어 있음.)