본문 바로가기

Proxy

Proxy란?

요즘 고민하고 있는 것을 적어보려고 합니다.


제목에서처럼 요새 Proxy를 고민하고 공부하고 테스트를 하고 있습니다. 일반적인 Proxy Server는 아니고 DB에 최적화 된 Proxy입니다.


Mysql DBA로써 Architecture에 대한 고민을 많이 할 수 밖에 없는데요. Failover와 부하분산이 주 목적이 되지 않을까 싶네요.


일반적으로 Mysql에서는 Replication이라는 방식을 많이 씁니다. Read 부하 분산을 Scale Out하는 방식인데요. 그렇다면 여기서 좀 더 성능을 높히기 위해선 어떻게 해야 할까요?


Read 쪽에 Caching 서버를 둔다면 어떨까요? 그리고 Read를 하는 Slave DB들 중 하나가 죽었을 경우 어떻게 Failover를 할 것인가요?


이러한 생각때문에 Proxy를 생각하게 됐습니다. 물론 LVS나 L4 switch, L2 switch와 같이 Load Balancing을 해주는 Tool들이 있지만 Mysql에 대한 Health Check가 완벽하지 않다고 생각이 됩니다.


서론이 좀 길었는데, Proxy Server란 무엇인지 보도록 하죠.


컴퓨터용어 IT 사전에서는 이렇게 정의하고 있습니다.


데이터를 가져올 때 해당 사이트에서 바로 자신의 PC로 가져오는 것이 아니라 임시 저장소를 거쳐서 가져오는 것. 프록시를 설정하면 수 초의 빠른 속도를 느낄 수 있다. 프록시 서버에는 다수의 사용자들이 들르는 사이트에 대한 데이터가 저장되어 있어 경우에 따라 해당 사이트에 들르지 않고 바로 이 서버에 있는 데이터를 이용하기도 한다. 하지만 프록시 서버에 문제가 생겼거나 과부하가 걸렸을 경우 오히려 더 느려지는 경우도 있다. (사이트 → 프록시 서버 → PC) 


DB의 관점에서 보자면 데이터를 요청하는 WAS(Web Application Server)가 데이터를 요청할 경우 DB서버로 바로 요청하는 것이 아니라 중간에 있는 Proxy 서버에 요청하는 것입니다. WAS가 Proxy에 데이터를 요청했을 때 Proxy가 Caching된 데이터가 있다면 DB를 거치지 않고 바로 WAS를 데이터를 전송해 주겠죠.


쉽게 말하면 Proxy Server는 중계자입니다. 



DBA의 색감은 역시 떨어지네요..ㅎ 공대생은 어쩔수 없나봅니다..ㅠ


그림을 보면 Client가 WAS로 페이지에 대한 것을 요청하고(비록 Client가 WAS로 바로 붙지 않고 WEB으로 붙겠지만..) WAS가 일반적으로 DB로  요청을 하게 됩니다. 

위에는 두가지 그림이 있는데요. WAS가 하드웨어적인 L4 switch를 통해서 접근하거나 Sortware적인 LVS를 통해서 접근하는 것이 왼쪽그림입니다.

반면에 오른쪽의 그림은 Proxy의 그림입니다.

그냥 L4와 LVS를 쓰던 것을 Proxy로 바꾼것 아니냐는 궁금증이 생기시겠죠?ㅎ

그렇다면.. 맞습니다. 지금 Architecture에서 보이는 그림은 Load Balancing에 관한 것이기 때문에 동일 역할 하는 것을 그림으로 표현 한 것입니다.


그럼 질문을 한번더 바꿔보겠습니다.

역할은 Load Balancing이지만 Health Check는 어떻게 가능할까요?

L4와 LVS의 특성상 Network적인 것을 컨트롤 할 뿐, DB에 대한 것을 Control하지는 못합니다.

MySQL은 그냥 단순히 생각하면 Sortware입니다. Server위에 올라가 있는 프로그램의 일종입니다.

그런데 이 프로그램이 죽었는지 살았는지에 대한 check는 L4나 LVS는 하지 못합니다. 하지만 Proxy의 경우, 어떤 것을 쓰느냐에 따라 다르지만 해당 프로그램에 대한 check가 가능합니다. 그렇기 때문에 Failover에 대해서 좀 더 좋은 대책을 세울 수 있습니다.


그리고 Proxy의 또 다른 역할 중 하나인 Caching이 가능하기 때문에 데이터를 좀 더 빠르게 얻어 올 수 있습니다. 

이러한 기능 때문에 Proxy를 고려하고 있습니다. 현재 테스트 하고 있는 것은 ProxySQL과 HA Proxy입니다.

사실 LVS나 L4 스위치를 쓸 수 없는 상황때문에 고려하게 된거지만...ㅎ 좀 더 효율적인 방법이 될 수 있겠네요.


다음에는 ProxySQL과 HA Proxy에 대해서 써보도록 하겠습니다.