CVM 세팅하기
이제 본격적으로 CVM을 세팅한다. 총 5대의 CVM을 프로비저닝 하면 되는데, Bastion host용으로 사용할 CVM은 Public subnet에 두고, 나머지 4대의 가상머신은 Web server와 WAS로 쓸 것이기 때문에 모두 private subnet에 배치한다. 세팅이 끝나면 위와 같은 상태가 되어야 한다.
테스트 목적이므로 적당한 스펙과 이미지를 선택하여 인스턴스를 생성한다. 이때 각각 인스턴스가 속한 서브넷이 설계한 아키텍처에 맞게 설정되어야 한다.
Nginx 설치 및 세팅
서로 다른 AZ의 private subnet에 위치한 인스턴스 2대에 웹서버를 설치한다. 여기서는 Nginx를 기준으로 한다.
콘솔을 통해 직접 로그인 하거나,
먼저 점프서버 역할을 하는 Public subnet에 위치한 인스턴스에 ssh 접속을 하고 여기서 다시 목적지로 ssh 접속한다.
sudo apt update
sudo apt install nginx
Nginx 설치가 끝나면, 추후 CLB를 연결하여 트래픽 분산을 할때 로드밸런싱이 제대로 되는지 눈으로 확인할 수 있게 몇 가지 설정을 한다. (어차피 CLB 설정 시 헬스체크가 가능하기 때문에 이 과정은 생략해도 무방하다.)
CLB 설정 시 엔드포인트 하위 경로를 /test로 지정하기로 하고, Nginx 기본 설정 파일(default)에서 이에대한 응답헤더를 추가한다.
server {
listen 80;
server_name www.example.com;
location /test {
add_header X-Served-By web1;
}
// Seoul zone1 서버의 경우 web1, zone2의 경우 web2.
}
그 다음은 /var/www/html/ 경로에 test.html 파일을 추가한 뒤 아래코드를 입력한다.
<html>
<head><title>Test Page</title></head>
<body>
<h1>This request is served by web1</h1>
</body>
</html>
WAS 설치 및 세팅
WAS1, WAS2에 각각 로그인 한 뒤 아래의 스크립트를 입력하여 OpenJDK와 Tomcat을 설치한다.
OpenJDK:
sudo apt update
sudo apt install default-jdk
Tomcat :
sudo useradd -m -U -d /opt/tomcat -s /bin/false tomcat
wget <tomcat 홈페이지에서 최신 다운로드 링크를 입력 .tar.gz>
sudo tar xzvf apache-tomcat-*tar.gz -C /opt/tomcat --strip-components=1
sudo chown -R tomcat: /opt/tomcat
Tomcat 실행 :
sudo systemctl start tomcat
sudo systemctl enable tomcat
CLB 설정
총 2개의 CLB 설정이 필요하다. 외부 트래픽을 Web1, Web2에 분배해줄 로드밸랜서 (EX_CLB), Web1,2를 통과한 트래픽을 WAS1, WAS2에 분배해줄 로드밸런서 (IN_CLB). 두 가지는 각각 public network 와 private network에 위치한다. 이 글에서는 EX_CLB를 생성하는 방법을 소개한다.
콘솔의 Cloud Load Balancing 메뉴에서 CLB 인스턴스를 구매한다.
Basic information 에서 생성된 CLB 엔드포인트를 확인할 수 있으며 도메인으로도 커스텀이 가능하다.
구입 후 CLB콘솔에서 생성한 CLB의 이름을 클릭하여 Listener management 메뉴로 가면 리스너 생성이 가능하다.
다음은 포워딩 룰을 생성한다. Nginx 기본환경 설정 시 하위경로로 했던 /test를 URL에 입력하고 밸런싱 알고리즘은 WRB로 설정 한다.
이제 브라우저에 VIP주소/test 로 요청을 날리고 새로고침을 계속 눌러보면 web1 과 web2로 균등하게 로드가 분산되는 것을 눈으로 확인할 수 있다. 같은 방법으로 private network에 IN_CLB를 구현하면 된다.
TencentDB for MySQL 설정
TencentDB for MySQL 메뉴에서 MySQL instance를 생성한다.
Source AZ 는 Seoul Zone1 , Replica AZ는 Seoul Zone2 로 설정한다.
이제 bastion host에 접속해서 MySQL의 private IP로 접속을 해보면
잘 되는 것을 확인할 수 있다
Security Group
마지막으로 각각의 인스턴스가 연관된 리소스와의 인터랙션만 허용하도록 Security group을 설정한다. 이 작업은 인스턴스를 생성할때 마다 그때그때 적용해 주는 것이 좋다. 설정 포트는 구현한 아키텍처와 설치한 소프트웨어에 따라 다를 수 있다.
1) Bastion host : 일종의 프록시 서버 역할을 하므로 ssh 접속이 가능하도록 22번 포트를 개방한다. 아웃바운드 트래픽은 모두 허용한다.
2) EX_CLB : 웹 트래픽을 받기 위한 HTTP(80) 포트를 오픈한다. (CLB 설정에 따라 HTTPS(443)도 해당) 아웃바운드 트래픽의 경우 Web server 로만 향하도록 설정한다.
3) Web server : EX_CLB를 통과한 트래픽과 Bastion host의 ssh 접속만 인바운드 허용한다. 아웃바운드 트래픽은 IN_CLB를 향한 트래픽을 허용하고 필요에 따라 추가설정한다.
4) IN_CLB : Web server 를 통과한 트래픽을 받기위한 포트와 Bastion host의 ssh 접속을 허용한다. 아웃바운드 트래픽은 WAS를 향한 트래픽을 허용하고 필요에 따라 추가설정한다.
5) WAS & DB : 마찬가지로 tomcat의 8080 포트에 대해 인바운드 트래픽을 허용한다. MySQL역시 3306 포트에 대해 인바운드 트래픽을 허용한다. 아웃바운드 트래픽은 모두 허용하거나 필요에 따라 설정한다.
마치며
이제까지 Tencent cloud 환경에서 간단한 3-tier 아키텍처를 구현하는 내용을 대략적으로 소개했다. 보는 것 처럼 실제 콘솔에서 클릭 몇 번으로 쉽게 구현이 가능하다. 기존 타 클라우드 사용자들 역시 Tencent cloud 콘솔이나 Terraform등의 IaC 툴로 기존 클라우드 벤더의 상품에 대응하는 리소스들의 프로비저닝이 가능하니 한 번 체험 해보는 것도 좋을 것 같다.