Show/Hide Toolbars

Руководство по тех. обслуживанию

Кеширование с помощью Redis

Ссылки Назад Вверх Вперед

Сервер Redis — это Windows и Linux сервис, доступный по протоколу TCP/IP. Он использовался для кеширования.

Для маленьких инсталляций Redis может быть установлен на веб-сервер, для больших объемов данных Redis должен быть установлен на отдельный веб сервер.

Установка Redis

1. Скачайте дистрибутив, например этот файл.

2. Установите его со всеми настройками по умолчанию (по умолчанию используется порт 6379).

3. Перейдите к файлу c:\Program Files\Redis\redis.windows-service.conf и откройте его для редактирования (например, используя Notepad).

3.1. Найдите строку bind 127.0.0.1 и исправьте ее на #bind 127.0.0.1.

3.2. Найдите строку protected-mode yes и исправьте ее на protected-mode no.

3.3. Найдите строку save 900 1 и исправьте ее на #save 900 1.

3.4. Найдите строку save 300 10 и исправьте ее на #save 300 10.

3.5. Найдите строку save 60 10000 и исправьте ее на #save 60 10000.

3.6. Найдите строку tcp-keepalive 0 и исправьте ее на tcp-keepalive 60.

4. Перезапустите сервер Redis. (Выполнить... -> services.msc -> Redis -> Перезапустить)

5. На сервере приложений в web.config добавьте

<add name="RedisConnectionString" connectionString="localhost:6379,allowAdmin=true,abortConnect=false,keepAlive=60,syncTimeout=60000"/>

где 6379 — это адрес порта.

в секцию <appSettings> добавьте

<add key="isMainServer" value="true"/>

6. Дополнительная информация о настройках соединения.

7. В папке C:\Program Files\Redis не должно быть файлов dump.rdb (их нужно удалить).

Теперь, когда сервер Redis запущен и настроен для сетевого доступа, установите программу-клиент для визуального доступа к содержимому сервера. В качестве клиента можно использовать RedisReact или Redis Desktop Manager.

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

В качестве клиента для .Net приложений рекомендуется nuget-пакет StackExchange.Redis.

Установка пароля для Redis

Для безопасности установите пароль для Redis.

1.Отредактируйте файл конфигурации Redis redis.windows-service.conf:

уберите символ "#" в поле "# requirepass" и укажите пароль. В результате должно получиться: "requirepass пароль".

2.Отредактируйте файл конфигурации "Первой Формы" web.config:

<add name="RedisConnectionString" connectionString="localhost:6379,,password=***,allowAdmin=true,abortConnect=false,keepAlive=60,syncTimeout=30000"/>

Установка нескольких Redis для нескольких веб-приложений на одном сервере

1.Создайте нужное количество копий папки с Redis (под каждый пул IIS) по количеству приложений, смотрящих на разные базы (пример: приложения с forms и win авторизацией смотрят на одну базу, должны использовать один Redis).

2.В файле redis.windows-service.conf у каждого экземпляра поменяйте порт на новый (например, на 6380).

3.Запустите cmd, перейдите в папку экземпляра Redis, который надо инсталлировать, и выполните команду:

redis-server --service-install redis.windows-service.conf --service-name Redis6380

где Redis6380 — имя сервиса для регистрации в системе.

4.В web.config приложений добавьте ключ

<add name="RedisConnectionString" connectionString="localhost:6380,allowAdmin=true,abortConnect=false,keepAlive=60"/>

где 6380 — порт, указанный для нужного сервиса Redis.

5.Перезапустите сервисы в диспетчере задач.

Оптимизация работы Redis и IIS в рамках одного физического сервера

1.Создайте текстовый файл SetHighPriority.cmd.

2.Заполните содержимое SetHighPriority.cmd по образцу:

wmic process where description='redis-server.exe' CALL setpriority "high priority"
wmic process where description='w3wp.exe' CALL setpriority "above normal"

3.Настройте Windows Task Scheduler таким образом, чтобы SetHighPriority.cmd исполнялся каждую минуту с наивысшими привилегиями.

Теперь, независимо от перезапуска IIS или сервиса Redis, приоритеты процессов IIS будут выше, чем пользовательские процессы Windows, а процессы экземпляров Redis получат еще более высокий приоритет.

Настройка репликации Redis — серверов

Репликация Redis подразумевает собой в простейшем случае один master и несколько slave узлов.

1.В файле redis.windows-service.conf у каждого экземпляра, который мы определили как slave, найдите строку # slaveof <masterip> <masterport> и замените на slaveof 192.168.0.1 6379, где 192.168.0.1 — это IP-адрес master-сервера, а 6379 — его порт.

2.Найдите строку slave-read-only yes и замените ее на slave-read-only no. Это важно, чтобы оптимизировать работу клиентов: изменения на slave-серверах не ждут, пока их изменения вернутся от master-узла, а сразу готовы работать со свежими значениями.

3.На сервере приложений, являющемся master узлом, в web.config в секцию <appSettings> добавьте значение

<add key="isMainServer" value="true" />

4.На серверах приложений, являющихся slave узлами, в web.config добавьте значение

<add key="isMainServer" value="false" /> в секцию <appSettings>

5.На серверах приложений, являющихся slave узлами, уберите RedisConnectionString и замените двумя другими: RedisMasterConnectionString — соединение с master Redis-сервером и RedisSlaveConnectionString — соединение с slave Redis-сервером (обычно — локальным).

