SW 아카데미 제출 과제 작성

김재현·2022년 10월 27일
0

아이티센 프로젝트

목록 보기
30/30
post-thumbnail

3tier

  • 위 링크를 참고해서 진행.

  • 시나리오.
    2tier 구성으로 진행한다.
    public subnet에 nginx로 webserver을 구성.
    private subnet에는 wildfly로 was를, MySQL로 DB를 구성했다.
    이후 zabbix를 이용해서 서버 모니터링을 실시하면 완료.

프로그램 띄워서 테스트하기

ACG 주의사항

  • 현재 상황 : 2tier 구성이 완료되었고, public에 nginx, private에 wildfly와 MySQL을 설치했다. 양쪽 모두 curl 명령어를 이용해서 설치된 것을 확인했다.
  • 문제 발생 : public에서 curl http://{privateIP}:8080을 사용해서 wildfly를 조회하려 했지만, 잘 안됐다.
  • 문제 해결 : ACG 설정에서 8080포트를 열어두지 않았기에 발생한 문제. 8080 포트를 열어주자 바로 출력되는 것을 볼 수 있다.

nginx에서 웹 띄워보기

  • 준비 : git, node, npm, react 다운받기.

node.js 설치

  • epel 저장소 확인
    yum repolist
  • 없으면 설치한다.
    yum install epel-release

  • 이어서 node.js 설치
    yum install -y nodejs

  • 버전을 확인해서 잘 깔렸는지 확인하자.
    node -v 혹은 node --version

npm 설치

  • npm 설치
    yum install -y npm

  • 버전 확인
    npm --version 혹은 npm -v

react 설치

  • yarn 설치
    npm install yarn

git에서 폴더 받기

  • git hub에서 사용할 폴더를 다운받는다.
    git clone {git URL}

  • gc-client가 react, gc-server가 spring이므로 gc-client에 들어가준다.
    하지만, 이 안에는 node_module이 없기 때문에 실행되지 않는다.
    npm install yarn을 사용해서 node_module을 다운받아준다.
  • npm update -g를 통해 패키지를 업데이트하고,
    NPM 캐쉬 삭제 및 업데이트를 하는 것으로 최신버전으로 만들어주는 것도 방법이다.
npm uninstall -g create-react-app
npm i -g npm@latest 
npm cache clean -f 
npx create-react-app@latest my-app --use-npm

  • npm start을 입력하면 컴파일이 성공했다는 화면은 나오지만, 공인IP:3000을 통한 접속은 되지 않는다. ACG 설정에서 3000번 포트가 열려있지 않기 때문에 접속되지 않는 것이 당연한 것으로 3000번 포트를 열어주면 리액트 창을 출력되는 것을 볼 수 있다.

proxy_pass 설정

  • proxy_pass를 설정해서 리액트를 기본 창으로 만들어주자.
    경로는 vi /etc/nginx/conf.d/default.conf
  • location을 바꿔주면 된다.

  • proxy_pass를 3000번으로 바꿔줬으니 이제 공인IP로 접속해주자. 근데 main페이지로 nginx가 출력된다..? ㅠㅠㅠㅠ
  • 몇 가지를 점검해주어야 한다.
    systemctl restart nginx로 nginx를 재시작해 주었는데도 그렇다면, cache가 남아있어서 그런 것일수도 있다.
  • 강력! 새로고침
    캐시를 무시하고 새로고침을 하는 방법이다. 이것을 통해서 극복하자.

  • 공인 IP만 사용해서 접속했다. ACG 설정에서 3000번 포트는 닫아줘도 된다.

WAS랑 DB 연동해보기

  • 준비물 : maven, spring boot
  • WAS용 private subnet으로 이동한다.
ssh 사용자이름@IP
ssh ncloud@비공인 IP
  • java의 버전을 확인하자.
    java -version > 이제 clone받을 파일의 빌드 버전에 맞춰야하기 때문에 11버전이어야한다.

maven 설치 및 spring 빌드

