Настройка redis centos 7

Обновлено: 02.07.2024

Хорошо известным средством повышения эффективности современных компьютерных приложений является включение кэширования. Кэширование просто означает хранение активных данных во временном хранилище, чтоб

Содержание:

Хорошо известным средством повышения эффективности современных компьютерных приложений является включение кэширования. Кэширование просто означает хранение активных данных во временном хранилище, чтобы упростить и ускорить доступ и Redis - одно из самых популярных решений для кеширования, которое поддерживает большинство языков программирования, включая Node.js, Python, PHP, Джава, C, и многое другое.

Некоторые из его ключевых функций включают встроенную репликацию, кластерный режим, разделение (распределение данных между несколькими экземплярами), транзакции, уведомления о событиях ключевого пространства, сценарии Lua, массовую вставку данных в экземпляр Redis за короткое время, оптимизацию памяти. и многое другое. Важно отметить, что он поддерживает API который позволяет расширять функциональность Redis с помощью внешних модулей.

В этой статье мы объясним вам, как установить, настроить и протестировать Redis сервер на CentOS 7 Linux.

Установка Redis Server на CentOS 7

1. Установить Redis пакет на CentOS 7, вам необходимо установить репозиторий EPEL в вашей системе с помощью диспетчера пакетов YUM, как показано.

2. После установки EPEL вы можете установить Redis пакет из репозитория следующим образом.

3. После того, как вы установили пакет, вам необходимо настроить свой сервер для достижения высокой производительности при использовании Redis. Вам необходимо выполнить некоторые настройки в ядре, как описано.

Во-первых, убедитесь, что вы настроили пространство подкачки на сервере. Рекомендуется ставить столько свопа, сколько памяти.

4. Затем установите для параметра Linux overcommit memory значение 1, добавив vm.overcommit_memory = 1 в /etc/sysctl.conf Файл конфигурации.

а затем примените изменение, перезагрузив систему. Или немедленно включите настройку, выполнив следующую команду.

Также убедитесь, что функция ядра прозрачных огромных страниц отключена, поскольку она отрицательно влияет как на использование памяти, так и на задержку, используя следующую команду echo.

Настройка Redis Server на CentOS 7

5. Конфигурация по умолчанию для Redis является /etc/redis.conf. Прежде чем вы сможете редактировать его, создайте его резервную копию следующим образом. Это позволяет вам вернуться к резервной копии конфигураций по умолчанию в случае каких-либо ошибок.

6. Затем откройте оригинал Redis файл конфигурации для редактирования с помощью любого из ваших любимых текстовых редакторов, как показано.

Существует несколько директив конфигурации, их значение и предполагаемое использование доступно и хорошо объяснено в файле.

Типичный пример конфигурации - разрешение удаленного доступа к серверу Redis. По умолчанию Redis настроен на прием подключений только на локальном сервере, на котором он запущен, то есть на петлевой интерфейс (127.0.0.1) и слушает порт 6379.

привязать 127.0.0.1 привязать 10.0.2.15 192.168.0.105

8. Чтобы принимать соединения на другом порту, измените значение директивы порта.

После внесения всех необходимых изменений сохраните файл и выйдите из него.

9. На этом этапе вы настроили свой сервер для эффективной работы Redis и настроил сервер Redis для работы так, как вы хотите. Теперь вам нужно запустить службу Redis, а пока включить ее автоматический запуск при каждой перезагрузке системы и проверить ее состояние с помощью утилиты systemctl, как показано.

10. Чтобы проверить интерфейс и порт, которые прослушивает сервер Redis, используйте команду netstat.

11. Если в вашей системе запущена служба firewalld, вам необходимо открыть порт 6379 в конфигурации брандмауэра, чтобы разрешить внешние подключения к серверу Redis.

Тестирование подключения к серверу Redis

12. Чтобы проверить подключение к серверу Redis, вы можете открыть клиентскую программу Redis и выполнить тестовую команду (в данном случае перечислить подключенных клиентов) следующим образом.

