KDT/Cloud

240112 Cloud

001cloudid 2024. 1. 12. 17:39
728x90

클라이언트는 서버와 전달하는 것이 아니라 중간에 대리자와 대화하는 것을 프록시

클라이언트 - 프록시 - 서버

프록시가 서버가 여러개 있을 때 포트번호로 포트번호에 맞게 전달해줌

 

이전 시간

\ → \.(jsp)$

정규표현식에 문제가 생겼기 때문이다.

.을 제대로 표현하기 위해서는 \를 붙혀주어야함. → \.

$ : .jsp로 끝나는 것

 

※index.jsp 호출시 web2의 /user/share/tomcat/webapps/ROOT/index.jsp가 호출됨

따라서 원하는 내용을 첫 화면으로 보여주고 싶다면 위의 파일 수정 또는 교

 

0105 - [ AWS EC2(nginx)를 활용한 Reverse-Proxy ].txt
0.01MB

 

 

haproxy를 통한 로드밸런싱

로드(load) : 부하 = 일을 얼마만큼 많이하는지

로드밸런싱 : 부하가 하는 일을 맞춰준다.

AWS에서는 ELB라는 로드밸런싱을 지원

ELB는 논리적인 가상의 로드밸런서이고, 물리적으로 동작 시에는 L4 스위치를 사용

L4 스위치 대신 물리적인 서버를 이용해서 로드밸런싱을 구현할 수 있다.

사용되는 서비스는 haproxy(고가용성 프록시).

 

필요 요소

HAProxy

web1(apache)

web2(tomcat)

