技術共有

[k8s インストール redis] 高パフォーマンスと高可用性を実現する k8s インストール スタンドアロン バージョンの Redis

2024-07-11

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

導入

この記事は、k8s 環境での [擬似] スタンドアロン モードの Redis インスタンスの構築に基づいています。共有ストレージの IO パフォーマンスは比較的低いため、共有ストレージをデータのバックアップに使用し、Redis データをホストパスの形式で保存することで、Redis の IO パフォーマンスを向上させることができます。この記事では、2 つのコンテナー サーバーを使用する方法について説明します。スタンドアロンで可用性の高い Redis を実装するための Redis のマスター/スレーブ形式。

1. 条件と環境の説明:

K8s バージョン k8s-1.29.4 の環境は通信コンピュータ室に構築されており、各ノードには非システム ディスク SSD ディスクが /data/ パスにマウントされています。 Alibaba Cloud NASを使用し、専用線帯域幅500Mbの専用線を使用するNAS共有ストレージがあります。

2. 要件の説明:

  • Redis インスタンスを構築します: スタンドアロンまたはマスター/スレーブ。
  • 高可用性: k8s ノードが停止しても、長期間使用に影響を与えません。
  • 高パフォーマンス: 高い iO が必要です。共有ストレージまたは ceph 分散ストレージが使用され、iO の読み取りと書き込みが大幅に割引されます。
  • データのセキュリティ: 切り替えが発生した後、データは可能な限り完全である必要があります。
  • 簡単な設置、簡単な管理とメンテナンス

3. 実装の原則と指示

1. Redis をマスター/スレーブ モードでセットアップします。マスター Redis のデータの読み取りと書き込みはローカル SSD ディスク上に行われ、スレーブ Redis のデータは外部共有 NAS ストレージ上に行われます。
2. 次に、ステートフルセット構成を作成し、2 つのコンテナーを配置し、1 つのコンテナーをメイン Redis としてホストパスにマウントし、ホスト名を持つディレクトリを作成して、rdb ファイルを保存します。別のコンテナがスレーブ redis として機能し、nas パスがマウントされてホスト名のディレクトリが作成され、rdb ファイルが保存されます。
3. Redis から保存するデータ永続性パラメーターを調整し、データのダウンロード時間をより小さいパラメーターに調整して、更新されたデータができるだけ早く rdb ファイルに保存されるようにします。
4. ポッドがスケジュールまたは再起動されるたびに、nas に保存されている rdb ファイルをホストパスにコピーし、redis を起動します。

注: これは、マスター Redis がビジネス データの高性能処理を実現できるようにするために行われ、スレーブ Redis がデータの永続化を担当します。以下の問題が発生する可能性があります。 1. マスターの読み取りおよび書き込みデータ IO が高すぎる場合。 、スレーブ redis は nas をマウントします。データのダウンロード時間は長くなります。

4. 詳細な手順

4.1. configmap 設定ファイルの作成

構成には、マスター Redis 構成ファイル、スレーブ Redis 構成ファイル、および実行ロールに基づいてさまざまな操作を実行する単純なスクリプトの 3 つのファイルが含まれています。具体的な構成は次のとおりです。
redis-master:conf はメインの Redis 構成ファイルで、メモリは 256M、構成ポートは 6379、構成パスワードは redis#123、ストレージ パスは /data/redis です。
redis.conf: redis 構成ファイルから、メモリを 256M に構成し、ポートを 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