Теперь вы можете создавать быстрые, динамичные и современные приложения на своем CentOS 7 сервер, использующий Redis. Обратитесь к документации Redis для получения дополнительной информации и параметров конфигурации. Если у вас есть какие-либо вопросы или мысли, которыми вы можете поделиться, воспользуйтесь формой обратной связи, чтобы связаться с нами.

Redis – хранилище данных с открытым исходным кодом в памяти. Реляционная база данных Redis известна своей гибкостью, производительностью, масштабируемостью и широкой поддержкой языков.

Redis был разработан для использования доверенными клиентами в безопасной среде и не имеет надежных функций защиты. Однако у Redis есть несколько функций безопасности, среди которых базовая незашифрованная парольная аутентификация, переименование и отключение команды. В этом мануале приведены инструкции по настройке этих функций безопасности, а также некоторые другие параметры, которые могут повысить защиту установки Redis на CentOS 7.

Обратите внимание, что в этом мануале не рассматриваются ситуации, когда сервер Redis и клиентские приложения находятся на разных хостах или в разных центрах обработки данных. Установки, в которых трафик Redis попадает в ненадежную сеть, потребуют другого набора конфигураций, включая настройку прокси SSL или VPN между машинами Redis.

Требования

  • Сервер CentOS 7, настроенный по этому мануалу.
  • Брандмауэр Firewalld (по мануалу Настройка брандмауэра FirewallD в CentOS 7).

1: Установка Redis

Установить EPEL можно с помощью yum:

sudo yum install epel-release

Теперь можно установить Redis:

sudo yum install redis -y

Это может занять несколько минут. По завершении установки запустите сервис Redis:

sudo systemctl start redis.service

Чтобы добавить Redis в автозагрузку, введите команду:

sudo systemctl enable redis

Проверьте состояние Redis:

Убедившись, что Redis запущен, введите команду:

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

2: Защита Redis с помощью брандмауэра

Эффективный способ защитить Redis – защитить сервер, на котором он работает. Вы можете сделать это, привязав Redis к локальному хосту или к внутреннему IP-адресу и настроив брандмауэр.

Однако если вы хотите настроить кластер Redis с помощью мануала Настройка кластера Redis на CentOS 7, вам нужно будет разрешить внешние подключения, что не так безопасно, как привязка к локальному хосту или внутреннему IP-адресу.

Откройте файл Redis:

sudo vi /etc/redis.conf

Найдите строку bind и убедитесь, что она раскоментирована:

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

Если вы выполнили предварительные требования к мануалу и установили firewalld на свой сервер, и вы не планируете подключаться к Redis с другого хоста, вам не нужно добавлять дополнительные правила брандмауэра для Redis. В конце концов, любой входящий трафик по умолчанию будет сброшен, если его явно не разрешают правила брандмауэра. Поскольку автономная установка сервера Redis по умолчанию прослушивает только интерфейс loopback (127.0.0.1 или localhost), вы можете не переживать по поводу входящего трафика на порт по умолчанию.

Если, однако, вы планируете получать доступ к Redis с другого хоста, вам нужно внести некоторые изменения в конфигурацию firewalld, используя команду firewall-cmd. Опять же, вы должны разрешать доступ к серверу Redis, используя внутренние IP-адреса клиентов, чтобы ограничить количество хостов, у которых есть доступ к сервису.

Добавьте выделенную зону Redis в брандмауэр firewalld:

sudo firewall-cmd --permanent --new-zone=redis

Затем укажите, какой порт вы хотите открыть. Redis использует порт 6397 по умолчанию:

sudo firewall-cmd --permanent --zone=redis --add-port=6379/tcp

Затем укажите внутренние IP-адреса, которые могут пройти брандмауэр и получить доступ к Redis:

sudo firewall-cmd --permanent --zone=redis --add-source=client_server_private_IP

Затем перезапустите брандмауэр, чтобы обновить правила:

sudo firewall-cmd --reload

