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

[установка k8s redis] установка k8s автономная версия redis для достижения высокой производительности и высокой доступности

2024-07-11

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

Введение

Эта статья будет основана на создании экземпляра Redis в [псевдо] автономном режиме в среде k8s. Поскольку производительность ввода-вывода общего хранилища относительно низкая, общее хранилище используется для резервного копирования данных, а данные Redis хранятся в виде пути к хосту. Это помогает повысить производительность ввода-вывода Redis. В этой статье объясняется, как использовать два контейнера. форма Redis «главный-подчиненный» для реализации автономного Redis с высокой доступностью.

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

K8s версии k8s-1.29.4, среда построена в телекоммуникационном компьютерном зале, всего шесть узлов. Каждый узел имеет несистемный SSD-диск, подключенный к пути /data/. Существует общее хранилище NAS, которое использует Alibaba Cloud NAS и используется по выделенной линии с пропускной способностью выделенной линии 500 МБ.

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

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

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

1. Настройте redis в режиме master-slave. Чтение и запись данных master-redis приходится на локальный SSD-диск, а данные подчиненного redis — на внешнее общее хранилище nas.
2. Затем создайте конфигурацию набора состояний, поместите два контейнера, один контейнер в качестве основного Redis, смонтируйте его в путь к хосту, создайте каталог с именем хоста и сохраните файл rdb. Другой контейнер служит подчиненным Redis, а путь nas монтируется для создания каталога с именем хоста и хранения файла rdb.
3. Настройте параметр сохранения данных из Redis и настройте время загрузки данных на меньший параметр, чтобы гарантировать, что обновленные данные будут сохранены в файле rdb как можно скорее.
4. Каждый раз, когда модуль планируется или перезапускается, копируйте файл rdb, хранящийся в nas, в путь к хосту и запускайте Redis.

Примечание. Это сделано для того, чтобы главный Redis мог обеспечить высокопроизводительную обработку бизнес-данных, а подчиненный Redis отвечает за сохранение данных. Могут возникнуть следующие проблемы: 1. Слишком большой объем операций ввода-вывода для чтения и записи данных на главном компьютере. ведомый redis монтирует nas. Время загрузки данных будет больше.

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

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

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

apiVersion: v1
kind: ConfigMap
metadata:
  name: defaultapp-redis-standalone-config
  namespace: default
  labels:
    appname: default-app
    app: defaultapp-redis-standalone-config
data:
  redis-master.conf: |
    port 6379
    maxmemory 256mb
    requirepass redis#123
    dir /data/redis
  redis.conf: |
    port 6380
    maxmemory 256mb
    requirepass redis#123
    save 3600 1 300 5 60 10
    dir /data/redis-2
    replicaof 127.0.0.1 6379
    masterauth redis#123
  run.sh: |
    #!/bin/sh
    role=$1
    hname=$(hostname)
    if [ $role == "master" ];then
        echo "run redis master"
        ls /etc/redis/ -l
        [ -d /home/redis/$hname ] || mkdir -p /home/redis/$hname
        [ -d /data ] || mkdir /data
        ln -s /home/redis/$hname /data/redis
        if [ -f /home/redis-2/$hname/dump.rdb ];then
                cp -vf /home/redis-2/$hname/dump.rdb /data/redis/
        else
                echo "[info] no bak dump.rdb"
        fi
        redis-server /etc/redis/redis-master.conf
    else
        echo "run redis slave"
        ls /etc/redis/ -l
        [ -d /home/redis-2/$hname ] || mkdir -p /home/redis-2/$hname
        [ -d /data ] || mkdir /data
        ln -s /home/redis-2/$hname /data/redis-2
        redis-server /etc/redis/redis.conf
    fi