SUBVERSION 설치 후 윈도우에서 배치프로그램 작성 작업을 진행하려 한다.

Svnserve명령어를 이용하여 SVN을 실행한다.

설명

svnserve -> svnserve를 실행한다.

-d -> 데몬으로

-r -> root

경로 -> 여기서부터 svnserve경로를 잡겠다는것

 

 

방화벽 허용을 해주면

 

실행전

netstat에서 현재 svn(포트3690)이 없는것을 확인할 수 있다.

실행 후

실행 전 과 후를 확인해보면 svn 포트(3690)가 열려있는 것을 확인 할 수 있다.

 

 

윈도우 시작시 데몬으로 자동등록 서비스 시작

 

SVN서버를 윈도우를 시작시 자동으로 서비스(OS)에 등록하려는 작업이다. 윈도우 서버 한정으로 서비스에 등록하는 과정을 적어보려 한다.

 

서비스 생성 명령어이다.

간단하게 설명하는 binpath에 있는 exe파일을 실행하고 svnrepository를 루트 디렉토리로 설정하는 Subversion Server라는 이름을 가진 서비스를 Tcpip 에서 실행을 시키겠다는 서비스다. 더 자세한건 제가 무지하니 다른분들이....

뙇 서비스를 등록하는데 성공하였다

시작-실행-서비스에 들어가보니 내가 만든 서비스가 자동으로 등록되어있다. 눌러서 재대로 등록이 되었는지 확인!

 

재부팅을 하고 netstat으로 해당 포트(SVN-3690)에 열렸는지 확인하니 LISTENING중으로 잘 뜬다!

이번에 프로젝트에서 버전관리 및 CI배포툴을 설치 할 일이 있어서 설치를 진행하면서 설치관련하여 간단하게 블로그에 적고자 한다. 현재 서버에 설치된 프로그램은

SVN(subversion) 1.8.17

Tortoise(svnclient) 1.8.12

Jenkins(CI)

Eclipse(IDE -SVN연동)

를 설치하였으며 설치관련 가이드 및 자동배포, 보안설정과 같은 기본적인 가이드도 함께 적고자 한다. 이글에서는 subversion(SVN서버) 를 설치하는 과정을 보여주려 한다.

 

https://sourceforge.net/projects/win32svn 에 접속한다.

드래그된 1.8.17 msi 확장자를 다운로드 받는다(윈도우 인스톨)

실행 후 하단의 방법으로 설치를 진행했다 ( 기본 설치로 진행)

 

 

 

 

 

svn서버를 설치 할 디렉토리를 선택한다

설치가 완료된 폴더의 상태

 

cmd 창에 svn을 입력해서 정상적으로 설치가 되었는지 확인해보자!

설치가 완료되었다. 다음글에서 svn 관련 설정작업을 진행하고자 한다.

요새 저축은행에서 2개월 짜리 솔루션 작업을  진행하고 있다.  크게 기존에 있던 시스템(우리회사 솔루션)에 화면 및 기능추가 작업과 수탁사 추가작업 진행의 건을 진행하고 있다. 현재 기능개발은 작업완료, 수탁사 추가작업은 운영에 반영하여 가오픈상태로 리얼서버에서 테스트를 진행중이다. 이번 프로젝트는 작은 프로젝트여서 메인 개발자로 다른분이랑 총 둘이서 진행하고 있다. 회사에서 어느정도 PM업무를 진행할 수 있는 권한을 줘서 고객 미팅이나 문서작업 및 코딩까지 실제로 프로젝트를 리딩하고 있다. 부담스럽지 않은  기간에서 고객(인프라, 현업)과 업무에 관하여 실질적으로 회의일정을 잡아 회의를 하고 WBS나 반영리스트 작성 및 시나리오 작성등을 통하여 작게나마 서류업무를 진행하는 점에 있어서 나에게는 좋은 프로젝트가 될 것 같다. 누군가에 밑에서 개발작업만 진행하다 직접 프로젝트를 리딩하는 부분에서 생기는 '기타'작업(타개발자에게 업무전달이나 일정산정, 보고와같은 비개발적인 시간소요작업)이 생각보다 많다는 걸 알게된 좋은 프로젝트 였다고 생각한다.

 업무관련하여 아직 배워야할 것들과 개발자로서의 기술적 향상을 위해 항상 공부하고 있지만 아직 많이 부족하다고 느껴진다. 이전에는 개발업무를 하며 항상 자신감(?)에 차있었다. 경력에 비해 잘한다고 느꼈었고 작고 큰 프로젝트를 진행하면서 개발관련하여 개발실력이 부족하다고 지적하는 사람이 없었으니까. 하지만 요새 다른사람들의 글이나 서적등을 보면서 한참 부족하다고 생각이드는게 큰 프로젝트에서 진행하면서 생기는 이슈들(분산처리, 서버구성 및 선택과 같은 하드웨어 적인문제부터 트래픽,동시성 처리같은 이슈들까지)을 처리하면서 생기는 경험같은거랄까... 경험이 아직 많이 부족한거같다. 그래도 요즘 개발자로서의 성장이 느껴지는게 예전에는 내가 무엇을 공부하고 어떤걸 진행해야될지를 알지 못했었다. 현재는 나에게 필요한 기술이 어떤것인지 인지하고있고 어느정도 방향성이 잡히고있다고 해야되나.... 기술적 커리어를 어느정도 방향을 잡고있는것 같다. 두번째로는 고객과 협업에서의 소통이 증가하고 있다고 생각한다. 예전에는 나만알아듣게 말했다고 보면 요즘에는 나와 협업하는 개발자가 어떤 작업을 어떻게 진행해야되는지 개발자가 이해할 수 있게설명을 할 수 있도록 노력하고 있으며 기술 및 업무 숙련도가 증가함으로 인하여 고객과의 소통에서도 어느정도 비개발자의 입장에서 이야기를 할 수 있게 된 것 같다.  

  이전에는 SI근무가 싫었는데 요새는 SI근무를 하며 장점도 어느정도 보이는것 같다. 빡빡한 업무일정과 야근은 정말 싫지만 서버구성 부터 개발,배포까지 어느정도 체계적고 큰 시스템안에서 업무를 진행할 수 있다는점이 정말 매력적이라고 생각한다.