Когда брандмауэр увидит пакет с IP-адреса клиента, он применит к этому соединению правила в выделенной зоне Redis. Все остальные соединения будут обрабатываться в зоне по умолчанию public. Сервисы в зоне по умолчанию применяются к каждому соединению, а не только к тем, которые не соответствуют другим зонам, поэтому вам не нужно добавлять другие службы (например, SSH) в зону Redis – эти правила будут применяться к соединению автоматически.

Если вы используете брандмауэр Iptables, вам необходимо предоставить клиентам доступ к порту Redis, для чего нужны следующие команды:

sudo iptables -A INPUT -i lo -j ACCEPT
sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
sudo iptables -A INPUT -p tcp -s client_servers_private_IP/32 --dport 6397 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
sudo iptables -P INPUT DROP

Обязательно сохраните правила брандмауэра Iptables с помощью механизма, предоставляемого вашим дистрибутивом.

Для защиты Redis подойдет любой брандмауэр. Важно, чтобы брандмауэр работал и защищал сервер от посторонних пользователей.

3: Настройка пароля Redis

Если вы установили Redis с помощью мануала Настройка кластера Redis на CentOS 7, вам необходимо настроить для него пароль.

Если у вашего кластера уже есть пароль, в этом разделе вы узнаете, как сделать его более надежным.

Настраивая пароль, вы включаете одну из встроенных функций Redis – команду auth, которая требует у клиента пройти аутентификацию, прежде чем открыть ему доступ к БД. Как и параметр bind, паоль настраивается в конфигурационном файле /etc/redis.conf.

sudo vi /etc/redis.conf

Найдите раздел SECURITY и найдите закомментированную директиву:

Обратите внимание, при каждом запуске эта команда будет генерировать один и тот же пароль. Чтобы создать другой пароль, измените слово в кавычках.

echo "help-me" | sha256sum

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

Если вы предпочитаете более короткие пароли, используйте вместо этого следующую команду. Снова измените слово в кавычках, чтобы она не генерировала тот же пароль.

echo "help-me" | sha1sum

Установив пароль, сохраните и закройте файл.

sudo systemctl restart redis.service

Чтобы проверить, работает ли пароль, перейдите в командную строку Redis:

Чтобы проверить работоспособность пароля Redis, используйте такую последовательность команд. Первая команда пытается присвоить значению без аутентификации.

Она не сработает, так как для выполнения операции нужен пароль.

(error) NOAUTH Authentication required.

Следующая команда проходит аутентификацию с паролем, указанным в файле конфигурации Redis.

Redis подтверждает, что вы прошли аутентификацию:

После этого повторите предыдущую команду, теперь операция будет выполнена успешно:

Эта команда извлечет значение нового ключа:

Эта команда закроет redis-cli:

Можно также использовать exit.

Теперь будет очень трудно получить несанкционированный доступ к Redis. Обратите внимание, что без SSL или VPN посторонние пользователи могут перехватить незашифрованный пароль, если вы подключаетесь к Redis удаленно.

4: Переименование команд

Еще одна встроенная функция безопасности Redis позволяет вам переименовывать или полностью отключать определенные команды, которые считаются опасными. Злоумышленники могут использовать такие команды для перенастройки, уничтожения или повреждения данных. Вот краткий список опасных команд:

  • FLUSHDB
  • FLUSHALL
  • KEYS
  • PEXPIRE
  • DEL
  • CONFIG
  • SHUTDOWN
  • BGREWRITEAOF
  • BGSAVE
  • SAVE
  • SPOP
  • SREM RENAME DEBUG

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

Отключать или переименовывать команду – это зависит от конкретной ситуации. Если вы знаете, что никогда не будете использовать опасную команду, вы можете ее отключить. В противном случае вы должны переименовать ее.

Как и пароль, переименование или отключение команд настраивается в разделе SECURITY файла /etc/redis.conf. Откройте файл:

sudo vi /etc/redis.conf

Важно! Далее в мануале приведены общие примеры. Вы должны отключить или переименовать команды, которые важны в вашей конкретной ситуации. Вы можете узнать больше о вредоносном использовании команд на redis.io/commands.

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

Чтобы переименовать команду, дайте ей другое имя, как в приведенных ниже примерах. Переименованные команды другим пользователям должно быть трудно угадать, а вам – легко запомнить.

