[DB] 3계층 아키텍처 - 다중화 실습 (2)

2024. 12. 4. 15:09· CS/DB
목차
  1. 1. HAProxy 
  2. 2. nginx
  3. 3. tomcat
  4. 4. mariadb
  5. SPOF
728x90

이번엔 아래 그림과 같은 아키텍처를 구성해보자 !

 

HAProxy로 웹 서버를 부하분산 시키고

웹 서버(nginx) 2대,  WAS 서버(톰캣) 2대, DB 서버(mariadb) 2대를 구성할 것이다.

 

여기서 DB는 핫 사이트(Master - Slave)를 구성해서 Master에서만 저장 및 수정이 될 수 있게 하고,

keepalived를 통해 Acitve와 Standby 상태로 만들 예정이다.

 


1. HAProxy 

1) HAProxy 설정

설정 파일에서 부하 분산시킬 서버 IP 주소를 입력 후 저장해준다.

vi /etc/haproxy/haproxy.cfg

 

frontend webserver
bind *:80
mode http
default_backend nginx-server
backend nginx-server
mode http
balance roundrobin
option httpchk GET /
server nginx1 10.10.10.10:80 check
server nginx2 10.10.10.20:80 check

 

2) HAProxy 실행

그 다음에 haproxy를 실행시켜 준다.

systemctl restart haproxy
위에 webserver 바인드 주소를 80 번으로 했기 때문에
haproxy 서버에 nginx가 실행되고 있으면
systemctl stop nginx => 로 nginx 끈 상태에서 haproxy를 실행시켜야 한다.

 


2. nginx

1) nginx 설정 (톰캣 주소 연결)

nginx 설정 파일에서 WAS 서버(톰캣) 주소를 연결해줘야 한다.

vi /etc/nginx/sites-enabled/default


안에 내용을 다 지우고 아래 코드와 같이 내용을 바꿔줘야 한다.

업스트림에 톰캣 서버로 쓸 두 개의 컴퓨터 IP 주소를 넣어준다.

 

ip_hash?

더보기

스티키 세션

  • 갔던 곳으로  또 가게 한다.
  • 사용자 1은 서버 1만 사용, 사용자 2는 서버 2만 사용, 사용자 1은 서버 1만 사용,, 이렇게 클라이언트마다 사용할 서버를 지정해둬서 갔던 서버에 또 가게 하는 것
  • 단점 : 한 서버는 놀고, 한 서버만 부하될 수 있음
  • ip_hash 를 통해 설정한다.
upstream tomcat_backend {
ip_hash;
server 10.10.10.40:8080;
server 10.10.10.50:8080;
}
server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html;
index index.html index.htm index.nginx-debian.html;
server_name _;
location / {
try_files $uri $uri/ =404;
}
location /api {
rewrite ^/api(/.*)$ $1 break;
proxy_pass http://tomcat_backend; # 업스트림 그룹으로 프록시
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}

 

 

2) nginx 실행

설정 해놨으면 nginx 재시작

systemctl restart nginx

 

 


3. tomcat

1) 톰캣 설정 (DB 서버 주소 연결)

db.jsp (DB와 연결하는 코드)에서 가상으로 설정할 IP 주소와 id, password 를 입력해준다.

vi /usr/local/tomcat10/webapps/ROOT/db.jsp

 

<%@ page import="java.sql.*" %>
<%
String dbURL = "jdbc:mariadb://[DB 서버 가상 IP 주소]:3306/web";
String dbUser = "[계정 ID]";
String dbPassword = "[계정 비밀번호]";
Connection conn = null;
try {
Class.forName("org.mariadb.jdbc.Driver");
conn = DriverManager.getConnection(dbURL, dbUser, dbPassword);
System.out.println("DB success!");
} catch (Exception e) {
e.printStackTrace();
response.setContentType("text/html;charset=UTF-8");
out.println("DB failed!");
}
%>

 

 

2) 톰캣 실행

설정 후 톰캣 실행

/usr/local/tomcat10/bin/startup.sh

 

 

 


4. mariadb

1) keepalived 설정 (가상 IP 설정)

keepalived 설정 파일에서 가상으로 사용할 IP 주소를 설정해준다.

vi /etc/keepalived/keepalived.conf

 

global_defs {
router_id node01
enable_script_security
script_user root
}
vrrp_script track_mariadb {
script "systemctl is-active mariadb"
interval 5
fall 4
rise 2
}
vrrp_instance VRRP1 {
state MASTER
interface ens33
virtual_router_id 101
priority 200
advert_int 1
virtual_ipaddress {
[가상 IP 주소]/24
}
track_script {
track_mariadb
}
}

 

 

2) 마스터 DB 서버에 설정 추가

 

마스터로 사용힐 DB 서버에 설정을 추가한다.

vi /etc/mysql/mariadb.conf.d/50-server.cnf
[mariadb]
log-bin
server_id=1
log-basename=master1
binlog-format=mixed

 

3) 마스터 서버 mariadb 재시작

설정 후 재시작해준다.

systemctl restart mariadb

 

 

4) 마스터 서버에서 사용자 추가 및 권한 설정

