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>
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
여기서 lbfactor는 각자 톰캣의 어떤 비율로 분배해줄거냐이다.
위에서는 1, 1로 설정해서 1:1로 분배해준다는 뜻이다.
위의 설정들을 다 했다면 웹 서버를 재시작하자.
systemctl restart httpd
<%@ 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>
listen stats
bind :9000
stats enable
stats realm Haproxy\ Statistics
stats uri /haproxy_stats
listen web-lb
bind 0.0.0.0:80
mode http
balance roundrobin
option httpchk GET /test.html
server web1 [아파치1 IP]:80 check
server web2 [아파치2 IP]:80 check
위의 파일을 wget을 이용해 위에서 설정한 아파치 서버의 /var/www 경로에 다운받고, 압축을 해제하자.
그러면 html 디렉토리 안에 여러 파일들이 있을 것이다.
위에서 설정한 아파치 서버는 두 개이다. 나머지 아파치 서버도 똑같이 다운 받고 압축을 해제하자.
그리고 haproxy 서버/index.html 에 접근을 해본다면?
여기어때 페이지로 이동이 된다.
<%@page import="java.sql.*"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
Connection conn = null;
ResultSet rs = null;
String url = "jdbc:mysql://(db 서버):3306/good?serverTimezone=UTC";
String id = "(db 서버 원격 관리자 id)";
String pwd = "(db 서버 원격 관리자 비번)";
try {
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection(url, id, pwd);
Statement stmt = conn.createStatement();
String sql = "SELECT * FROM product";
rs = stmt.executeQuery(sql);
String result = "[";
while(rs.next()) {
result += "{";
result += "\"name\":\""+rs.getString("name")+"\"";
result += ", \"img_url\":\""+rs.getString("img_url") +"\"";
result += ", \"price\":\""+rs.getString("price")+"\"";
result += "},";
}
result = result.substring(0, result.length() - 1);
result += "]";
out.println(result);
conn.close();
} catch (Exception e) {
e.printStackTrace();
}
%>
wget https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-8.0.19.tar.gz 다운로드 (꼭 톰캣 서버에서 다운)
tar xvf mysql-connector-java-8.0.19.tar.gz 로 아카이브 해제
아카이브 해제한 파일로 이동
cp mysql-connector-java-8.0.19.jar /usr/local/tomcat9/lib/ 해당 경로에 복사
톰캣 재시작
/usr/local/tomcat9/bin/shutdown.sh
/usr/local/tomcat9/bin/startup.sh
위의 과정을 톰캣 2 서버에도 똑같이 해준다.
CREATE DATABASE IF NOT EXISTS `good` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci */ /*!80016 DEFAULT ENCRYPTION='N' */;
USE `good`;
-- MySQL dump 10.13 Distrib 8.0.32, for Win64 (x86_64)
--
-- Host: 192.168.214.50 Database: good
-- ------------------------------------------------------
-- Server version 8.0.26
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!50503 SET NAMES utf8 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
--
-- Table structure for table `product`
--
DROP TABLE IF EXISTS `product`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `product` (
`name` varchar(10) DEFAULT NULL,
`img_url` varchar(100) DEFAULT NULL,
`price` int DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `product`
--
LOCK TABLES `product` WRITE;
/*!40000 ALTER TABLE `product` DISABLE KEYS */;
INSERT INTO `product` VALUES ('서울 콘래드호텔','5a8bda503a8f6.jpg',490000),('서울 신라호텔','5e994464f3d0d.jpg',300000),('더 디자이너스','5743fc51c9d2b.jpg',987654321);
/*!40000 ALTER TABLE `product` ENABLE KEYS */;
UNLOCK TABLES;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
-- Dump completed on 2023-02-14 17:13:36
CREATE USER '[DB 계정]'@'%' identified by '[DB 비번]';
GRANT ALL PRIVILEGES ON [DB이름].* TO '[DB 계정]'@'%';
FLUSH PRIVILEGES;
DB 계정은 본인이 쓸 계정, DB 비번도 마찬가지
DB 이름은 good이다.
이렇게 설정을 한 후, ifconfig를 켜서 ip를 기억해두자.