[REDIS] ServiceStack.Redis.Sentinel 사용
REDISServiceStack.Redis.Sentinel 사용
나는 ServiceStack의 라이센스 버전을 실행하고 Google 클라우드 컴퓨팅에 대한 감시 클러스터 설정을 얻기 위해 노력하고있어.
3 개 서버 - 클러스터는 기본적으로 GCE의 클릭 투 배포 레디 스 솔루션입니다. 여기에 내가 초기화 사용하고 코드입니다 ...
var hosts = Settings.Redis.Host.Split(';');
var sentinel = new ServiceStack.Redis.RedisSentinel(hosts, "master");
redis = sentinel.Setup();
container.Register<IRedisClientsManager>(redis);
container.Register<ICacheClient>(redis.GetCacheClient());
클라이언트는 잘 작동합니다 -하지만 난이 종료되면 레디 스 인스턴스의 모든 중 하나는 침대 배변. 클라이언트가 누락 된 인스턴스에 연결할 수 없다는 메시지를 뿌려줍니다. 또한, 나는 백업 인스턴스를 가져올 경우에도 - 모든 것이 계속 실패 그래서, 읽기 전용 모드에 있습니다. 이 상태에서 일단 복구하는 방법이있을 것 같지 않습니다 ...
내가 뭔가 잘못하고있는 건가요? RedisSentinal 클라이언트가 새 주인이 누구인지 파악하지 않는 몇 가지 이유가 있나요? 나는 그것을 3 호스트 IP 주소를 공급 ...
해결법
-
==============================
1.이 센티넬 호스트에서 다른 마스터 / 슬레이브 레디 스 서버의 활성 목록을수록 당신은 RedisSentinel로 레디 스 센티넬 서버의 호스트를 제공해야합니다.
이 센티넬 호스트에서 다른 마스터 / 슬레이브 레디 스 서버의 활성 목록을수록 당신은 RedisSentinel로 레디 스 센티넬 서버의 호스트를 제공해야합니다.
RedisSentinel에 일부 변화는 최근에 추가 로깅 및 레디 스 센티넬 이벤트의 콜백을 포함 MyGet에 사용할 수있어 최신 v4.0.37에 추가되었습니다. 새로운 v4.0.37의 API의 외모가 좋아 :
var sentinel = new RedisSentinel(sentinelHost, masterName);
RedisSentinel 센티넬 호스트에 연결하여 능동 (즉, 레디 스 연결 풀) 사전 구성된 RedisClientManager를 반환 시작
var redisManager = sentinel.Start();
어떤 당신은 다음 IOC와에 등록 할 수 있습니다 :
container.Register<IRedisClientsManager>(redisManager);
RedisSentinel는 센티넬 호스트에서 마스터 / 슬레이브 변화를 듣고 따라 redisManager 장애 조치해야한다. 풀에서 기존 연결은 배치와 새로 구성된 호스트에 대한 새 풀로 대체합니다. 다시 사용할 경우 풀의 모든 활성 연결의 외부는은 RedisClient는이 새로운 호스트로 구성됩니다 풀에서 검색되는 다음 번에 연결 예외를 던질거야.
다음은 RedisServer 이벤트를 성찰하는 새로운 콜백을 사용하는 방법의 예입니다 :
var sentinel = new RedisSentinel(sentinelHost, masterName) { OnFailover = manager => { "Redis Managers were Failed Over to new hosts".Print(); }, OnWorkerError = ex => { "Worker error: {0}".Print(ex); }, OnSentinelMessageReceived = (channel, msg) => { "Received '{0}' on channel '{1}' from Sentinel".Print(channel, msg); }, };
이러한 이벤트의 로깅은 ServiceStack에서 로깅을 구성하여 사용할 수 있습니다 :
LogManager.LogFactory = new ConsoleLogFactory(debugEnabled:false);
최신 마스터 / 슬레이브 호스트, 예컨대에 다시 조회 및 장애 조치에 RedisSentinel를 강제하는 데 사용할 수있는 추가 명시 적 FailoverToSentinelHosts는 ()도 있습니다 :
var sentinelInfo = sentinel.FailoverToSentinelHosts();
새로운 호스트는 반환 sentinelInfo에서 사용할 수 있습니다 :
"Failed over to read/write: {0}, read-only: {1}".Print( sentinelInfo.RedisMasters, sentinelInfo.RedisSlaves);
from https://stackoverflow.com/questions/28132528/servicestack-redis-sentinel-usage by cc-by-sa and MIT license
'REDIS' 카테고리의 다른 글
[REDIS] dump.rdb / 저장하는 작은 파일을 레디 스 (0) | 2020.01.15 |
---|---|
[REDIS] 레디 스에서 네임 스페이스? (0) | 2020.01.15 |
[REDIS] 마지막 stream.on에서 비동기 함수의 콜백 ( '데이터') 이벤트 기다립니다 (0) | 2020.01.15 |
[REDIS] 2 레디 스 온라인 사용자를 추적하기위한 접근한다. 어느 것이 더 빠르다? (0) | 2020.01.15 |
[REDIS] 어떻게 레디 스 서버의 CPU 사용량을 개선하기 위해? (0) | 2020.01.15 |