클라우드 엔지니어/클라우드 캠프과정

2022.09.23 실습 3뎁스 어플리케이션 2차실습

해아's 2022. 9. 24. 09:23

-----------------------------------------------------------------------------------------------------------

웹 어플리케이션 서버 여러 대 사용

------------------------------------------------------------------------------------------------------------

1. 아파치 설정

    1) 워커 파일 설정 변경

 

vi /etc/httpd/conf/httpd.conf 파일에서 저 부분을 worker1에서 loadbalance로 변경

LoadModule jk_module /usr/lib64/httpd/modules/mod_jk.so

 

<IfModule jk_module>

JkWorkersFile /etc/httpd/conf/workers.properties

JkLogFile /var/log/httpd/mod_jk.log

JkLogLevel info

JkLogStampFormat "[%a %b %d %H:%M:%S %Y]"

JkMount /*.jsp loadbalance <----- 이 부분

</IfModule>

 

    2) 워커 파일 변경

  vi /etc/httpd/conf/workers.properties

worker.list=tomcat1,tomcat2,loadbalance

 

worker.tomcat1.type=ajp13

worker.tomcat1.host=[톰캣1의 IP]

worker.tomcat1.port=8009

worker.tomcat1.lbfactor=1

 

worker.tomcat2.type=ajp13

worker.tomcat2.host=[톰캣2의 IP]

worker.tomcat2.port=8009

worker.tomcat2.lbfactor=1

 

worker.loadbalance.type=lb

worker.loadbalance.balance_workers=tomcat1,tomcat2

 

2. 톰캣 설정 (여러 대 모두)

    1) 웹 페이지 파일 생성

webapps 밑에 이니셜 디렉토리 밑에 test.jsp 파일 생성

 

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>

 

<%@ page import="java.net.InetAddress" %>

 

 

클라이언트 IP <%=request.getRemoteAddr()%><br>

요청URI <%=request.getRequestURI()%><br>

요청URL: <%=request.getRequestURL()%><br>

서버이름 <%=request.getServerName()%><br>

<%

InetAddress inet= InetAddress.getLocalHost();

%>

동작 서버 IP <%=inet.getHostAddress()%><br>

서버포트 <%=request.getServerPort()%><br>

 

 

 

 

 

------------------------------------------------------------------------------------------------------------

DB 서버 여러 대 사용

------------------------------------------------------------------------------------------------------------

 

1. DB 서버 이중화

  (1) 슬레이브 DB 서버 설정

    1) 방화벽 해제

systemctl stop firewalld

systemctl disable firewalld

setenforce 0

 

    2) mysql 설치 및 초기 설정

yum install -y mysql-server

systemctl restart mysqld

 

mysql_secure_installationa

 

  (2) 마스터 DB 설정

    1) /etc/my.cnf.d/mysql-server.cnf 파일 설정

다음 내용을 추가한다.

[mysqld]

...

server-id = 1

log-bin = mysql-bin

 

systemctl restart mysqld

 

    2) Master 상태 확인

mysql -u root -p 로그인 후

show master status;

 

    3) Replication할 때 사용할 계정 생성

CREATE USER 'slave_user'@'%' IDENTIFIED BY '[DB 계정 패스워드]'; ex) CREATE USER 'slave_user'@'%' IDENTIFIED BY 'qwer1234';

GRANT REPLICATION SLAVE ON *.*  TO 'slave_user'@'%';

 

select * from mysql.user where user='slave_user'\G

Repl_slave_priv 속성이 Y로 되어있는지 확인

 

 

 

    4) 현재 데이터 백업

mysql -u root -p

FLUSH TABLES WITH READ LOCK;

quit

 

mysqldump -u root -p --databases [이니셜_db] > back.sql back.sql 파일을 Slave로 옮긴다.

 

scp back.sql  [slave db 서버 ip]:/root/back.sql

 

(3) 슬레이브 DB 서버 설정이 끝나면 다음 명령어 실행

mysql -u root -p

UNLOCK TABLES;

 

 

  (3) 슬레이브 DB 서버 설정

    1) /etc/my.cnf.d/mysql-server.cnf 파일 설정

다음 내용을 추가한다.

[mysqld]

...

server-id = 2

 

systemctl restart mysqld

 

 

    2) 데이터 복구

mysql -u root -p < back.sql

 

    3) Master 지정

change master to

master_host='[마스터 IP]',

master_user='slave_user',

master_password='qwer1234',

master_log_file='mysql-bin.[마스터의 로그 번호]',

master_log_pos=[마스터의 포지션 번호];

 

    4) 동기화 시작

start slave;

 

    5) Slave 상태 확인

show slave status;

 

또는

 

show slave status\G

 

 

 

  (4) 확인

    1) 마스터에서 데이터 저장

mysql -u root -p

use [이니셜_db];

INSERT INTO student VALUES('abcd',123);

 

    2) 슬레이브에서 데이터 확인

mysql -u root -p

use [이니셜_db];

SELECT * FROM student;

 

 

 

 

 

------------------------------------------------------------------------------------------------------------

최종

------------------------------------------------------------------------------------------------------------

 

 

1. 웹서버에 insert.html 파일 생성

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>입력</title>

</head>

<body>

<h1>학생 정보 입력</h1>

<form action="insert.jsp" method="post">

이름: <input type="text" name="sname" ><br />

나이: <input type="text" name="sage" ><br /><br />

<button type="submit">저장</button>

</form>

</body>

</html>

 

2. was 서버에 insert.jsp 파일 생성

<%@page import="java.sql.*"%>


<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>Insert title here</title>

</head>

<body>

        <%

                Connection conn = null;


  String url = "jdbc:mysql://[DB 서버 IP]:3306/[이니셜_db]?serverTimezone=UTC";

  String id = "[이니셜]";

  String pwd = "[DB 비번]";



                try {

                        Class.forName("com.mysql.jdbc.Driver");

                        conn = DriverManager.getConnection(url, id, pwd);

                        Statement stmt = conn.createStatement();


                        String sname = request.getParameter("sname");

                        String sage = request.getParameter("sage");


                        String sql = "INSERT INTO student VALUES('"+sname+"',"+sage+")";

                        int result = stmt.executeUpdate(sql);

                        if (result == 1) {

                                out.println("성공");

                        } else {

                                out.println("실패");

                        }

                        stmt.close();

                        conn.close();

                } catch (Exception e) {


                        e.printStackTrace();

                }

        %>

</body>

 

소스를 수정해봤다.

 

web 서버 (apache 서버에 셋팅할 파일)

[root@web1 ~]# cat /var/www/html/insert.html 
<!DOCTYPE html> 
<html> 
<head> 
<meta charset="UTF-8"> 
<title>입력</title> 
</head> 
<body> 
<h1>학생 정보 입력</h1> 
<form action="insert.jsp" method="post"> 
이름: <input type="text" name="sname" ><br /> 
나이: <input type="text" name="sage" ><br /><br /> 
<button type="submit">저장</button> 
</form> 
<a href="./db.jsp">db보기</a> 
</body> 
</html>

 

웹어플리케이션서버 (tomcat 서버에 셋팅할 파일)

[root@tc1 yoskr]# cat insert.jsp 
<%@page import="java.sql.*"%> 
<%@page language="java" import="java.net.InetAddress"%> 


<%@ page language="java" contentType="text/html; charset=UTF-8" 
    pageEncoding="UTF-8"%> 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
<title>Insert title here</title> 
</head> 
<body> 
        <% 
                Connection conn = null; 

                String url = "jdbc:mysql://192.168.179.226:3306/yoskr_db?serverTimezone=UTC"; 
                String id = "yoskr"; 
                String pwd = "qwer1234"; 


                try { 
                        Class.forName("com.mysql.jdbc.Driver"); 
                        conn = DriverManager.getConnection(url, id, pwd); 
                        Statement stmt = conn.createStatement(); 

                        String sname = request.getParameter("sname"); 
                        String sage = request.getParameter("sage"); 

                        String sql = "INSERT INTO student VALUES('"+sname+"',"+sage+")"; 
                        int result = stmt.executeUpdate(sql); 
                        if (result == 1) { 
                                out.println("성공"); 
                        } else { 
                                out.println("실패"); 
                        } 
                        stmt.close(); 
                        conn.close(); 
                } catch (Exception e) { 

                        e.printStackTrace(); 
                } 
        %> 
<% 
InetAddress inet = InetAddress.getLocalHost(); 
String svrIP = inet.getHostAddress(); 
out.println(svrIP); 
%> 
<a href="./db.jsp">db파일보기</a> 
</body> 
</html>
[root@tc1 yoskr]# cat db.jsp 
<%@page import="java.sql.*"%> 
<%@ page language="java" import="java.net.InetAddress" %> 
<%@ page language="java" contentType="text/html; charset=UTF-8" 
    pageEncoding="UTF-8"%> 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
<title>Insert title here</title> 
</head> 
<body> 
<body> 
        <table border=1> 
        <tr><td>이름</td><td>no</td></tr> 

        <% 

InetAddress inet = InetAddress.getLocalHost(); 
String svrIP = inet.getHostAddress(); 
                Connection conn = null; 
                ResultSet rs = null; 

                String url = "jdbc:mysql://192.168.179.226:3306/yoskr_db?serverTimezone=UTC"; 
                String id = "yoskr"; 
                String pwd = "qwer1234"; 


                try { 
                        Class.forName("com.mysql.jdbc.Driver"); 
                        conn = DriverManager.getConnection(url, id, pwd); 
                        Statement stmt = conn.createStatement(); 


                        String sql = "SELECT * FROM student"; 
                        rs = stmt.executeQuery(sql); 
                        while(rs.next()){ 
        %> 
        <tr> 
                <td><% out.println(rs.getString("sname"));%></td> 
                <td><% out.println(rs.getString("sage"));%></td> 
        </tr> 
        <% 
                        } 


                        conn.close(); 
                } catch (Exception e) { 

                        e.printStackTrace(); 
                } 
        %> 

<% out.println(svrIP);%> 
</table> 
<a href="./insert.html">입력페이지 가기</a> 
</body> 
</html>

 

728x90
반응형