끝~

 

'일상' 카테고리의 다른 글

유럽여행 with 프로그래밍 공부  (0) 2018.04.07
연말에 쓰는 근황  (0) 2017.12.29
한성 모니터 BOSSMONSTER NO.7 리뷰  (0) 2017.06.08
야근이 너무마놩...  (0) 2017.02.23
최근근황  (0) 2016.10.18

요즘 솔루션SI회사에서 일하면서 공부를 병행하고있다. 아무래도 금융관련 프로젝트밖에 없으니까 신기술보다는 좀더 lowLevel의 기술이 많이 눈에 들어오는편이다(실무에 적용하거나 관련이 있는공부를 많이하기때문) 요새 주로공부하는게 서버(하드웨어포함) / 네트워크 위주로 공부하다 보면서 검색하던 와중에 로드벨런서의 세션처리 관련하여 좋은 글을 가져와본다.

출처 : 네이버 D2

-----------------------------------------------------------------------------------

대용량 서비스를 운영하려면 부하 분산은 필수입니다. 대용량 트래픽을 장애 없이 처리하려면 여러 대의 서버에 적절히 트래픽을 분배해야 합니다. 기존에는 세션 서버를 위한 로드밸런서로 DNS와 L4를 이용했으나 여러 가지 제약이 있어 네이버의 요구 사항을 충족하는 로드밸런서를 직접 개발하게 되었습니다.

이 글에서는 로드밸런서 개발 동기와 아키텍처를 살펴보겠습니다.

기존 로드밸런서의 제약 사항

DNS(Domain Name System)

DNS는 도메인 이름을 IP 주소로 변환하는 기술이다. 하나의 도메인 이름을 라운드로빈(Round Robin) 방식으로 여러 개의 IP 주소로 변환한다면 이것만으로도 쉽게 부하 분산이 가능하다.

그러나 여기에는 두 가지 단점이 있다.

첫째, 대부분의 클라이언트에서는 DNS 서버의 부하를 줄이고 성능을 향상하기 위해 일정 시간 동안 캐싱하기 때문에 부하 분산이 균등하게 되지 않는다.

둘째, 특정 서버에 장애가 발생하더라도 장애 여부가 감지되지 않아 서비스에서 해당 서버를 제거할 수 없다. 이것을 보완하기 위해 health check로 장애를 감지하여 DNS 서버에서 제거할 수 있지만, 모든 DNS 서버에 적용되는 데에 상당히 시간이 소요될 뿐만 아니라 클라이언트의 캐싱 때문에 서비스에서 바로 제거되지는 않는다.

L4

L4는 IP 주소와 포트를 기반으로 로드밸런싱하는 고가의 하드웨어로, 웬만한 서비스에서는 이것만으로도 부하 분산을 처리하기에 충분하다.

여기에서 주의해야 할 점은 L4는 VIP(virtual IP) 단위로만 로드밸런싱하기 때문에 반드시 하나의 VIP에 연결된 서버의 수가 비슷해야 한다는 것이다. 만일 서버 중 몇 대에 문제가 생긴다면 동일한 VIP에 연결된 다른 서버 역시 연달아 부하가 발생하여 더욱 심각한 문제가 발생할 수 있다.

또한 L4의 스펙상 최대 세션 수는 존재하나 세션을 맺는 시나리오에 따라 최대 성능이 다르기 때문에 최대 세션 용량에 도달하지 않았음에도 추가로 세션을 연결할 수 없는 문제가 발생하기도 한다.

마지막으로 통신사 장애 등으로 세션이 비정상적으로 종료된 경우 세션 서버에서는 클라이언트와 세션이 종료되고 정상적으로 다시 연결되었지만, L4에서는 세션 종료처리가 제대로 되지 않아 두 개의 세션을 동시에 유지하고 있어 L4의 한계 용량을 초과한 적도 있다.

개발 요구 사항

그동안의 경험을 통해 장애 대응에 필요한 기능과 운영 중 개선이 필요하다고 느꼈던 사항을 정리하면 다음과 같다.

클라이언트 접속 제한