rename-command CONFIG ""
rename-command SHUTDOWN SHUTDOWN_MENOT
rename-command CONFIG ASC12_CONFIG

Сохраните и закройте файл. Перезапустите Redis:

sudo service redis-server restart

Чтобы проверить новую команду, откройте командную строку Redis:

Пройдите аутентификацию, используя пароль, который вы определили ранее:

auth your_redis_password
OK

Предположим, что вы переименовали команду CONFIG в ASC12_CONFIG; в таком случае попытка запустить команду config должна завершиться ошибкой.

config get requirepass
(error) ERR unknown command 'config'

Теперь сработает переименованная команда:

asc12_config get requirepass
1) "requirepass"
2) "your_redis_password"

Обратите внимание, если вы перезагружаете Redis, не закрыв перед этим командную строку, вам необходимо повторно пройти аутентификацию. В противном случае вы получите эту ошибку:

NOAUTH Authentication required.

Важно! Что касается переименования команд, в конце раздела SECURITY в файле /etc/redis.conf содержится предостерегающее заявление:

Please note that changing the name of commands that are logged into the AOF file or transmitted to slaves may cause problems.

Если вы используете AOF в установке master-slave, GitHub советует вот что:

Команды регистрируются в AOF и реплицируются на slave так же, как отправляются; поэтому если вы попытаетесь воспроизвести AOF на экземпляре, который не поддерживает таких же переименованных команд, вы можете столкнуться с конфликтом.

Лучший способ избежать проблем с переименованием в таких случаях – убедиться, что переименованные команды применяются ко всем экземплярам установки master-slave.

5: Права на файлы и каталог данных

Чтобы проверить это, используйте grep:

ls -l /var/lib | grep redis
drwxr-xr-x 2 redis redis 4096 Aug 6 09:32 redis

Вы увидите, что каталог данных Redis принадлежит пользователю redis и группе redis. Такие права собственности безопасны, но права доступа к каталогу (755) – нет. Чтобы только пользователь Redis имел доступ к папке и ее содержимому, измените права доступа на 770:

sudo chmod 770 /var/lib/redis

Также нужно изменить права доступа к конфигурационному файлу. По умолчанию это 644, файл принадлежит пользователю и группе root:

ls -l /etc/redis.conf
-rw-r--r-- 1 root root 30176 Jan 14 2014 /etc/redis.conf

Такие права доступа (644) позволяют всем пользователям читать файл. Это очень рискованно, так как файл конфигурации содержит незашифрованный пароль, который вы настроили в разделе 4. Вам необходимо изменить права собственности и права доступа к файлу конфигурации. В идеале, он должен принадлежать пользователю redis и группе redis. Для этого запустите следующую команду:

sudo chown redis:redis /etc/redis.conf

Теперь передайте все права на чтение и запись владельцу файла:

sudo chmod 660 /etc/redis.conf

Проверить права может эта команда:

ls -l /etc/redis.conf
total 40
-rw------- 1 redis redis 29716 Sep 22 18:32 /etc/redis.conf

sudo service redis-server restart

Заключение

Чтобы защитить Redis в небезопасной сети, вам придется использовать прокси SSL, как рекомендовано разработчиками Redis в официальном руководстве по безопасности Redis.

Redis - это многоплатформенное программное обеспечение для хранения данных с открытым исходным кодом, написанное на языке ANSI C и использующее наборы данных непосредственно в памяти, что позволяет достичь очень высокой эффективности. Redis поддерживает несколько языков программирования, включая Lua, C, Java, Python, Perl, PHP и многие другие языки. Размер кода redis очень маленький, всего около 30000 строк, он делает только очень маленькие вещи, но делает это очень хорошо. Несмотря на то, что он работает в памяти, данные сохраняются, Redis обладает высокой надежностью и поддерживает кластеры, которые могут обеспечить безопасность ваших данных.

Build Redis

монтаж

