Обмен технологиями

[Установка Redis K8s] Установите дозорный кластер Redis в среде k8s без pvc

2024-07-11

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

Введение

Создание сервисов с сохранением состояния в кластере k8s является относительно затруднительным. Текущий основной подход к построению Redis заключается в использовании общего хранилища ceph и nas для обеспечения постоянного хранения данных. Некоторые из них реализуются с использованием привязки узлов и пути к хосту. В настоящее время операторы в основном используют общий доступ. хранилище. В этой статье мы будем использовать взвешенные несколько копий сходства пути к хосту для создания кластера Redis на основе существующей среды и различных потребностей для достижения постоянства данных и высокой доступности службы Redis.

1. Описание условий и окружающей среды:

K8s версии k8s-1.29.4, среда построена в телекоммуникационном компьютерном зале с шестью рабочими узлами. Каждый узел имеет несистемный SSD-диск, подключенный к пути /data/. Общее хранилище, такое как ceph или nas, не является. Используемый оператор не используется. В настоящее время redis-operator в основном использует общее хранилище.

2. Описание требований:

  • Создайте дозорный кластер Redis.
  • Высокая доступность: если узел k8s выйдет из строя или будет перезапущен модуль, это не повлияет на его использование.
  • Высокая производительность. Чтение и запись на локальные диски для достижения высокопроизводительного ввода-вывода. Если ресурсов и аппаратной производительности общего хранилища недостаточно, ввод-вывод станет узким местом в производительности.
  • Безопасность данных: после переключения или сбоя узла данные должны быть максимально полными.
  • Простая установка, простота управления и обслуживания

3. Принципы реализации и инструкции

    1. Создайте дозорный кластер Redis с одним главным, двумя подчиненными и тремя дозорными процессами.
    1. Redis использует три независимых набора состояний и одну копию для сборки, в то время как дозорный процесс использует одно развертывание и три копии для сборки.
    1. Процесс redis использует сходство и вес узлов для реализации основных и резервных узлов.
    1. Redis использует автономную службу службы, а Sentinel использует службу службы.
    1. Для группы из двух подчиненных устройств, активных и резервных в зависимости от веса, необходимо запланировать имена меток шести узлов.

Примечание. Redis, созданный с помощью этого решения, можно использовать только внутри кластера k8s и нельзя предоставить для использования за пределами кластера через LoadBlancer или NodePort, поскольку IP-адрес основного Redis, выбранный в Sentinel, является IP-адресом модуля при переключении. происходит, невозможно определить, какой из них является основным.

4. Подробные шаги

4.1.Планирование меток узлов
Имя узлаРольЭтикетка
k8s-работник-120-81хозяинселектор-хранилища=узел-а-мастер
k8s-работник-120-82хозяинселектор-хранилища=узел-b-мастер
k8s-работник-120-83хозяинселектор-хранилища=узел-c-мастер
k8s-работник-120-84Подготовитьселектор-хранилища=узел-а-служебный
k8s-работник-120-85Подготовитьселектор-хранилища=узел-а-служебный
k8s-работник-120-86Подготовитьселектор-хранилища=узел-а-служебный

Примечание. Разделение ролей здесь относится к следующему: Поскольку у Redis есть один главный и два подчиненных узла, каждый модуль Redis приходится на три главных узла. При сбое главного узла он переключается на резервный узел. Например: имя defaultapp. pod redis-a-0 по умолчанию попадает на узел с меткой Storage-selector=node-a-master. При сбое узла он будет сопоставлен на основе веса узла с меткой Storage-selector=node-a-slve. . на узле.

4.2. Создайте конфигурацию карты конфигурации.

Конфигурация содержит четыре файла, а описание дистрибутива следующее:
Sentinel.conf: файл конфигурации Sentinel. По умолчанию первый набор состояний используется в качестве основного Redis, а конфигурация:solve-hostnames поддерживает имена хостов.
redis-master.conf: основной файл конфигурации Redis, память настроена на 256 МБ, порт конфигурации — 6379, пароль конфигурации — redis#123, а путь к хранилищу — /data/redis.
redis.conf: в файле конфигурации redis настройте память на 256 МБ, настройте порт на 6380, настройте пароль: redis#123, путь к хранилищу — /data/redis-2 и настройте данные для синхронизации из основной редис.
run.sh: Основная функция — определить роль для запуска различных файлов конфигурации, создать каталог на основе имени хоста, а затем мягко подключиться к каталогу хранилища. Этот шаг в основном предназначен для хранения данных Redis каждой службы в собственном каталоге. При создании нового Redis это не приведет к конфликтам каталогов на узле.

apiVersion: v1
kind: ConfigMap
metadata:
  name: defaultapp-redis-config
  namespace: default-ns
  labels:
    appname: default-app
    app: defaultapp-redis-config
data:
  sentinel.conf: |
    sentinel monitor mymaster defaultapp-redis-a-0.defaultapp-redis-a.default-ns.svc.cluster.local 6379 2
    sentinel auth-pass mymaster redis#123
    sentinel down-after-milliseconds mymaster 30000
    sentinel parallel-syncs mymaster 1
    sentinel failover-timeout mymaster 180000
    SENTINEL resolve-hostnames yes
    SENTINEL announce-hostnames yes
  redis-master.conf: |
    maxmemory 256mb
    requirepass redis#123
    save 3600 1 300 10 60 100
    dir /data/redis
    masterauth redis#123
  redis.conf: |
    maxmemory 256mb
    requirepass redis#123
    save 3600 1 300 10 60 100
    dir /data/redis
    replicaof defaultapp-redis-a-0.defaultapp-redis-a.default-ns.svc.cluster.local 6379
    masterauth redis#123
  run.sh: |
    #!/bin/sh
    role=$1
    hname=$(hostname)
    if [ $role == "master" ];then
        echo "run redis master"
        [ -d /home/redis/$hname ] || mkdir -p /home/redis/$hname
        [ -d /data ] || mkdir /data
        ln -s /home/redis/$hname /data/redis
        redis-server /etc/redis/redis-master.conf
    elif [ $role == "sentinel" ];then
        echo "run redis sentinel"
        mkdir -p /etc/redis
        cp /home/redis/sentinel.conf /etc/redis/
        redis-sentinel /etc/redis/sentinel.conf
    else
        echo "run redis slave"
        [ -d /home/redis/$hname ] || mkdir -p /home/redis/$hname
        [ -d /data ] || mkdir /data
        ln -s /home/redis/$hname /data/redis
        redis-server /etc/redis/redis.conf
    fi