세션 서버에 장애가 발생하면, 클라이언트는 로드밸런서에 접속할 때 새로 정의된 프로토콜을 이용한다. 새로 정의된 프로토콜은 세션 서버와 통신을 제한하여 장애 대응 시간을 줄일 수 있다.

세션 서버가 비정상적인 상황에서 클라이언트가 지속적으로 접속을 시도한다면 통신사의 네트워크 용량을 초과하여 심각한 문제를 일으킬 수 있다. 기존에는 응답 시간을 최소화하기 위해서 세션 서버와 세션을 항상 유지하려고 최대한 노력했으나 망 부하라는 부작용이 발생했다. 그래서 현재는 로드밸런서와 통신이 되지 않으면 클라이언트 자체적으로 재접속 타이머가 동작하여 망 부하를 최소화하고 있다.

L4 증설 시점 예측

최대 세션 수를 예측할 수 있으며, 앞으로 사용자가 늘어날 것에 대비하여 사전에 세션 서버를 증설할 수 있어야 한다. L4는 일반적으로 세션 유지가 필요하지 않은 웹 서버나 세션 수가 적은 서버의 트래픽 분산에 주로 사용한다. 앞에서 설명한 것처럼 L4의 스펙상 최대 세션 수는 존재하지만, 세션을 맺는 시나리오에 따라 최대 성능이 다르기 때문에 정확한 성능을 알려면 직접 테스트해야 한다. 그러나 수천만 세션을 직접 테스트하기란 현실적으로 불가능하다. 그래서 실제로 문제가 발생하고 나서야 L4 최대 용량이 얼마인지 정확히 파악할 수 있다. 이런 이유로 서비스의 최대 세션 수를 예측할 수 있고 장애 발생 시 아는 범위 내에서 대처할 수 있는 로드밸런서를 개발하고 싶었다.

서버 단위 로드밸런스

특정 서버에 부하가 몰리는 것을 막기 위해서는 VIP 단위가 아닌 세션 서버 단위의 로드밸런싱 기능이 필요하다. 그러나 운영을 하다 보면 VIP당 서버 수를 항상 동일하게 유지하는 것이 쉽지 않다. 그래서 서버 단위로 로드밸런싱을 하려고 한다.

다양한 로드밸런싱 알고리즘

상황에 따라 적절한 로드밸런싱 알고리즘을 사용한다. 가장 간단한 방법으로는 가용한 모든 서버에 라운드로빈으로 로드밸런싱하는 것이다. 이런 경우 서버 재시작 등으로 인하여 세션 수의 불균형이 발생하면 다시 고르게 분배되는 데 상당한 시간이 소요된다. 그러나 Weight Least Connection 등의 알고리즘을 사용하여 세션 수가 적은 서버에 가중치를 두어 트래픽을 분산한다면 세션 수의 불균형이 발생하더라도 금방 고르게 세션이 분산되므로 세션 서버의 배포 등의 작업을 쉽게 할 수 있다.

그렇다고 해서 무조건 그 서버에 트래픽을 몰아주면 해당 서버의 순간 TPS(transaction per second)가 높아 그대로 장애로 직결될 수 있음을 기억해야 한다.

세션 서버 배포 시간 단축

불필요한 세션 서버를 서비스에서 빠르게 제거할 수 있어야 한다. DNS에서 VIP를 삭제하여도 클라이언트에서 VIP 주소를 캐싱하고 있다면 몇 달이 지나도록 서버에 트래픽이 계속해서 유입될 수 있다. 따라서 서비스에서 제거하려고 DNS에서 세션 서버를 제거해도 세션 서버의 세션이 모두 끊어지기 전까지는 서비스에서 제거할 수 없다. 이런 DNS를 사용하지 않고 직접 개발한 로드밸런서를 통해 세션 서버의 주소를 요청한다면 이 문제는 해결할 수 있다.

전체적인 구조도

로드밸런서를 구성하는 모듈의 역할은 다음과 같다. 다양한 분산 알고리즘을 가진 조회 서버(lookup server)와 세션 서버를 관리하는 서버 매니저(server manager)로 나눌 수 있다. 그리고 세션 서버의 목록을 저장하기 위해 ZooKeeper를 사용했고, 세션 수 등을 비롯한 세션 서버 정보를 저장하기 위해 다양한 컬렉션을 제공하는 Redis를 사용했다. 그리고 단말과 1:1 세션을 맺고 있는 세션 서버가 있다.

각 모듈의 기능에 대해 좀 더 알아보면 다음과 같다.

loadbalancer1

그림 1 서버 구조도

클라이언트

클라이언트는 세션 서버 주소를 얻기 위해 조회 서버에 접속하여, 접속 가능한 세션 서버의 주소를 가져온다. 세션 서버의 주소를 정상적으로 수신하면 해당 세션 서버로 연결을 요청한다. 이 때 발생할 수 있는 상황은 크게 세 가지가 있다.

첫째, 모든 세션 서버의 장애로 정상적으로 동작하는 세션 서버가 없다면 조회 서버는 세션 서버가 없다는 메시지와 함께 일정 시간 후 다시 접속하라고 응답한다. 이런 경우 백오프 타임 후에 재접속을 시도한다.

둘째, 단말의 네트워크가 비정상이거나 통신사의 장애로 네트워크가 정상적으로 동작하지 않아 조회 서버와 통신하는 것조차 불가능하다면 클라이언트는 자체적으로 타이머를 두어 네트워크 부하를 최소화한다. 이런 경우 응답 시간 최소화보다는 네트워크 망 부하 최소화를 위해서 모든 클라이언트들의 타이머 값이 서로 다르도록 백오프 알고리즘을 통해 타이머 값을 설정한다.

백오프 알고리즘은 GCM(Google Cloud Messaging for Android)에서 사용되고 있는 알고리즘을 참고했다. 기준이 되는 백오프 타임이 있고 이는 최대 백오프 타임(MAX_BACKOFF_MS)을 초과하기 전까지는 두 배씩 증가한다. 실제 클라이언트에서 조회 서버에 접속하기 위해 재시도할 때마다 적용되는 백오프 타임은 기준이 되는 백오프 타임에 일정 수식을 사용하여 구한다.

Random sRandom = new Random();


int backoffTimeMs = getBackoff();  
int nextAttempt = backoffTimeMs / 2 + sRandom.nextInt(backoffTimeMs);


setAlarmManager(nextAttempt); // 실제 적용된 백오프 타임


if (backoffTimeMs < MAX_BACKOFF_MS) {  
    setBackoff(backoffTimeMs * 2); // 다음 백오프 타임을 구하기 위한 currentBackoffTime set
}

셋째, 정상적으로 세션 서버의 주소를 수신하여 세션 서버에 접속을 시도하더라도 접속이 원활하지 않을 수 있다. 이런 경우 일정 횟수 이상 재접속을 시도해도 세션 서버와 접속이 되지 않으면 해당 세션 서버에 장애가 발생했다고 판단한다.

이런 비정상적인 경우 처음부터 로직을 다시 수행해야 하므로 비용이 많이 든다. 이런 비용을 줄이기 위해서 조회 서버로부터 두 개의 세션 서버 주소를 받고 첫 번째 세션 서버에 접속되지 않는다면 두 번째 세션 서버 주소(Alternative IP)에 접속을 시도하여 비용을 최소화한다.

세션 서버

세션 서버에 추가된 기능은 주기적으로 세션 수를 서버 매니저에게 알려주는 기능과 서버 매니저의 L7 health check 요청에 응답하는 기능이다.

서버 매니저로부터 주기적으로 유입되는 health check 요청을 적절히 처리하여 세션 서버의 정상 동작 여부를 알려준다. 서버 매니저는 일정 시간 동안 health check에 실패하면 해당 세션 서버를 서버 목록에서 제거하기 때문에 자신의 상태를 정확히 전달해야 한다. 응답할 때 자신의 현재 세션 수를 서버 매니저에게 알려준다.

조회 서버

DNS 역할을 하는 Lookup 프로토콜 제공

클라이언트가 요청할 때 어떤 세션 서버에 접속해야 하는지 알려 주는 기능을 제공하며, 세션 서버의 배포 등으로 인하여 서버 목록이 변경된 경우 서버 매니저로부터 새로운 서버 목록을 수신하여 업데이트한다.

분배 알고리즘 변경

서버 매니저를 통해서 운영 중에 부하 분산 알고리즘을 변경할 수 있으며, 라운드로빈이나 세션 수를 고려한 Weight Least Connection 등 다양한 부하 분산 알고리즘을 사용할 수 있다. 현재 기본으로 사용하고 있는 Weight Least Connection 알고리즘은 세션 서버의 세션 수를 고려하여 세션 수가 적은 서버에 부하 분산 시 우선순위를 준다.

복수 지역(multi region) 지원

클라이언트가 보낸 MCC(mobile country code, 모바일 국가 코드)를 기반으로 지역을 선택하여 어떤 세션 서버에 접속해야 하는지 알려 준다. MCC와 지역 매핑 정보는 서버 매니저를 통해서 운영 중 동적으로 변경할 수 있다.

높은 TPS

서비스별로 수천만 명의 사용자가 Lookup 프로토콜을 요청하기 때문에 기존 L4만큼의 높은 처리량이 요구된다. Java 비동기-네트워크 프레임워크인 Netty를 이용하여 구현했으며, Lookup 인스턴스당 약 20,000TPS 이상의 트래픽을 처리할 수 있다.

암호화

클라이언트와 주고받는 모든 패킷은 암호화해서 보안을 강화했다.

서버 매니저

복수 서비스, 복수 지역 지원

한 세트의 서버 매니저는 여러 개의 서비스를, 그리고 각 서비스는 여러 지역을 지원한다. 예를 들면 LINE이라는 서비스와 그 아래의 Korea, China 등 다양한 지역을 지원한다. 지역별로 다른 세션 서버 그룹을 구성한 경우도 지원하고, 굳이 지역을 구분할 필요 없는 서비스는 Common으로 정의된 공통 세션 서버 그룹으로 처리한다.

만약 특정 지역의 모든 서버에 장애가 발생하면 다른 지역의 서버 그룹에서 해당 지역을 처리할 수 있도록 지역 페일오버(failover)도 가능하다.

서비스별 알고리즘 적용 가능

서비스별로 다른 분배 알고리즘을 적용할 수 있다. ZooKeeper는 서비스별로 분배 알고리즘을 관리한다. 알고리즘이 변경되면 조회 서버로 변경된 알고리즘을 전달한다.

세션 서버 정보 관리

서버 매니저(master)에서 주기적으로 세션 서버에 세션 수를 요청한다. 응답받은 세션 수를 Redis에 저장하고, 서버 매니저(slave)들은 Redis를 주기적으로 가져가 데이터를 동기화한다. 모든 서버 매니저는 세션 서버 정보를 가지고 있으며, 조회 서버가 서버 정보를 요청하면 자신의 데이터를 기반으로 서버 정보를 전달한다.

주기적인 health check

서버 매니저(master)는 운영 중인 모든 세션 서버에 주기적으로 health check 요청을 보낸다. 일정 횟수 이상 health check에 실패하면 ZooKeeper에 저장된 해당 서버의 상태를 suspended로 변경하고, 조회 서버에게 해당 서버를 서비스에서 제거하라고 알린다.

ZooKeeper에 저장하는 세션 서버의 상태는 다음과 같다.

loadbalancer2

그림 2 세션 서버 상태도

  • shutdown: 세션 서버의 인스턴스가 종료된 상태 또는 정상적으로 서비스할 수 없는 상태
  • starting: 세션 서버를 시작하고 있는 상태
  • standby: 세션 서버가 정상적인 상태이나 아직 서비스에 투입 전이라 클라이언트의 접속이 없는 상태
  • running: 세션 서버가 정상적이고 서비스에 투입하여 정상적으로 운영 중인 상태
  • suspending: 세션 서버가 오동작하여 서비스에서 제거하고 있는 상태
  • suspended: 세션 서버가 오동작하여 잠시 서비스에 투입하지 않은 상태
  • resuming: 세션 서버가 정상적이어서 다시 서비스에 투입하고 있는 상태
  • shuttingdown: 세션 서버가 종료하고 있는 상태

위의 여러 가지 상태 중 조회 서버에게 세션 서버가 서비스 중이라고 알려 주는 상태는 running 상태이고, 그 외의 상태는 모두 서비스에 아직 투입 전이라고 알려 준다. 현재 모든 상태가 구현되지는 않았다. 운영에 무리가 없는 상태까지 구현해서 오픈하고, 추후 확장 가능성을 열어 놓은 상태이다.

HA 구성

서버 매니저는 최소 두 대 이상(한 대의 master와 한 대 이상의 slave)으로 구성된다. master의 역할은 세션 서버의 health check와 ZooKeeper에 세션 서버의 상태 업데이트이다. 그리고 지역이나 세션 서버의 목록이 변경되면 조회 서버에게 알려 주는 역할을 한다.

slave의 역할은 ZooKeeper와 Redis의 데이터를 지속적으로 동기화하여, 조회 서버의 지속적인 요청에 응답하는 것이다.

장애 대응 시나리오

로드밸런서를 개발하게 된 가장 큰 동기는 장애에 유연하게 대응하는 로드밸런서의 필요성이었다. 통신사에 일시적으로 장애가 발생하여 수천만 사용자의 세션이 끊어지면 장애 시간 동안 단말이 지속적으로 재접속을 요청하여 트래픽이 평소 대비 100배 이상 급증하고 그로 인해 망 용량 초과가 발생한다. 그리고 장애에서 복구 완료 후에는 단말이 일시적으로 접속을 요청하여 서버 용량 초과가 발생한다. 이와 같은 장애가 발생했을 때 이를 처리할 수 있는 로드밸런서 개발이 목표였다.

구조를 설계할 때 일부 모듈의 장애가 전체 장애로 이어지지 않게 하기 위해 최대한 노력했고, 통신사 장애 및 IDC 등의 장애가 발생해도 망 부하를 최소화하고 더 쉽게 장애에 대응할 수 있게 설계했다. 각 모듈에 장애가 발생했을 때 어떻게 처리하는지 알아보자.

loadbalancer3

그림 3 장애 대응 시나리오

1. 세션 서버 장애 시

세션 서버의 장애는 주기적으로 health check를 하는 서버 매니저가 가장 먼저 감지한다. health check에 실패하면 서버 매니저는 변경된 세션 서버 목록을 조회 서버에 다시 전달한다. 조회 서버는 새로 받은 서버 목록으로 로드밸런싱한다.

클라이언트는 연결되어 있던 세션 서버와의 세션이 끊어지면 두 번째 세션 서버(alternative IP)에 접속을 요청한다. 두 번째 세션 서버도 접속되지 않으면 조회 서버에 새로운 세션 서버의 주소를 요청한다.

모든 세션 서버의 장애로 정상적으로 동작하는 세션 서버가 하나도 없다면 조회 서버는 세션 서버가 없다는 메시지와 함께 일정 시간 후 다시 접속하라고 응답한다. 이런 경우 백오프 타임 후에 조회 서버에 재접속을 시도한다.

2. 조회 서버 장애 시

조회 서버 중 일부에 장애가 발생해도 총 조회 서버의 서버 용량이 초과하지 않는 한 정상으로 동작한다.

