GCP에 프로젝트 수행을 위한 자원 구성

 

1. GCP 가입

google 계정 생성 후 GCP 에 등록합니다.

 

2. VPC 생성

  - subnet 생성

  - 

3. VM 인스턴스 생성

  - java 설치

  - nginx 설치

  - tomcat 설치

  - mysql JDBC driver 설치

 

4. Cloud SQL 생성

5. load balance 생성(external, internal)

6. filestore 생성

7. 

 

 

  Project  VPC region zone subnet load balancing filestore VM Cloud SQL  
DEV pjt-aicallbot-dev vpc-aicallbot-dev asia-northeast3 asia-northeast3-a
asia-northeast3-b
10.0.0.0/22
10.0.4.0/22
         
STG pjt-aicallbot-stg vpc-aicallbot-stg asia-northeast3 asia-northeast3-a
asia-northeast3-b
10.0.0.0/22
10.0.4.0/22
lbl-aicallbot-ext-stg-01 nas-aicallbot-stg-01      
PRD pjt-aicallbot-prd vpc-aicallbot-prd asia-northeast3 asia-northeast3-a
asia-northeast3-b
sbn-aicallbot-prd-01
(10.0.0.0/22)
sbn-aicallbot-prd-02
(10.0.4.0/22)
lbl-aicallbot-ext-prd-01 nas-aicallbot-prd-01 vm-aicallbot-admin-prd-01
vm-aicallbot-admin-prd-02
   

 

1. Project 생성

GCP 콘솔의 좌측 3단메뉴를 클릭한 다음 [IAM 및 관리자]를 클릭한 후 [프로젝트 만들기] 메뉴를 클릭한다. 원하는 프로젝트이름을 입력한 후 [만들기] 버튼을 클릭한다. 본 문서에서는 프로젝트 이름을 "pjt-aicallbot-prd"로 입력한다.

 

2. VPC 생성

이름 : vpc의 이름

