아래 링크 내용에 이어지는 내용이다.

https://jparkk.tistory.com/20

 

Haproxy, Keepalived 란?

※ 사전내용 ※ 1. 로드 밸런싱 - 서버가 처리해야 할 요청이 많을 경우, 요청을 여러 서버에 분배해주는 것 2. 로드 밸런서가 필요한 이유와 방법 - 요청이 많아짐에 따라, 서버에는 더 많은 부하

jparkk.tistory.com

 

만들어 볼 구성도

 

 

Haproxy+Keepalived 서버 (active/standby) 구성하기

실행환경 : CentOS Linux release 7.9.2009 (Web1~2, Haproxy active, Haproxy standby)

 

1. 패키지 설치

yum 명령어로 설치한다.

[01:03:16][root@haproxy_active_svr ~]
$ yum install haproxy keepalived

패키지 설치 확인 및 버전 확인

[01:08:27][root@haproxy_active_svr /]
$ haproxy -version
HA-Proxy version 1.5.18 2016/05/10
Copyright 2000-2016 Willy Tarreau <willy@haproxy.org>

[01:08:31][root@haproxy_active_svr /]
$ keepalived  -version
Keepalived v1.3.5 (03/19,2017), git commit v1.3.5-6-g6fa32f2
Copyright(C) 2001-2017 Alexandre Cassen, <acassen@gmail.com>

 

 

2. Keepalived 설정하기

1) keepalived.conf 설정하기(master)

global_defs {
   router_id haproxy_active	# id 지정
}

vrrp_instance VI_1 {
    state MASTER		# master 역할이니, master로 지정
    interface eth0		# VIP를 추가할 인터페이스명을 지정
    virtual_router_id 10	# id 지정
    priority 200		# priority값을 지정, 값이 높으면 master
    advert_int 1
    authentication {
        auth_type PASS		# Master-Standby 서버 동일하게 적용
        auth_pass 1111		# Master-Standby 서버 동일하게 적용
    }
    virtual_ipaddress {
        192.168.0.104		#VIP를 지정
    }
}

 

2) Active 서버에서 VIP가 적용되었는지 확인

$ ip ad
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 08:00:27:39:48:f5 brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.102/24 brd 192.168.0.255 scope global noprefixroute eth0
       valid_lft forever preferred_lft forever
    inet 192.168.0.104/32 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::a00:27ff:fe39:48f5/64 scope link
       valid_lft forever preferred_lft forever

 

3) keepalived.conf 설정하기(standby)

global_defs {
   router_id haproxy_standby    # id 지정
}

vrrp_instance VI_1 {
    state BACKUP                # BACKUP 역할이니, BACKUP로 지정
    interface eth0              # VIP를 추가할 인터페이스명을 지정
    virtual_router_id 10        # id 지정
    priority 100                # priority값을 지정, 값이 높으면 master
    advert_int 1
    authentication {
        auth_type PASS          # Master-Standby 서버 동일하게 적용
        auth_pass 1111          # Master-Standby 서버 동일하게 적용
    }
    virtual_ipaddress {
        192.168.0.104           #VIP를 지정
    }
}

 

4) Standby 서버에서 VIP 적용 확인

→ Standby 서버이므로, VIP가 뜨지 않는게 정상.

→ 단, Master서버의 keepalived를 stop하고 VIP가 뜨면 정상

$ ip ad
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 08:00:27:2b:e8:84 brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.103/24 brd 192.168.0.255 scope global noprefixroute eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::a00:27ff:fe2b:e884/64 scope link
       valid_lft forever preferred_lft forever

 

3. Haproxy 구성하기

→ Haproxy 설정은 /etc/haproxy/haproxy.cfg에서 한다.

→ Active - Standby 모두 동일하게 설정을 적용하면 된다. 단, Listen 부분의 IP는 각 서버의 IP로 넣는다.

→ 각 버전에 맞는 매뉴얼은 이 URL을 참고하면 설명이 되어 있다.

 

1) haproxy.cfg 파일 설정 적용하기

- global : 전체 영역에 걸쳐서 적용되는 설정

- defaults : 다음 파트들(frontend, backend, listen)에 대한 변수를 설정한다.

- frontend : 클라이언트의 요청이 연결될 ip 및 port를 설정

- backend : frontend에서 들어온 트래픽을 전달할 프록시 서버들에 대한 설정, healthcheck 설정

- listen : 모니터링 및 통계 페이지 설정

