Вопрос

Добрый день, подскажите пожалуйста, можно ли вместо кластера Redis поднять 1 VM с редисом и использовать её в connectionStrings?

Нравится

1 комментарий

Добрый день, 

 

Да, конечно. Если ваше приложение не требует высокой доступности, отказоустойчивости или распределенного хранения, которые обеспечивает кластер Redis, то вы можете использовать одну виртуальную машину (VM) с Redis вместо кластера. 

 

В случае использования одной VM, если эта машина станет недоступной, ваше приложение не сможет подключиться к Redis. В то время как в кластере, если одна из машин становится недоступной, запросы автоматически перенаправляются на другие доступные машины.

Также, кластер может обеспечить большую пропускную способность и быстродействие, так как запросы распределяются между несколькими машинами.



Пожалуйста, учтите все эти факторы при принятии решения. 

Показать все комментарии

Добрый день.

bpmonline 7.14.3.1686, переходим с Redis 3.2.100 Windows на Redis 5.0.3 Linux

Работают два независимых master экземпляра CentOS Redis 5.0.3 , перед ними настраиваем балансировщик HAProxy в конфигурации active/standby (balance first)



listen redisProd

        bind :6379

        maxconn 10000

        mode tcp

        balance first

        timeout connect 4s

        timeout server  30s

        timeout client  30s

        server Redis1 prodRedis01:6379 check inter 1s

        server Redis2 prodRedis02:6379 check inter 1s

 

Строка подключения в web.config (10.0.0.1 - адрес балансировщика)

 

После старта приложения в Redis.log раз в 30 сек начинают сыпаться однотипные ошибки клиента ServiceStack.Redis

 

2020-04-16 17:02:16,179 [53] INFO IIS APPPOOL\bpmonline Redis ParseSubscriptionResults - Unsubscribed from channel []

2020-04-16 17:02:16,179 [53] ERROR IIS APPPOOL\bpmonline Redis MoveNext - ServiceStack.Redis.RedisRetryableException: [14:02:16.177] No more data, sPort: 1901, LastCommand: 

   at ServiceStack.Redis.RedisNativeClient.CreateRetryableResponseError(String error)

   at ServiceStack.Redis.RedisNativeClient.ReadMultiData()

   at ServiceStack.Redis.RedisSubscription.SubscribeToChannels(String[] channels)

   at Terrasoft.Redis.RedisPubSubServer.d__17.MoveNext()

2020-04-16 17:02:16,179 [53] WARN IIS APPPOOL\bpmonline Redis MoveNext - Resubscribing to channel [MemoryCacheDataProviderChannel]...

 

Поиск решений на stackoverflow к успеху не привел. 

При направлении bpm на любой из 2-х новых redis напрямую без прокси работает без ошибок.

Подскажите возможное решение проблемы

Нравится

1 комментарий

HAProxy рекомендуют для масштабирования серверов приложений. А для отказоустойчивости Redis предлагают другую технологию — Sentinel.

Показать все комментарии

После очистки кэша рэдиса перестали вызываться события по таймеру.

Что нужно сделать, чтобы они все заработали?

Нравится

1 комментарий

Добрый день!



Ответ дан в основном обращение на сапорт.



С уважением, Евгений.

Показать все комментарии
Вопрос

Наблюдаю интересный глюк на OnSite.

Раз в какое-то кол-во минут (10-30) Redis поднимает второй процесс, который отъедает до 13 ГБайт памяти, потом завершается. База рэдиса dump.rdb по размеру 3Гб.

В логах этому времени соответствует такая запись, например

[2116] 04 Dec 15:37:45.043 * 10 changes in 300 seconds. Saving...

[2116] 04 Dec 15:37:45.183 * Background saving started by pid 7080

[2116] 04 Dec 15:38:28.223 # fork operation complete

[2116] 04 Dec 15:38:29.504 * Background saving terminated with success

Когда свободной памяти в системе не хватало, BPM повисала на 30-50 сек, сайт становился недоступен. Когда памяти стало больше (уменьшили макс. память для SQL-сервера), стала чуть-чуть подтормаживать в эти моменты, но в целом работает стабильно.

Однако, сама ситуация мне не нравится. Что посоветуете посмотреть? Куда копать?

И вообще, насколько важные данные хранит рэдис? Если вообще отключить сохранение, то при ребуте сервера, потеряется ли что-то важное?

В ВРМ постоянно вкачиваются данные со стороны системы интеграции через EntityDataService.

Нравится

4 комментария

Скорее всего у вас включено хранение данных в файле для редиса.

Попробуйте его отключить:

