>백엔드 개발 >PHP 튜토리얼 >Redis 마스터-슬레이브 동기화에 대한 자세한 설명

Redis 마스터-슬레이브 동기화에 대한 자세한 설명

小云云
小云云원래의
2017-12-14 14:38:562466검색

마스터-슬레이브 동기화의 문자 그대로의 의미는 누가 마스터이고 누가 슬레이브인지를 동기화하여 동기화 효과를 형성하는 것입니다. 그렇다면 Redis의 마스터-슬레이브 동기화에 대해 얼마나 알고 계시나요? 본 글은 주로 Redis의 마스터-슬레이브 동기화 분석을 소개하고 있으며, 모두에게 도움이 되기를 바랍니다.

1. Redis 마스터-슬레이브 동기화 원리

1.1 Redis 마스터-슬레이브 동기화 프로세스

슬레이브 서버에 연결된 마스터를 구성한 후 슬레이브는 마스터와 연결을 설정한 후 동기화 명령을 보냅니다. 첫 번째 동기화를 위해 설정된 연결이든 연결이 끊어진 후 다시 연결이든 상관없이 마스터는 데이터베이스 스냅샷을 파일에 저장하기 위해 백그라운드 프로세스를 시작하는 동시에 마스터 기본 프로세스가 새로운 쓰기를 수집하기 시작합니다. 명령을 내리고 캐시합니다. 백그라운드 프로세스에서 파일 쓰기가 완료되면 마스터는 스냅샷 파일을 슬레이브에 전송하고, 슬레이브는 파일을 디스크에 저장한 후 메모리에 로드하여 데이터베이스 스냅샷을 슬레이브에 복원합니다. 슬레이브가 스냅샷 파일 복구를 완료한 후 마스터는 캐시된 모든 명령을 슬레이브에 전달하고 슬레이브는 메모리 데이터베이스를 업데이트합니다. 마스터가 수신한 후속 쓰기 명령은 처음 설정된 연결을 통해 슬레이브로 전송됩니다. 마스터에서 슬레이브로 데이터를 동기화하는 명령과 클라이언트에서 마스터로 보내는 명령은 동일한 프로토콜 형식을 사용합니다. 마스터와 슬레이브 간의 연결이 끊어지면 슬레이브는 자동으로 연결을 다시 설정할 수 있습니다. 마스터가 동시에 여러 슬레이브로부터 동기 연결 명령을 받으면 데이터베이스 미러를 작성하는 프로세스만 시작한 다음 이를 모든 슬레이브에 보냅니다.

1.2 Redis 마스터-슬레이브 동기화 기능

마스터-슬레이브 동기화는 주로 다음 측면을 포함하여 분명한 분산 캐시 특성을 갖습니다.

1) 마스터는 여러 슬레이브를 가질 수 있고 슬레이브도 여러 슬레이브를 가질 수 있습니다. ;
2) 슬레이브는 마스터에만 연결할 수 있는 것이 아니라 다른 슬레이브에도 연결하여 트리 구조를 형성할 수 있습니다.
3) 마스터-슬레이브 동기화는 마스터를 차단하지 않지만 슬레이브를 차단합니다. 즉, 하나 이상의 슬레이브가 처음으로 마스터와 데이터를 동기화할 때 마스터는 클라이언트의 요청을 계속 처리할 수 있습니다. 반대로, 슬레이브가 처음으로 데이터를 동기화하면 클라이언트의 요청을 차단하고 처리할 수 없습니다.
4) 마스터-슬레이브 동기화를 사용하면 시스템의 확장성을 향상할 수 있습니다. 클라이언트의 읽기 요청을 수행하는 데에도 사용할 수 있습니다. 단순한 데이터 중복성 또는 슬레이브에서만 지속성은 클러스터의 전반적인 성능을 향상시킵니다.

1.3 Redis 활성 동기화 설정 방법

마스터-슬레이브 Redis 서버의 동기화 설정을 완료하는 방법에는 두 가지가 있습니다. 슬레이브가 연결해야 하는 Redis 서버(마스터 또는 슬레이브일 수 있음)를 지정하여 모든 작업을 슬레이브 서버에서 수행해야 합니다.

1.3.1 구성 파일에 설정

Redis 서버의 구성 파일(redis.conf)에 슬레이브로 설정합니다.

Conf code

slaveof 10.1.1.102 6379 #指定master的ip和端口

분명히 이 설정 방법은 매우 간단하지만 구성 파일을 수정해야 하며 서버가 시작되면 구성 파일이 로드됩니다. 따라서 서버를 시작하지 않으면 수정할 수 없으며 작업이 유연하지 않습니다.

이 구성 방법은 배포 중 초기 구성에 적합합니다.

1.3.2 Redis 클라이언트에서 설정

여기서는 Redis에서 공식적으로 권장하는 Jedis를 예로 들어 보겠습니다. 다음 기사의 테스트도 Jedis를 기반으로 합니다. 여기서 jedis 객체 인스턴스는 슬레이브에 속하며 매개변수는 서버의 주소와 포트입니다.

Java code

slaveJdedis.slaveOf("10.1.1.102", 6379); #指定master的ip和端口 
slaveJdedis.slaveofNoOne(); #取消指定master,自己成为一个master了

마스터 서버와 슬레이브 서버 간의 마스터-슬레이브 관계는 클라이언트가 지정한 방법을 통해 쉽게 수정할 수 있습니다. 따라서 이 방법은 필요에 따라 마스터 및 슬레이브 서버를 온라인으로 조정하는 데 매우 적합합니다.

1.3.3 현재 마스터-슬레이브 동기화 문제

마스터 및 슬레이브 서버는 Redis에 의해 자동으로 선택되지 않고 수동 참여가 필요하므로 마스터-슬레이브 전환이 자동으로 완료될 수 없습니다. 이는 언제, 누가 전환을 트리거해야 하는지에 대한 의문을 제기합니다. 클라이언트에는 이 기능이 없는 것을 확인했습니다. 필요한 경우 직접 추가해야 합니다.

Jedis는 현재 읽을 Redis 서버를 무작위로 선택하므로 자동 분산 읽기를 달성하려면 Jedis를 다시 캡슐화해야 합니다.

1) 마스터와 슬레이브의 작동 상태를 가능한 한 빨리 감지할 수 있는 메커니즘을 개발해야 합니다.
2) 마스터와 슬레이브에 대한 자동 전환 전략을 정의해야 합니다.
3) 무작위로 읽을 수 있는 메커니즘; Redis 서버 메커니즘을 정의해야 합니다.

이러한 기능은 클라이언트에서 구현할 수 있지만 효과는 그리 좋지 않습니다. 서버 자체에서 지원할 수 있다면 완벽할 텐데, Redis 공식 홈페이지에 소개된 내용으로 볼 때 아직까지 그런 요구를 한 사람도 없고, 그런 계획도 없는 것 같습니다.

2. Redis 주류 클라이언트 소개

Redis 공식 웹사이트에는 5개의 Redis용 Java 클라이언트 소프트웨어가 나열되어 있습니다. 그 중 Jedis는 Redis가 공식적으로 권장하는 Java 클라이언트로 유지보수 및 업데이트가 진행되고 있습니다. 현재 서버의 최신 안정 버전은 Redis2.4.17이고, 최신 테스트 버전은 Redis 2.6.0 RC7입니다.

2.1 Jedis

Jedis는 Redis의 공식 권장 Java 클라이언트 버전입니다. 최신 버전은 현재 Redis 버전 2.0.0과 완벽하게 호환되는 Jedis 2.1.0-5입니다. 이 클라이언트는 항상 유지 관리되고 업데이트됩니다.

2.2 JRedis

JRedis는 오랫동안 업데이트되지 않았으며 Redis 2.0.0 버전과 완벽하게 호환됩니다. 오늘 5월 이전에 업데이트된 후 최신 Redis2.6.0 테스트 버전과 호환될 수 있습니다.

2.3 JDBC-Redis

JDBC-Redis는 NoSQL 데이터베이스 Redis용 JDBC 드라이버입니다. 현재 더 이상 유지 관리되지 않는 2009년 3월에 출시된 jdbc-redis_0.1_beta 버전만 다운로드할 수 있습니다.

2.4 RJC

RJC는 Apache DBCP 스타일 연결 풀링을 제공합니다. 업데이트는 1년 전에 중단되었으며 Redis 2.0.0 버전과 완벽하게 호환됩니다.

2.5 redis-protocol

이 업데이트는 가장 빠르고 빈번하며 최신 Redis 2.6.0 버전과 호환됩니다. 그러나 Redis 프로토콜을 완벽하게 지원하고 Redis 서버와 보다 효율적으로 상호 작용할 수 있는 위치에 있습니다. 따라서 Redis 서버의 기능이 제대로 활용되지 않습니다.

2.6 각 Java 클라이언트의 종합 평가

전반적으로 각 클라이언트는 기본적으로 Redis 프로토콜에서 정의한 기본 기능을 구현합니다. 최근 Redis 프로토콜 업데이트는 Redis 프로토콜을 가장 완벽하게 지원합니다. Jedis는 Redis 서버에 대한 더 많은 구성 작업을 제공하며 사용하기 가장 편리합니다. 다른 클라이언트는 거의 유지 관리되지 않으며 기능도 평균 수준입니다.

클라이언트의 기능을 조금 확장하고 싶다면 Jedis 기반으로 개발하는 것이 가장 빠른 방법입니다.

호환성을 극대화하고 클라이언트 기능을 확장하려면 Redis 프로토콜이 최선의 선택입니다.

3. Redis 마스터-슬레이브 동기화 사용 제안

Redis 마스터-슬레이브 동기화는 현재 모든 Java 클라이언트에서 잘 지원되지 않습니다. 주된 이유는 Redis 서버 자체의 구현 메커니즘의 한계로 인해 발생합니다. 꼭 해야 한다면 가능하지만 효과가 떨어질 수 있습니다.

3.1은 Jdedis

1) Redis 서버 클러스터의 서버 토폴로지 관계 유지를 담당하는 관리 클래스를 추가합니다.
2) 서버 운영을 모니터링하고 유지하는 모니터링 클래스를 추가합니다. Redis 서버 클러스터 상태
3) 마스터와 슬레이브 간의 전환 타이밍을 결정하고 마스터 역할을 할 가장 적합한 Redis 서버를 선택하는 새로운 마스터 선택 전략 클래스를 추가합니다.
4) Redis 서버에서 현재 Jedis 클라이언트의 읽기 및 쓰기 작업을 인계받기 위해 새 프록시 클래스를 추가합니다. 애플리케이션 계층은 프록시 클래스를 통해 Jedis 클라이언트를 사용합니다. 프록시 클래스는 Redis 서버 클러스터가 애플리케이션 계층에 투명한지 확인해야 합니다.

관련 권장 사항:

Mysql 마스터-슬레이브 동기화 구성 샘플 코드에 대한 자세한 설명

Mysql 마스터-슬레이브 동기화 원리 구현에 대한 자세한 소개(그림 및 텍스트)

MySQL 마스터-슬레이브 동기화 모니터링 Linux

의 쉘 스크립트

위 내용은 Redis 마스터-슬레이브 동기화에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.