warning_icon   Если несколько приложений используют одну БД и один Redis, только для одного веб-сервера ключ isMainServer должен быть включен (true), для остальных выключен (false)

Примеры:

Описание

Настройки

Одно приложение на одном сервере

1 приложение. <add key="isMainServer" value="true" />

Два приложения на одном сервере

1 приложение. <add key="isMainServer" value="true" />

2 приложение. <add key="isMainServer" value="false" />

Три приложения на одном сервере

1 приложение. <add key="isMainServer" value="true" />

2 приложение. <add key="isMainServer" value="false" />

3 приложение. <add key="isMainServer" value="false" />

Два сервера и больше, по одному приложению на сервере

1 сервер <add key="isMainServer" value="true" />

2 сервер <add key="isMainServer" value="false" />

Два сервера и больше, по два приложения на сервере

1 сервер

1.1 приложение <add key="isMainServer" value="true" />

1.2 приложение <add key="isMainServer" value="false" />

2 сервер

2.1 приложение <add key="isMainServer" value="false" />

2.2 приложение <add key="isMainServer" value="false" />

Организация горизонтального кластера Redis

Для организации горизонтального кластера требуется минимум 6 экземпляров Redis. Удобно создавать экземпляры путем копирования настроенной заранее эталонной папки.

1.Для организации эталонной папки выполните установку Redis.

2.Внесите дополнительные изменения в redis.windows-service.conf:

a.Найдите строку logfile "server_log.txt" и исправьте ее на #logfile "server_log.txt" — отключение логирования в файл.

b.Найдите строку # cluster-enabled yes и исправьте ее на cluster-enabled yes — кластерный режим.

c.Найдите строку # cluster-config-file nodes-6379.conf и исправьте ее на cluster-config-file nodes.conf — название файла конфигурации узлов кластера.

d.Найдите строку # cluster-node-timeout 15000 и исправьте ее на cluster-node-timeout 60000 — таймаут доступности узлов кластера.

3.Размножьте папку с настроенным Redis в рамках одного сервера и/или по нескольким серверам. Для эффективной утилизации CPU рекомендуется устанавливать на каждый сервер количество экземпляров Redis не меньше, чем доступных серверных ядер.

4.Запустите все экземпляры Redis.

5.Объединение отдельных узлов в кластер требует рутинной настройки через командную консоль Redis, для автоматизации этой задачи предусмотрен скрипт на Ruby.

a.Устанавливите Ruby с официального сайта в папку C:\Ruby.

b.Скачайте скрипт redis-trib.rb.

c.Выполните в командной строке:

C:\Ruby\Bin\gem install redis

d.Выполните в командной строке:

C:\Ruby\Bin\ruby redis-trib.rb create --replicas 1 192.168.1.1:7000 192.168.1.1:7001 192.168.1.1:7002 192.168.1.1:7003 192.168.1.1:7004 192.168.1.1:7005

где, например, 192.168.1.1:7000 — IP-адреса и порты узлов Redis.

e.Следуя запросам скрипта, отвечайте yes.

6.Кластер готов. Чтобы обращаться к кластеру через встроенный в StackExchange.Redis балансировщик, передайте в RedisConnectionString все узлы кластера:

<connectionStrings>
  <add name="RedisConnectionString" connectionString="192.168.1.1:7000,192.168.1.1:7001,192.168.1.1:7002,192.168.1.1:7003,192.168.1.1:7004,192.168.1.1:7005,allowAdmin=true,abortConnect=false,keepAlive=60"/>
</connectionStrings>

Добавление узлов в горизонтальный кластер Redis

Горизонтальный кластер Redis представляет собой множество пар узлов, объединенных в failover-кластера, поэтому добавлять узлы в кластер можно только парами.

1.После организации и запуска первого нового узла выполните команду:

ruby redis-trib.rb add-node 192.168.1.1:7000 192.168.1.1:7006

где 192.168.1.1:7000 — IP-адрес и порт участвующего в кластере узла, а 192.168.1.1:7006 — новый master-узел.

2.После организации и запуска второго нового узла выполните команду:

ruby redis-trib.rb add-node --slave 192.168.1.1:7000 192.168.1.1:7007

где 192.168.1.1:7000 — IP-адрес и порт участвующего в кластере узла, а 192.168.1.1:7007 — новый slave-узел. Slave должен автоматически найти своего master-а.

3.Новые узлы требуют балансировки в кластере, для этого выполните команду:

ruby redis-trib.rb rebalance --use-empty-masters 192.168.1.1:7000

где 192.168.1.1:7000 — IP-адрес и порт участвующего в кластере узла.

Балансировка может занять несколько минут.

4.Состояние кластера можно оценить командой:

ruby redis-trib.rb info 192.168.1.1:7000

Результат должен быть примерно таким:

192.168.1.1:7000 (b2bf038d...) -> 0 keys | 4096 slots | 1 slaves.

192.168.1.1:7002 (81c757ec...) -> 0 keys | 4096 slots | 1 slaves.

192.168.1.1:7004 (dfd969e7...) -> 0 keys | 4096 slots | 1 slaves.

192.168.1.1:7006 (70e7617f...) -> 0 keys | 4096 slots | 1 slaves.

[OK] 0 keys in 4 masters.

0.00 keys per slot on average.

Сброс кеша

Чтобы сбросить работающий кеш, в клиентском приложении (например, в RedisReact) выполните команду FLUSHDB.

Кроме того, можно использовать управление кешами в "Первой Форме".