Установка Redis(Ubuntu настройки подойдут и для FreeBSD) важно (версии должны быть одинаковы)

Сначала нужно установить Redis на оба сервера.

sudo apt-add-repository ppa:chris-lea/redis-server

Нажмите Enter, чтобы продолжить.

Обновите индекс пакетов сервера и установите сервер Redis:

sudo apt-get update
sudo apt-get install redis-server

Эта команда установит сервер Redis и запустит сервис.

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

redis-cli ping

Если установка и запуск Redis прошли успешно, вы увидите ответ:

PONG

Защита трафика между двумя серверами

Примечание: Данный раздел нужно выполнить на всех серверах.

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

Изолированная сеть

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

Откройте конфигурационный файл Redis:

vim /etc/redis/redis.conf

Найдите строку bind и вставьте IP-адрес изолированной сети.

bind 127.0.0.1 isolated_IP_address

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

sudo systemctl restart redis-server.service

Откройте порт Redis в брандмауэре:

sudo ufw allow 6379

Теперь серверы могут взаимодействовать друг с другом. Чтобы убедиться в этом, используйте командную строку redis-cli. Запустите:

redis-cli -h isolated_IP_address ping
PONG

Теперь сервер Redis может принимать внешние соединения в изолированной сети.

Инструменты шифрования

Если сервер развёрнут вне изолированной среды, обязательно нужно защитить трафик между серверами. Существует несколько способов сделать это:

  • Инструмент stunnel – инструмент для туннелирования. Позволяет настроить входящий туннель на сервере redis и исходящий туннель на сервере web. Сервер web будет подключаться к локальному порту для связи с удаленным сервисом Redis.
  • Инструмент spiped: сервер web будет использоваться в качестве клиента spiped.на каждом сервере нужно создать юнит-файл system. Сервер web будет подключаться к локальному порту для связи с удаленным сервисом Redis.
  • PeerVPN: оба сервера будут помещены в VPN. Сервер web будет подключаться к серверу redis с помощью IP-адреса VPN.

Выберите один из предложенных методов и зашифруйте трафик между серверами.

Настройка master-сервера Redis

Теперь все готово к настройке ведущего сервера Redis.

Откройте /etc/redis/redis.conf в текстовом редакторе:

vim /etc/redis/redis.conf

Найдите параметр tcp-keepalive и установите значение 60. Так Redis сможет определять сбои сети или сервиса.

tcp-keepalive 60

Затем найдите директиву requirepass. Выберите сложный пароль и введите его в эту строку. Ранее вы защитили трафик Redis от постороннего вмешательства, а теперь, с помощью директивы requirepass, вы настроили аутентификацию Redis. Redis не ограничивает количество попыток ввода пароля, потому пароль должен быть очень сложным – иначе его могут подобрать с помощью brute force атаки.

requirepass your_redis_master_password

Теперь нужно установить несколько опциональных параметров. Эти настройки зависят от целей сервера.

Если вы не хотите, чтобы Redis автоматически сбрасывал старые и менее используемые ключи по мере заполнения, отключите автоматический сброс ключей:

maxmemory-policy noeviction

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

appendonly yes
appendfilename "redis-staging-ao.aof"

Сохраните и закройте файл.

Перезапустите сервис Redis.

sudo systemctl restart redis-server.service

Теперь master-сервер нужно протестировать.

Тестирование master-сервера Redis

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

redis-cli

Попробуйте запустить команду, не проходя аутентификацию:

info replication

Сервер должен ответить:

NOAUTH Authentication required.

Если сервер требует авторизоваться, значит, настройка прошла успешно.

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

auth your_redis_master_password

Сервер ответит:

OK

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

info replication
# Replication
role:master
connected_slaves:0
master_repl_offset:0
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0

Создайте тестовый ключ для проверки репликации данных. Например:

set test 'this key was defined on the master server'

Вернитесь в оболочку операционной системы:

exit

Настройка slave-сервера Redis

Теперь нужно подготовить ведомый сервер к взаимодействию с master-сервером.

