Redis
 sql >> база данни >  >> NoSQL >> Redis

Redis Sentinel

Redis Sentinel е официалната препоръка за стартиране на високодостъпна конфигурация на Redis чрез стартиране на редица допълнителни процеси на redis sentinel за активно наблюдение на съществуващите главни и подчинени инстанции на redis, като се гарантира, че всеки от тях работи както се очаква. Ако с консенсус се установи, че главният вече не е наличен, той автоматично ще премине при отказ и ще промотира един от репликираните подчинени устройства като нов главен. Сентинелите също поддържат авторитетен списък с налични екземпляри на redis, предоставяйки на клиентите централно хранилище, за да открият наличните екземпляри, с които могат да се свържат.

Поддръжката за Redis Sentinel е налична с RedisSentinel клас, който слуша наличните Sentinels, за да изведе своя списък с налични главни, подчинени и други екземпляри за преразглеждане на сентинел, които използва за конфигуриране и поддържане на Redis Client Managers, като инициира всякакви откази, когато са докладвани.

Използване №

За да използвате новата поддръжка на Sentinel, вместо да попълвате Redis Client Managers с низа за свързване на главния и подчинения екземпляр, ще създадете един RedisSentinel екземпляр, конфигуриран с низа за връзка на работещите Redis Sentinels:

var sentinelHosts = new[]{ "sentinel1", "sentinel2:6390", "sentinel3" };
var sentinel = new RedisSentinel(sentinelHosts, masterName: "mymaster");

Това показва типичен пример за конфигуриране на RedisSentinel който препраща към 3 контролни хоста (т.е. минималният брой за високодостъпна настройка, която може да оцелее при повреда на възел). Също така е конфигуриран да гледа mymaster конфигурационен набор (главната група по подразбиране).

ИНФОРМАЦИЯ

Redis Sentinels може да наблюдава повече от 1 главна/подчинена група, всяка с различно име на главната група.

Портът по подразбиране за стражите е 26379 (когато не е посочено) и тъй като RedisSentinel може автоматично да открива други сигнали, минималната необходима конфигурация е само:

var sentinel = new RedisSentinel("sentinel1");

ИНФОРМАЦИЯ

Сканирането и автоматичното откриване на други Sentinels могат да бъдат деактивирани с ScanForOtherSentinels=false

Започнете да наблюдавате Sentinels #

След като сте конфигурирани, можете да започнете да наблюдавате сървърите Redis Sentinel и да получите достъп до предварително конфигурирания клиентски мениджър с:

IRedisClientsManager redisManager = sentinel.Start();

Което, както и преди, може да бъде регистрирано в предпочитания от вас МОК като сингълтон пример:

container.Register<IRedisClientsManager>(c => sentinel.Start());

Разширена конфигурация на Sentinel #

RedisSentinel по подразбиране управлява конфигуриран PooledRedisClientManager екземпляр, който разрешава и двата главни клиента Redis за четене/запис на GetClient() и подчинени за GetReadOnlyClient() само за четене API.

Това може да се промени, за да се използва по-новият RedisManagerPool с:

sentinel.RedisManagerFactory = (master,slaves) => new RedisManagerPool(master);

Персонализиран низ за връзка с Redis #

Хостът, с който е конфигуриран RedisSentinel, се отнася само за този Sentinel Host, все още можете да използвате гъвкавостта на Redis Connection Strings, за да конфигурирате отделните Redis клиенти, като посочите персонализиран HostFilter :

sentinel.HostFilter = host => "{0}?db=1&RetryTimeout=5000".Fmt(host);

Това ще върне клиенти, конфигурирани да използват база данни 1, и време за изчакване на повторното изчакване от 5 секунди (използва се в новата функция за автоматичен повторен опит).

Друга RedisSentinel конфигурация №

Докато горното обхваща популярната конфигурация на Sentinel, която обикновено се използва, почти всеки аспект на RedisSentinel поведението може да се персонализира с конфигурацията по-долу:

OnSentinelMessageReceived Задейства се, когато работникът Sentinel получи съобщение от абонамента за Sentinel
При отказ Задейства се, когато Sentinel се провали през Redis Client Manager към нов главен обект
OnWorkerError Задейства се, когато връзката с Redis Sentinel Worker не успее
IpAddressMap Споставяне на вътрешни IP адреси на хоста на redis, върнати от Sentinels, към външния му IP
ScanForOtherSentinels Дали рутинно да се сканира за други сигнални хостове (по подразбиране е вярно)
RefreshSentinelHostsAfter Какъв интервал да сканирате за други сентинелни хостове (по подразбиране 10 минути)
WaitBetweenFailedHosts Колко време да изчакате след неуспех, преди да се свържете със следващия екземпляр на redis (по подразбиране 250 мс)
MaxWaitBetweenFailedHosts Колко време да се опита отново да се свърже с хостове преди хвърляне (по подразбиране 60 секунди)
Изчакайте предиForcingMasterFailover Колко време след последователни неуспешни опити за принудително преминаване при отказ (по подразбиране 60 секунди)
ResetWhenSubjectivelyDown Нулиране на клиенти, когато Sentinel докладва, че redis е субективно намален (по подразбиране е вярно)
ResetWhenObjectivelyDown Нулирайте клиентите, когато Sentinel докладва, че redis е обективно неактивен (по подразбиране е вярно)
SentinelWorkerConnectTimeoutMs Максималното време за връзка за Sentinel Worker (по подразбиране 100 мс)
SentinelWorkerSendTimeoutMs Максимално време за изпращане на TCP сокет за Sentinel Worker (по подразбиране 100 мс)
SentinelWorkerReceiveTimeoutMs Максимално време за получаване на TCP сокет за Sentinel Worker (по подразбиране 100 мс)

Конфигуриране на Redis Sentinel сървъри #

Проектът redis config опростява настройката и изпълнението на високодостъпна конфигурация Redis Sentinel с множество възли, включително скриптове за стартиране/стоп за незабавно настройване на минималната високодостъпна конфигурация Redis Sentinel на един (или множество) сървъри на Windows, OSX или Linux. Тази конфигурация с един сървър/многопроцес е идеална за настройка на работеща сентинелна конфигурация на една работна станция за разработчици или отдалечен сървър.

Хранилището на redis-config също включва двоичните файлове на MS OpenTech Windows redis и не изисква инсталиране на софтуер.

Използване на Windows #

За да стартирате включената конфигурация на Sentinel, клонирайте репозиторията на redis-config на сървъра, на който искате да го стартирате:

git clone https://github.com/ServiceStack/redis-config.git

След това стартирайте 1x Master, 2x Slaves и 3x Sentinel redis-сървъри с:

cd redis-config\sentinel3\windows
start-all.cmd

Започнали екземпляри за изключване:

stop-all.cmd

Ако изпълнявате процесите на redis локално на вашата работна станция за разработчици, минималната конфигурация за свързване с работещите екземпляри е просто:

var sentinel = new RedisSentinel("127.0.0.1:26380");
container.Register(c => sentinel.Start());

Localhost срещу мрежов IP #

Конфигурацията на Sentinel предполага, че всички екземпляри на redis се изпълняват локално на 127.0.0.1 . Ако вместо това го изпълнявате на отдалечен сървър, до който искате всички разработчици във вашата мрежа да имат достъп, ще трябва или да промените IP адреса в *.conf файлове за използване на IP адрес на мрежата на сървърите. В противен случай можете да оставите настройките по подразбиране и да използвате RedisSentinel Функция IP Address Map за прозрачно картографиране на IP адресите на локалния хост към мрежовия IP, към който всеки компютър във вашата мрежа може да се свърже.

напр. ако това се изпълнява на отдалечен сървър с 10.0.0.9 Мрежов IP, може да се конфигурира с:

var sentinel = new RedisSentinel("10.0.0.9:26380") {
    IpAddressMap = {
        {"127.0.0.1", "10.0.0.9"},
    }
};
container.Register(c => sentinel.Start());

Google Cloud – Кликнете, за да внедрите Redis #

Най-лесната облачна услуга, която открихме, която може незабавно да настрои конфигурация Redis Sentinel с множество възли, използва щракването на Google Cloud за внедряване на функцията Redis, налична от Google Cloud Console под Внедряване и управление :

Щракнете върху Внедряване бутонът ще ви позволи да конфигурирате типа, размера и местоположението, където искате да разположите Redis VM. Вижте пълното ръководство за разгръщане на Redis с щракване за насока за настройка и проверка на високодостъпна конфигурация на Redis в Google Cloud.

Промяна за използване на RedisManagerPool #

По подразбиране RedisSentinel използва PooledRedisClientManager , това може да се промени, за да се използва по-новият RedisManagerPool с:

sentinel.RedisManagerFactory = (master,replicas) => new RedisManagerPool(master);

Започнете да наблюдавате Sentinels #

След като сте конфигурирани, можете да започнете да наблюдавате сървърите Redis Sentinel и да получите достъп до предварително конфигурирания клиентски мениджър с:

IRedisClientsManager redisManager = sentinel.Start();

Което, както и преди, може да бъде регистрирано в предпочитания от вас МОК като сингълтон пример:

container.Register<IRedisClientsManager>(c => sentinel.Start());

Конфигуриране на Redis Sentinel сървъри #

Вижте проекта за конфигурация на redis за бърз начин да настроите минималната високодостъпна конфигурация Redis Sentinel, включително скриптове за стартиране/стоп за незабавно изпълнение на множество екземпляри на redis на един (или множество) сървъри на Windows, OSX или Linux.

Redis Stats #

Можете да използвате RedisStats клас за видимост и интроспекция във вашите работещи екземпляри. Уикито Redis Stats изброява наличните статистики.

Автоматични повторни опити #

За да подобрите устойчивостта на клиентските връзки, RedisClient прозрачно ще опита отново неуспешни операции на Redis поради изключения на гнездо и I/O при експоненциално забавяне, започващо от 10 мс до RetryTimeout от 10 000 мс . Тези настройки по подразбиране могат да бъдат коригирани с:

RedisConfig.DefaultRetryTimeout = 10000;
RedisConfig.BackOffMultiplier = 10;

  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. проблеми при задаване на бекенда на задачи celery в Python

  2. Сравнителен анализ на Couchbase разкрива много бавни INSERT и GETs (използвайки операции KeyValue); по-бавно от постоянните MySQL данни

  3. Nodejs, без да чака заявката на Redis да завърши, преди да продължи с изпълнението

  4. Как да използвате Redis хешове

  5. Работите с два отделни екземпляра на redis със sidekiq?