프로그램 활용/웹서버

로드 밸런싱 & 인프라 이중화 구축

3604 2023. 10. 24. 07:26
728x90

출처: https://velog.io/@minwest/%EB%A1%9C%EB%93%9C-%EB%B0%B8%EB%9F%B0%EC%8B%B1-%EC%9D%B8%ED%94%84%EB%9D%BC-%EC%9D%B4%EC%A4%91%ED%99%94-%EA%B5%AC%EC%B6%95

 

✏️ 로드 밸런서

Client가 많아지면 서버 1대로 트래픽을 감당하기 힘들다.
이 문제를 해결하기 위한 방법이 2가지 있다.

  • Scale-up : 하드웨어의 성능을 올리는 방법
  • Scale-out : 서버의 수를 증가시키는 방법로드 밸런싱 : 여러 대의 서버에 트래픽을 분산시켜주는 서비스
    • 로드 밸런서의 서버 선택 방식
      - 라운드 로빈
      - Least Connection : 연결 개수가 가장 적은 서버 선택
      - Source : 사용자의 IP를 해싱하여 분배


💻 인프라 이중화 구축

Linux & OpenSource를 활용한 인프라 이중 구축 실습

시스템 구성도

실습

Yum Local Repository 설정

  • Web Server용 가상머신에 Apache를 설치할 때 yum을 사용하면 편리한데 Redhat 무료 버전에서는 지원되지 않는다.
  • 이를 해결하기 위해 다양한 방법을 시도해 보다가 Local에 Yum Repository를 만들어 사용하는 방법으로 해결했다.
  • 이 방법을 사용하기 위해서는 Redhat iso파일이 필요하다.

  1. 가상 머신에 ISO 이미지 파일을 연결해준다. (체크박스도 체크)


  2. cdrom 디렉토리를 생성한 후 ISO 이미지 파일을 mount 해준다.
    (여기부턴 root 권한으로 해주기. 명령어 : su)
# mkdir /mnt/cdrom
# mount /dev/cdrom /mnt/cdrom
  • mount 되었는지 확인하는 방법
  1. Package를 복사할 디렉토리를 생성한다.
  • Redhat7은 원하는 이름으로 해주면 된다.
# mkdir -p /Redhat7/Package
# cd Redhat7/Package

4. Package를 생성해준 디렉토리에 복사해준다.
  • 생성한 Redhat7 디렉토리에서 명령어를 실행한다.
  • comps 파일 이름이 너무 길기 때문에 변경해준다.
# cp /mnt/cdrom/repodata/*comps*xml.gz /Redhat
# mv *comps*xml.gz comps.xml.gz
# gzip -d comps.xml.gz
4.1 
# cp /mnt/cdrom/Package/* /Redhat7/Package

  1. Redhat7/Package 디렉토리에 세가지 패키지를 설치해준다.
    (키보드의 tab 버튼을 누르면 패키지명 쉽게 입력 가능)
# rpm -ivh createrepo-0.9.8-4.el6.noarch.rpm python-deltarpm-3.5-0.5.20090913git.el6.x86_64.rpm deltarpm-3.5-0.5.20090913git.el6.x86_64.rpm

  1. Redhat7 디렉토리에서 local에 Repository를 생성해준다.
# createrepo -g comps.xml .

  1. local.repo 파일을 생성해준다.
# vi /etc/yum.repos.d/local.repo
[Package]
name=RedHat Linux Local Repository
baseurl=file:///Redhat7/
enabled=1
gpgcheck=0

  1. yum 설정을 확인해준다.
# yum list

Apache Web Server 설치

yum을 사용할 수 있게 되었으므로 yum을 통해 간편하게 Apache를 설치할 수 있다.
계속 root 권한으로 진행해주었다.

  1. Apache Web Server를 설치해준다.
# yum install -y httpd
  • -y 조건을 주면 y/N에 입력할 필요 없이 바로 설치 된다.
  • yum을 사용해 Apache를 설치하면​ /etc/httpd​의 경로에 설치 된다.

  1. 방화벽을 설정해준다
# firewall-cmd --permanent --add-service=http 
# firewall-cmd --permanent --add-service=https 
# firewall-cmd --reload

  1. 서비스를 활성화한 후 시작한다.
# systemctl enable httpd
# systemctl start httpd

  1. 웹 브라우저를 통해 접속을 확인해 준다
  • ip 주소 확인하는 법
# ip address
  • http://ip_address 에 접속했을 때 다음과 같은 화면이 뜬다면 성공
  • 기본 문서가 /var/www/html/index.html로 되어있지만 index.html 파일이 존재하지 않아 위와 같은 화면이 뜬 것이다.해당 경로에 가서 index.html 파일을 생성한 후 html 코드를 작성해 주면 작성한 코드의 화면이 뜬다.

Tomcat 설치

- Java 설치

  • Tomcat 설치를 위해 우선 Java를 설치해주었다.
  • 처음엔 Oracle 홈페이지에서 jdk 다운로드 링크를 복사해 wget 명령어를 통해 설치해주려했다.
  • 하지만 Oracle 정책이 바뀌었는지 로그인을 해야만 다운받을 수 있어 yum을 통해 openJDK를 설치해주었다.

  1. 설치 가능한 jdk 버전을 확인한 후 설치해준다.
