2013-11-27 8 views
1

현재는 EC2 컴퓨터에서 redis를 사용하고 있으며 슬레이브가없는 60G RAM이 있지만 데이터가 커지면 더 많은 메모리가 필요합니다.Redis RDB 파일 분할

저는 2 x 60G 머신으로 마이그레이션하고이 둘 사이의 기존 데이터를 분리하려고합니다.

RDB 파일을 분할하기위한 도구가 있습니까? 나는 이것을 위해 특별히 설계된 것을 발견하지 못했습니다.

감사합니다.

답변

1

당신이 당신의 데이터를 분할 할 경우 서버 B에서 서버 A에서 읽을 수 있도록 일부 키가 기록됩니다 키 /과 다른 사람을 샤딩 할 수있는 방법이 있어야합니다 분할하는 방법은 없습니다

RDB 파일을 만들지 만, 원하는 것을 성취하기 위해 할 수있는 일이 있습니다.

첫 번째 작업은 두 번째 서버에서 redis 인스턴스를 시작하고 현재 서버의 슬레이브이지만 param 슬레이브 읽기 전용을 false로 설정하는 것입니다. 이렇게하면 슬레이브가 마스터의 모든 redis 데이터를 동기화하고 읽게됩니다. 지금까지 모든 데이터가 포함 된 노예 만 있었지만 이제는 재미있는 일을 할 것입니다.

그런 다음 샤딩 전략을 결정해야합니다. 일부 redis 클라이언트가이 작업을 수행합니다. 예를 들어 공식 Ruby 클라이언트는 사용자가 구성한 경우이를 처리하는 방법을 알고 있습니다. 키가 A와 B로 나누어 지도록 클라이언트를 구성해야합니다 (또는 클라이언트가 다른 서버에 대해 알지 못하도록 twemproxy를 사용하면 twemproxy가 처리합니다)

클라이언트가 구성되면 , 새 클라이언트를 프로덕션에 전개하고 더 이상 슬레이브가 아닌 슬레이브로 구성해야합니다. 슬레이브 서버의 CONFIG 명령을 사용하여이를 직접 수행 할 수 있습니다 (CONFIG REWRITE를 사용하여 구성을 유지하는 것을 잊지 마십시오). 또는 슬레이브의 구성 파일을 변경하고 다시 시작할 수 있습니다. 슬레이브는 slave-read-only false로 설정 되었기 때문에 slave 모드에서도 쓰기를 허용합니다. 즉, redis-cli에서 config를 직접 변경하면 다시 시작하지 않고 슬레이브에서 sharded 독립 실행 형 redis로 변경할 수 있습니다. 이는 매우 멋지다고 생각합니다.

샤르드가되면 다중 명령이나 LUA 스크립트를 사용할 때주의해야합니다. twemproxy를 사용 중이면 해당 명령을 사용할 수 없지만 클라이언트 측에서 샤딩 중이면 MULTI 또는 LUA를 계속 사용할 수 있습니다. 모든 관련 키가 동일한 서버에 남아있는 샤딩 메커니즘을 사용하는 데주의하십시오.