2024-07-11
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
この記事は、k8s 環境での [擬似] スタンドアロン モードの Redis インスタンスの構築に基づいています。共有ストレージの IO パフォーマンスは比較的低いため、共有ストレージをデータのバックアップに使用し、Redis データをホストパスの形式で保存することで、Redis の IO パフォーマンスを向上させることができます。この記事では、2 つのコンテナー サーバーを使用する方法について説明します。スタンドアロンで可用性の高い Redis を実装するための Redis のマスター/スレーブ形式。
K8s バージョン k8s-1.29.4 の環境は通信コンピュータ室に構築されており、各ノードには非システム ディスク SSD ディスクが /data/ パスにマウントされています。 Alibaba Cloud NASを使用し、専用線帯域幅500Mbの専用線を使用するNAS共有ストレージがあります。
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 をマウントします。データのダウンロード時間は長くなります。
構成には、マスター 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