maven 3.6 버전 다운로드

  • 위 링크의 방법을 참고해서 maven을 설치하고 버전을 확인해보자.
    mvn -v

  • 다음은 git clone으로 실행할 파일을 내려받는다.
  • Spring은 gc-server에 있기 때문에 gc-server로 이동.
    mvn package를 입력해서 .jar 파일을 만들어준다.

  • 처음부터 성공하기는 어렵다. ㅠㅠㅠ ERROR의 이유를 잘 읽어보자. test가 실패했다고 하니까 테스트를 다 삭제해준다.

  • 빌드가 성공했고, .jar 파일도 무사히 생성됐다.
    java -jar gc-coffee-0.0.1-SNAPSHOT.jar명령어를 입력해서 실행시켜봤지만, 실패한다. DB가 연결되어 있지 않으니 당연한 것.

MySQL 설치

참고

DB, 테이블 생성 및 데이터 넣기

CREATE DATABASE order_mgmt;

CREATE TABLE products
(
    product_id   BINARY(16) PRIMARY KEY,
    ~~~
    updated_at   datetime(6)  DEFAULT NULL
);

CREATE TABLE orders
(
    order_id     binary(16) PRIMARY KEY,
    ~~~
    updated_at   datetime(6) DEFAULT NULL
);

CREATE TABLE order_items
(
    seq        bigint      NOT NULL PRIMARY KEY AUTO_INCREMENT,
	~~~
    updated_at datetime(6) DEFAULT NULL,
    ~~~
);

.yaml 파일 변경

  • DB와 연결해주기 위해서는 .yaml 파일을 수정해줘야한다.
    패스워드를 MySQL을 설치했을 때 설정해준 것으로 변경해준다.
  • WAS와 DB를 한 티어에 넣었기 때문에 특별히 설정해줄 필요는 없는 것 같다.
  • DB도 연결됐겠다, 실행해봤다.

  • 하지만 에러.. ㅠㅠ 다른곳에서 8080 포트를 이미 사용중이어서 사용하지 못한다고 한다.
    netstat -tnlp | grep 8080을 사용해서 8080을 다른데에서 사용하는지 확인하자.

  • 2236이란 곳에서 쓰고 있다고 하니 프로세스를 죽여주자.
    kill -9 2236

  • 성.. 성공이다!!!!!!!

WEB-WAS 연결해주기

  • vi /etc/nginx/conf.d/default.conf에 가서 proxy_pass를 하나 더 추가해주자.

  • WAS 서버의 IP와 8080 포트를 받을 수 있도록 설정해준다.
    괄호를 빼먹으면 오류가 나니 조심, 또 조심.
    추가한 후 systemctl restart nginx.service를 해서 재시작해 준다.
  • curl 명령어로 확인해보자

  • 에러 내용이 출력되긴 하는데, 어쨌든 연결되어 있는 것은 확인할 수 있다.
  • 근데 처음에는 내용이 아무것도 출력되지 않았다.

  • 이런느낌. 왜 그런지 고민했고, 결국 DB에 문제가 있다는 것을 알게 되었다.

  • 새로운 테이블들의 출현..? 오이이이잉?
    쨌든, product 테이블이 생겼다..? 뭔가 코드에 문제가 있나보다..

  • product 테이블에 데이터를 추가해준다.
    스프링을 재시작!

  • 잘 연동됐다~~
    조금 부족하기는 하지만, 이번에는 이정도로 만족!

추가

  • 작업 중 웹 서버를 다시 만들어야되는 상황이와서 다시 빌드했지만, 이번에는 nginx가 WAS에서 데이터를 받아오지 못하는 상황이 생겼다. 이것저것 만져보았지만, 문제는 api URL 이었던 것 같다.

  • 이 부분의 http://localhost:8080 혹은 http://WAS IP:8080 부분을 삭제해주자 정상적으로 연결이 되었다.

  • 다시 빌드 성공.

