-----------------------------------------------------------------------------------------------------------
웹 어플리케이션 서버 여러 대 사용
------------------------------------------------------------------------------------------------------------
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>