Обзор
В последнее время хочу написать несколько небольших проектов --- углубить понимание теоретических знаний (таких как zk, redis, kafaka и т.д.), начнем с построения окружения
В этой статье создается кластер Redis с шестью серверами, включая 3 ведущих и 3 подчиненных (по одному подчиненному для каждого главного), в основном на следующих шагах. (搭建集群之前希望你懂redis cluster的原理!!
)
- переустановить
- Запустить шесть redis-серверов в кластерном режиме, порты (7000-7005)
- Шесть серверов создают кластер (используя параметр --cluster в redis-cli)
- Пароль на каждом конфигурации сервера
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
напиши в конце
- Пароль должен быть установлен последним, иначе при построении кластера будет сообщено об ошибке авторизации.
- Если требуется доступ к внешней сети, адрес хоста после опции redis-cli --cluster выше должен быть изменен на внешний IP-адрес хоста (поскольку ошибка Moved обрабатывается клиентом, клиент узнает внешний IP-адрес только тогда, когда он получает внешний ИП.
move to
Какая машина); Здесь тоже есть яма, если ip меняется на внешний ip, порты 17000-17005 нужно открывать (и группы безопасности, и файрволы надо учитывать), потому что серверы кластера общаются через эти порты (слушай для клиентских подключений) порт + 10000) - Я сам написал скрипт и разместил его в конце статьи для упрощения всего процесса запуска (скрипт написан не много, так что не распыляйтесь)
- Для проверки: использует ли redis-cli --cluster согласованный алгоритм хеширования для кластеров, построенных таким образом?
Ссылаться на
- Создание кластера официального сайта Redis
- Собрать кластер 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'