Оригинальное сообщение: https://koalatea.io/redis-replicate/
Введение
В этой статье мы кратко рассмотрим, как осуществлять репликацию в Redis. В производстве вы часто захотите использовать кластер или управляемый экземпляр. Тем не менее, изучение того, как реплицировать вручную, поможет при резервном копировании или отладке.
Настройка
В этой статье мы будем использовать docker и docker compose, поэтому начните с их установки.
- Docker install: https://docs.docker.com/engine/install/
- Docker Compose: https://docs.docker.com/compose/install/
Затем создайте новый файл docker-compose.yml
.
Добавьте следующие строки в начало, чтобы объявить нашу версию и сервисы:
version: "3.2"
services:
Предупреждение, Redis все еще использует старый язык Master и Slave, но он устарел и должен быть изменен.
Учитывая это, давайте добавим наш ведущий (главный) сервис под названием redis
. Здесь все стандартно, за исключением того, что мы передаем REDIS_REPLICATION_MODE=master
.
redis:
image: "redis:alpine"
command: redis-server --requirepass some_pass
ports:
- "6379:6379"
volumes:
- $PWD/redis-data:/var/lib/redis
- $PWD/redis.conf:/usr/local/etc/redis/redis.conf
environment:
- REDIS_REPLICATION_MODE=master
Далее добавим один ведомый (рабочий) сервер. Здесь мы изменим порт локального отображения на 6378
, а режим репликации установим на slave
.
redis2:
image: "redis:alpine"
command: redis-server --requirepass some_pass
ports:
- "6378:6379"
volumes:
- $PWD/redis-data:/var/lib/redis
- $PWD/redis.conf:/usr/local/etc/redis/redis.conf
environment:
- REDIS_REPLICATION_MODE=slave
Полный файл выглядит следующим образом.
version: "3.2"
services:
redis:
image: "redis:alpine"
command: redis-server --requirepass some_pass
ports:
- "6379:6379"
volumes:
- $PWD/redis-data:/var/lib/redis
- $PWD/redis.conf:/usr/local/etc/redis/redis.conf
environment:
- REDIS_REPLICATION_MODE=master
redis2:
image: "redis:alpine"
command: redis-server --requirepass some_pass
ports:
- "6378:6379"
volumes:
- $PWD/redis-data:/var/lib/redis
- $PWD/redis.conf:/usr/local/etc/redis/redis.conf
environment:
- REDIS_REPLICATION_MODE=slave
Теперь запустите службы с помощью docker-compose up
.
Подключение к серверам Redis
Далее нам нужно подключиться к нашим серверам Redis. Для этого я использую GUI с открытым исходным кодом:
- https://github.com/qishibo/AnotherRedisDesktopManager
Нажмите «New Connection» и введите информацию, как показано ниже. Вы можете изменить имя подключения на любое, какое захотите. Для этого я назвал его «Main». Пароль должен быть some_pass
, если вы использовали файл yml выше.
Сделайте то же самое для рабочего, но измените порт на 6378 и измените имя соединения.
Репликация сервера
Для начала разверните первый сервер и добавьте новый ключ.
Теперь откройте соединение с рабочим сервером и нажмите кнопку cli для подключения к серверу.
Сначала установите мастер-пасс на some_pass
(поскольку мы использовали один и тот же пароль для обоих серверов).
config set masterauth some_pass
Затем используйте команду replicaof
, чтобы указать на главный сервер.
replicaof redis 6379
Нажмите на значок обновления, и вы должны увидеть, что ключ мастер-сервера реплицирован. Добавьте больше ключей на мастер, и рабочий продолжит репликацию.
Чтобы остановить репликацию, вы можете воспользоваться следующим.
replicaof no one
Заключение
Вот и все по основам репликации. Это поможет вам, если вы хотите быстро скопировать некоторые данные для тестирования. Есть еще много интересного, но это должно быть хорошим началом.