HAProxy

  1. 인스턴스 생성(기억안나면 앞 내용 참고)
  2. 원격 터미널 접속(MobaXterm)
  3. haproxy 패키지 설치
    sudo yum update -y (업데이트 확인)
    sudo yum install -y haproxy (haproxy 패키지 설치)
  4. 설정 파일 백업
    sudo cp /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.org 
    (기존 haproxy.cfg 파일을 haproxy.cfg.org 이름으로 같은 디렉토리 내에 복사)
    sudo ls /etc/haproxy/
    haproxy.cfg  haproxy.cfg.org
  5. 설정 파일 수정
    sudo vi /etc/haproxy/haproxy.cfg
    ========================================================
    #전역 설정 세션, 로깅, 최대 연결 수, 사용자 및 그룹 설정 등을 할 수 있음
    :set nu
    26번 라인    log         127.0.0.1 local2 info

    #Severity Level(심각도)
    # emerg -> alert -> cirt -> err -> warning -> notice -> info -> debug
    #haproxy 프로세스의 root 디렉토리를 지정 : 28번라인
    #haproxy 프로세스의 PID 파일 위치를 지정 : 29번 라인
    #최대 연결 수를 지정(4000) : 30번 라인
    #haproxy 프로세스가 사용할 사용자 및 그룹을 설정 : 31~32번 라인
    #백그라운드(데몬)에서 실행되도록 설정 : 33번 라인
    #기본 설정, 섹션, 기본적인 행동 및 타임아웃 등을 정의 : 43번 라인
    #전역 로그 설정을 사용 : 44번 라인
    #HTTP 요청 및 응답에 대한 로그를 사용 : 45번 라인
    #빈 요청은 로깅하지 않도록 설정 : 46번 라인
    #클라이언트와 서버 간 연결 종료 관리 : 47번 라인
    #127.0.0/8을 제외한 주소에서는 X-Forwarded-For 헤더를 추가 : 48번 라인
    ※8의 의미는 127
    #서버 장애 시 다른 서버로 트래픽을 재분배함 : 49번 라인
    #기본 타임아웃 설정, 재시도 횟수를 3으로 설정 : 50~51번 라인
    #여러 상황에서의 타임아웃 설정(HTTP 요청, 연결대기, 클라이언트 서버, HTTP Keep-Alive, 체크 등) :
    52번 라인~57번 라인
    #기본 최대 연결 수 설정(3000) : 58번 라인

    #main이라는 이름의 프론트엔드를 정의하고 포트 5000번에서 들어오는 모든 트래픽을 처리 : 61번 라인 이후

    64번 라인 bind *:80 (기본적으로 80번은 listen한다.)

    #URL경로가 -i 뒤의 단어로 시작하는지 학인하는 ACL을 정의 : 65번 라인
    #URL 경로가 여러 확장자로 끝나는지 확인하는 ACL을 정의 : 66번 라인
    #ACL에 따라 정적 컨텐츠를 처리하는 백엔드 'static'을 사용 : 68번 라인
    #그렇지 않은 모든 경우에는 'app' 백엔드를 기본값으로 사용 : 69번 라인

    70번 라인 option forwardfor

    #정적 컨텐츠를 처리하기 위한 백엔드 정의 : 72번 라인 이후
    #서버 간 부하 분산 방식을 순환(Round Robin) 방식으로 설정 : 75번 라인
    #이름이 'static'인 서버를 127.0.0.1의 4331 포트에서 실행되고 있는 것으로 설정, 상태 체크를 위해 'check'를 사용
    : 76번 라인

    인스턴스 생성(web1, web2)

    #애플리케이션 처리하기 위한 백엔드를 정의 : 80번 라인 이후
    server app1 → server www1 web1의 IPv4주소 check
    server app2 → server www2 web2의 IPv4주소 check

    server app3, serverapp4 삭제 

     82 backend app
     83     balance     roundrobin
     84     server  www1 15.164.230.90:80 check
     85     server  www2 3.39.239.64:80 check
    ========================================================
  6. haproxy 동작
    sudo systemctl start haproxy
  7. haproxy enable 설정
    sudo systemctl enable haproxy
  8. rsyslog 에 haproxy log 설정
    sudo vi /etc/rsyslog.conf
    ========================================================
    15번 라인 주석 해제 : $ModLoad imudp
    16번 라인 주석 해제 : $UDPServerRun 514
    17번 라인 추가 : $AllowedSender UDP, 127.0.0.1
    54번 라인 수정 : *.info;mail.none;authpriv.none;cron.none,local2.none                /var/log/messages
    75번 라인 추가 : local2.* /var/log/haproxy.log
    ========================================================
    esc :wq
  9. rsyslog 재시작
    sudo systemctl restart rsyslog
  10. web1, web2 인스턴스 설정
    web1, web2 서버에 아파치 설치 및 설정
    sudo yum update -y
    sudo yum install httpd -y
    sudo systemctl start httpd
    sudo systemctl enable httpd
    sudo vi /etc/httpd/conf/httpd.conf
    ========================================================
    196번 라인
    LogFormat "\"%{X-Forwarded-For}i\" %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}    i\"" combined
    ========================================================
    esc :wq

    sudo systemctl restart httpd
    sudo vi /var/www/html/index.html
    ========================================================
    web1 - web1 test page
    web2 - web2 test page
    ========================================================
    esc :wq
  11. haproxy 서버 frontend 추가 설정
    sudo vi /etc/haproxy/haproxy.cfg
    ========================================================
    64번 라인 엔터 후 65번 라인 이후에
    stats enable
    stats auth admin:adminpassword
    stats hide-version
    stats show-node
    stats refresh 30s
    stats uri /haproxy?stats
    추가
    ========================================================
    esc :wq
  12. haproxy 재시작
    sudo systemctl restart haproxy
    ========================================================
    Message from syslogd@localhost at Jan 12 07:32:16 ...
     haproxy[32615]: backend static has no server available!
    ========================================================
  13. 윈도우 웹 브라우저에서 haproxy IPv4 입력
    새로고침 → web1, web2 내용이 변경되는 것이 반복

    Client -> HAProxy -> virtual Switch-www1, www2, www3
    여유로운 쪽에 로드를 보내준다.
    HAProxy가 어디로 보내줄지 정해준다.proxy 대시보드 보기
  14. haproxy주소/haproxy?stats
    haproxy IP/haproxy?stats
    ->로그인 admin/adminpassword
    -> Statistics(통계) report 대시보드가 보
    여기서 판단을 해서 보내줌
728x90

'KDT > Cloud' 카테고리의 다른 글

240124 Cloud  (0) 2024.01.24
240119 Cloud  (0) 2024.01.19
240105 Cloud  (0) 2024.01.05
231229 Cloud  (0) 2023.12.29
231222 Cloud  (0) 2023.12.22