Введите каталог исходного файла.
cd src
Скопируйте сервер и клиент Redis в / usr / local / bin.
cp redis-server redis-cli /usr/local/bin
Лучше всего скопировать дозорного, тест и проверить.
cp redis-sentinel redis-benchmark redis-check-aof redis-check-dump /usr/local/bin
Создайте папку конфигурации Redis.
mkdir /etc/redis
в / var / lib / redis
Создать действительный каталог для сохранения данных
mkdir -p /var/lib/redis/6379

Системные параметры

redis.conf

redis.conf - это файл конфигурации redis, но вы увидите, что имя этого файла - 6379.conf, а этот номер - сетевой порт, который прослушивает redis. Если вы хотите запустить более одного экземпляра Redis, это имя рекомендуется.
Скопируйте файл redis.conf примера в/etc/redis/6379.conf。
cp redis.conf /etc/redis/6379.conf
Теперь отредактируйте этот файл и настройте параметры.
vi /etc/redis/6379.conf

daemonize

Установите для daemonize значение no, systemd необходимо, чтобы он выполнялся на переднем плане, иначе redis внезапно зависнет
daemonize no

pidfile

Установите pidfile в /var/run/redis_6379.pid.
pidfile /var/run/redis_6379.pid

Если вы не собираетесь использовать порт по умолчанию, вы можете изменить его.
port 6379

loglevel

Установите уровень журнала.
loglevel notice

logfile

Измените путь к файлу журнала.
logfile /var/log/redis_6379.log

Установите каталог в / var / lib / redis / 6379
dir /var/lib/redis/6379

безопасности

Вот несколько операций, которые могут улучшить безопасность.
Unix sockets
Во многих случаях клиентская программа и серверная программа работают на одном компьютере, поэтому нет необходимости отслеживать сокет в сети. Если это похоже на ваше использование, вы можете использовать Unix сокет вместо сетевого сокета, для которого вам нужно настроить порт
равно 0, а затем настройте следующие параметры, чтобы включить сокет Unix.
Установить файл сокета сокета unix.
unixsocket /tmp/redis.sock
Ограничьте права доступа к файлу сокета.
unixsocketperm 700
Теперь, чтобы сделать redis-cli доступным, следует использовать параметр -s, чтобы указать на файл сокета.
redis-cli -s /tmp/redis.sock
requirepass
Вам может потребоваться удаленный доступ. Если это так, вам следует установить пароль, чтобы вас попросили ввести пароль перед каждой операцией.
requirepass "bTFBx1NYYWRMTUEyNHhsCg"

rename-command
Представьте вывод следующей команды. Да, это выведет конфигурацию сервера, поэтому вам следует запретить этот доступ, когда это возможно.
CONFIG GET *
Чтобы ограничить или даже запретить эту или другие команды, вы можете использовать команду переименования
Команда . Вы должны предоставить имя команды и альтернативное имя. Если вы хотите запретить это, вам нужно установить в качестве имени замены пустую строку, чтобы было безопаснее запретить кому-либо угадывать имя команды.
rename-command FLUSHDB "FLUSHDB_MY_SALT_G0ES_HERE09u09u"rename-command FLUSHALL ""rename-command CONFIG "CONFIG_MY_S4LT_GO3S_HERE09u09u"

314490-02dcab5bb3da6a45

Используйте пароль для доступа через сокет Unix и изменения команд
Снимок
По умолчанию redis будет периодически выгружать набор данных в каталог, который мы установилиdump.rdbфайл. Вы можете использовать сохранить
Команда настраивает частоту сброса, ее первый параметр - это временной интервал в секундах, а второй параметр - это количество изменений в файле данных.
Каждые 15 минут и как минимум один ключ был изменен.
save 900 1

Каждые 5 минут и как минимум 10 ключей были изменены.
save 300 10

Ключ менялся не менее 10 000 раз в 1 минуту.
save 60 10000

Файл /var/lib/redis/6379/dump.rdb
содержит данные дампа данных, установленных в памяти с момента последнего сохранения. Поскольку сначала создается временный файл, а затем заменяется предыдущий файл дампа, здесь нет проблем с повреждением данных, вам не нужно беспокоиться, вы можете скопировать этот файл напрямую.