조회 서버 전체에 장애가 발생하면 클라이언트는 백오프 타임 후에 재접속을 시도한다. 실제로 약 100만 개의 실제 세션으로 테스트를 진행해 보았는데, 조회 서버가 평소에 요청받는 만큼의 세션이 세션 서버에서 감소하고, 조회 서버 복구 직후에는 클라이언트가 백오프 주기에 따라 동작하며 일시적으로 요청량이 증가한다. 테스트 결과 10분 정도의 전체 장애가 발생했을 때 20분 이내에 모든 세션이 복구 완료된다.

3. 서버 매니저 장애 시

서버 매니저(master)에 장애가 발생하면 slave 중 하나가 master로 전환된다. 서버 매니저(master)가 ZooKeeper에 특정 znode를 ephemeral node로 생성하고, slave는 그 znode를 지속적으로 모니터링한다. 해당 znode가 사라지면 서버 매니저(master)가 비정상이라고 판단하여, slave 중 하나가 master로 전환하는 형태로 구현했다.

서버 매니저 전체에 장애가 발생하면 조회 서버는 실시간 세션 서버의 세션 수를 알 수가 없다. 이런 경우 조회 서버는 일시적으로 분배 알고리즘을 라운드로빈으로 동작한다. 서버 매니저 장애가 해결되면 다시 Weight Least Connection으로 동작한다.

마치며

지금까지 DNS와 L4라는 부하 분산 기술을 소개하고, 세션 서버를 위한 로드밸런서를 개발하게 된 배경, 전체적인 구성도, 그리고 모듈별 기능과 장애 시 대응 시나리오를 소개했다. 어느 정도 성능이 필요한 데이터 저장소는 지난 2년 동안 운영하며 장애를 일으키지 않은 Redis를, 서버 정보 관리 등의 분산 데이터 동기화가 필요한 부분에는 ZooKeeper를 사용하고, 단말의 높은 트래픽을 처리하기 위해서는 Netty를 사용했다. 추후 개발이나 아키텍처 구성 시 이러한 기술이 도움이 되길 바란다.

'기타' 카테고리의 다른 글

[분노] 방통대 소프트웨어공학 과제물  (17) 2018.04.09
[스크랩] 2015 프로그래밍 언어 동향  (1) 2016.02.01
년초 작성된 DB정리  (0) 2015.11.27
뜬금 PHP 프로젝트 ...  (0) 2015.10.23
git 설치 방법  (0) 2015.10.23

이번에 월급받은 돈으로 모니터를 구매하려다 지른 모니터!!

QHD 32인치 모니터를 구매하고 싶었으나 다른 모니터사는 너무 비싸서고민하던찰나

한성에서 이번에 QHD모니터 신제품을 출시한다하여 인터넷에서 제품을 구경하였다.

무려 144HZ에 커브드!! 오버워치 완전잘될것 같아 바로 주~~~문

 

이하후기

 

어제 한성에서 구매한 모니터가 도착하였다.

일주일이나 기다려서 받아 감격 ㅠㅠ 관련해서 리뷰를 작성!!

배송이 오래걸린다 하여 직접 택배수령처에 방문에서 택시타고 가져오게 되었다...

여튼 받자마자 엄청 큰 크기의 박스에 충격!!

이렇게 장패드랑 같이 배송해주었다.

 

사진보다 훨씬 큰 실물에 감동 ㅠㅠ 거의 TV만하다고 봐도 될거같다... 이렇게 모니터를 마지막으로 PC관련 제품 풀세트 구매를 완료하였다ㅠㅠ!

기존에 있던 모니터와 비교 우측에 있는 모니터는 24인치 모니터인데 크기가 압도적으로 차이난다....

 

사진이 좀 깨져서 나오지만 완전 선명하게 잘나온다 ㅠㅠ 완전마음에듬

 

한성 모니터 BOSSMONSTER NO.7를 구매를 추천합니다!!

#144Hz모니터 #QHD모니터 #no.7 #게이밍모니터 #커브드모니터


 

'일상' 카테고리의 다른 글

연말에 쓰는 근황  (0) 2017.12.29
개발 막바지 잡생각  (0) 2017.07.25
야근이 너무마놩...  (0) 2017.02.23
최근근황  (0) 2016.10.18
리뷰] Martin Fowler - Refactoring  (0) 2016.08.18

요즘 급한 프로젝트가 있어 지원나왔는데 프로젝트 마감기간이라 야근이 너무많다. 애초에 기간산정 자체가 야근을 할 수 밖에 없는 기간이라 계속 하기는 한다만... SI에서 일하는 자에게 야근이란 불가피한가뷰다... 최근에 매일 밤에와버려서 뭘 하기에는 시간이 너무 적다. 책도 많이 읽어보고싶고 새로운 것들도 공부하고 싶은데ㅠㅠ 그래도 이번 프로젝트에서 많이 느낀점은 이전보다는 기능구현하는데 할애하는 시간이 많이 줄었다는것과 디버깅속도 및 타인이 만든 소스들을 빠르게 파악하는 시간이 많니 짧아졌다. 가장 좋아진건 테스트를 중간에 넣어가면서 작업을 한다는 것이다. 이제는 기본오브기본 레벨에서의 코딩작업은 어느정도 되는것 같아서 기분이좋았다. 두번째는 보안관련 작업(취약점분석 및 웹표준작업)을 하면서 보안관련해서 조금 레벨업한거같다. 암호화 부터해서 인젝션, xss, 세션하이재킹 등 악의적 공격작업에 대한 이해와 그에 따른 수정작업, 웹표준 준수한 코딩작업을 진행함에따라 그에관한 실력들이 조금씩 늘고있어서 좋다. 확실히 기본기가 있어지면서 이해도가 높아짐에따라 작업을 하며 왜 이러한 작업이 필요한지, 어떻게 진행을 해야 하는지를 알고 할 수 있는거 자체가 나에게는 큰 수확인거 같다. 아직 많이 부족하지만 점점 나아가는 자신이 뿌듯하다

'일상' 카테고리의 다른 글

개발 막바지 잡생각  (0) 2017.07.25
한성 모니터 BOSSMONSTER NO.7 리뷰  (0) 2017.06.08
최근근황  (0) 2016.10.18
리뷰] Martin Fowler - Refactoring  (0) 2016.08.18
포트폴리오 제작시작!  (0) 2016.07.13

요즘 며칠간 워드프레스를 이용해서 사이트를 제작중에 있다.

로컬에서 APMSETUP을 이용하여 설치된 워드프레스를 워드프레스 Duplicator라는 플러그인을 이용하여 카페24 (www.cafe24.com)호스팅 서버로 이전하는 방법을 쓰려고한다. 해당 플러그인을 쓰면 관련 도메인 및 프로젝트 세팅들을 변경할 필요가 없을 뿐 아니라 DB(!!)도 자동으로 포팅되니 간단하게 이전을 하시고자 하는 분들을 위해 작성한다.

현재 설정정보 및 cafe24설정은 다음과 같다

로컬서버 ( APMSETUP7 )

php5

Mysql5

Apache


카페24 (서버환경 선택)

PHP 5.5  

Mysql 5.x 

UTF-8  

워드프레스 자동설치


* 해당 플러그인을 가이드 기준으로 설치시 기존에 있던 데이터베이스를 지운 후 이전에 있던 데이터베이스를 덮어쓰니 데이터베이스를 백업하시길 바람.


일단 현재 로컬에 있는 워드프레스 관리자 페이지로 로그인하여 Duplicator 플러그인을 검색 후 설치한다. 첫번째 있는 플러그인을 설치.


지금은 설치되있지만 하단 버튼에 설치하기를 누르면 된다.


설치 후 플러그인에 패키지창을 들어간 후 화살표방향에 있는 Create New를 눌러 새로운 패키지를 생성한다. 

접속하면 requireMents(현재 사진에 짤렸다...)에 Fail 또는 Pass가 입력될 것이다. 작성자는 Php/Zip Archive Enabled가 Fail이 나와서 관련 파일(php.ini)를 수정해주었다. 해당 이슈는 http://www.smallbizgeek.co.uk/wordpress-duplicator-ziparchive-failure-solution/ 를 확인하면 자세하게 나와있다.

사이트 스캔중....

스캔이 완료되었다 체크표시 후 화살표에 있는 빌드를 클릭하자 클릭시에 Warn이 있으면 경고창이 뜨지만 클릭클릭

빌드중

빌드가 완료되었다. 빌드가 완료되면 왼쪽( 인스톨러.php)과 오른쪽에있는 패키지를 다운 받은 후에 FTP로 자신이 마이그레이션 할 프로젝트 디렉토리에 이동시킨다. 이 글에서는 FTP사용 방법은 길어져서 적지 않겠다.

해당 도메인 프로젝트 디렉토리에 있는 installer.php를 실행한다. (글쓴이는 cafe24도메인/wp 안에 installer.php와 패키지를 넣어놓고 실행하였다.) 실행 후에는 하단에 그림처럼 작업하면된다. action <-2번째 버튼(해당 DB에 접속 후 DB데이터를 삭제)하니 혹시나 걱정되시면 마이그레이션 할 프로젝트에 있는 db를 백업 후 작업하자. 데이터를 입력 후 테스트 커넥션을 실행해보자. id/pw는

요기서

phpadmin접속하는 id/pw다.

정상적으로 입력 하였다면 하단 그림처럼 host 및 database에 success 가 뜰것이다. 성공하였으면 하단에 체크표시 및 Run Deployment 클릭

디플로이 중중중

다른건 다 셋팅되있을테니 타이틀만 입력 후에 업데이트!

업데이트가 완료되면 기존에 있던 데이터베이스 및 패키지는 삭제되고 새로운 패키지와 데이터베이스로 변경된다. 테스트 사이트를 클릭 후 접속하면

짜잔 기존에있던 프로젝트 접속창이 뜬다. 관리자 로그인은 기존에 있던 프로젝트 기준으로 로그인하면 된다.


워드프레스를 쓰면 쓸수록 방대한 테마, 플러그인을 보며 놀란다. 어쩜 이렇게 필요한 플러그인들이 많은지 ㅋㅋㅋ...... 이 블로그를 보고 간단하게 서버이전을 하시길 바란다.






'워드프레스' 카테고리의 다른 글

Wordpress KBOARD 테이블에 필드 추가하기  (0) 2016.01.14

