Redis. Кластер

Материал из megapuper
Перейти к: навигация, поиск

Установка, настройка и управление кластером Redis на Debian Stretch. Мануал является переводом и адаптацией англоязычной статьи.


Настройка узлов Master и Slave

В данной инструкции каждый master будет подключен к одному slave.

Официальная документация рекомендует использовать 6 узлов — по одному экземпляру Redis на узле, что позволяет обеспечить большую надежность, но возможно использовать три узла со следующей топологией соединений:


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

Ставим Redis на каждом сервере через менеджер пакетов

# apt install redis-server


Для создания кластера и управления понадобится скрипт Ruby, который находится в /usr/share/doc/redis-tools/examples/redis-trib.rb
Если Ruby не установлен, ставим на основной сервер:

# apt install ruby

Так же понадобится пакет Redis для Ruby:

# gem install redis


Далее выполняем следующие шаги:

Подключаемся к серверу 1. Находим конфиг /etc/redis/redis.conf и делаем из него два, master и slave, оригинальный можно грохнуть.

# cp redis.conf c_slave.conf
# mv redis.conf a_master.conf


В a_master.conf, определяем директиву bind и активируем режим кластера. Порты в данном случае будут варьироваться в диапазоне от 6379 до 6381.

bind 0.0.0.0
protected-mode no
port 6379
pidfile /var/run/redis_6379.pid
cluster-enabled yes
cluster-config-file nodes-6379.conf
cluster-node-timeout 15000

Для каждого узла в проектируемом кластере Redis требуется доступность не только определенного порта, но и порта выше 10000. На сервере 1 оба порта TCP 6379 и 16379 должны быть открыты. Проверяем, что файрвол настроен корректно.


В c_slave.conf настройки будут аналогичны, кроме номера порта. Позднее для настройки режима slave, соответствующего определенному узлу master, будет использоваться скрипт redis-trib.rb

bind 0.0.0.0
protected-mode no
port 6381
pidfile /var/run/redis_6381.pid
cluster-enabled yes
cluster-config-file nodes-6381.conf
cluster-node-timeout 15000


Повторяем для оставшихся двух серверов, определив порты для всех пар master-slave.

Server Master Slave IP
1 6379 6381 172.16.10.45
2 6380 6379 172.16.10.46
3 6381 6380 172.16.10.50


Запуск узлов Master и Slave

Подключаемся к серверу 1 и запускаем оба экземпляра Redis

# redis-server /etc/redis/a_master.conf
# redis-server /etc/redis/c_slave.conf

Для других двух серверов меняем a_master.conf и c_slave.conf соответствующим конфигурационным файлом. Все узлы master будут запущены в режиме кластера.

               _._
          _.-``__ -._
     _.-``    `.  `_.  -._           Redis 3.2.6 (00000000/0) 64 bit
 .-`` .-```.  ```\/    _.,_ -._
(    '      ,       .-`  | `,    )     Running in cluster mode
|`-._`-...-` __...-.``-._|'` _.-'|     Port: 6379
|    `-._   `._    /     _.-'    |     PID: 1221
 `-._    `-._  `-./  _.-'    _.-'
|`-._`-._    `-.__.-'    _.-'_.-'|
|    `-._`-._        _.-'_.-'    |           http://redis.io
 `-._    `-._`-.__.-'_.-'    _.-'
|`-._`-._    `-.__.-'    _.-'_.-'|
|    `-._`-._        _.-'_.-'    |
 `-._    `-._`-.__.-'_.-'    _.-'
     `-._    `-.__.-'    _.-'
         `-._        _.-'
             `-.__.-'


Создание кластера с использованием встроенного скрипта Ruby

На данном этапе на каждом сервере запущены по два независимых узла master. Дальнейшая установка кластера происходит с помощью скрипта Ruby.


Создаём кластер, передав список пар ip:port серверов, которые будут играть роль master

# ./redis-trib.rb create 172.16.10.45:6379 172.16.10.46:6380 172.16.10.50:6381


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