Конфигурация Redis (redis.windows.conf)

    Отключить сохранение на диск (закомментировать)

        #save 900 1

        #save 300 10

        #save 60 10000

Сергей Кy6риш,

Я правильно понимаю, что в Рэдисе ничего важного не хранится и при очистке и перезапуске сервера, например, мы точно ничего не потеряем?

Алексей-Карягин,

верно

Кстати, каноничный Redis есть только под Linux. Порт на Windows — неофициальный.

При перезапуске ничего важного не теряется. Разве что пользователей (в том числе и интеграции) выкинет. И сразу будет чуть тормозить, пока снова всё не закеширует.

Показать все комментарии

Коллеги, всем добрый день!

Может кто-нибудь сталкивался с требованием заказчика сделать доступ к Redis закрытым, т.е. установить пароль на доступ.

На стороне redis, насколько я понимаю, нужно включить в redis.conf настройку requirepass, а как реализовать это на стороне нашего приложения? В ТП ответили так: "поскольку это стороннее ПО, с данным вопросом обратитесь к поставщику продукта redis. Мы предоставляем поддержку продукта bpm'online."

Нравится

3 комментария

попробуйте по аналогии с ConnectionString из StackExchange

<add name="redis" connectionString="name=user;password=123;host=localhost;db=1;port=6379;maxReadPoolSize=25;maxWritePoolSize=25" />

в любом случае дайте знать получилось или нет :)

Севостьянов Илья Сергеевич,

Илья, спасибо за ответ, но, к сожалению, система с настроенными подобным образом конфигами даже не запускается.

Илья, моему коллеге удалось найти ответ на данный вопрос:

<add name="redis" connectionString="host=password@127.0.0.1;db=1;port=6379;maxReadPoolSize=25;maxWritePoolSize=25" />

ответ был найден здесь: https://stackoverflow.com/questions/8862552/authenticated-servicestack-…

Показать все комментарии

Добрый день!

При попытке подключиться к 7.6 onSite, получаю такую ошибку:

[RedisResponseException: invalid DB index, sPort: 49982, LastCommand: ]
   ServiceStack.Redis.RedisNativeClient.CreateResponseError(String error) +197
   ServiceStack.Redis.RedisNativeClient.ExpectSuccess() +162
   ServiceStack.Redis.RedisNativeClient.set_Db(Int32 value) +136
   ServiceStack.Redis.RedisNativeClient.AssertConnectedSocket() +172
   ServiceStack.Redis.RedisNativeClient.SendCommand(Byte[][] cmdWithBinaryArgs) +39
   ServiceStack.Redis.RedisNativeClient.SendExpectSuccess(Byte[][] cmdWithBinaryArgs) +18
   ServiceStack.Redis.PooledRedisClientManager.GetClient() +573
   Terrasoft.Redis.RedisClientsManager.GetClient() +46
   Terrasoft.Redis.BaseRedisStore.GetValue(String key) +102
   Terrasoft.Core.Configuration.SysCulture.GetCultures(UserConnection userConnection) +94
   Terrasoft.Core.AppConnection.InitilizeCulture() +46
   Terrasoft.Core.AppConnection.Initialize(ConfigurationSectionGroup appConfigurationSectionGroup) +615
   Terrasoft.WebApp.Loader.Global.InitializeAppConnection() +475
   Terrasoft.WebApp.Loader.Global.Application_Start(Object sender, EventArgs e) +168

[HttpException (0x80004005): invalid DB index, sPort: 49982, LastCommand: ]
   System.Web.HttpApplicationFactory.EnsureAppStartCalledForIntegratedMode(HttpContext context, HttpApplication app) +12584905
   System.Web.HttpApplication.RegisterEventSubscriptionsWithIIS(IntPtr appContext, HttpContext context, MethodInfo[] handlers) +175
   System.Web.HttpApplication.InitSpecial(HttpApplicationState state, MethodInfo[] handlers, IntPtr appContext, HttpContext context) +304
   System.Web.HttpApplicationFactory.GetSpecialApplicationInstance(IntPtr appContext, HttpContext context) +404
   System.Web.Hosting.PipelineRuntime.InitializeApplication(IntPtr appContext) +475

[HttpException (0x80004005): invalid DB index, sPort: 49982, LastCommand: ]
   System.Web.HttpRuntime.FirstRequestInit(HttpContext context) +12601936
   System.Web.HttpRuntime.EnsureFirstRequestInit(HttpContext context) +159
   System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest wr, HttpContext context) +12441597

То, что причина в Redis - это я понял. А, вот как исправить - не знаю. Может, кто сталкивался с подобным?