# yum list java*jdk-dvel
  • 이를 통해 확인한 파일을 yum install 명령어로 설치해 주면 된다.
  • 이 방법도 있지만 나는 조금 다른 명령어를 사용해 설치해주었다. 둘 중 아무 방법이나 해도 될 것 같다.
# yum install java
# yum install java-devel
  • 설치를 마친 후 java 버전을 확인해 본다.
# java -version

  1. 환경 변수를 설정해준다.
  • javac의 위치를 확인한 후 원본 파일의 위치를 추출한다.

  • /etc/profile파일에 export 구문을 추가해준다.
    이 때 위에서 추출한 원본 파일의 위치를 bin 전까지 넣어준다.
# vi /etc/profile
export JAVA_HOME=//usr/lib/jvm/java-1.8.0-openjdk-1.8.0.161-0.b14.el7_4.x86_64
- 수정한 내용을 적용해 준다.
# source /etc/profile

  • 잘 적용되었는지 확인해 준 후 이를 이용해 javac 버전을 확인해 준다.
  • *javac 경로 : $JAVA_HOME/bin/javac

- Tomcat 설치

  1. yum을 사용해 톰캣을 설치해준다.
# yum install -y tomcat*
  • *Tomcat 경로 : /usr/share/tomcat

  1. 방화벽을 설정해준다.
# firewall-cmd --permanent --add-port=8080/tcp 
# firewall-cmd --reload

  1. 서비스를 활성화하고 시작해준다.
# systemctl enable tomcat
# systemctl start tomcat

  1. 웹 브라우저를 통해 접속을 확인해 준다.
  • ip address 확인하는 법
# ip address

Apache – Tomcat 로드밸런싱

Apache용 VM 1대, Tomcat용 VM 2대를 이용해 로드 밸런싱을 설정해주었다.

  1. mod_jk 설치
    아파치와 톰캣을 연동하기 위해 mod_jk를 설치해주어야 한다.
    mod_jk를 설치하기 위해 3가지 패키지를 설치해준다.
# yum install gcc gcc-c++ httpd-devel
  • https://tomcat.apache.org/download-connectors.cgi
    위의 사이트에서 Tomcat Connector를 다운 받는다.(tar.gz 파일)다운로드 방법
    1) 다운로드 링크를 복사해 리눅스에서 다운 받기
    # wget -c 링크 주소
    2) ftp 소프트웨어를 통해 다운 받기
    나는 filezila를 사용해 다운 받아주었다.

  • 다운 받은 파일의 압축을 풀어준다.
# tar zxvf tomcat-connector*

  • 해당 디렉토리로 이동한다.
# cd tomcat-connector*/native/

  • 다음 명령어를 실행해준다.
# ./configure --with-apxs=/usr/bin/apxs
# make
# make install

  • Selinux를 해제 해준다.
# chcon -u system_u -r object_r -t httpd_modules_t /etc/httpd/modules/mod_jk.so
# setenforce 0
# vi /etc/sysconfig/selinux
SELINUX=disabled

  1. Apache 설정
  • 해당 파일을 생성해 다음 그림과 같이 입력한다.
  • worker.list의 loadbalancer와 tomca1, tomcat2는 원하는 이름으로 지정해주면 된다.
  • worker.tomcat1.host와 worker.tomcat2.host는 각각 VM의 ip 주소를 입력해주어야 한다.
  • port number는 각각 다르게 원하는 대로 지정해준다.
# vi /etc/httpd/conf/workers.properties

  • 해당 파일을 다음 그림처럼 수정해준다.
# vi /etc/httpd/conf/httpd.conf
  • /를 누르고 jk_module을 검색하면 해당 위치를 쉽게 찾을 수 있다.
  • JKMount /* loadbalancer에서 loadbalancer는 위의 workers.properties에서 지정해준 list 명으로 써줘야 한다!!

  • 아파치 서버를 재 실행시켜준다.
# system restart httpd

3. Tomcat 설정 - 모든 과정을 Tomcat용 VM 각각에 해준다.(즉, 총 2 번 해준 것)
# vi /usr/share/tomcat/conf/server.xml
  • 해당 경로의 파일을 그림처럼 수정해준다.
  • 이 때 port number는 Apache에서 지정해준 것과 동일하게 해준다.


  • 방화벽을 설정해준다.
  • 여기서도 port number는 동일하게 해준다.
# firewall-cmd --permanent --add-port=8090/tcp 
# firewall-cmd --reload

  • 서비스를 활성화하고 시작한다.
# systemctl enable tomcat
# systemctl start tomcat

  1. Test
  • Tomcat용 VM에 이름이 동일하고 실행 결과가 다른 html 파일 2개를 다음 경로에 만든다.
    경로 : /usr/share/tomcat/webapps/ROOT
  • 이제 web server(Apache)의 ip주소/해당 html 파일명으로 접속하면 로드밸런싱 결과를 확인할 수 있다. 새로고침 시 두 was 서버(Tomcat)가 번갈아 가며 실행된다.

오류 발생 여부 확인하는 법

  • 다음 명령어를 통해 네트워크 상태를 확인한다.
  • 두 was가 연결되었음을 확인할 수 있다.
# netstat -an|more
  • /etc/httpd/conf/httpd.conf 파일을 확인해보면 JKLogFile logs/mod_jk.log를 통해 해당 경로에서 log를 확인할 수 있음을 알 수 있다.
  • 로그를 통해 어느 부분에서 오류가 발생했는지 파악해 해결할 수 있다.
# cat mod_jk.log
728x90