다중서버 환경에서 발생한 문제 배경
필자는 현재 다니고 있는 회사에서 클라우드 이관 작업을 PM 직무로써 경험했다. 그 과정에서 배운 것들을 기록하고자 한다. 클라이언트의 웹서비스 환경은 물리 서버 한대에 ' Web + DB + 저장장치'가 모두 구성된 웹호스팅 환경에서 로드밸런스, Web서버 두대, DB 서버를 각각 분리하여 클라우드 환경으로 이관했다.
클라우드 환경 이관 시 견적을 받아야 하는데, 서비스 사용 목적, 동시접속자 수, 회원 수, 서비스의 범위등 '트래픽'에 따라 구성되는 환경이 제 각각이다. 필자가 작성해 놓은 견적 요청 시 필요한 정보를 아래 링크로 공유한다.
[PM/infra] PM이 클라우드 견적을 요청하려고 할 때 알아두어야 할 것 (호스팅, 서버와 클라우드의
호스팅이란? 인터넷상에서 서비스를 운영하는데 필요한 서버 공간을 전체 또는 일부를 임대해 주는 서비스이다. - 호스팅의 종류 웹호스팅 클라우드 서버호스팅 - 웹호스팅? 서버? 클라우드? 세
youngplan.tistory.com
발생한 문제에 대한 기록
(1) 서버 이중화 환경에 따른 소스코드 동기화 문제
로드밸런서의 역할은 '접속하는 웹서버의 종류, 순서와 관계없이 동일한 서비스의 화면과 기능을 표출함으로써 부하를 줄여주는 것'이다.
첫 번째 : 두 서버의 Directory 파일명 불일치
서버 이중화 환경에서 마주했던 첫 번째 문제는 '두 웹서버의 Directory명이 일치하지 않는다.'였다.
web01, web02 서버의 배포 위치와 Directory명을 도메인 URL로 설정해두었는데, 뒤에 붙는 co.kr을 or.kr로 동일하게 수정해 줌으로써 첫 번째 문제를 해결했다.
사용자 화면에서 F5를 눌러 새로고침 하는 경우마다
Error화면과 정상 운영 상태가 반복된다.
두 번째 : 두 서버에 배포된 소스코드 불일치(정합성 문제)
두 번째 문제는 'web01, web02 서버에 소스코드가 동일하지 않다고 합니다.'였다.
이번 문제는 한쪽에 장애가 발생하지 않는 이상 소스코드가 다르게 올라간 상태로 동시에 운영하게 되는 문제이다.
예를 들어, web01번 서버로 트래픽이 인입될 경우 사용자들은 web01번 소스로 올라간 웹페이지를 보게 될 것이고, web02번 서버로 인입될 경우 마찬가지로 web02번 소스로 올라간 웹페이지를 보게 된다.
사용자들이 접근하는 페이지에 따라서
반영/ 수정된 기능과 화면이 다르게 보이는 채로 운영된다.
= 소스 배포 시 동기화가 필수적이다.
세 번째 : 서버의 장애 발생시 생기는 현상
세 번째 경우, 한쪽의 장애 발생으로 인해 웹페이지를 띄우지 못하는 경우, 정상 작동하는 쪽으로만 서비스가 운영된다. 장애는 '아파치 서버 or 웹서버 or DB 서버'가 죽는 현상으로 설명할 수 있다.
(2) 서버 이중화 환경에 따른 세션 공유 문제
세션의 정의
✔ 세션(Session)이란?
사용자 로그인 정보 등 사용자에 대한 정보를 일정 기간 동안에 서버에 기록하고 보관함으로써 사용자를 관리하기 위한 목적으로 사용되는 서버의 저장공간이다.
쿠키와 세션의 차이점
쿠키 : 클라이언트의 컴퓨터에 모든 데이터를 저장한다.
세션 : 서비스가 돌아가는 서버에 데이터를 저장하고, 세션의 키값만을 클라이언트에 남겨둔다.
배경은 이러했다..
(1) 문제와 마찬가지로, 관리자 웹페이지에서 로그인 상태로 사이트를 운영하고 있었는데, 갑자기 '로그인 후에 이용 가능합니다.'라는 문구와 함께 로그인 페이지로 이동하는 문제를 겪게 되었다. 이는 사용자의 로그인 정보(세션, session)를 서버에 저장하는데, 서버에 저장된 세션정보가 자체적으로 공유되지 않아 생기는 문제였다.
어떻게 해결했나요?
개발언어가 PHP이기에, 우리가 고를 수 있는 해결방안의 선택지는 아래의 2가지 방법뿐이었다.
1 - 네이버클라우드 로드밸런서에 Sticky session을 설정한다. (클라우드 단의 해결법)
Sticky session 설정은 MSP 업체에서 진행해 주셨고 아래 설명은 네이버클라우드 스티키 세션 설정 가이드를 활용하였다.
수동으로 설정을 원한다고 하면 Target Group 생성 → Target Group 설정에서 ' Sticky Session' 체크 → 수정완료로 처리할 수 있다.
Stiky Session 진행방식
Sticky Session이란 쉽게 설명해 고정된 세션을 의미한다.
예를 들어, User1이 Web01 server에서 로그인을 시도하여 세션을 생성했다면, 이후에 User1이 보내는 모든 요청은 web01 서버로만 보내지게 된다. 로드밸런서가 web01 서버로 모든 요청을 리다이렉트 하여 고정된 세션만 사용하도록 하는 방식이다.
장점 : 동일한 사용자가 고정된 서버에 요청을 보낼 수 있게 됨으로써 데이터 정합성 이슈가 없다.
단점 : 특정 서버에 트래픽이 집중될 경우 다른 서버를 사용할 수 없으며, 장애 발생 시 세션정보를 모두 잃는다.
* 데이터 정합성 : 데이터가 서로 모순 없이 일관되게 일치함
2 - 사용자 로그인 여부를 DB로 저장하여 동기화 처리한다. (개발 단의 해결법)
사용자 로그인 DB 저장, 동기화 진행방식
해당 방식은 개발단에서 사용자의 로그인 정보 혹은 세션 값을 DB에 저장하여, 동일한 사용자가 로그인하는 경우 값을 동기화 처리하여 세션을 유지시키는 방식이다. 특정 서버에만 트래픽이 몰리는 문제는 방지할 수 있지만, DB의 사용량이 많아지게 됨으로써 DB 트래픽 과부하 문제가 발생할 수 있다.
↓ 함께보면 좋은 인프라 관련 포스팅↓
[PM/infra] ip주소변경 방법과 공인 IP와 사설 IP의 차이점을 알아보자
이전 포스팅은 WWW.을 설정하는 방법과 도메인의 기본적인 지식에 대해 포스팅 해두었으므로 함께 보는것을 추천한다. 도메인이란? 가상공간에서 '인터넷상의 주소'로써, 숫자로 구성된 IP 주소
youngplan.tistory.com
[PM/infra] www. 설정은 어떻게 하나요? (도메인, 호스트네임, 서브도메인, www 설정, 네임서버, DNS)
오늘은 요 며칠간 나를 혼돈의 카오스로 만든 '도메인 및 DNS 네임서버'에 관하여 PM 및 기획자가 알아두면 좋은 도메인 관련 지식을 포스팅해보려고 한다. 시작은 이렇게 되었다. (Client) 도메인은
youngplan.tistory.com
[PM/infra] PM이 클라우드 계약시 알아두면 좋은 것( SSL과 HTTPS, IPS, WAF 등 보안서비스,MSP 개념)
이전 포스팅은 클라우드 견적 요청 시 알아두면 좋은 것들과 더불어 견적요청을 위한 것들을 작성해 보았다. 웹호스팅부터 클라우드, 서버의 기본개념과 차이점에 대해 포스팅해 두었기에, 아
youngplan.tistory.com
[PM/infra] PM이 클라우드 견적을 요청하려고 할 때 알아두어야 할 것 (호스팅, 서버와 클라우드의
호스팅이란? 인터넷상에서 서비스를 운영하는데 필요한 서버 공간을 전체 또는 일부를 임대해 주는 서비스이다. - 호스팅의 종류 웹호스팅 클라우드 서버호스팅 - 웹호스팅? 서버? 클라우드? 세
youngplan.tistory.com