zabbix로 모니터링 해보기

  • 처음의 시나리오. private subnet에 agent를 두고 public subnet에 zabbix server를 둬 구조를 간소화 해보려고 했지만..
    public에 이미 web server로 nginx가 구동중이었기 때문에 zabbix server용 web server(Apache)가 구동하지 못했고, 일단 포기.
  • 두 번째로 시도해본 것은 zabbix를 nginx로 설치해보았지만, 이것도 일반 nginx와 zabbix server용 nginx를 동시에 구동하는 것에 실패함. 다각도로 고민해봤지만, 결국 포기.

  • 그리고 다음 시나리오로 만든 것이 proxy를 사용해서 vpc 안 subnet의 데이터를 수집해서 외부 zabbix 서버로 전송하여 모니터링 하는 것. 진행해보자.
  • zabbix proxy 사용법과 agent 2개의 설정을 해야한다.
  • 이후 proxy를 server에 연결하여 모니터링해야한다.

zabbix 설치하기

참고

  • zabbix를 설치하고 대시보드를 띄웠다.

zabbix proxy 사용하기

zabbix proxy 설치
공식 인스톨 페이지

  • 외부 서버에 zabbix 서버를 설치하는 것은 완료했다. 그렇다면 이제 vpc안에 proxy를 설치하고 server로 데이터를 전송하는 작업을 해보자.

public subnet에 proxy 설치

  1. 버전 세팅
  2. zabbix repo 설치
# rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm
# yum clean all

  1. zabbix proxy 설치
    # yum install zabbix-proxy-mysql

  1. mysql 설정
  • mysql 설치가 필요하다.
    mysql
  • mysql에 zabbix_proxy 데이터베이스를 만들어주어야한다.
# mysql -uroot -p
password
mysql> create database zabbix_proxy character set utf8 collate utf8_bin;
mysql> create user zabbix@localhost identified by 'password';
mysql> grant all privileges on zabbix_proxy.* to zabbix@localhost;
mysql> quit;
  • 스키마와 데이터를 넣어준다.
# zcat /usr/share/doc/zabbix-proxy-mysql*/schema.sql.gz | mysql -uzabbix -p zabbix_proxy
  • 좀 오래 걸린다...
  1. conf 설정
# vi /etc/zabbix/zabbix_proxy.conf

  • 설정이 많다. 조금씩 알아보자.

  • proxy의 구동방식. 액티브는 0, 패시브는 1.

  • zabbix 서버의 IP를 넣어주자.

  • 호스트네임 설정
    액티브모드 사용일때는 중요하다!

  • 아래로 DB 설정에 대한 부분이 있다. DBPassword를 제외하면 크게 건드릴 필요는 없을듯하다.
    DBPassword 자리에 아까 생성했던 DB의 비밀번호를 넣자.
  • 패시브모드로 활성화해보자.
  1. proxy 활성화
# systemctl restart zabbix-proxy
# systemctl enable zabbix-proxy
# systemctl status zabbix-proxy
  • 오류가 발생하지만, 이전 zabbix 설치할 때 발생했던 오류와 같은 종류의 오류로 역시 같은 방법으로 해결할 수 있다.

  • 제대로 동작한다.
  1. 프록시 등록하기
  • 이제 zabbix 서버의 front 페이지로 가서 proxy를 등록해보자.
    경로는 관리 > 프록시 > 프록시 작성


Active 모드의 프록시를 사용하실 때에는 Connections from proxy 가 활성화 되고, Passive 모드의 프록시를 사용하실 때에는 Connections to proxy 가 활성화 됩니다. 라고 한다. 내용을 넣어서 작성해보자.

  • 패시브 방식에서는 이름이 중요하지 않다고 하지만, 그래도 정확하게 작성해주자.
  • 패시브모드는 인터페이스가 활성화된다. proxy가 설치되어 있는 서버의 IP주소를 기입해준다.

  • 프록시를 추가하였다는 메시지가 출력된다. 근데 솔직히 잘 됐는지 확인할 방법을 모르겠다.
  • 에이전트-호스트를 추가하면 알 수 있을 것이다. 작업을 좀 더 진행하자.

에이전트 설치, 호스트 등록

참고

  • public과 private 모두 에이전트를 설치, 모두 active 방식으로 호스트를 작성할 것이며, proxy를 사용해서 모니터링을 실시해보자.