#===========================================
# global 영역
# 전체 영역에 걸쳐서 적용되는 설정
#===========================================
global
    log         127.0.0.1 local2	# 로깅 설정

    chroot      /var/lib/haproxy
    pidfile     /var/run/haproxy.pid
    maxconn     4000		# 프로세스당 최대 동시 연결 수 지정
    user        haproxy
    group       haproxy
    daemon			# 데몬 모드

    # turn on stats unix socket
    stats socket /var/lib/haproxy/stats

#===========================================
# default 영역
# 다음 파트들(frontend, backend, listen)에 대한 변수를 설정한다.
#===========================================
defaults
	mode	http			# 인스턴스의 실행 모드 또는 프로토콜 설정
	log	global			# 로깅 활성화
	option	httplog			# HTTP 요청, 세션 상태 및 타이머 로깅 사용
	option	dontlognull		# null 연결 로깅 사용 또는 사용 안 함
	option	http-server-close		# 서버 측에서 http 커넥션 종료를 사용
	retries	3			# 연결 실패 후, 재시도 횟수
	timeout	http-request	10s	# 완전한 HTTP 요청을 대기할 수 있는 최대 허용 시간
	timeout	queue	1m		# 커넥션 슬롯이 비워질 때까지 대기열에서 대기할 최대 시간 설정
	timeout	connect	10s		# 서버에 대한 연결 시도가 성공할 때까지 대기할 최대 시간을 설정
	timeout	client	1m		# 클라이언트 측에서 최대 비활성 시간을 설정합니다.
	timeout	server	1m		# 특정 시간 이상 활동이 없으면 서버가 연결을 끊는다.
	timeout	http-keep-alive	10s	# 새로운 http 연결이 나타날 때까지 기다리는 최대 시간 설정
	timeout	check	10s		# 이미 연결된 이후에만, 추가적인 check timeout 시간을 설정한다.
	maxconn	3000			# 프로세스당 최대 동시 연결 수 지정

#===========================================
# frontend 영역
# 클라이언트의 요청이 연결될 ip 및 port를 설정
#===========================================
frontend		www
	bind	*:80			# 접속 port 지정
	default_backend	www.test.com	# backend 지정

#===========================================
# backend 영역
# frontend에서 들어온 트래픽을 전달할 프록시 서버들에 대한 설정
# healthcheck 설정
#===========================================
backend		www.test.com
	mode	http				# 인스턴스의 실행 모드 또는 프로토콜 설정
	balance	roundrobin			# 로드밸런싱 타입 지정
	option	httpchk /index.html		# index.html 파일의 유무로 healthcheck
	option	forwardfor			# 서버로 전송된 요청에 X-Forwarded-For 헤더 삽입 사용
	option	http-server-close			# 서버 측에서 http 커넥션 종료를 사용
	server	www1	192.168.0.100:80 check	# backend 서버를 선언 "server (name) (ip주소:포트)
	server	www2	192.168.0.101:80 check	# backend 서버를 선언


#===========================================
# Listen 영역
# 모니터링 및 통계 페이지 설정
#===========================================
listen	stats
	bind	192.168.0.102:8000 	# 접속 포트 지정
	stats	enable			# 상태 페이지 활성화
	stats	uri /status		# 접근할 uri 경로
	stats	refresh	3s		# 새로고침 주기 설정
	stats	auth admin:admin		# 상태페이지 접근 인증 추가

 

2) haproxy 설정파일 검사

$ haproxy -f /etc/haproxy/haproxy.cfg  -c
Configuration file is valid

 

3) haproxy 시작하기

$ systemctl start haproxy

 

4) haproxy 모니터링 페이지에서 웹서버들의 status 확인하기

- 브라우저를 띄워서 Listen 부분에서 설정한 모니터링 페이지에 접속한다.

- 화면 중간에 www1, www2의 status가 UP으로 보이는 것을 확인 할 수 있다.

haproxy 모니터링 페이지

 

4. 웹서버 로그를 통해서 haproxy를 통한 로드밸런싱이 잘 되는지 확인해보기

1) 브라우저에서 www.test.com으로 접속해보기

- www1과 www2가 번갈아 출력되면 정상적으로 로드밸런싱 되는것으로 보면 된다.

 

2) 웹서버의 access_log 확인해보기

- 로그를 보면 User-agent 값이 없는 로그가 계속 찍히는데, 이것은 Haproxy가 웹서버로 healthcheck를 하고 있는 것이다.

- User-agent 값이 있는 로그는 브라우저에서 test.com를 호출하여 찍힌 로그이며, 소스 IP가 haproxy IP이다.

- 이것은 웹서버의 로그설정에서 x-forward-for 부분을 추가해주면 정상적으로 소스 IP가 보이게 할 수 있다.

 