서브넷

  - 서브넷 생성 모드 : 커스텀 선택

  - 새 subnet 생성

    이름 : 서브넷 이름

    리전 : 서브넷을 생성할 리전 선택(예시 : asia-northeast3

    IP 주소범위 : 서브넷 주소범위 입력(예시 :10.0.0.0/22)

    비공개 Google 액세스 : 사용 선택(Cloud SQL 접속 시 필요)

    흐름로그 : 사용 선택

방화벽 규칙

  - icmp와 ssh port를 선택한다.

[만들기] 버튼을 클릭하여 VPC와 subnet을 생성한다.

 

* 참고

비공개 IP 주소 범위
10.0.0.0/8
172.16.0.0/12
192.168.0.0/16
비공개 IP 주소 RFC 1918

자동 모드 IPv4 범위

리전 IP범위(CIDR) 게이트웨이 사용 가능한 주소
asia-northeast3 10.178.0.0/20 10.178.0.1 10.178.0.2 to 10.178.15.253

 

3. VM 인스턴스 생성

GCP 클라우드 콘솔의 탐색메뉴(좌측 상단의 삼단메뉴)에서 [Compute Engine] - [VM 인스턴스]를 클릭한 후 [인스턴스 만들기]를 클릭한다.

- 이름 : VM 인스턴스의 이름

- 리전, 영역 : VM 인스턴스를 생성할 리전과 영역 선택

- 머신 구성 : 업무에 필요한 적정한 vCPU와 메모리 선택

- 부팅디스크 : 원하는 OS 이미지를 선택(CentOS, Debian, Red Hat Enterprise Linux, Ubuntu, Window Server 등)

- 액세스 범위 : 사용할 API 액세스 설정(Cloud SQL을 사용할 경우 "모든 Cloud API에 대한 전체 액세스 허용"을 선택하던지, "각 API에 액세스 설정"을 선택하여 Cloud SQL 항목을 "하용 설정됨"으로 선택

 

네트워킹, 디스크, 보안, 관리, 단독 테넌시 항목

- 네트워크 태그 : 네트워크 태그 입력(서버에 접속할 수 있는 설정, AWS 의 Security Group 과 유사)

- 호스트이름 : 인스턴스의 호스트 이름

- 네트워크 인터페이스 : 네트워크를 클릭하여 생성한 VPC 선택, VPC에 생성한 서브네트워크 선택, 기본내부IP는 임시(자동)으로 선택하던지 지정된 IP를 쓰고자 하면 임시(커스텀)을 클릭하여 IP 입력, 또는 "고정 내부 IP주소 예약" 을 선택하여 고정IP 사용

- 외부IP : 외부에서 접속하지 않을 경우 "없음" 선택

 

보안

- VM 액세스 : "IAM 권한을 통해 VM 액세스 제어" 선택. SSH키로 접근할 경우에는 "프로젝트 차원 SSH키 차단" 해제

[만들기] 버튼을 클릭하여 VM 인스턴스를 생성한다.

 

GCP 콘솔에서 SSH(브라우저에서 열기) 로 방금 생성한 VM 인스턴에서 접속한다.

java, mysql-client, was server 등 GCP 기본 아키텍처를 구성하기 위해 필요한 패키지를 설치한다.

 

- java 설치

$ sudo apt install openjdk-11-jdk 
## 또는
$ sudo apt install default-jdk

## 설치후 버전확인
$ java -version
openjdk version "11.0.14" 2022-01-18
OpenJDK Runtime Environment (build 11.0.14+9-post-Debian-1deb10u1)
OpenJDK 64-Bit Server VM (build 11.0.14+9-post-Debian-1deb10u1, mixed mode, sharing)

- tomcat 설치

tomcat 설치를 위한 계정을 생성한다

$ sudo mkdir /opt/tomcat
$ sudo groupadd tomcat
$ sudo useradd -s /bin/false -g tomcat -d /opt/tomcat tomcat

 

wget 이 없을 경우 sudo apt install wget 명령어로 설치합니다.

/opt/tomcat 디렉토리로 변경하고 wget을 사용하여 zip 파일을 다운로드합니다.

$ sudo apt install wget
$ cd /opt/tomcat
$ sudo wget https://dlcdn.apache.org/tomcat/tomcat-10/v10.0.17/bin/apache-tomcat-10.0.17.tar.gz

 

다운로드가 완료되면 tar 파일의 압축을 풉니다.

sudo tar xzvf /opt/tomcat/apache-tomcat-10.0.17.tar.gz -C /opt/tomcat --strip-components=1

압축을 해제한 파일에 대해 tomcat user로 소유를 변경해 줍니다.

sudo chown -R tomcat:tomcat /opt/tomcat/

 

- Tomcat 서비스 등록

시스템에 서비스로 등록하기 위한 파일을 생성한다.

sudo vi /etc/systemd/system/tomcat.service

아래 내용을 입력한다. 아래 내용 중 JAVA_HOME 은 자신의 java 경로를 지정한다.

[Unit]
Description="Tomcat Service"
After=network.target syslog.target
[Service]
Type=forking
User=tomcat
Group=tomcat
Environment="JAVA_HOME=/usr/lib/jvm/java-1.11.0-openjdk-amd64"
Environment="CATALINA_BASE=/opt/tomcat"
Environment="CATALINA_HOME=/opt/tomcat"
Environment="CATALINA_PID=/opt/tomcat/temp/tomcat.pid"
Environment="CATALINA_OPTS=-Xms512M -Xmx1024M -server -XX:+UseParallelGC"
ExecStart=/opt/tomcat/bin/startup.sh
ExecStop=/opt/tomcat/bin/shutdown.sh
[Install]
WantedBy=multi-user.target

서비스를 등록하고 시작한다.

## 서비스 등록
$ sudo systemctl enable tomcat

## 서비스 시작
$ sudo systemctl start tomcat

## 서비스 상태확인
$ sudo systemctl status tomcat

브라우저로 "http://YOUR_IP_ADDRESS:8080"에 접속하여  tomcat 서비스가 정상적인지 확인해 본다.

 

서비스를 중지한다.

$ sudo systemctl stop tomcat

 

tomcat 버전을 확인한다.

$ sudo /opt/tomcat/bin/version.sh | grep version
Server version: Apache Tomcat/10.0.17

 

- 웹서버 설치(nginx 설치)

패키지 인덱스를 업데이트합니다.

sudo apt update

 Nginx 패키지를 설치합니다.

sudo apt install nginx

Nginx 버전을 확인한다.

$ sudo nginx -v
nginx version: nginx/1.14.2

Nginx 서비스는 설치 프로세스가 완료된 후 자동으로 시작됩니다. 다음 curl 명령을 실행하여 확인할 수 있습니다.

curl -I 127.0.0.1

# HTTP/1.1 200 OK
# Server: nginx/1.10.3
# Date: Mon, 27 Aug 2018 22:29:02 GMT
# Content-Type: text/html
# Content-Length: 612
# Last-Modified: Mon, 27 Aug 2018 22:27:54 GMT
# Connection: keep-alive
# ETag: "5b847aea-264"
# Accept-Ranges: bytes

 

방화벽 조정

서버 방확벽이 설정되어 있을 경우에 해당된다.

iptable을 사용하여 시스템에 대한 연결을 필터링하는 경우 HTTP(80) 및 HTTPS(443) 포트를 열어야 합니다. 

다음 명령을 실행하여 필요한 포트를 엽니다.

sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT

 

systemctl로 Nginx 서비스 관리

systemctl 명령을 사용하여 다른 systemd 장치와 마찬가지로 Nginx 서비스를 관리할 수 있습니다.

Nginx 서비스를 중지하려면 다음을 실행합니다.

sudo systemctl stop nginx

 시작하려면 다음을 입력합니다.

sudo systemctl start nginx

 Nginx 서비스를 재시작하려면 다음을 수행합니다.

sudo systemctl restart nginx

 구성을 변경한 후 Nginx 서비스를 다시 로드합니다.

sudo systemctl reload nginx

 부팅 시 자동으로 서비스를 기동하도록 다음을 수행합니다.

sudo systemctl enable nginx

 

부팅 시 자동으로 서비스를 시작하지 않도록 하려면 다음을 수행합니다.

sudo systemctl disable nginx

 

- Nginx 구성 파일은 /etc/nginx 디렉터리에 저장됩니다.

- 기본 Nginx 구성 파일은 /etc/nginx/nginx.conf입니다.

 

 

- mysql client 설치

Cloud SQL 에 접속하기 위한 mysql client를 설치한다. DB 접속 테스트를 위한 방법은 

1) mysql client 로 확인

$ sudo apt install default-mysql-client

2) mysql jdbc driver 로 확인