public

  1. public에 agent 설치
  • zabbix 에이전트 설치
    # yum install zabbix-agent
  1. 설정파일 수정
    vi /etc/zabbix/zabbix_agentd.conf

  • 이 세곳을 고쳐준다. active 모드를 사용할 것이므로 ServerActiveHostname은 특별히 신경을 써줘야한다.
  1. zabbix agent 시작
# systemctl restart zabbix-agent
# systemctl enable zabbix-agent
# systemctl status zabbix-agent

  • 잘 동작중이다.
  1. host 등록
  • 설정 > 호스트 > 호스트 작성

  • 액티브 방식이기 때문에 호스트 이름을 신경써줘야한다.
    IP랑 포트는 0으로 설정

  • 템플릿은 리눅스 + agent active로 한다.
  • 다음 추가 클릭.

  • 최근 데이터를 조회하면 모니터링이 되고 있는 것을 알 수 있다.
  • 한번 public subnet의 agent를 다운시켜서 오류가 출력되는지 확인해보자.
    systemctl stop zabbix-agent

  • server가 꺼졌다 다시 켜졌다고 알람이 왔다. 고개를 좀 갸웃하게 되기는 하지만, 어쨋든 연결은 확실히 된 것으로 보인다.

private

  1. private에 agent 설치
    zabbix repo가 설치되어 있지 않으므로 zabbix repo를 설치하는 과정을 추가해준다.
# rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm
# yum clean all
  1. 호스트 등록도 public과 똑같다.

등록

  • public과 pivate 모두 모니터링이 되는 것을 확인했다. 그럼 이제 proxy를 등록해보자.
  • 설정 > 호스트로 이동해서 등록하고 싶은 호스트를 클릭한다.

  • 프록시에 의한 감시에서 만들어 둔 프록시로 변경해주고 갱신 클릭

  • 다음 관리 > 프록시 메뉴로 들어와주면 호스트 수, 아이템 수 등이 변경되어 있는 것을 볼 수 있다.

프록시가 잘 연결되어 있는가?

  • 실습을 좀 진행하다가 다시 살펴봤는데, 최근 데이터가 전송이 안 되고 있었다. 프록시가 데이터를 잘 전송하지 않는 건가? 하는 의문이 들어 프록시의 설정을 다시 살펴보기로 하였다.
  • 일단 호스트에서 프록시 설정을 빼 주었다.

  • 그래프를 살펴봐도 프록시 등록을 한 중간에는 모니터링이 되고 있지 않았다는 사실을 확인할 수 있다. 프록시 설정을 한 번 더 살펴보자.
  • 해결하지 못했다. 프록시를 적용하면 계속 데이터 전송이 되지 않으며 모니터링이 실패한다. 이유를 잘 모르겠구만... 해결해줘 미래의 나..

웹 서버 설치하고 zabbix로 모니터링 해보기

참고

  • 우선 public subnet에 웹사이트를 띄우자.

website 모니터링

  • 설정 > 호스트로 이동해서 zabbix server 선택

  • 어플리케이션 > 어플리케이션 작성

  • 이름은 WEBSITE 로 설정

  • 다음은 web 시나리오 탭으로 넘가서 web 시나리오 작성 클릭

  • 이름은 맘대로 짓고, 아까 만들어주었던 WEBSITE 를 어플리케이션에 적용해준다.

  • 다음은 스텝을 추가해준다.

  • 이름을 적당히 넣어주고, 실제로 모니터링 하고 싶은 웹사이트 주소를 URL에 넣어준다.

  • 추가된 것을 확인할 수 있다.

  • 최근 데이터에 들어가서 모니터링이 되고 있는지 확인할 수 있다.
  • public에서 웹사이트를 다운시키면 어떻게 되는지 확인해보자.

  • 리액트를 끄자 502 에러를 받았다고 에러를 표시한다.

  • 아예 nginx를 죽이자 서버에 접속할 수 없다는 에러를 출력한다.

0개의 댓글