3) 웹서버의 로그설정에서 실제 client의 IP를 찍히도록 설정을 변경한다.

- httpd.conf에서 아래와 같이 변경하고 access_log를 확인하면 그림과 같이 소스 IP가 찍히는 것을 볼 수 있다.

- Haproxy 서버의 IP는 안 찍힌다..;;

참고 URL

https://zetawiki.com/wiki/%EC%95%84%ED%8C%8C%EC%B9%98_X-Forwarded-For_%EB%A1%9C%EA%B7%B8_%EC%84%A4%EC%A0%95

(before)
    LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined

(after)
    LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined

 

5. Active 서버를 keepalived를 stop하여도 URL 호출이 잘 되는지 확인하기(failover 테스트)

→ Active 서버의 Keepalived와 Haproxy를 stop 시킨 후, VIP로 호출시 www1, www2 가 잘 나오면 정상

→ www1, www2의 access_log를 보면, healthcheck와 브라우저 호출 로그가 잘 찍히면 정상이다.

 

 

※ 주의사항

haproxy 설정파일에서 Listen부분은 반드시 VIP를 넣으면 안되고, 각 서버의 IP를 넣어야 한다.

(삽질함..ㅡㅡ)

'Infra > 기타(가상화 등)' 카테고리의 다른 글

Zabbix 구성-2 (Zabbix Agent)(RHEL7)  (0) 2023.10.26
Zabbix 구성-1 (Zabbix Server)(RHEL8)  (0) 2023.10.26
서비스 가동률(MTTR, 가용도 등 관련)  (0) 2023.08.31
Network 기본 내용  (0) 2023.08.13
Haproxy, Keepalived 란?  (0) 2023.07.24

※ 사전내용 ※

1. 로드 밸런싱

- 서버가 처리해야 할 요청이 많을 경우, 요청을 여러 서버에 분배해주는 것

 

2. 로드 밸런서가 필요한 이유와 방법

- 요청이 많아짐에 따라, 서버에는 더 많은 부하가 걸리게 된다. 이를 해소하기 위해 로드밸런서를 사용한다.

- 서버측에서는 서버의 사양을 업그레이드하는 방식(Scale-up)과 서버의 수량을 늘리는 방식(Scale-out)방식으로 서버

 

→ HAproxy는 SW 로드밸런서이며, Scale-out 방식을 선택할 때 고려해 볼 수 있다.

 

참고 URL1 https://dev-youngjun.tistory.com/97

참고 URL2 https://leffept.tistory.com/309

 

 

1. Haproxy란?

- L4, L7 HW 로드밸런서를 대체하기 위해 만들어진 오픈소스 SW로드밸런서이다.

- HAproxy 뒤에 있는 Web 서버에 대해 Health check 기능을 지원하며, Down 상태의 인스턴스에는 트래픽을 보내지 않는다.

- Keepalived와 같이 사용한다.

 

2. Keepalived란?

- 가상의 IP(=VIP)를 기반으로 Active 노드에 장애가 발생했을때 자동으로 Standby 노드로 failover 해주는 기능을 지원한다.

참고 URL

https://navercloudplatform.medium.com/keepalived%EB%A5%BC-%ED%99%9C%EC%9A%A9%ED%95%98%EC%97%AC-%EA%B0%84%EB%8B%A8%ED%95%98%EA%B2%8C-ha-%EA%B5%AC%EC%84%B1%ED%95%B4%EB%B3%B4%EA%B8%B0-c840b90149a5

※ 사전 내용 ※

1. 프로그램(Program)

- OS 상에서 실행할 수 있는 파일

- 메모리에 올라가 있지 않고, 실행되기를 기다리는 정적 데이터의 묶음

- 프로그램을 실행하면, 메모리에 올라가게 되고 동적 상태가 된다.

 

2. 프로세스(Process)

- 메모리에 올라와 실행되고 있는 프로그램 인스턴스

- 각 프로세스는 OS에게 독립된 메모리 영역을 할당받는다. 각 프로세스의 메모리 영역은 타 프로세스가 접근할 수 없다.

- 각 프로세스는 Code / Data / Stack / Heap 로 구성된 독립적인 메모리 영역이다.

 

3. 쓰레드(Thread)

- 하나의 프로세스 내에서 실행되는 여러 흐름의 단위

- 쓰레드는 프로세스 내의 Stack을 할당받고 Heap, Code, Data는 쓰레드간에 공유한다.

 

4. 멀티 프로세스

- 하나의 프로그램을 처리할 때, 여러 프로세스를 사용하여 처리