- jdbc driver download

- 연결테스트용 java 프로그램

 

3) Cloud SQL 연결테스트로 확인

- Cloud SQL 클릭 후 좌측 메뉴의 [연결] 메뉴를 클릭한다.

- [연결 테스트] 탭을 클릭 후 [만들기]를 클릭한다.

  . 테스트이름

  . 프로토콜

  . 소스, 대상 지정(대상은 Cloud SQL 및 포트, 소스는 Cloud SQL에 접속할 서버)

 

 

- 접속 계정 생성

VM 인스턴스에 접속할 계정을 생성하고 패스워드를 설정한다. GCP debian linux 에 sudo 그룹은 sudo 명령어를 수행할 수 있는 권한이 있다.

$ sudo useradd -m -d /home/admin -s /bin/bash -g adm -G users,sudo admin
$ sudo passwd admin

 

 

인스턴스 템플릿

인스턴스 그룹에서 사용할 인스턴스 템플릿을 생성한다.

[Compute Engine] - [인스턴스 템플릿]을 클릭한 후 나타난 화면에서 [인스턴스 템플릿만들기]를 클릭한다.

인스턴스 템플릿명을 itm-aicallboot-admin-prd-01 로 한다.

네트워크 인터페이스 항목에서 네트워크는 위에서 생성한 VPC와 subnet을 선택한다.

[만들기]를 클릭한다.

 

 

인스턴스 그룹

load balancing에서 사용할 인스턴스 그룹을 생성한다.

[Compute Engine] - [인스턴스 그룹]을 클릭한 후 나타난 화면에서 [인스턴스 그룹만들기]를 클릭한다.

인스턴스 그룹명을 igr-aicallboot-admin-prd-01 로 한다.

"Intance template" 항목에서 위에서 생성한 인스턴스 템플릿을 선택한다.

"위치" 항목에서 "여러 영역"을 선택하고 asia-northeast3 리전과 asia-northeast3-a, asia-northeast3-b, asia-northeast3-c 영역을 선택한다. 

"자동확장" 항목의 "자동확장모드"를 사용:그룹에 인스턴스 추가 및 삭제를 선택한다. 자동확장할 인스턴스의 최소/최대 개수를 입력한다.

[만들기]를 클릭한다.

 

 

load balancing

GCP 콘솔의 좌측 3단메뉴를 클릭한 다음 네트워크 서비스를 클릭한 후 [부하 분산] 메뉴를 클릭한다.

아래 화면이 나타나면 [부하 분산기 만들기]를 클릭한다.

 

아래 화면에서 구성하려는 부하분산기의 용도에 따라 HTTP(S), TCP, UDP 부하 분산기의 [구성 시작]을 클릭한다. 본 문서에서는 HTTP(S) 부하 분산기와 TCP부하 분산기를 생성한다.

HTTP(S) 부하 분산 :

HTTP 부하분산을 위해 인터넷 연결 또는 내부 전용 선택 화면에서 "인터넷에서 VM 또는 서버리스 서비스로" 항목을 선택한다.

 

TCP 부하 분산 :

"부하 분산기 만들기" 화면에서 "백엔드 유형" 항목에서 "대상 풀 및 대상 인스턴스"를 선택한 후 [계속] 버튼을 클릭한다. 백엔드 유형을 인스턴스 그룹으로 지정하려면 "백엔드 서비스"를 선택한다.

부하 분산기 이름을 lbl-aicallbot-int-prd-01 로 입력하고 리전을 선택한다. 우측 화면에서 "기존 인스턴스 선택" 탭을 선택하고 기존에 생성한 VM 인스턴스를 선택한다. 상태 확인에서는 상태확인 생성을 클릭하여 이름과 port를 입력하여 생성한다. 체크할 port는 80으로 설정했다. 본 문서에서는 check-stat-prd-01 이름과 80포트로 생성했다.

화면에서 "프런트엔트 구성"을 클릭한 후, 우측에 나타난 화면에서 포트 부분에 로드 밸런서에 접속할 port 번호를 입력한다. 로드 밸런서는 port forwarding 이 없으므로 백엔드 서버에서 서비스하는 port와 동일하게 입력한다. 백엔드 서버에서 80 포트를 체크하도록 설정하였으므로 80 포트를 입력한다.

최종 "검토 및 완료(선택사항)"을 클릭하여 생성하고자 하는 데로 잘 구성이 되었는지 확인한 다음 [만들기] 버튼을 클릭하여 로드 밸런서를 생성한다.

로드 밸런서의 IP를 확인하여 브라우저에 http://load_balancer_IP/ 를 입력한다.

웹서버의 첫번째 화면을 각 서버별로 상이하게 작성하고 브라우저를 계속 reflesh 하면 웹 화면이 변경되는 것을 확인할 수 있다.

 

 

 

Filestore 생성

첨부 파일 등 파일 공유를 위해 Filestore를 생성한다. 기존 on-premise 에서의 NFS 파일시스템과 동일하다.

좌측 메뉴에서 [Filestore] - [인스턴스]를 클릭한 후 Cloud Filestore API 화면이 나타나면 [사용]을 클릭한다.

그 다음 화면에서 [인스턴스 만들기]를 클릭한다.

"인스턴스 만들기" 화면이 나타나면 인스턴스ID, 스토리지 유형, 용량할당, 저장위치, VPC 네트워크, 파일공유 이름 등을 설정한다.

본 문서에서는 인스턴스ID를 fsr-aicallbot-admin-prd-01 로 입력했고, 저장위치와 영역은 각각 asia-northeast3과 asia-northeast3-a를 선택했으며 VPC 네트워크는 위에서 생성한 VPC를 선택했다.

파일 공유이름으로는 nasdata_prd_01 로 입력했다. 모든 항목을 입력했으면 [만들기] 버튼을 클릭한다.

 

생성이 완료되면 VM이 이 파일 공유 항목을 마운할 수 있도록 NFS 마운트 point가 생성된다.

본 문서에서는 10.7.208.186:/nasdata_prd_01 로 생성되었다.

 

 

 

Filestore를 사용하는 VM 인스턴스에 접속하여 NFS 파일시스템을 마운트한다. filestore를 공유할 VM 인스턴스 모두에서 작업해준다.

 

- NFS 설치

sudo apt-get -y update && sudo apt-get install nfs-common

- Filestore 에 매핑할 로컬 디렉토리 생성

sudo mkdir -p mount-point-directory 에서 mount-point-directory는 로컬에 생성할 디렉토리이다. 본 문서에서는 아래와 같이 /filedir로 생성한다. 

sudo mkdir -p /filedir

 

mount명령어로 Filestore 인스턴스에서 파일 공유를 마운트한다.

위에서 생성된 NFS 마운트포인트명으로 파일시스템을 마운트한다.

sudo mount ip-address:/file-share mount-point-directory 에서 ip-address:/file-share 는 위에서 생성한 filestore의 NFS 마운트포인트이고 mount-point-directory는 VM에서 생성한 마운트포인트 디렉토리이다.

$ sudo mount 10.7.208.186:/nasdata_prd_01 /filedir

## mount한 NFS 확인
$ df -H | grep filedir
10.7.208.186:/nasdata_prd_01  1.1T     0  1.1T   0% /filedir

root 사용자가 아닌 다른 사용자가 쓸 수 있도록 chmod로 마운트 디렉토리에 대한 권한을 설정한다.

sudo chmod go+rw /filedir

VM 인스턴스가 재부팅되어도 자동으로 마운트하도록 /etc/fstab 파일에 등록한다.

10.7.208.186:/nasdata_prd_01 /filedir nfs defaults,_netdev 0 0

 

 

'MySQL' 카테고리의 다른 글

MySQL - Delimiter  (0) 2023.04.10
MySQL 8.0 connect by  (0) 2023.03.21
mysql /*! */ 의미  (0) 2022.03.02
MySQL Workbech runtimeError 발생 시  (0) 2022.02.23
MySQL5.7 character set 변경하기  (0) 2022.02.22

+ Recent posts