1: Инструмент redis-benchmark
Redis поставляется с инструментом тестирования redis-benchmark. Эта программа может симулировать произвольное число клиентов, одновременно подключающихся и выполняющих действия на сервере, и измерить, сколько времени требуется для выполнения запросов. Полученные данные дадут вам представление о среднем количестве запросов, которое сервер Redis может обрабатывать в секунду.
В следующем списке приведены некоторые общие параметры для redis-benchmark:
- -h: хост Redis (по умолчанию 127.0.0.1).
- -p: порт Redis (по умолчанию 6379).
- -a: эта опция позволяет указать пароль, если серверу нужна аутентификация.
- -c: задает количество клиентов (параллельных соединений), которое нужно симулировать. По умолчанию это 50 клиентов.
- -n: количество симулируемых запросов (по умолчанию 100000).
- -d: размер данных в байтах для значений SET и GET (по умолчанию 3).
- -t: запускает только поднабор тестов. К примеру, можно использовать -t get,set и измерить только производительность команд GET и SET.
- -P: использует конвейерную обработку для улучшения производительности.
- -q: тихий режим, показывает только среднее количество запросов в секунду.
Например, если вы хотите проверить среднее количество запросов в секунду, которое может обрабатывать ваш локальный сервер Redis, вы можете использовать эту команду:
Вы получите примерно такой результат:
Вы также можете ограничиться в тестах только подмножеством команд по вашему выбору, используя параметр -t. Следующая команда покажет средние значения только для команд GET и SET:
По умолчанию команда симулирует 50 параллельных соединений и 100000 запросов к серверу Redis. Если вы хотите увеличить количество параллельных соединений и симулировать пик в нагрузке, вы можете использовать опцию -c:
Поскольку при этом команда симулирует 1000 одновременных подключений вместо 50, вам следует ожидать снижения производительности:
Чтобы получить в выводе подробную информацию, удалите опцию –q. Следующая команда использует 100 параллельных соединений и запускает 1000000 SET-запросов на сервере.
Вы получите примерно следующее:
По умолчанию для значения ключа используется 3 байта. Вы можете изменить это значение с помощью опции -d. Следующая команда анализирует команды GET и SET с ключами размером в 1 МБ:
Поскольку на этот раз сервер работает с гораздо большей нагрузкой, ожидается значительное снижение производительности:
Важно понимать вот что: хотя эти числа полезны в качестве быстрого способа оценки производительности экземпляра Redis, они не представляют максимальную пропускную способность, которую может выдержать экземпляр Redis. Используя конвейерную обработку, приложения могут отправлять несколько команд одновременно, чтобы увеличить количество запросов в секунду, которые может обрабатывать сервер. Команда redis-benchmark использует опцию -P для имитации реальных приложений, использующих эту функцию Redis
Команда redis-benchmark использует опцию -P для имитации реальных приложений, использующих эту функцию Redis.
Чтобы сравнить разницу, сначала запустите команду redis-benchmark со значениями по умолчанию и без конвейеризации для тестирования GET и SET:
Следующая команда выполнит те же тесты, но конвейеризирует 8 команд:
Как видно из выходных данных, при использовании конвейерной обработки наблюдается значительное улучшение производительности.
Настройка Master и ведомые узлы
tmux
- SSH на сервер 1 . Перейдите, чтобы затем скопировать . Файлы конфигурации в этом руководстве названы в соответствии с рисунком выше:
- В , прокомментируйте директиву и включите режим кластера. Порты в этом примере будут в диапазоне от 6379 до 6381.
- /redis-stable/a_master.conf
-
- В конфигурации будет аналогичным, за исключением обновления номера порта. будет использоваться позже, чтобы сконфигурировать это в ведомое устройство для соответствующего мастера, а не в директиву.
- /redis-stable/c_slave.conf
-
- Повторите этот процесс для двух оставшихся линодов, указав номера портов для всех пар «ведущий-ведомый».
сервер Мастер рабыня 1 6379 6381 2 6380 6379 3 6381 6380
Установка, начальная настройка и запуск
Рассмотрим два варианта установки — чистая инсталляция на систему Linux Ubuntu и запуск контейнера из официального докер-образа.
Операционная система Ubuntu
Обновляем список пакетов:
apt-get update
Выполняем установку:
apt-get install redis-server
Открываем конфигурационный файл:
vi /etc/redis/redis.conf
Меняем значение для директивы supervised:
supervised systemd
* данная настройка позволит инициализировать запуск Redis как службы. В соответствии с официальной документацией, это позволит нам получить больше контроля над базой данных.
Разрешаем автозапуск сервиса:
systemctl enable redis-server
Перезапускаем redis-server:
systemctl restart redis-server
Наш сервер готов к работе.
Посмотреть версию установленной СУБД можно командой:
redis-server —version
Мы должны увидеть что-то на подобие:
Redis server v=5.0.7 sha=00000000:0 malloc=jemalloc-5.2.1 bits=64 build=636cde3b5c7a3923
* в данном примере установлена версия 5. На момент обновления данной инструкции последней версией была 6.
Docker
Необходимо, чтобы в нашей системе был .
После выполняем загрузку образа Redis:
docker pull redis
Запускаем контейнер:
docker run —name redis-server -d redis
Проверим, что наш контейнер запустился:
docker ps
Мы должны увидеть что-то на подобие:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a8c30431268c redis «docke…» 4 sec… Up 3… 6379/tcp redis-server
* наш сервис запущен на порту 6379; к нему можно обращаться по имени redis-server или ID a8c30431268c.
Start and Test Redis
Now, we are ready to start the Redis server.
Start the Redis Service
Start up the systemd service by typing:
Check that the service had no errors by running:
You should see something that looks like this:
Test the Redis Instance Functionality
To test that your service is functioning correctly, connect to the Redis server with the command-line client:
In the prompt that follows, test connectivity by typing:
You should see:
Check that you can set keys by typing:
Now, retrieve the value by typing:
You should be able to retrieve the value we stored:
Exit the Redis prompt to get back to the shell:
As a final test, let’s restart the Redis instance:
Now, connect with the client again and confirm that your test value is still available:
The value of your key should still be accessible:
Back out into the shell again when you are finished:
Enable Redis to Start at Boot
If all of your tests worked, and you would like to start Redis automatically when your server boots, you can enable the systemd service.
To do so, type:
5: Настройка аварийного переключения
Любой сервер slave можно повысить до статуса master. Такая архитектура кластера позволяет обрабатывать сбои, обеспечивая целостность данных и наименьшее время простоя.
Попробуйте выполнить такую настройку вручную.
На сервере slave подключитесь к Redis:
Авторизуйтесь, указав пароль:
Отключите поведение slave:
Команда ответит:
После этого введите:
Найдите раздел # Replication:
Как и ожидалось, slave-сервер стал сервером master и теперь может принимать соединения от других машин. Его можно использовать в качестве ведущего сервера на время устранения ошибок на предыдущем сервере master.
Если в кластере есть несколько slave-серверов, после изменения master-сервера нужно соединить их с новым сервером.
Для этого можно создать скрипт, который в случае сбоя сервера master внесёт соответствующие поправки в настройки:
- Перенаправит все запросы на сервер slave.
- Выполнит на этом сервере команду SLAVEOF NO ONE. Начиная с версии Redis 1.0.0, эта команда отключает репликацию данных на сервере slave и запускает его в качестве ведущего сервера.
- Переподключит все существующие серверы slave (SLAVEOF hostname port) к новому master-серверу. Значения hostname и port нужно заменить именем хоста и портом нового master-сервера.
- Устранив неполадки на старом сервере master, можно восстановить его статус.
Существует множество средств для обеспечения такого поведения кластера.
Выберите наиболее подходящее для вашей среды решение и тщательно протестируйте его, прежде чем возникнут какие-либо сбои
Структура сервера LTSP
Что мы должны знать — это компоненты из которых состоит сервер:
- DHCP-сервер — используется для выдачи клиентам IP-адресов и информации о tftp-сервере и пути к загрузчику pxelinux. По дефолту используется dnsmasq, но можно использовать и isc-dhcp-server.
- iPXE — сетевой загрузчик, который показывает меню начальной загрузки клиента.
- mksquashfs — создает сжатую копию образа, который будет использоваться при работе клиента.
- TFTP-сервер — отдает по tftp-протоколу загрузчик, ядро и главный конфиг .
- NFS /NBD — Транслирует образ системы в сеть.
- SSH-сервер — используется для авторизации пользователей и передачи их домашних каталогов на терминальные станции.
Шаг 5 — Переименование опасных команд
Другой элемент безопасности, встроенные в Redis, подразумевает переименование или полное удаление определенных команд, которые считаются опасными.
При использовании неавторизованными пользователями, такие команды могут использоваться для изменения конфигурации, уничтожения или выведения из строя ваших данных. Как и в случае пароля для аутентификации, переименование или отключение команд выполняется в том же разделе в файле .
Список команд, которые считаются опасными, включает: FLUSHDB, FLUSHALL, KEYS, PEXPIRE, DEL, CONFIG, SHUTDOWN, BGREWRITEAOF, BGSAVE, SAVE, SPOP, SREM, RENAME и DEBUG. Данный список не является всеобъемлющим, но переименование или удаление всех команд в этом списке служит хорошим отправным пунктом для повышения безопасности вашего сервера Redis.
Решение о том, нужно ли отключить или переименовать команду, зависит от ваших потребностей или потребностей вашего сайта. Если вы знаете, что вы не будете использовать команду, которая может быть использована злоумышленниками, тогда вы можете отключить ее. В другом случае мы рекомендуем вам переименовать ее.
Чтобы активировать или отключить команды Redis, откройте файл конфигурации еще раз:
Предупреждение. Седующие шаги с демонстрацией отключения или переименования команд являются примерами. Вы должны отключить или переименовать команды, имеющие смысл для вас. Вы можете просмотреть полный список команд самостоятельно и узнать, как они могут использоваться злоумышленниками, по адресу redis.io/commands.
Чтобы отключить команду, просто укажите пустую строку в качестве имени (обозначается парой кавычек без символов между ними), как показано ниже:
/etc/redis/redis.conf
Чтобы переименовать команду, дайте ей другое имя, как показано в приведенных ниже примерах. Переименованные команды должно быть трудно подобрать, но легко запомнить:
/etc/redis/redis.conf
Сохраните изменения и закройте файл.
После переименования команды примените изменения, перезапустив Redis:
Чтобы протестировать новую команду, откройте командную строку Redis:
Затем выполните аутентификацию:
Предположим, вы переименовали команду в , как показано в предыдущем примере. Сначала попробуйте воспользоваться первоначальной команду . Команда не будет выполнена, потому что вы переименовали ее:
Вызов переименованной команды будет успешным. Регистр не имеет значения:
После этого вы можете закрыть :
Обратите внимание, что если вы уже используете командную строку Redis, а затем перезапустите Redis, вам нужно будет повторно выполнить аутентификацию. Иначе вы получите следующую ошибку при вводе команды:. В отношении практики переименования команд в конце раздела файла есть следующее предостережение:
В отношении практики переименования команд в конце раздела файла есть следующее предостережение:
Примечание: проект Redis предпочитает использовать термины «master» и «slave», в то время как DigitalOcean предпочитает использовать варианты «primary» и «secondary». Чтобы не допустить путаницы, мы решили использовать здесь термины, используемые в документации Redis.
Это значит, что, если переименованная команда не содержится в файле AOF, либо содержится, но AOF файл не передается «slave» компонентам, не будет никаких проблем.
Учитывайте этот момент, когда будете переименовать команды. Лучшее всего переименовать команду, пока вы не используете AOF сохранение или сразу после установки, т.е. до развертывания использующего Redis приложения.
Если вы используете AOF и работаете с конфигурацией master-slave, изучите этот ответ на странице проблем проекта на GitHub. Ниже приводится ответ на вопрос автора:
Таким образом, при переименовании необходимо убедиться, что переименованные команды применяются во всех экземплярах на установках типа «master-slave».
Шаг 2 — Тестирование Redis
Как и с любым вновь устанавливаемым программным обеспечением, лучше убедиться, что Redis работает ожидаемым образом перед внесением дальнейших изменений в конфигурацию. Мы пройдемся по целому ряду способов, которые позволяют убедиться, что Redis работает правильно.
Сначала проверьте, что служба Redis запущена:
Если она запускается без ошибок, при вводе данной команды вы должны получить примерно следующий результат:
Здесь вы можете видеть, что служба Redis запущена и уже активирована, т.е. для нее настроен запуск при загрузке сервера.
Примечание: данную опцию рекомендуется использовать во многих стандартных случаях использования Redis. Однако если вы предпочитаете запускать Redis каждый раз вручную при загрузке сервера, воспользуйтесь следующей командой:
Чтобы убедиться, что Redis работает правильно, подключитесь к серверу с помощью клиента командной строки Redis :
В появившемся диалоговом окне протестируйте подключение с помощью команды
Данный вывод подтверждает, что подключение сервера активно. Затем проверьте, что вы можете задать ключи:
Запросите значение с помощью следующей команды:
Если все работает корректно, вы получите сохраненное значение:
Убедившись, что вы можете получить значение, закройте диалоговое окно Redis и вернитесь в командную строку:
В качестве последнего теста мы проверим, может ли Redis сохранять данные даже после остановки или перезапуска. Для этого необходимо перезапустить Redis:
Затем снова выполните подключение с помощью клиента командной строки:
И убедитесь, что ваше тестовое значение все еще доступно.
Значение вашего ключа должно оставаться доступным:
Выйдите в командную строку после завершения:
После этого установку Redis можно считать выполненной и готовой к работе. Однако некоторые настройки по умолчанию являются небезопасными и предоставляют злоумышленникам возможность атаковать ваш сервер и получить доступ к данным.Остальные шаги в этом руководстве описывают методы для устранения этих факторов уязвимости, как указано на официальном веб-сайте Redis. Хотя эти шаги не являются обязательными, и Redis будет функционировать, если вы решите не выполнять эти действия, но мы настоятельно рекомендуем вам выполнить описанные ниже шаги, чтобы повысить безопасность вашей системы.
Шаг 3 – Установка PHP и настройка Nginx для использования процессора PHP
Теперь у вас есть Nginx для обслуживания ваших страниц и MySQL для хранения и управления данными, однако у вас до сих пор не установлено ПО, которое может генерировать динамический контент. Для этого требуется установить PHP.
Поскольку Nginx не поддерживает нативную обработку PHP, как некоторые другие веб-серверы, вам потребуется установить , т.е. «менеджер процессов fastCGI». Мы укажем Nginx передавать запросы PHP в это программное обеспечение для обработки.
Примечание. В зависимости от поставщика облачных услуг вам может потребоваться установить хранилище Ubuntu , которое включает бесплатное программное обеспечение и программное обеспечение с открытым исходным кодом, поддерживаемое сообществом Ubuntu, прежде чем устанавливать пакет . Для этого можно ввести следующую команду:
Установите модуль с дополнительным вспомогательным пакетом , который позволит PHP взаимодействовать с серверной частью вашей базы данных. При установке будут загружены необходимые файлы ядра PHP. Введите следующее:
Теперь у вас установлены все требуемые компоненты набора LEMP, однако вам нужно внести еще несколько изменений конфигурации, чтобы Nginx использовал процессор PHP для динамического контента.
Это изменение конфигурации выполняется уровне блока сервера (блоки сервера похожи на виртуальные хосты в Apache). Откройте новый файл конфигурации блока сервера в каталоге . В этом примере новый файл конфигурации блока сервера имеет имя , хотя вы можете использовать любое желаемое имя:
Если вам потребуется восстановить конфигурацию по умолчанию, вы можете отредактировать новый файл конфигурации блока сервера, а не изменять используемый по умолчанию файл.
Добавьте в новый файл конфигурации блока следующее содержимое, которое взято с некоторыми модификациями из файла конфигурации блока сервера по умолчанию:
/etc/nginx/sites-available/example.com
Ниже описано действие этих директив и блоков расположения:
- — определяет, что будет прослушивать порт Nginx. В данном случае он будет прослушивать порт , используемый по умолчанию для протокола HTTP.
- — определяет корневой каталог документа, где хранятся файлы, обслуживаемые сайтом.
- — задает для Nginx приоритет обслуживания файлов с именем (при наличии) при запросе файла индекса.
- — определяет, какой серверный блок должен использоваться для заданного запроса вашего сервера. Эта директива должна указывать на доменное имя или публичный IP-адрес вашего сервера.
- — первый блок расположения включает директиву , которая проверяет наличие файлов, соответствующих запросу URI. Если Nginx не сможет найти соответствующий файл, будет возвращена ошибка 404.
- — этот блок расположения отвечает за фактическую обработку PHP посредством указания Nginx на файл конфигурации и файл file, который объявляет, какой сокет ассоциирован с .
- — последний блок расположения отвечает за файлы , которые Nginx не обрабатывает. При добавлении директивы из файлов в корневой каталог документа они не будут выводиться посетителям.
После добавления этого содержания следует сохранить и закрыть файл. Для активации нового серверного блока создайте символическую ссылку от нового файла конфигурации серверного блока (в каталоге ) на каталог :
Затем уберите ссылку на файл конфигурации по умолчанию из каталога :
Примечание. Если вам потребуется восстановить конфигурацию по умолчанию, вы можете сделать это посредством воссоздания символической ссылки:
Протестируйте новый файл конфигурации на ошибки синтаксиса:
При появлении сообщений о каких-либо ошибках, вернитесь и повторно проверьте ваш файл, прежде чем продолжать.
Когда вы будете готовы, перезагрузите Nginx для внесения необходимых изменений:
Это завершает установку и настройку набора LEMP. Однако будет разумно убедиться, что все компоненты могут связываться друг с другом.
Fine-Tuning the System
Open the Redis log file:
You will see some information like this:
To fix the first warning above, enter the following commands:
To fix the second warning above, create a new text file:
Paste the following text into that file:
Save and close that file. Then make it runnable and owned by the root account.
Optional:
-
If this Redis server is separate from your application server and you also installed UFW, you have to configure UFW to allow connections to the Redis port, default is 6379:
-
If you install Redis on Ubuntu 18.04, Redis will trigger an additional warning about «The TCP backlog.» To fix this warning, enter the following commands:
Create a Redis systemd Unit File
Next, we can create a systemd unit file so that the init system can manage the Redis process.
Create and open the file to get started:
Inside, we can begin the section by adding a description and defining a requirement that networking be available before starting this service:
/etc/systemd/system/redis.service
In the section, we need to specify the service’s behavior. For security purposes, we should not run our service as . We should use a dedicated user and group, which we will call for simplicity. We will create these momentarily.
To start the service, we just need to call the binary, pointed at our configuration. To stop it, we can use the Redis command, which can be executed with the binary. Also, since we want Redis to recover from failures when possible, we will set the directive to “always”:
/etc/systemd/system/redis.service
Finally, in the section, we can define the systemd target that the service should attach to if enabled (configured to start at boot):
/etc/systemd/system/redis.service
Save and close the file when you are finished.
Secure Redis
Configure a Password for Redis
Beginning with version 6, Redis maintains multi-user security through an Access Control List (ACL). Additionally, you can create a default user password. A default password might be sufficient for a single user. However, we highly recommend you use one or both of these methods.
-
Change the variable in the file to set the default password. Uncomment the existing directive, and change the default password to a more secure password.
- File: /etc/redis/redis.conf
-
-
Restart Redis to force the changes to take effect.
-
Enter and set a key and value without authenticating.
Redis returns an authentication error since you have not logged in yet.
-
Login with the command, replacing “password” with the password you configured. Redis returns an response upon a successful login.
-
Try the previous SET command again. Redis now returns an response.
Configure an Access Control List (ACL) for Redis
In a multi-user environment, we highly recommend you configure an ACL. An ACL restricts privileges and potentially dangerous commands to a subset of the users. You can create additional users in the file. Each user directive must contain a username, the keyword or to enable or disable the entry, a set of command permissions and restrictions, a set of key permissions, and the password (with a preceding symbol). To indicate all commands, use . Use to reference all key-value pairs. Redis parses each user directive from left to right, so the order of permissions and restrictions is important.
This is only a brief introduction to this topic. Create users with memorable names, strong passwords, and appropriate permissions when building your own ACL. A complete explanation of all the ACL options is available on the
Redis ACL page.
-
Display the current ACL configuration with the command. It currently shows only the default user and their privileges.
-
Edit the file and add user directives for two users. The first directive adds and assigns the password , along with access to all commands and keys. The second user directive, for , is similar except this user cannot run commands.
- File: /etc/redis/redis.conf
-
-
Restart Redis to force the changes to take effect.
-
Re-enter the Redis CLI and log in as (authenticate with the command). Execute a command. Redis now returns an response.
-
Exit and then re-enter the Redis CLI, authenticating as . Attempt to execute another to change the same key to a new value.
This attempt fails and returns a permission error.
-
Attempt to retrieve the value of this same key with a command. Redis now returns the value.
Fine-Tuning the System
Open the Redis log file:
You will see some information like this:
To fix the first warning above, enter the following commands:
To fix the second warning above, create a new text file:
Paste the following text into that file:
Save and close that file. Then make it runnable and owned by the root account.
Optional:
-
If this Redis server is separate from your application server and you also installed UFW, you have to configure UFW to allow connections to the Redis port, default is 6379:
-
If you install Redis on Ubuntu 18.04, Redis will trigger an additional warning about «The TCP backlog.» To fix this warning, enter the following commands: