Создайте кластер Redis за считанные секунды в среде Docker и даже SpringBoot!

Java Redis
Создайте кластер Redis за считанные секунды в среде Docker и даже SpringBoot!

Адрес фактического центра электронной коммерции SpringBoot (30k+star):GitHub.com/macro-positive/…

Резюме

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

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

Здесь мы используем самый удобный способ сборки, используя Docker Compose для сборки, друзья, которые не знают о Docker Compose, могут обратиться к следующему«Развертывание приложений Sprilboot с помощью Docker Compose».我们将搭建一个6节点的Redis集群,包括3个主节点和3个从节点。

  • Перед созданием кластера Redis нам нужно изменить файл конфигурации Redis.redis.conf, адрес загрузки файла:GitHub.com/Антиэнтузиазм/Горячие…

  • Свойства, которые необходимо изменить, перечислены ниже, в основном для изменения некоторых конфигураций кластера и рабочих портов, а номера портов необходимо изменить на 6391~6396 по мере необходимости:

# 开启集群功能
cluster-enabled yes
# 设置运行端口
port 6391
# 设置节点超时时间,单位毫秒
cluster-node-timeout 15000
# 集群内部配置文件
cluster-config-file "nodes-6391.conf"
  • Затем нам нужно написать файл docker-compose.yml для размещения контейнеров Redis 6. Конкретные свойства см. в комментариях ниже;
version: "3"
services:
  redis-master1:
    image: redis:5.0 # 基础镜像
    container_name: redis-master1 # 容器名称
    working_dir: /config # 切换工作目录
    environment: # 环境变量
      - PORT=6391 # 会使用config/nodes-${PORT}.conf这个配置文件
    ports: # 映射端口,对外提供服务
      - 6391:6391 # redis的服务端口
      - 16391:16391 # redis集群监控端口
    stdin_open: true # 标准输入打开
    tty: true # 后台运行不退出
    network_mode: host # 使用host模式
    privileged: true # 拥有容器内命令执行的权限
    volumes:
      - /mydata/redis-cluster/config:/config #配置文件目录映射到宿主机
    entrypoint: # 设置服务默认的启动程序
      - /bin/bash
      - redis.sh
  redis-master2:
    image: redis:5.0
    working_dir: /config
    container_name: redis-master2
    environment:
      - PORT=6392
    ports:
      - 6392:6392
      - 16392:16392
    stdin_open: true
    network_mode: host
    tty: true
    privileged: true
    volumes:
      - /mydata/redis-cluster/config:/config
    entrypoint:
      - /bin/bash
      - redis.sh
  redis-master3:
    image: redis:5.0
    container_name: redis-master3
    working_dir: /config
    environment:
      - PORT=6393
    ports:
      - 6393:6393
      - 16393:16393
    stdin_open: true
    network_mode: host
    tty: true
    privileged: true
    volumes:
      - /mydata/redis-cluster/config:/config
    entrypoint:
      - /bin/bash
      - redis.sh
  redis-slave1:
    image: redis:5.0
    container_name: redis-slave1
    working_dir: /config
    environment:
      - PORT=6394
    ports:
      - 6394:6394
      - 16394:16394
    stdin_open: true
    network_mode: host
    tty: true
    privileged: true
    volumes:
      - /mydata/redis-cluster/config:/config
    entrypoint:
      - /bin/bash
      - redis.sh
  redis-slave2:
    image: redis:5.0
    working_dir: /config
    container_name: redis-slave2
    environment:
      - PORT=6395
    ports:
      - 6395:6395
      - 16395:16395
    stdin_open: true
    network_mode: host
    tty: true
    privileged: true
    volumes:
      - /mydata/redis-cluster/config:/config
    entrypoint:
      - /bin/bash
      - redis.sh
  redis-slave3:
    image: redis:5.0
    container_name: redis-slave3
    working_dir: /config
    environment:
      - PORT=6396
    ports:
      - 6396:6396
      - 16396:16396
    stdin_open: true
    network_mode: host
    tty: true
    privileged: true
    volumes:
      - /mydata/redis-cluster/config:/config
    entrypoint:
      - /bin/bash
      - redis.sh
  • Из файла docker-compose.yml видно, что наши контейнеры Redis работают на 6 портах 6391~6396 соответственно. положить в контейнер/configКаталог конфигурации сопоставлен с хостом/mydata/redis-cluster/configсправочник, а такжеredis.shСценарий служит сценарием запуска для контейнера;

  • redis.shРоль скрипта основана на переменной среды окруженияPORTсвойство для запуска контейнера Redis с указанным файлом конфигурации;