Перейдите на slave-сервер и откройте файл /etc/redis/redis.conf.

vim /etc/redis/redis.conf

Найдите строку slaveof и через пробел укажите в ней IP-адрес и порт для безопасного подключения к master-серверу Redis. По умолчанию сервер Redis прослушивает порт 6379 локального интерфейса, однако при настройке шифрования порт может измениться.

Значения зависят от метода защиты трафика (раздел 2).

Если серверы работают в изолированной сети, вам нужно использовать IP-адрес этой сети и стандартный порт 6379.

slaveof isolated_IP_address 6379

Если вы используете stunnel или spiped, укажите локальный интерфейс (127.0.0.1) и номер локального порта, который используется в качестве туннеля. Например:

slaveof 127.0.0.1 8000

Если вы используете PeerVPN, укажите IP-адрес VPN и стандартный порт Redis. Например:

slaveof 10.8.0.1 6379

Общий синтаксис директивы slaveof имеет такой вид:

slaveof ip_to_contact_master port_to_contact_master

Раскомментируйте строку masterauth и укажите в ней пароль master-сервера Redis.

masterauth your_redis_master_password

Чтобы предотвратить несанкционированный доступ, установите пароль для slave-сервера.

requirepass your_redis_slave_password

Сохраните и закройте файл.

Тестирование slave-сервера и обновление настроек

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

redis-cli

Запросите тестовый ключ:

get test

На экране появится:

(nil)

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

exit

Перезапустите Redis на сервере slave:

sudo systemctl restart redis-server.service

Это обновит настройки сервиса.

Попробуйте снова подключиться к локальному экземпляру Redis:

redis-cli

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

get test
(error) NOAUTH Authentication required.

Пройдите аутентификацию:

auth your_redis_slave_password
OK

Попробуйте ещё раз получить доступ к тестовому ключу. Теперь данные будут доступны:

get test
"this key was defined on the master server"

Репликация данных запустилась сразу же после обновления настроек сервиса Redis.

Чтобы убедиться в этом, используйте команду info, которая выводит сведения о репликации.

Info by

https://www.8host.com/blog/replikaciya-dannyx-redis-v-ubuntu-16-04/

server slave config

daemonize yes
pidfile /var/run/redis/redis-server.pid
port 6379
tcp-backlog 511
bind 127.0.0.1
timeout 0
tcp-keepalive 60
loglevel notice
logfile /var/log/redis/redis-server.log
databases 16
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
dir /var/lib/redis
slaveof ip_master_server 6379
masterauth 9yW1weBIin9KDUZ
slave-serve-stale-data yes
slave-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-disable-tcp-nodelay no
slave-priority 100
requirepass password
appendonly no
appendfilename "appendonly.aof"
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
lua-time-limit 5000
slowlog-log-slower-than 10000
slowlog-max-len 128
latency-monitor-threshold 0
notify-keyspace-events ""
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-entries 512
list-max-ziplist-value 64
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes 3000
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10
aof-rewrite-incremental-fsync yes

server master config

bind ip_server
protected-mode yes
port 6379
tcp-backlog 511
timeout 0
tcp-keepalive 300
daemonize yes
supervised no
pidfile /var/run/redis/redis.pid
loglevel notice
logfile /var/log/redis/redis.log
databases 16
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
dir /var/db/redis/
slave-serve-stale-data yes
slave-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-disable-tcp-nodelay no
slave-priority 100
requirepass 9yW1weBIin9KDUZ
maxmemory 64mb
maxmemory-policy volatile-lru
lazyfree-lazy-eviction no
lazyfree-lazy-expire no
lazyfree-lazy-server-del no
slave-lazy-flush no
appendonly no
appendfilename "appendonly.aof"
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
aof-use-rdb-preamble no
lua-time-limit 5000
slowlog-log-slower-than 10000
slowlog-max-len 128
latency-monitor-threshold 0
notify-keyspace-events ""
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-size -2
list-compress-depth 0
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes 3000
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10
aof-rewrite-incremental-fsync yes

results matching ""

    No results matching ""