- 여러 프로세스 중 하나의 프로세스가 죽어도 타 프로세스에 영향을 받지 않고 정상적으로 처리된다.

- 멀티 쓰레딩 방식에 비해서 리소스 사용량이 많다.

 

5. 멀티 쓰레딩(Multi-Threading)

- 멀티 쓰레딩은 하나의 프로세스를 여러 개의 쓰레드로 구성하여 처리

- 각 쓰레드는 서로 자원을 공유하고 효율적으로 처리하기 때문에,  빠른 처리속도와 효율적인 리소스 사용 효과가 있다.

 

참고 URL

https://goodmilktea.tistory.com/24

 

 

Apache MPM

 

1. Apache MPM이란?

- Apache가 받은 요청을 처리하기 위해서 자식 프로세스에게 분배하는 모듈

- 종류 : Prefork, Worker, Event

 

2. Prefork 방식

1) 특징

- 1개의 요청에 1개의 프로세스를 할당하여 처리한다.

- 1개 프로세스에 1개의 쓰레드를 갖는다.

- 자식 프로세스들을 "StartServers" 설정값만큼 미리 생성한다.(최대 1024개까지 생성 가능)

* 요청 : 프로세스 : 쓰레드 = 1 : 1: 1

→ 1개의 요청에 대해 1개의 프로세스 속에 있는 1개 쓰레드에서 처리

 

2) 장점

- 각 요청은 각 프로세스가 처리하기 때문에, 특정 프로세스에서 문제가 발생해도 타 프로세스에 영향이 없다.

- 쓰레드간 독립적으로 메모리를 사용하므로 안정적이다.

 

3) 단점

- 다량의 요청을 처리하기 위해서는 많은 수의 프로세스가 필요하기 때문에 리소스 사용량이 증가한다.

- 통신량이 많은 서버에서는 상대적으로 불리하다.

 

3. Worker 방식

1) 특징

- 여러 개의 요청에 대해 1개 프로세스 내에 여러 쓰레드를 생성 및 할당하여 처리하는 방식

- 1개 프로세스 내에 여러 쓰레드를 생성한다.

* 요청 : 프로세스 : 쓰레드 = 5 : 1 : 5

→ 5개의 요청에 대해서 1개 프로세스 내 5개의 쓰레드가 처리

 

2) 장점

- 1개 프로세스에 할당된 리소스를 여러 쓰레드가 공유하므로 리소스 사용량이 비교적 적고 효율적으로 쓸 수 있다.

- 통신량이 많은 서버에서 비교적 유리하다.

 

3) 단점

- 각 프로세스 내에 여러 쓰레드가 있으므로, 프로세스 오류 발생하면 해당 프로세스의 모든 쓰레드가 영향받는다.

 

4. Event 방식

1) 특징

- Worker 방식을 토대로 하며, Nginx에서 사용하는 방식

- 고정된 프로세스 개수를 생성하여 처리한다.

 

2) 장점

- 동시에 요청이 많더라도 프로세스와 쓰레드 생성에 대한 비용이 발생하지 않는다.

- Event-driven(비동기 방식)을 이용하여 처리하며, 요청이 순서대로 처리되기까지 대기/중단되는 현상이 감소할 수 있다.

 

3) 단점

- 특정 요청에 대한 처리 시간이 길어진다면, 다른 요청의 처리 시간도 길어지는 현상이 발생할 수 있다.

 

5. MPM 지시어

1) Prefork

 

<IfModule mpm_prefork_module>

  StartServers                 64
  MinSpareServers         128
  MaxSpareServers         256
  ServerLimit                   2048
  MaxClients                   2048
  MaxRequestsPerChild     512

</IfModule>
StartServers Apache start시 자식 프로세스 개수
MinSpareServers Apache가 유지할 최소 자식 프로세스 개수
MaxSpareServers Apache가 유지할 최대 자식 프로세스 개수
ServerLimit Apache가 생성 가능한 최대 자식 프로세스 개수
(설정 값 이상 자식 프로세스를 생성 불가)
MaxClients 동시에 접속 할 수 있는 Client의 최대 값
MaxRequestsPerChild 1개의 자식 프로세스가 받을 수 있는 최대 요청 개수

 

2) Worker방식

 

<IfModule mpm_worker_module>
  StartServers                 3
  MinSpareThreads        256
  MaxSpareThreads        512
  ThreadLimit               4096
  ThreadsPerChild        128
  ServerLimit                32
  MaxClients               4096
  MaxRequestsPerChild  10000
</IfModule>
StartServers Apache start시 자식 프로세스 개수
MinSpareThreads Request spike를 처리할 최소한의 idle 쓰레드 개수
MaxSpareThreads idle 쓰레드 최대 개수
ThreadLimit 자식 프로세스 1개에 구성할 수 있는 최대 값
ThreadsPerChild 자식 프로세스가 생성할 쓰레드 개수
ServerLimit 생성 가능한 자식 프로세스의 개수
MaxClients
(=MaxRequestWorker)
동시에 처리될 커넥션 최대 개수
MaxRequestsPerChild
(=MaxConnectionsPerChild)
자식 프로세스가 처리할 request/커넥션 개수

 

 

참고 URL1

https://m.blog.naver.com/viaweb/222190352925

 

참고 URL2

https://sangchul.kr/entry/%EB%A6%AC%EB%88%85%EC%8A%A4-%EC%95%84%ED%8C%8C%EC%B9%98-%EC%9B%B9%EC%84%9C%EB%B2%84-MPMprefork-worker-%EC%84%A4%EC%A0%95-%EB%B0%A9%EB%B2%95

참고URL

https://joont.tistory.com/42

 

톰캣 메모리 설정

JVM 구조유지보수를 진행하다 처음보게 된 Out Of Memory .. 굉장히 난감했었으나 다행히 해결하게 되어 글로써 남기고자 합니다 ㅋㅋ개인이 공부할 때나, 개발 도중 단위 테스트만으로는 발견하기

joont.tistory.com

 

Tomcact의 메모리 설정은 Tomcat 설치경로/bin/setenv.sh에서 선언해주면 된다.

(* catalina.sh에서 선언해도 되지만, setenv.sh에 넣으라고 적혀있다.)

setenv.sh를 만들어서 설정을 추가해준다.

$ vi setenv.sh
## Tomcat Memory Config

JAVA_OPTS="$JAVA_OPTS -Xms256m -Xmx512m -XX:MaxPermSize=128m"
<size>부분에 용량을 지정하면 된다.

- Xms<size>  : Java Heap의 최소 크기값을 지정
- Xmx<size>  : Java Heap의 최대 크기값을 지정
- XX:PermSize=<size>  : Permanent Generation의 최초 크기를 지정
- XX:MaxPermSize=<size>  : Permanent Generation의 최대 크기를 지정

설정을 적용하고 톰캣을 재기동하면 된다.

아래 그림의 표시한 부분처럼 메모리 설정이 적용 된 것을 확인 할 수 있다.

 

'Infra > Tomcat' 카테고리의 다른 글

Tomcat 세션 클러스터링(RHEL8)  (0) 2023.10.23

[실행환경]

CentOS Linux release 7.9.2009 (Core)

openjdk version "11.0.19" 2023-04-18 LTS

Apache 2.4.6

Tomcat 10.1.11

 

앞서 진행한, 아파치-톰캣 연동 진행 내용에 이어지는 내용이다.

https://jparkk.tistory.com/15

 

아파치와 톰캣 연동

[실행환경] CentOS Linux release 7.9.2009 (Core) openjdk version "11.0.19" 2023-04-18 LTS Apache 2.4.6 Tomcat 10.1.11 1. 톰캣 홈페이지에서 다운로드 링크를 복사하고, 원하는 위치에 wget으로 다운로드 한다. 다운 받은 후

jparkk.tistory.com

 

1. 톰캣 설정파일에서(server.xml)에서 포트를 변경한다.

여러개의 톰캣을 연동하기 위해서 포트를 변경해야 하고, 각 톰캣의 포트 번호를 아래와 같이 변경했다.

(기본적용 포트 번호 → ajp 8009, 셧다운포트 8005, 톰캣http포트 8080)

tomcat-test1 http 포트 8180, 셧다운 포트 8105, ajp 포트 8109

tomcat-test2 http포트 8280, 셧다운 포트 8205, ajp 포트 8209

* 포트가 겹치게 되면 정상적으로 작동하지 않음

 

2. mod_jk.so 모듈 사용할 수 있도록 설정하기

1) conf.d 아래에 mod_jk.conf 만들기

LoadModule jk_module modules/mod_jk.so

<ifModule jk_module>
        JkWorkersFile conf.d/workers.properties

        JkShmFile logs/mod_jk.shm
        JkLogFile logs/mod_jk.log

        JkLogLevel error
        JkLogStampFormat "[%a %b %d %H:%M:%S %Y]"
</ifModule>

 

2) workers.properties

→ balancer가 node1, node2에게 분배하는 방식

####################################################
# worker list
####################################################
worker.list=node1,node2,balancer

####################################################
# balancer
####################################################
worker.balancer.type=lb
worker.balancer.balance_workers=node1,node2

####################################################
# tomcat-test1
####################################################
worker.node1.reference=worker.template
worker.node1.host=localhost
worker.node1.port=8109

####################################################
# tomcat-test2
####################################################
worker.node2.reference=worker.template
worker.node2.host=localhost
worker.node2.port=8209

####################################################
# Worker Setting
####################################################
worker.template.type=ajp13
worker.template.socket_connect_timeout=7000
worker.template.socket_keepalive=true
worker.template.ping_mode=A
worker.template.ping_timeout=10000
worker.template.connection_pool_minsize=0
worker.template.connection_pool_timeout=600
worker.template.reply_timeout=300000
worker.template.recovery_options=3

ex2)

#worker_list
worker.list=balancer

#balancer
worker.balancer.type=lb
worker.balancer.balance_workers=tomcat1,tomcat2

worker.tomcat1.type=ajp13
worker.tomcat1.port=8109
worker.tomcat1.host=localhost

worker.tomcat2.type=ajp13
worker.tomcat2.port=8209
worker.tomcat2.host=localhost

 

3. 가상호스트에서 특정 도메인으로 접근시, 톰캣 인스턴스에게 분배되게 설정 하기

/etc/httpd/conf.d/vhosts.conf에서 아래 내용 추가

 

ex1)

<VirtualHost *:80>
       ServerName vhost3.hello.com
       DocumentRoot /var/www/html_vhost2
       ErrorLog "logs/vhost3.hello.com_error_logs"
       CustomLog "logs/vhost3.hello.com_access_logs" combined
       JkMount	/* balancer  >>>>>>>>>>>>> 이 부분이 두 톰캣 인스턴스에 분배 되게 하는 설정임
</VirtualHost>

ex2)

<VirtualHost *:80>
	ServerName www1.test.com

	CustomLog	"|/usr/bin/rotatelogs /usr/local/src/httpd-2.4.58/logs/www1.test.com.log 3600 " combined env=!VLOG
	ErrorLog	"|/usr/bin/rotatelogs /usr/local/src/httpd-2.4.58/logs/www1.test.com.error 3600 "

	JkMount		/* balancer
</VirtualHost>

 

 

[실행환경]

CentOS Linux release 7.9.2009 (Core)

openjdk version "11.0.19" 2023-04-18 LTS

Apache 2.4.6

Tomcat 10.1.15


1. 톰캣 홈페이지에서 다운로드 링크를 복사하고, 원하는 위치에 wget으로 다운로드 한다.

다운 받은 후, 압축을 풀고 원하는 수량 만큼 인스턴스를 압축해제 한다.

wget https://dlcdn.apache.org/tomcat/tomcat-10/v10.1.15/bin/apache-tomcat-10.1.15.tar.gz

 

2. 필요한 패키지 다운로드

※ apache 소스설치를 했다면,  httpd-devel(=apxs)를 빼고 yum설치를 해야한다.

# 아파치를 yum 설치했을 때
yum install java-11-openjdk.x86_64 autoconf libtool httpd-devel

# 아파치를 소스설치 했을 때
yum install java-11-openjdk.x86_64 autoconf libtool

* 톰캣 10.1버전은 지원되는 자바 버전이 11이상이다. → 톰캣 홈페이지 참고(https://tomcat.apache.org/whichversion.html)

 

3. 톰캣 홈페이지에서 커넥터 다운로드, 다운 받은 파일 압축해제 & mod_jk 컴파일 설치를 진행한다.

wget https://dlcdn.apache.org/tomcat/tomcat-connectors/jk/tomcat-connectors-1.2.49-src.tar.gz
# 톰캣 connector 디렉토리로 이동
cd tomcat-connectors-1.2.49-src

# native 디렉토리로 이동
cd native

# 컴파일 설치 진행
# apxs 경로를 알 수 없다고 나올 경우, whereis apxs로 확인 필요
# 아파치를 소스설치 한 경우, apxs 경로 확인 필요!!!!!
# apxs 경로 예시) /usr/local/src/httpd-2.4.57/bin/apxs
./configure --with-apxs=/usr/bin/apxs

make && make install

# mod_jk.so 파일이 정상적으로 설치 된 것인지 확인한다.
# find 명령어로 검색되지 않으면 제대로 설치 되지 않은 것
find / -name "mod_jk.so"

# apache를 소스설치 한 경우, mod_jk.so 파일을 소스설치 경로로 복사해준다.
cp -arp mod_jk.so /usr/local/src/httpd-2.4.57/modules

make install 진행 후, /usr/lib64/httpd/modules경로에 mod_jk.so가 있으면 정상적으로 진행 된 것이다.

 

※  configure: error: You must specify a valid --with-apxs path → 에러 발생시 처리방법(RHEL 8 에서 발생)

- 아파치 소스설치한 경로로 이동

- apxs 파일을 열어서 1번 줄 문장을 아래와 같이 수정해주면 해결된다.

vi /usr/local/src/httpd-2.4.57/bin/apxs

# apxs 파일의 1번줄 기존 내용
#!/replace/with/path/to/perl/interpreter -w

# apxs 파일의 1번줄 내용을 아래와 같이 바꿔준다.
#!/usr/bin/perl

 

4. 아파치 - 톰캣 연동 진행

 

1) Apache conf 파일에서 내용 추가한다.

LoadModule jk_module modules/mod_jk.so

<VirtualHost *:80>	
	JkMount /* balancer
</VirtualHost>
 
<ifModule jk_module>
        JkWorkersFile conf/workers.properties

        JkShmFile logs/mod_jk.shm
        JkLogFile logs/mod_jk.log

        JkLogLevel error

        JkLogStampFormat "[%a %b %d %H:%M:%S %Y]"
</ifModule>

 

2) workers.properties 내용을 아래와 같이 추가한다.

vi workers.properties

# worker list
worker.list=balancer

# balancer
worker.balancer.type=lb
worker.balancer.balance_workers=tomcat1

# tomcat1
worker.tomcat1.port=8009
worker.tomcat1.host=localhost
worker.tomcat1.type=ajp13

 

3) 톰캣 server.xml 파일에서 AJP 포트 활성화

address="0.0.0.0"  secretRequired="false" 를 넣지 않으면 정상작동 하지 않으니 주의!!!

(중략)
    <Connector protocol="AJP/1.3"
               address="0.0.0.0"
               secretRequired="false"
               port="8009"
               redirectPort="8443"
               maxParameterCount="1000"
               />
(중략)

 

1) 톰캣을 start한다.

/home/tomcat-test1/bin/startup.sh

* 톰캣 중지는 bin/shutdown.sh 이다.

 

 

2) 톰캣 포트가 올라왔는지 확인한다.(디폴트 상태라면 8080포트가 LISTEN상태다.)

 

3) 브라우저로 80포트 접근시 톰캣 그림 출력 된다면, 정상적으로 아파치-톰캣 연동 완료

실행 환경 : Centos7

 

1, 아파치(httpd 2.4) 설치

$ yum install httpd

 

2.  httpd start + 설치된 것 확인

$ systemctl start httpd

$ httpd -V

3. httpd.conf에서 www.hello.com으로 ServerName 지정

ServerName  www.hello.com  

 

4. DocumentRoot에 hello.com에 대한 html 파일 넣고 확인

 

5. 이름 기반 가상호스트 2개 적용해보기

* 이름 기반 가상호스트는 1대의 서버에 여러 도메인을 사용할 때 유용하다.

/etc/httpd/conf.d/vhost.conf를 생성하여 아래와 같이 적용

각 DocumentRoot에 다른 내용의 index.html을 넣어주었다.

해당 도메인들을 PC hosts 파일에 추가하였다.

<VirtualHost *:80>
          ServerName vhost1.hello.com   → 가상호스트1
          DocumentRoot /var/www/html_vhost1
          ErrorLog "logs/vhost1.hello.com_error_logs" 
          CustomLog "logs/vhost1.hello.com_access_logs" combined
</VirtualHost>

<VirtualHost *:80>
          ServerName vhost2.hello.com   → 가상호스트2
          DocumentRoot /var/www/html_vhost2
          ErrorLog "logs/vhost2.hello.com_error_logs" 
          CustomLog "logs/vhost2.hello.com_access_logs" combined
</VirtualHost>

 

자격증
AWS SAA-C03
 
취득날짜
2023.07.09
 
취득 소요시간
약 1개월
(Udemy 1주 + 1차 시험공부 2주 + 2차 시험공부 2주)
※ 불합격시 2주간 재응시 불가
 
공부방법
1) Udemy 강의 듣기 → CLF 보다 모르는 개념이 엄청 많이 나와서 개념 잡는 목적으로 봤다.
2) 덤프 풀이 → 진짜 공부 시작. 문제풀이+개념 정리 반복했다.
3) 덤프 풀이 반복 → 덤프 여러번 볼수록 합격 확률 높아진다. 덤프 문제가 꽤 많아서 쉽지 않긴 하다.
※ Udemy 생략하고  '맨땅에 헤딩'식으로 덤프부터 봐도 될 듯 하다.
 
시험 후기
1) CLF에 비해 공부해야 할 양이 많고 범위가 넓다. 문제 지문의 길이가 CLF보다 많이 길다.
2) 문제의 질문 내용이 CLF에 비해 덜 명확하여 답 고를때 아리송 한 느낌을 받는 경우가 종종 있었다.
3) 생각보다 실제 시험 문제의 난이도는 평범 한 듯 하다. 덤프를 2~3번 반복했기에 합격한 것도 있어보인다.
4) 덤프 문제가 워낙 많아서 답만 외워서 합격하기 쉽지 않을거 같다.
5) 시험장소는 깔끔하게 스터디룸에서 보는것 추천
6) 피어슨뷰 감독관은 시험장소 확인할 때 은근히 깐깐했고 인도식 영어는 좀 알아듣기 힘들었다.

'Infra > AWS' 카테고리의 다른 글

AWS VPC 실습2  (0) 2023.08.14
AWS VPC 실습1  (0) 2023.08.13
AWS IAM(+그룹/사용자 생성 실습)  (0) 2023.08.13
AWS CLF-C01 취득 후기  (0) 2023.07.15
AWS 자격증 공부 내용 요약 정리(CLF-C01 - AWS Certified Cloud Practitioner)  (0) 2023.05.31

자격증
AWS CLF-C01
 
취득날짜
2023.05.31
 
취득 소요시간
약 2주일
 
공부방법
1) AWS 공식 강의 6시간 짜리 듣기(정리하면서 들으니 대략 10시간 정도 소요)
2) Udemy에서 CLF-C01 연습문제 6세트 구매해서 문제풀이 진행(틀린거 정리도 같이 진행)
3) 연습문제 1.5바퀴 돌리다가 지루해서(?) 바로 시험 응시
※ AWS 강의 수강 추천! 나름 재밌게 잘 만들었다.
 
시험 후기
1) SAA에서 나오는 내용의 10~15% 정도만 출제 되는걸로 느껴진다.
2) AWS 공식 강의 내용만 잘 숙지한다면 큰 어려움 없이 취득 가능할 것 같다.
3) 기초 시험이라 그런지 지문의 길이가 짧고 질문내용이 분명해서 좋다
4) 목표했던 자격증 따서 기분 좋다.
 

'Infra > AWS' 카테고리의 다른 글

AWS VPC 실습2  (0) 2023.08.14
AWS VPC 실습1  (0) 2023.08.13
AWS IAM(+그룹/사용자 생성 실습)  (0) 2023.08.13
AWS SAA-C03 취득 후기  (0) 2023.07.15
AWS 자격증 공부 내용 요약 정리(CLF-C01 - AWS Certified Cloud Practitioner)  (0) 2023.05.31

1. Backup 유형

 

1) Full backup(전체백업)
- 백업할 때마다 모든 데이터의 복사본을 만드는 백업 방식이다.
- 복구 시에 일부 다른 백업 방식보다 간편하고 시간이 증분 백업에 비해 상대적으로 덜 걸린다.
- 백업 작업 완료까지 소요시간이 길다.

Full backup&nbsp; 방식 예시



2) Incremental Backup(증분백업)
- 마지막 전체 백업 이후에 변경된 파일만 복사한다.
- 전체 백업과 비교할 때 증분 백업은 매일 백업해야 하는 파일의 양이 적어 빠른 백업 완료가 가능하다.


3) Differential Backup(차등백업)

- '전체 백업' 이후 변경된 '모든' 데이터를 백업하는 방식이다.

- 일단 파일이 변경되면 예정된 다음 전체 백업 시까지 매일 백업한다.

- 파일이 변경될 때마다 파일 크기가 증가하게 되며, 다음 전체 백업 때까지 파일크기가 점점 커지게 된다.

- 전체 백업 이미지와 가장 최근의 차등 이미지만 복구하면 되기 때문에 증분 백업보다 복구 속도가 빠르다.

 

4) 중복제거

- 백업 작업 진행 시, 동일한 부분을 하나만 저장하고 나머지 부분은 제거 후 백업

 

 

참고자료1

https://www.veritas.com/ko/kr/information-center/data-deduplication

참고자료2

https://boho.or.kr/kr/bbs/view.do?bbsId=B0000127&nttId=36327&menuNo=205021

'Infra > Backup' 카테고리의 다른 글

소산 백업, 백업 매체  (0) 2023.07.14

+ Recent posts