3주정도 진행했던 프로젝트가 끝나간다.

인증서 설치작업 및 암복호화작업, 추가신원 인증작업 등을 주로 진행하였다.

이번 프로젝트를 하면서 느낀점은 확실히 개발과 업무이해는 다른영역이라는 것을 다시한번 느꼈다. 이전 프로젝트들을 진행하면서도 많이 이해했다고 느꼈지만 새로운 업무영역에서 작업하다보니 공수시간이 많이 들어간거같다.

그래도 개발적인 부분에서 보면 조금은 늘은거같기도하다. 휴직중에 공부했던것들, 그리고 이전에 해왔었던것들이 도움이 많이 되었다. 후회되는건 9월부터 시작했던 미티어스터디 프로젝트를 그만둬야했던것ㅜㅜ.. 시간이 촉박하여 어쩔수가 없었다. 이번에 프로젝트가 끝나면 선릉으로 넘어가는데 시간적 여유가 좀있을거 같은데 스터디를 다시한번 진행할지, 아니면 서적위주의 공부를 진행할지 고민이다. 확실히 어느정도 개발에 부스팅이 붙다보니까 서적으로 공부하는것이 어느정도 도움이되고 이해가되는편이기는한데.... 집중력이 부족해서 오래잡질 못하겠다 ㅠㅠ...

아직 많이 부족하지만 노력하는 사람이 될 수 있도록 해야지

'일상' 카테고리의 다른 글

한성 모니터 BOSSMONSTER NO.7 리뷰  (0) 2017.06.08
야근이 너무마놩...  (0) 2017.02.23
리뷰] Martin Fowler - Refactoring  (0) 2016.08.18
포트폴리오 제작시작!  (0) 2016.07.13
개발공부 진행상황  (0) 2016.06.21

간단한 설정작업이지만 웹스톰을 처음 사용해봐서 10분정도 해메다가 찾았다.

webstorm -> file -> settings -> tools -> terminal -> shell path-> 깃설치경로(일반적으로는 c:/program file/git) /bin/sh.exe 

미티어 기반 프로젝트하다가 터미널 일일히 옆에다키고 실시간으로 확인하기 귀찮았는데 웹스톰에서 터미널 작업을 기본으로 지원해주니 참 편하다. IDE툴을 무작정 쓸게아니라 앞으로는 기능들을 찾아보고 편한 기능들이 있으면 자주자주 써야겠다. 

 아참 웹스톰에서 터미널 기본 단축기는 alt + f12 이다. 별거아닌 포스팅이지만 많은 사람이 알았으면 좋겠다.

'Tool' 카테고리의 다른 글

SVN-이클립스(IDE) 연동  (0) 2017.07.31
tortoise 저장소 설치 및 서버,계정 설정  (0) 2017.07.31
tortoise svn 설치  (0) 2017.07.31
SUBVERSION (SVN) 자동시작 (batch) 설정  (0) 2017.07.31
Subversion 1.8.17 설치  (0) 2017.07.31

현재 취업준비중에있어 이력서와 포트폴리오를 가다듬어야 되는데 엄한 책만 구매해서 읽고있다 ㅋㅋ.... 최근 읽은 서적중에 괜찮은 서적이있어 글을쓴다.


리팩토링
저자 마틴 파울러|역자 김지원|한빛미디어 |2012.11.09
원제Refactoring : improving the design of existing code




리팩토링 코드 품질을 개선하는 객체지향 사고법






서적을 자주 읽으시는 분들은 많이들 아시는 책이겠지만 마틴파울러의 리팩토링이라는책이다. 사실 말만 많이들었었고 최근에되서야 도서관에서 대여했다. 최근 개발서적을 8권정도 ( 1~2달정도 서적위주의 공부를 많이했다) 대여했었는데 사실 정독으로 완주한책을 2권정도 밖에안되고 나머지는 나에게 중요하지않아서, 책이별로라 안읽엇었는데 이책은 정독해서 읽었다. 책 내용을 객체지향 개발을하며 무의식중으로, 시간이없어서 대충 짜왔던 코드들의 품질을 어떻게하면 객체지향 개발에 맞게 개선 할 수 있을까 적어놓은 책이다. 

 솔직히 개인적으로 개발하며, 그리고 타인의 소스들을보면서 이건좀아닌데 아니면 이렇게 짜도 괜찮을까 싶은 코드들이 굉장히 많이있었다. 그런 코드들을 체계화된 리팩토링을 해줄 수 있게 해주는 책임이 분명하다. 이론만이아닌 실제로 마틴파울러가 생각해왔었던 것들 그리고 자신이 해왔었던 작업임이, 이책을 집필하면서 얼마나 정성을 쏟아서 집필하였는지 느껴질 정도로 객관적으로 봐도 잘만든 책임이 분명하다. 개인적으로는 완벽하게 이해하지 못하였으나 구매 후 계속 정독할 책일것 같다.


'일상' 카테고리의 다른 글

야근이 너무마놩...  (0) 2017.02.23
최근근황  (0) 2016.10.18
포트폴리오 제작시작!  (0) 2016.07.13
개발공부 진행상황  (0) 2016.06.21
워드프레스 프로젝트  (0) 2016.01.13

+ Recent posts