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 설치
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 proxy 사용하기
zabbix proxy 설치
공식 인스톨 페이지
- 외부 서버에 zabbix 서버를 설치하는 것은 완료했다. 그렇다면 이제 vpc안에 proxy를 설치하고 server로 데이터를 전송하는 작업을 해보자.
public subnet에 proxy 설치
- 버전 세팅
- 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
- zabbix proxy 설치
# yum install zabbix-proxy-mysql
- 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
- conf 설정
# vi /etc/zabbix/zabbix_proxy.conf
- proxy의 구동방식. 액티브는 0, 패시브는 1.
- 호스트네임 설정
액티브모드 사용일때는 중요하다!
- 아래로 DB 설정에 대한 부분이 있다. DBPassword를 제외하면 크게 건드릴 필요는 없을듯하다.
DBPassword 자리에 아까 생성했던 DB의 비밀번호를 넣자.
- proxy 활성화
# systemctl restart zabbix-proxy
# systemctl enable zabbix-proxy
# systemctl status zabbix-proxy
- 오류가 발생하지만, 이전 zabbix 설치할 때 발생했던 오류와 같은 종류의 오류로 역시 같은 방법으로 해결할 수 있다.
- 프록시 등록하기
- 이제 zabbix 서버의 front 페이지로 가서 proxy를 등록해보자.
경로는 관리 > 프록시 > 프록시 작성
Active 모드의 프록시를 사용하실 때에는 Connections from proxy 가 활성화 되고, Passive 모드의 프록시를 사용하실 때에는 Connections to proxy 가 활성화 됩니다.
라고 한다. 내용을 넣어서 작성해보자.
- 패시브 방식에서는 이름이 중요하지 않다고 하지만, 그래도 정확하게 작성해주자.
- 패시브모드는 인터페이스가 활성화된다. proxy가 설치되어 있는 서버의 IP주소를 기입해준다.
- 프록시를 추가하였다는 메시지가 출력된다. 근데 솔직히 잘 됐는지 확인할 방법을 모르겠다.
- 에이전트-호스트를 추가하면 알 수 있을 것이다. 작업을 좀 더 진행하자.
에이전트 설치, 호스트 등록
참고
- public과 private 모두 에이전트를 설치, 모두 active 방식으로 호스트를 작성할 것이며, proxy를 사용해서 모니터링을 실시해보자.
public
- public에 agent 설치
- zabbix 에이전트 설치
# yum install zabbix-agent
- 설정파일 수정
vi /etc/zabbix/zabbix_agentd.conf
- 이 세곳을 고쳐준다. active 모드를 사용할 것이므로
ServerActive
와 Hostname
은 특별히 신경을 써줘야한다.
- zabbix agent 시작
# systemctl restart zabbix-agent
# systemctl enable zabbix-agent
# systemctl status zabbix-agent
- host 등록
- 액티브 방식이기 때문에 호스트 이름을 신경써줘야한다.
IP랑 포트는 0으로 설정
- 템플릿은 리눅스 + agent active로 한다.
- 다음 추가 클릭.
- 최근 데이터를 조회하면 모니터링이 되고 있는 것을 알 수 있다.
- 한번 public subnet의 agent를 다운시켜서 오류가 출력되는지 확인해보자.
systemctl stop zabbix-agent
- server가 꺼졌다 다시 켜졌다고 알람이 왔다. 고개를 좀 갸웃하게 되기는 하지만, 어쨋든 연결은 확실히 된 것으로 보인다.
private
- 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
- 호스트 등록도 public과 똑같다.
등록
- public과 pivate 모두 모니터링이 되는 것을 확인했다. 그럼 이제 proxy를 등록해보자.
- 설정 > 호스트로 이동해서 등록하고 싶은 호스트를 클릭한다.
- 프록시에 의한 감시에서 만들어 둔 프록시로 변경해주고 갱신 클릭
- 다음 관리 > 프록시 메뉴로 들어와주면 호스트 수, 아이템 수 등이 변경되어 있는 것을 볼 수 있다.
프록시가 잘 연결되어 있는가?
- 실습을 좀 진행하다가 다시 살펴봤는데, 최근 데이터가 전송이 안 되고 있었다. 프록시가 데이터를 잘 전송하지 않는 건가? 하는 의문이 들어 프록시의 설정을 다시 살펴보기로 하였다.
- 일단 호스트에서 프록시 설정을 빼 주었다.
- 그래프를 살펴봐도 프록시 등록을 한 중간에는 모니터링이 되고 있지 않았다는 사실을 확인할 수 있다. 프록시 설정을 한 번 더 살펴보자.
- 해결하지 못했다. 프록시를 적용하면 계속 데이터 전송이 되지 않으며 모니터링이 실패한다. 이유를 잘 모르겠구만... 해결해줘 미래의 나..
웹 서버 설치하고 zabbix로 모니터링 해보기
참고
- 우선 public subnet에 웹사이트를 띄우자.
website 모니터링
- 설정 > 호스트로 이동해서 zabbix server 선택
- 다음은 web 시나리오 탭으로 넘가서 web 시나리오 작성 클릭
- 이름은 맘대로 짓고, 아까 만들어주었던 WEBSITE 를 어플리케이션에 적용해준다.
- 이름을 적당히 넣어주고, 실제로 모니터링 하고 싶은 웹사이트 주소를 URL에 넣어준다.
- 최근 데이터에 들어가서 모니터링이 되고 있는지 확인할 수 있다.
- public에서 웹사이트를 다운시키면 어떻게 되는지 확인해보자.
- 리액트를 끄자 502 에러를 받았다고 에러를 표시한다.
- 아예 nginx를 죽이자 서버에 접속할 수 없다는 에러를 출력한다.