[Cloud] Azure를 이용한 3-tier Architecture 구축 가이드

김관응·2023년 3월 30일
0

Infra

목록 보기
6/9

web server, was server, db server를 Azure Public Cloud를 이용해 빠르고 쉽게 구축과 부하분산을 하려고 한다.

1. Web(HTTPD) 서버 구축

1-1. HTTPD 설치

$ yum install -y httpd

1-2. 방화벽 설정 및 시작

$ firewall-cmd --permanent --add-service=http
$ firewall-cmd --reload
$ systemctl enable httpd
$ systemctl start httpd

포트번호는 nsg에도 동일하게 적용

1-3. HTML

/var/www/html 에 문서를 작성
ex) locathost/test.html

1-4. Reference

https://wikidocs.net/16275

2. WAS(Tomcat) 서버 구축

2-1. Tomcat 설치

$ yum install -y tomcat*

2-2. Java 설치

http://www.oracle.com/technetwork/java/javase/downloads/index.html
PC로 오라클 웹사이트 접속 후 jdk rpm 다운로드 링크 주소 복사
was 서버에 jdk 다운로드

$ wget -c 다운로드링크주소

.rpm으로 끝나게 파일명 수정

$ mv jdk-8u131-linux-x64.rpm\?AuthParam\=1495957368_916432334b6dc573 jdk-8u131-linux-x64.rpm

rpm 명령어로 설치 진행

i : 설치, v : 정보뷰, h : hash 표기

$ rpm -ivh jdk-8u131-linux-x64.rpm

자바 선택

$ alternatives --config java

2-3. 방화벽 설정 및 시작

ajp 프로토콜의 포트번호 : 8009

$ firewall-cmd --permanent --add-port=8009/tcp
$ firewall-cmd  --reload
$ systemctl enable tomcat
$ systemctl start tomcat

포트번호는 nsg에도 동일하게 적용

2-4. Reference

https://wikidocs.net/16276

3. DB(MariaDB) 서버 구축

3-1. MariaDB 설치

$ curl -sS https://downloads.mariadb.com/MariaDB/mariadb_repo_setup | sudo bash
$ yum install -y MariaDB-server

방화벽 설정 및 시작

$ firewall-cmd --permanent --add-port=3306/tcp
$ firewall-cmd  --reload
$ systemctl enable mariadb
$ systemctl start mariadb
$ mysql_secure_installation

포트번호는 nsg에도 동일하게 적용

3-2. 계정 생성

$ mysqladmin -u root password '1234'
$ mysql -u root -p
grant select, insert, update, delete, create on test.* to 'testuser'@'localhost' identified by '1234';
grant select, insert, update, delete, create on test.* to 'testuser'@'%' identified by '1234';
flush privileges;
quit;
$ mysql -u testuser -p
connect test;
create table test(name varchar(30));
insert into test values('MariaDB Database');
insert into test values('sunguru');
commit;
quit;

4. mod_jk로 Apache와 Tomcat 연동

4-1. mod_jk 설치

$ yum install gcc gcc-c++ httpd-devel

http://tomcat.apache.org/download-connectors.cgi
PC로 접속 후 JK 1.2.46 Source Release tar.gz 다운로드 링크 주소 복사

apache 서버에 jk 다운로드

$ wget -c 다운로드링크주소
$ tar zxvf tomcat-connector*
$ cd tomcat-connector*/native
$ ./configure --with-apxs=/usr/bin/apxs
$ make
$ make install
$ chcon -u system_u -r object_r -t httpd_modules_t /etc/httpd/modules/mod_jk.so

4-2. Apache 설정

$ vi /etc/httpd/conf/httpd.conf

LoadModule jk_module modules/mod_jk.so
JkWorkersFile conf/workers.properties
JkShmFile run/mod_jk.shm
JkLogFile logs/mod_jk.log
JkLogLevel info
JkLogStampFormat "[%y %m %d %H:%M:%S] "
JkMount /* ajp13

$ vi /etc/httpd/conf/workers.properties

worker.list=ajp13
worker.ajp13.port=8009
worker.ajp13.host={hostIP}
worker.ajp13.type=ajp13

4-3. Reference

https://wikidocs.net/16277

5. Connector로 Tomcat과 MariaDB 연동

$ yum install -y mysql-connector-java
$ cp /usr/share/java/mysql-connector-java.jar  /usr/share/tomcat/lib
$ systemctl restart tomcat

5-1. JSP를 통한 DB 연동 테스트

$ cd /usr/share/tomcat/webapps/ROOT/
$ vi test.jsp
<html>
 <body>
<%@ page contentType="text/html" language="java" %>
<%@ page import="java.sql.*" %>
<%
 Connection con = null;
 PreparedStatement PS = null;
 ResultSet RS = null;
 try {
  String MARIADB_SERVER = "10.1.2.4:3306";
  String MARIADB_SERVER_USERNAME = "testuser";
  String MARIADB_SERVER_PASSWORD = "1234";
  String MARIADB_DATABASE = "test";
  String URL = "jdbc:mysql://" + MARIADB_SERVER + "/" + MARIADB_DATABASE;
  Class.forName("com.mysql.jdbc.Driver");
  con = DriverManager.getConnection(URL, MARIADB_SERVER_USERNAME, MARIADB_SERVER_PASSWORD);
  %>
  <%
  String query = "select * from test";
  PS = con.prepareStatement(query);
  RS = PS.executeQuery();
  
  int count=0;
  while(RS.next()) {
  String name = RS.getString("name");
  %>
  <p>Name : <%=name%></p>
  <%
  count++;
}
 } catch(Exception ErrMsg) {
  ErrMsg.printStackTrace();
  out.println("Unfortunately, Database connection failed");
 }
%>
 </body>
</html>

5-2. was 서버의 selinux를 permissive로 변경

vi /etc/sysconfig/selinux

5-3. Reference

https://wikidocs.net/16274
http://blog.naver.com/PostView.nhn?blogId=sunguru&logNo=220935388261

profile
엔지니어였던 개발자

0개의 댓글