Начать при загрузке
Вы можете использовать systemd, чтобы добавить redis в список загрузки системы.
Скопируйте файл init_script примера в /etc/init.d
, обратите внимание на номер порта, представленный именем скрипта.
cp utils/redis_init_script /etc/init.d/redis_6379

Теперь мы хотим использовать systemd, поэтому в / etc / systems / system
Создайте файл модуля с именем redis_6379.service в

vi /etc/systemd/system/redis_6379.service

Redis

Redis (REmote DIctionary Server) - это нереляционная высокопроизводительная СУБД, сетевое хранилище данных типа «ключ - значение».

Отличие Redis от других хранилищ состоит в том, что значения ключей не ограничиваются строками; есть поддержка таких абстрактных типов данных, как строки, списки, множества, хэш-таблицы и другие.

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

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

Изначально установку Redis сервера рекомендуется проводить из репозиториев используемой операционной системы. Предполагается, что последующие команды будут выполняться от имени пользователя root или при использование sudo (если Вы авторизованы не от пользователя root, рекомендуем выполнить sudo su).

Установка на DEB дистрибутивы (Ubuntu/Debian)

Сначала выполним обновление пакетов:

После чего непосредственно выполнив установку Redis сервера:

После завершения установки проверим работу установленного сервиса:

В случае успешной установки в ответ придет текст - PONG, если сервис не установился или не запустился, на экран будет выведена ошибка, о невозможности подключится к сервису или отсутствии команды redis-cli .

Если Redis сервер установлен и запустился, то он будет ожидать подключение на локальном интерфейсе 127.0.0.1 (localhost), порт стандартный - 6379.

Установка на RHEL (CentOS/BitrixOS)

Процесс установки почти не отличается от установки на Debian дистрибутивы. Сначала обновляем пакеты:

Выполняем установку Redis сервера:

Запускаем сервис и добавляем его в автозагрузку:

После чего проверим его работу:

В независимости от используемого дистрибутива Вы всегда можете установить последнюю версию Redis сервера, собрав её из исходных кодов по инструкции с официального сайта проекта Redis:

Настройка Redis

Для Ubuntu и Debian основной конфигурационный файл Redis сервера Вы найдете по пути /etc/redis/redis.conf, в CentOS (а также BitrixOS) конфигурация располагается в файле /etc/redis.conf.

Наиболее интересным будет параметр maxmemory , он задает ограничение использования оперативной памяти для хранения данных в Redis. По умолчанию Redis может использовать всю доступную память сервера, поэтому если сервер не обладает достаточным количеством постоянно свободной памяти (Вы можете просмотреть информацию о используемой памяти командой free -m ), то стоит задать этот параметр. Самым простым решением для выбора максимального объема памяти будет разделить среднее значение нескольких показаний свободной памяти ( free -m ) пополам.

Например, в течение часа показатели free -m были следующими:

Также в данном файле стоит обратить внимание на следующие параметры:

  • maxclients - количество разрешенных клиентов;
  • tcp-backlog - количество соединений которые могут находится в очереди, если все возможные соединения заняты;
  • save - условия, при которых данные будут записываться на диск. Данные Redis хранятся в оперативной памяти и в зависимости от значений save сохраняются на диск, что замедляет производительность, но повышает надежность хранения данных. Условию save передается два значение: количество секунд и количество изменений, если за указанное количество происходит указанное количество изменений, то данные будут сохранены на диск. По умолчанию параметры выглядят так:

save 900 1 - сохранить, если за 900 секунд будет хотя бы одно изменение;

save 300 10 - сохранить, если за 300 секунд будет хотя бы 10 изменений;

save 60 10000 - сохранить, если за 60 секунд будет 10000 и более изменений.

После внесения каких-либо изменений в конфигурационный файл Redis необходимо перезапустить.

Заключение

Теперь Вы знаете, как правильно устанавливать и настраивать Redis. Больше информации о конфигурации Redis сервера Вы можете получить из его документации:

Читайте также: