[입개발] Redis 서버 업그레이드 또는 migration.

해당 블로그는 KT ucloud( http://cs.ucloud.com ) 의 지원을 받고 있습니다.

 

오늘은 그냥 간단하게 Redis 서버의 업그레이드 또는 메모리 문제등으로 인해서 다른 장비로 서버를 옮겨야 할 경우에 대해서 간단하게 알려드리려고 합니다. (제 주변의 모님은 Redis 2.0 버전을 쓰시더군요 T.T) Redis의 경우 replication을 지원하기 때문에 굉장히 데이터를 옮기기가 쉽습니다.  그래서 대부분 다음과 같은 과정으로 새 서버로 데이터를 옮깁니다.

 

 

한마디로 굉장히 간단합니다. 다만, 이렇게 해당 서버를 바라보도록 client를 옮기는 과정에 주의를 기울여야 합니다.  그리고 최종 작업후에 SLAVEOF NO ONE이 굉장히 중요합니다. SLAVEOF NO ONE 명령이 실행되기 전에 master와의 연결이 끊어졌다가 다시 연결이 되는 시점에, replication을 받는 슬레이브는 자신의 모든 데이터를 지우고, master 와 다시 sync를 하게 됩니다. 최악의 경우에는 기존 master 장비의 데이터가 없다면, 새로운 master 의 데이터도 깔끔하게 날라갈 수 있습니다.

 

확인한 결과로 2.2 에서 2.4로 넘어가는 경우에도 위의 방법을 이용할 수 있습니다. 이제 곧 2.6이 슬슬 release 가 될 것 같은데,  lua 스크립트를 이용해서 재미난 기능들이 많이 나오지 않을까 기대합니다. 예전의 mysql-proxy 와 같은 형태로 발전하지 않을까 싶기도 하구요 ^^

 

 

[추가: 2013.04.17] 2.2 에서 2.6 까지도 위의 방법으로 업그레이드가 가능합니다. 다만 주의해야할 부분은 새로운 마스터를 보게할 때 기본적으로 Redis 슬레이브는 Read-Only가 되기 때문에 이것을 풀어줘야 하고, 클라이언트가 변경되는 동안에 같은 키에 대한 작업은 race 컨디션이 있을수도 있다는 것입니다.(다만, 이 부분에서 크게 문제가 된 경우는 거의 없습니다.)