redis-server  /config/nodes-${PORT}.conf
  • Далее нам нужно поместить файл конфигурации Redis иredis.shЗалил на линукс сервер/mydata/redis-cluster/configПод содержанием;

  • Затем загрузите наш файл docker-compose.yml на сервер Linux и используйте команду docker-compose для запуска всех контейнеров;
docker-compose up -d
  • Следующая информация будет выводиться во время запуска;

  • На этом этапе войдите в один из контейнеров Redis и инициализируйте кластер Redis;
# 进入Redis容器
docker exec -it redis-master1 /bin/bash
# 初始化Redis集群命令
redis-cli --cluster create \
192.168.6.139:6391 192.168.6.139:6392 192.168.6.139:6393 \
192.168.6.139:6394 192.168.6.139:6395 192.168.6.139:6396 \
--cluster-replicas 1
  • В процессе создания кластера вам будет предложено подтвердить конфигурацию, введитеyesПросто подтвердите;

  • После успешного создания кластера Redis будет выведена следующая информация;

  • После успешного создания мы можем использоватьredis-cliкоманда для подключения к одному из сервисов Redis;
# 单机模式启动
redis-cli -h 127.0.0.1 -p 6391
# 集群模式启动
redis-cli -c -h 127.0.0.1 -p 6391
  • проходить послеcluster nodesКоманда может просмотреть информацию об узле и обнаружить, что она соответствует исходному ожиданию 3 ведущих и 3 ведомых устройств.

Использование кластера Redis в SpringBoot

мы вЛучшие практики Spring Data Redis! 》Я говорил о том, как использовать Redis в SpringBoot, используя сервис Redis с одним узлом, на этот раз мы поговорим о том, как использовать кластерный сервис Redis.

  • Переименовали, модифицировали файл конфигурации Application.yml на основе исходного кода, добавили конфигурацию кластера Redis;
spring:
  redis:
#    host: 192.168.6.139 # Redis服务器地址
#    database: 0 # Redis数据库索引(默认为0)
#    port: 6379 # Redis服务器连接端口
    password: # Redis服务器连接密码(默认为空)
    timeout: 3000ms # 连接超时时间
    lettuce:
      pool:
        max-active: 8 # 连接池最大连接数
        max-idle: 8 # 连接池最大空闲连接数
        min-idle: 0 # 连接池最小空闲连接数
        max-wait: -1ms # 连接池最大阻塞等待时间,负值表示没有限制
    cluster:
      nodes:
        - 192.168.6.139:6391
        - 192.168.6.139:6392
        - 192.168.6.139:6393
        - 192.168.6.139:6394
        - 192.168.6.139:6395
        - 192.168.6.139:6396
  • На этом этапе мы снова вызываем интерфейс для получения информации о бренде, и информация о бренде будет кэшироваться в кластере Redis;

  • Из-за контейнера Redisredis-master1иredis-slave2Они хозяева и рабы друг друга, поэтому внутри кэшируются одни и те же детали бренда.

Адрес файла конфигурации

GitHub.com/macro-positive/…

Адрес исходного кода проекта

GitHub.com/macro-positive/…

публика

проект торгового центраПолный набор учебных пособий сериализуется,Обратите внимание на публичный аккаунтПолучите это прямо сейчас.

公众号图片