slave에서 접속할 수 있는 사용자를 추가해준다.

mariadb -u root -p
CREATE USER 'slave_user'@'%' IDENTIFIED BY 'qwer1234';
GRANT REPLICATION SLAVE ON *.* TO 'slave_user'@'%';
FLUSH PRIVILEGES;

 

 

5) 슬레이브 서버에 설정 추가

슬레이브 서버에 server id 설정을 추가해준다.

vi /etc/mysql/mariadb.conf.d/50-server.cnf

 

6) 슬레이브 서버 mariadb 재시작

 

 

7) 슬레이브 서버에서 마스터 지정

mariadb -u root -p
CHANGE MASTER TO
MASTER_HOST='[Master 서버 IP]',
MASTER_USER='slave_user',
MASTER_PASSWORD='qwer1234',
MASTER_PORT=3306,
MASTER_LOG_FILE='[마스터에서 show master status 했을 때 File 이름 = 로그파일 이름]',
MASTER_LOG_POS=[마스터에서 show master status 했을 때 position 번호],
MASTER_CONNECT_RETRY=10;
START SLAVE;

 

 

8) 슬레이브 서버에서 슬레이브 확인 

SHOW SLAVE STATUS\G

 

잘 연결된 것을 확인할 수 있다

 

 

 

9) DB 생성 후 권한 설정 (마스터에서)

이후에 DB를 생성해주고, DB에 대한 권한을 설정해준다.

CREATE DATABASE web;
GRANT ALL PRIVILEGES ON web.* TO '[계정 ID]'@'%';
FLUSH PRIVILEGES;

 

 

10) 테이블 생성 (마스터에서)

테이블도 만들어준다.

use web;
-- 사용자 테이블
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL UNIQUE,
password VARCHAR(255) NOT NULL
);
-- 게시판 테이블
CREATE TABLE posts (
id INT AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(100) NOT NULL,
content TEXT NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
user_id INT,
FOREIGN KEY (user_id) REFERENCES users(id)
);

이렇게 하면 모든 구성이 완료가 되고 실행이 잘 된다 !

 

 


SPOF

SPOF(Single Point of Failure) = 단일 실패 지점

: 서버 한 대가 뻗어서 전체가 못 쓰게 되는 경우

 

위의 경우처럼 DB 서버를 Replication 으로 설정하면 Master 서버가 다운됐을 때 Slave에서는 조회밖에 못 한다.

(Slave에서는 데이터를 수정, 삭제하면 안 되기 때문에!)

 

=> SPOF를 해결하기 위해 클러스터로 구성할 수 있다,.

 

728x90
저작자표시 비영리 변경금지 (새창열림)

'CS > DB' 카테고리의 다른 글

[DB] DB 클러스터 설정  (0) 2024.12.04
[DB] 3계층 아키텍처 - 다중화 실습 (1)  (0) 2024.12.03
[DB] DB 서버 핫 사이트 구성 실습 (Active - Standby)  (0) 2024.12.03
[DB] DB 서버 부하 분산 (HAProxy)  (0) 2024.12.03
[DB] 재해 복구(DR) / DB 서버 Replication 설정 / 미러 사이트 구성 실습  (0) 2024.12.03
  1. 1. HAProxy 
  2. 2. nginx
  3. 3. tomcat
  4. 4. mariadb
  5. SPOF
'CS/DB' 카테고리의 다른 글
  • [DB] DB 클러스터 설정
  • [DB] 3계층 아키텍처 - 다중화 실습 (1)
  • [DB] DB 서버 핫 사이트 구성 실습 (Active - Standby)
  • [DB] DB 서버 부하 분산 (HAProxy)
셰욘
셰욘
셰욘
seiyeon
셰욘
전체
오늘
어제
  • 분류 전체보기 (176)
    • 알고리즘 (46)
      • 프로그래머스 (2)
      • 백준 (37)
      • 문제 유형 (7)
    • CS (41)
      • Linux (6)
      • DB (15)
      • 자료구조 (3)
      • OOP (2)
      • 아키텍처 (0)
    • BE (42)
      • Java (9)
      • Spring Boot (32)
    • FE (6)
      • Next.js (1)
      • JavaScript (5)
      • Vue.js (7)
      • Web (0)
    • 배포 (5)
    • 회고 (19)
      • BEYOND SW 캠프 (19)
    • 기타 (3)

블로그 메뉴

  • 홈
  • 태그
  • 방명록
  • 블로그 관리

공지사항

인기 글

태그

  • fe
  • db
  • 네트워크
  • 백트래킹
  • Java
  • spring boot
  • 티스토리챌린지
  • 프로그래머스
  • be
  • 백준
  • 구현
  • 리눅스
  • cs
  • js
  • AWS
  • DP
  • 알고리즘
  • 그리디
  • 우선순위 큐
  • 트리
  • web
  • 주간회고
  • dfs
  • bfs
  • 오블완
  • 회고
  • 자료구조
  • vue
  • Gateway
  • 실습

최근 댓글

최근 글

250x250
hELLO · Designed By 정상우.v4.2.1
셰욘
[DB] 3계층 아키텍처 - 다중화 실습 (2)
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.