Создание кластера Redis

Redis

Обзор

В последнее время хочу написать несколько небольших проектов --- углубить понимание теоретических знаний (таких как zk, redis, kafaka и т.д.), начнем с построения окружения В этой статье создается кластер Redis с шестью серверами, включая 3 ведущих и 3 подчиненных (по одному подчиненному для каждого главного), в основном на следующих шагах. (搭建集群之前希望你懂redis cluster的原理!!)

  1. переустановить
  2. Запустить шесть redis-серверов в кластерном режиме, порты (7000-7005)
  3. Шесть серверов создают кластер (используя параметр --cluster в redis-cli)
  4. Пароль на каждом конфигурации сервера

Redis скачать и установить

# 下载
wget http://download.redis.io/releases/redis-5.0.7.tar.gz
tar -xzvf redis-5.0.7.tar.gz
mv redis-5.0.7 redis
# 编译 安装
cd redis
make  //(可能需要先安装gcc: yum install gcc)
make install
make clean

Запустите шесть серверов Redis в кластерном режиме.

подготовка файла redis.conf

Режим кластера серверов Redis требует специальной настройки, приведенной ниже для справки.

port 7000 # server端口,6台server对应7000-7005。
# bind 127.0.0.1 //这一行要注释,否则无法远程连接
cluster-enabled yes
cluster-config-file nodes.conf //node.conf文件不用管。
cluster-node-timeout 5000
appendonly yes //aof
daemonize yes 
protected-mode no

Подготовьте файлы конфигурации для шести серверов

 mkdir redis-cluster
 cd redis-cluster
 mkdir 7000 7001 7002 7003 7004 7005

Затем скопируйте файл redis.conf в каталог с 7000 по 7005 (только порт отличается для каждого redis.conf)

запустить сервер

Для каждого каталога запустите сервер

redis-server redis.conf

Здесь у нас есть 6 серверов redis (порты 7000-7005), запущенных в режиме кластера, но каждому серверу не назначен слот, поэтому он не может предоставлять внешние сервисы в это время.

Построение кластера (назначение слотов)

Существуют различные решения для управления кластером redis (видел полезный ruby ​​в интернете, но не углублялся), здесь я использую опцию --cluster команды redis-cli, предоставляемой redis. Следующая команда сформирует кластер из шести серверов 7000-7005. Коэффициент репликации равен 1, поэтому будет 3 мастера и 3 ведомых. 16384 слота будут распределены как можно более равномерно для 3 мастеров, а 3 ведомых устройства будут реплицироваться от своих мастеров асинхронно.

redis-cli --cluster create 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 --cluster-replicas 1

На этом этапе весь кластер может предоставлять услуги внешнему миру.

установка пароля

Подключитесь к каждому серверу через redis-cli, а затем установите пароль

 config set masterauth [password]\n
 config set requirepass [password]\n

напиши в конце

  1. Пароль должен быть установлен последним, иначе при построении кластера будет сообщено об ошибке авторизации.
  2. Если требуется доступ к внешней сети, адрес хоста после опции redis-cli --cluster выше должен быть изменен на внешний IP-адрес хоста (поскольку ошибка Moved обрабатывается клиентом, клиент узнает внешний IP-адрес только тогда, когда он получает внешний ИП.move toКакая машина); Здесь тоже есть яма, если ip меняется на внешний ip, порты 17000-17005 нужно открывать (и группы безопасности, и файрволы надо учитывать), потому что серверы кластера общаются через эти порты (слушай для клиентских подключений) порт + 10000)
  3. Я сам написал скрипт и разместил его в конце статьи для упрощения всего процесса запуска (скрипт написан не много, так что не распыляйтесь)
  4. Для проверки: использует ли redis-cli --cluster согласованный алгоритм хеширования для кластеров, построенных таким образом?

Ссылаться на

  1. Создание кластера официального сайта Redis
  2. Собрать кластер Redis под Linux, JedisCluster с доступом по паролю

Скрипт запуска кластера

#! /bin/sh
# step1: start six redis-server in cluster mode.
PREFIX=/usr/local/redis-cluster/
for((PORT=7000;PORT<=7005;PORT++));
do
cd $PREFIX$PORT
pwd
(redis-server redis.conf);
done

# step2: cluster
redis-cli --cluster create 49.235.250.8:7000 49.235.250.8:7001 49.235.250.8:7002 49.235.250.8:7003 49.235.250.8:7004 49.235.250.8:7005 --cluster-replicas 1

# step3: set auth
commands='
config set masterauth qwerty\n
config set requirepass qwerty\n
auth qwerty\n
config rewrite\n
exit\n'

for((PORT=7000;PORT<=7005;PORT++));
do
echo -e $commands | redis-cli -p $PORT ;
done
echo 'success'