Нравится

2 комментария

У Вас в ConnectionStrings выставлено не валидное значение db (базы данных).

В конфигурационном файле "ConnecnionStrings.config" (находится в папке с сайтом BPMonline) есть строка, в которой указаны параметра подключения к Redis-серверу: . Укажите в прараметре host имя машины, где установлен Redis-сервер. В параметре db укажите номер базы redis (установите значаение "0"). В значение пераметра port укажите значение - 6379. Параметр timeout оставьте равным - 20. Проверьте, что в сайте есть приложение под названием - "0" и оно настроено на директорию "Terrasoft.WebApp" (находится в папке с сайтом).

Спасибо, помогло!

Показать все комментарии

1. Настройку можно произвести в Планировщике заданий Windows:

2. Создайте новую задачу:

3. Настраивать следует таким образом:

4. Установите время и периодичность перезапуска:

5. Создайте *.bat-файл со следующим текстом:
"C:\Program Files\Redis\redis-cli.exe" flushall
sc stop redis
sc start redis

Выберите этот файл в Действиях:

Нравится

Поделиться

2 комментария

А чем поможет автоматический перезапуск по расписанию?

Если в системе ведется активная работа (вычитка данных), засоряется память, увеличивается время возврата этих данных, то перезапуск Redis поможет ускорить этот процесс.

Показать все комментарии

Чтобы запустить redis, как службу в руководстве рекомендуется использовать Resourse Kit. Но, увы, для 2008+ серверов Windows таковой не существует.

Little-google-adventure принес следующие результаты:
не стал проверять
проверил, но что-то у меня не получилось

а потом и вовсе наткнулся на комментарий

someone named as Rui Lopes пишет:
As an alternative, you could use the redis setup from https://github.com/rgl/redis/downloads

В общем, чтобы установить redis в качестве службы на windows server 2008 r2:

качаем отсюда нужный дистрибутив, устанавливаем, затем в командной строке, запущенной от администратора, исполняем
sc create redis binPath= "C:\Program Files\Redis\redis-service.exe redis conf/redis.conf" start= "auto"
(пробелы после знака = важны)

если хотите сразу проверить - либо руками в Панель управления - Администрирование - Службы (и т.д.)
либо в командной строке
net start redis

Нравится

Поделиться

3 комментария

Спасибо Дмитрий за познавательную Статью. Хочу только добавить, что на Windows 8.1 версии мне пришлось в свое время проделать именно эти же действия, что вы описали. Считаю что технической поддержки нужно просто разработать Документацию по разворачиванию Redis сервера на разных платформах и выдавать ее по запросу, а лучше конечно включить это в документацию по BPMOnline.

Здравствуйте. Во вложении отправляю то, чем пользуюсь. После установки нужно будет запустить службу Redis. Если не получится (может зависеть от настроек безопасности), тогда нужно установить в свойствах службы "запуск от имени системной учётной записи".

разве это не тоже самое, на что я дал ссылку?

"Котенко Александр" написал:"запуск от имени системной учётной записи"

для команды SC
это выглядит так:

obj = "LocalSystem"

либо (если нужен другой пользователь:

obj = "PC_Name\User_Name" password = "password"
Показать все комментарии

Всех приветствую!

Часто возникает вопрос, как очистить redis (актуально для владельцев on-site).

Для очистки redis’a необходимо запустить файл redis-cli.exe в директории с сервером redis.

В открывшейся командной строке следует вписать команду: flushall

Изображение удалено.

Приятной работы!

С уважением,

Белецкий Арсений

Группа компаний Terrasoft

Нравится

Поделиться

7 комментариев

К чистке редиса по словам Саши Крынько следует относиться "очень взвешенно и осторожно", т.к. информация о сессии пользователя хранится и в базе данных и в редисе. При очистке редиса соответствующие данные о сессии в базе данных так и зависают незавершенными.

Кроме этого, совершенно не обязательно чистить все. Можно например очистить только одну базу с помощью flushdb. Для более полного изучения возможностей, ссылка на команды Redis клиента

Что делать, если redis-cli.exe вообще не принимает команды? Показывает черную панель без подсказки.

Здравствуйте!

Скорее всего клиент не был установлен, либо служба Redis не запущена.

Как это проверить? Такое происходит, начиная со второго запуска redis-cli.

Попробуйте переустановить (версию 3.0 или 3.2, доступна для скачивания на сайте производителя).

надо клиента редиса запускать с параметром подключения

redis-cli.exe -h 172.28.1.199 -p 6379

Показать все комментарии