1. 概要REmote DIctionary Server (Redis) は、Salvatore Sanfilippo によって作成されたキー値ストレージ システムです。これはクロスプラットフォームの非リレーショナル データベースです。 Redis には、マスタースレーブモード、Sentinel モード、クラスターモードの 3 つのクラスターモードがあります。この記事では、これら 3 つのモードの展開とオーケストレーションについて紹介し、実装します。 2. Redis マスタースレーブモードオーケストレーションとデプロイメントの実践的な操作アドレス: https://artifacthub.io/packages/helm/bitnami/redis 1) チャートパッケージをダウンロードする helmリポジトリにbitnamiを追加しますhttps://charts.bitnami.com/bitnami
helm pull bitnami / redis --version 17.3.7
tar - xf redis - 17.3.7.tgz 2) イメージを構築するここではイメージを再構築せず、リモート イメージにタグを付けてローカル ハーバー リポジトリにプッシュし、イメージのダウンロードを高速化します。画像の作成方法がわからない場合は、プライベートメッセージを送信するか、メッセージを残してください。 docker pull docker .io / bitnami / redis : 7.0.5 - debian - 11 - r7
# タグ docker タグ docker .io / bitnami / redis : 7.0 .5 - debian - 11 - r7 myharbor .com / bigdata / redis : 7.0 .5 - debian - 11 - r7
# イメージをローカルの Harbor リポジトリにプッシュします docker push myharbor .com / bigdata / redis : 7.0.5 - debian - 11 - r7 3) YAMLレイアウトを変更する- redis/テンプレート/マスター/pv.yaml
次の内容を含む新しい pv.yaml ファイルを追加します。 { { -範囲.Values .master .persistence .local } } --- APIバージョン: v1 種類:永続ボリューム メタデータ: 名前: { { .name } } ラベル: 名前: { { .name } } 仕様: ストレージクラス名: { { $ .Values .master .persistence .storageClass } } 容量: ストレージ: { { $ .Values .master .persistence .size } } アクセスモード: -一度だけ読み書き可能 地元: パス: { { .path } } ノードアフィニティ: 必須: ノードセレクタ用語: -一致する表現: -キー: kubernetes.io/ホスト名 演算子: 値: - { { 。ホスト} } --- { { -終わり} } - redis/テンプレート/レプリカ/pv.yaml
次の内容を含む新しい pv.yaml ファイルを追加します。 { { -範囲.Values .replica .persistence .local } } --- APIバージョン: v1 種類:永続ボリューム メタデータ: 名前: { { .name } } ラベル: 名前: { { .name } } 仕様: ストレージクラス名: { { $ .Values .replica .persistence .storageClass } } 容量: ストレージ: { { $ .Values .replica .persistence .size } } アクセスモード: -一度だけ読み書き可能 地元: パス: { { .path } } ノードアフィニティ: 必須: ノードセレクタ用語: -一致する表現: -キー: kubernetes.io/ホスト名 演算子: 値: - { { 。ホスト} } --- { { -終わり} } グローバル: レディス: パスワード: "123456"
...
画像: レジストリ: myharbor.com リポジトリ: bigdata / redis タグ: 7.0 .5 - debian - 11 - r7
マスター: カウント: 1 持続性: 有効: true サイズ: 8Gi ストレージクラス: "local-redis-storage" 地元: -名前: redis - 0 ホスト: "local-168-182-110" パス: "/opt/bigdata/servers/redis/data/data1"
レプリカ: レプリカ数: 2 持続性: 有効: true サイズ: 8Gi ストレージクラス: "local-redis-storage" 地元: -名前: redis - 1 ホスト: "local-168-182-111" パス: "/opt/bigdata/servers/redis/data/data1" -名前: redis - 2 ホスト: "local-168-182-112" パス: "/opt/bigdata/servers/redis/data/data1" 4) 展開を開始する # ストレージディレクトリを作成する mkdir / opt / bigdata / servers / redis / data / data1
# まず構文をチェックする ヘルムリント./redis
# インストールを開始する helm で redis をインストールします。/redis -n redis --create-namespace 注記 改訂: 1 テストスイート:なし 注記: チャート名: redis チャートバージョン: 17.3.7 アプリバージョン: 7.0.5
**チャートが展開されるまでしばらくお待ちください**
Redis® は、クラスター内から次の DNS 名でアクセスできます。
redis -読み取り/書き込み操作用のマスター.redis .svc .cluster .local (ポート6379 ) redis -読み取り専用操作用のレプリカ.redis .svc .cluster .local (ポート6379 )
パスワードを取得するには、次を実行します:
REDIS_PASSWORD をエクスポートします。 $ ( kubectl get secret --namespace redis redis -o jsonpath="{.data.redis-password}" | base64 -d)
Redis® サーバーに接続するには:
1.クライアントとして使用できる Redis® ポッドを実行します。
kubectl run --namespace redis redis-client --restart='Never' --env REDIS_PASSWORD=$REDIS_PASSWORD --image myharbor.com/bigdata/redis:7.0.5-debian-11-r7 --command --sleep infinity
ポッドに接続するには、次のコマンドを使用します。
kubectl exec --tty -i redis-client \ --namespace redis --bash
2. Redis® CLI を使用して接続します。 REDISCLI_AUTH = "$REDIS_PASSWORD" redis - cli - h redis -マスター REDISCLI_AUTH = "$REDIS_PASSWORD" redis - cli - h redis -レプリカ
クラスターの外部からデータベースに接続するには、次のコマンドを実行します。
kubectl ポート転送--namespace redis svc/redis-master 6379:6379 & REDISCLI_AUTH = "$REDIS_PASSWORD" redis - cli - h 127.0 .0 .1 - p 6379 5) テスト検証 kubectl get pods 、 svc - n redis - wide を実行します。 # マスターにログインし、読み取りと書き込みが可能 kubectl exec - it redis -マスター- 0 - n redis -- redis-cli -h redis-master -a $(kubectl get secret --namespace redis redis -o jsonpath="{.data.redis-password}" | base64 -d)
# スレーブにログイン、読み取り専用 kubectl exec - it redis -マスター- 0 - n redis -- redis-cli -h redis-replicas -a $(kubectl get secret --namespace redis redis -o jsonpath="{.data.redis-password}" | base64 -d) 6) アンインストール helm アンインストール redis - sentinel - n redis - sentinel # nsを削除 kubectl削除ns redis -センチネル--force # PVを削除 kubectl で pvを削除します`kubectl で pv を取得します| grep ^ redis -| awk '{print $1}' ` --force
rm - fr / opt / bigdata /サーバー/ redis /データ/ data1 /* 3. Redis Sentinel モードのオーケストレーションとデプロイメントの実践的な操作マスタースレーブモードの欠点は、可用性が高くないことです。マスターに障害が発生すると、Redis は外部書き込み操作を提供できなくなるため、Sentinel が誕生しました。 1) イメージを構築するここでもイメージが再構築されます。イメージの構築方法がわからない場合は、コメントの下にメッセージを残してください。ここでは、リモート イメージをローカル ハーバーにプッシュするだけです。 docker pull docker.io/bitnami/redis-sentinel:7.0.5-debian-11-r6 # タグ docker タグ docker.io/bitnami/redis-sentinel:7.0.5-debian-11-r6 myharbor.com/bigdata/redis-sentinel:7.0.5-debian-11-r6 # 押す docker push myharbor.com/bigdata/redis-sentinel:7.0.5-debian-11-r6 2) YAMLレイアウトを変更するレプリカ: # replica .replicaCountは sentinel .quorumと同じです レプリカ数: 3 ストレージクラス: "local-redis-storage" 地元: -名前: redis - 0 ホスト: "local-168-182-110" パス: "/opt/bigdata/servers/redis/data/data1" -名前: redis - 1 ホスト: "local-168-182-111" パス: "/opt/bigdata/servers/redis/data/data1" -名前: redis - 2 ホスト: "local-168-182-112" パス: "/opt/bigdata/servers/redis/data/data1"
センチネル: 有効: true 画像: レジストリ: myharbor.com リポジトリ: bigdata / redis - sentinel タグ: 7.0 .5 - debian - 11 - r6 定足数: 3 - redis-sentinel/テンプレート/レプリカ/pv.yaml
次の内容を含む新しい pv.yaml ファイルを追加します。 { { -範囲.Values .sentinel .persistence .local } } --- APIバージョン: v1 種類:永続ボリューム メタデータ: 名前: { { .name } } ラベル: 名前: { { .name } } 仕様: ストレージクラス名: { { $ .Values .sentinel .persistence .storageClass } } 容量: ストレージ: { { $ .Values .sentinel .persistence .size } } アクセスモード: -一度だけ読み書き可能 地元: パス: { { .path } } ノードアフィニティ: 必須: ノードセレクタ用語: -一致する表現: -キー: kubernetes.io/ホスト名 演算子: 値: - { { 。ホスト} } --- { { -終わり} } 3) 展開を開始する # ストレージディレクトリを作成する mkdir -p /opt/bigdata/servers/redis/data/data1
helm で redis-sentinel をインストールします。/redis-sentinel -n redis-sentinel --create-namespace 注記 名前: redis - sentinel 最終配備日: 2022年11月4日金曜日22:42:52 名前空間: redis - sentinel ステータス:展開済み 改訂: 1 テストスイート:なし 注記: チャート名: redis チャートバージョン: 17.3.7 アプリバージョン: 7.0.5
**チャートが展開されるまでしばらくお待ちください**
Redis® には、クラスター内から次の DNS 名のポート6379経由でアクセスできます。
読み取り専用操作の場合は redis - sentinel .redis - sentinel .svc .cluster .local
読み取り/書き込み操作の場合は、まず上記と同じドメイン名を使用してポート26379で利用可能な Redis® Sentinelクラスターにアクセスします。
パスワードを取得するには、次を実行します:
REDIS_PASSWORD をエクスポートします。 $ ( kubectl get secret --namespace redis-sentinel redis-sentinel -o jsonpath="{.data.redis-password}" | base64 -d)
Redis® サーバーに接続するには:
1.クライアントとして使用できる Redis® ポッドを実行します。
kubectl run --namespace redis-sentinel redis-client --restart='Never' --env REDIS_PASSWORD=$REDIS_PASSWORD --image myharbor.com/bigdata/redis:7.0.5-debian-11-r7 --command --sleep infinity
ポッドに接続するには、次のコマンドを使用します。
kubectl exec --tty -i redis-client \ --namespace redis-sentinel --bash
2. Redis® CLIを使用して接続します。 REDISCLI_AUTH = "$REDIS_PASSWORD" redis - cli - h redis - sentinel - p 6379 # 読み取り専用操作 REDISCLI_AUTH = "$REDIS_PASSWORD" redis - cli - h redis - sentinel - p 26379 # Sentinel アクセス
クラスターの外部からデータベースに接続するには、次のコマンドを実行します。
kubectl ポート転送--namespace redis-sentinel svc/redis-sentinel 6379:6379 & REDISCLI_AUTH = "$REDIS_PASSWORD" redis - cli - h 127.0 .0 .1 - p 6379 チェック kubectl get pods 、 svc - n redis - sentinel - wide を実行します。 4) 模擬故障テスト # チェック kubectl exec - it redis - sentinel - node - 0 - n redis - sentinel -- redis-cli -h redis-sentinel -a $(kubectl get secret --namespace redis-sentinel redis-sentinel -o jsonpath="{.data.redis-password}" | base64 -d) レプリケーション情報 障害をシミュレートしてマスターポッドを強制終了する kubectl ポッド redis -センチネル-ノード- 0 - n redis -センチネルを削除します マスターノードを再度確認すると、マスターノードが他のノードに切り替わっています。 読み書きの再テスト # マスターノードにログインする kubectl exec -it redis - sentinel - node - 0 - n redis - sentinel --redis-cli -h redis-sentinel-node-2.redis-sentinel-headless -a $(kubectl get secret --namespace redis-sentinel redis-sentinel -o jsonpath="{.data.redis-password}" | base64 -d) を実行します。
# スレーブノードにログインする kubectl exec -it redis - sentinel - node - 0 - n redis - sentinel --redis-cli -h redis-sentinel-node-0.redis-sentinel-headless -a $(kubectl get secret --namespace redis-sentinel redis-sentinel -o jsonpath="{.data.redis-password}" | base64 -d) を実行します。 5) アンインストール helm アンインストール redis-sentinel -n redis # nsを削除 kubectl ns redis を削除します --force # PVを削除 kubectl で pv を削除します `kubectl で pv を取得します|grep ^redis-|awk '{print $1}'` --force
rm -fr /opt/bigdata/servers/redis/data/data1/* 4. Redis クラスターモードのオーケストレーションとデプロイメントの実践的な操作クラスターモードは、センチネルモードとマスタースレーブモードを組み合わせたものと言えます。クラスターはマスタースレーブ機能とマスター再選出機能を実現できるため、レプリカ 2 つとシャード 3 つを構成する場合、6 つの Redis インスタンスが必要になります。 Redis データは一定のルールに従ってクラスター内の異なるマシンに分散されるため、データの量が多すぎる場合は、拡張のために新しいマシンを追加できます。 1) チャートパッケージをダウンロードする helmリポジトリにbitnamiを追加しますhttps://charts.bitnami.com/bitnami
helm pull bitnami / redis -クラスター--version 8.2.7
tar - xf redis -クラスター- 8.2 .7 .tgz 2) イメージを構築するここではイメージを再構築せず、リモート イメージにタグを付けてローカル ハーバー リポジトリにプッシュし、イメージのダウンロードを高速化します。画像の作成方法がわからない場合は、プライベートメッセージを送信するか、メッセージを残してください。 docker pull docker .io / bitnami / redis -クラスター: 7.0 .5 - debian - 11 - r9
# タグ docker タグ docker .io / bitnami / redis - cluster : 7.0 .5 - debian - 11 - r9 myharbor .com / bigdata / redis - cluster : 7.0 .5 - debian - 11 - r9
# イメージをローカルの Harbor リポジトリにプッシュします docker push myharbor .com / bigdata / redis -クラスター: 7.0 .5 - debian - 11 - r9 3) YAMLレイアウトを変更する- redis-cluster/テンプレート/pv.yaml
次の内容を含む新しい pv.yaml ファイルを追加します。 { { -範囲.Values .persistence .local } } --- APIバージョン: v1 種類:永続ボリューム メタデータ: 名前: { { .name } } ラベル: 名前: { { .name } } 仕様: ストレージクラス名: { { $ .Values .persistence .storageClass } } 容量: ストレージ: { { $ .Values .persistence .size } } アクセスモード: -一度だけ読み書き可能 地元: パス: { { .path } } ノードアフィニティ: 必須: ノードセレクタ用語: -一致する表現: -キー: kubernetes.io/ホスト名 演算子: 値: - { { 。ホスト} } --- { { -終わり} } パスワード: "123456"
...
画像: レジストリ: myharbor.com リポジトリ: bigdata / redis -クラスター タグ: 7.0 .5 - debian - 11 - r9
...
持続性: ストレージクラス: "local-redis-cluster-storage" 地元: -名前: redis -クラスター- 0 ホスト: "local-168-182-110" パス: "/opt/bigdata/servers/redis-cluster/data/data1" -名前: redis -クラスター- 1 ホスト: "local-168-182-110" パス: "/opt/bigdata/servers/redis-cluster/data/data2" -名前: redis -クラスター- 2 ホスト: "local-168-182-110" パス: "/opt/bigdata/servers/redis-cluster/data/data3" -名前: redis -クラスター- 3 ホスト: "local-168-182-111" パス: "/opt/bigdata/servers/redis-cluster/data/data1" -名前: redis -クラスター- 4 ホスト: "local-168-182-111" パス: "/opt/bigdata/servers/redis-cluster/data/data2" -名前: redis -クラスター- 5 ホスト: "local-168-182-111" パス: "/opt/bigdata/servers/redis-cluster/data/data3" -名前: redis -クラスター- 6 ホスト: "local-168-182-112" パス: "/opt/bigdata/servers/redis-cluster/data/data1" -名前: redis -クラスター- 7 ホスト: "local-168-182-112" パス: "/opt/bigdata/servers/redis-cluster/data/data2" -名前: redis -クラスター- 8 ホスト: "local-168-182-112" パス: "/opt/bigdata/servers/redis-cluster/data/data3"
クラスター: 初期化:真 # マスター 1 台とスレーブ 2 台 (3 つのグループ) ノード数: 9 レプリカ: 2 4) 展開を開始する # ストレージディレクトリを作成する mkdir -p /opt/bigdata/servers/redis-cluster/data/data{1..3}
helm で redis-cluster をインストールします。/redis-cluster -n redis-cluster --create-namespace 注記 注記: チャート名: redis-cluster チャートバージョン: 8.2.7 アプリバージョン: 7.0.5** チャートが展開されるまでしばらくお待ちください**
パスワードを取得するには、次を実行します: REDIS_PASSWORD=$(kubectl get secret --namespace "redis-cluster" redis-cluster -o jsonpath="{.data.redis-password}" | base64 -d) をエクスポートします。
Kubernetes クラスター内からのみアクセス可能な Redis® クラスターをデプロイしました。情報: クラスターを作成するジョブが作成されます。Redis® クラスターに接続するには:
1. クライアントとして使用できる Redis® ポッドを実行します。 kubectl 実行 --namespace redis-cluster redis-cluster-client --rm --tty -i --restart='Never' \ --env REDIS_PASSWORD=$REDIS_PASSWORD \ --image myharbor.com/bigdata/redis-cluster:7.0.5-debian-11-r9 -- bash
2. Redis® CLI を使用して接続します。
redis-cli -c -h redis-cluster -a $REDIS_PASSWORD チェック kubectl get pods 、 svc - n redis -クラスター全体 5) 故障シミュレーションテスト kubectl exec -it redis - cluster - 0 - n redis - cluster --redis-cli -c -h redis-cluster -a $(kubectl get secret --namespace "redis-cluster" redis-cluster -o jsnotallow="{.data.redis-password}" | base64 -d) クラスター情報
kubectl exec - it redis - cluster - 0 - n redis - cluster -- redis-cli -c -h redis-cluster -a $(kubectl get secret --namespace "redis-cluster" redis-cluster -o jsonpath="{.data.redis-password}" | base64 -d) クラスターノード マスターノードの1つを削除する kubectl ポッド redis -クラスター- 1 - n redis -クラスターを削除します
# ノードのステータスを再度確認する kubectl exec - it redis - cluster - 0 - n redis - cluster -- redis-cli -c -h redis-cluster -a $(kubectl get secret --namespace "redis-cluster" redis-cluster -o jsonpath="{.data.redis-password}" | base64 -d) クラスターノード 6) アンインストール helm アンインストール redis -クラスター- n redis -クラスター # nsを削除 kubectl削除ns redis -クラスター--force # PVを削除 kubectl で pvを削除します`kubectl で pv を取得します| grep ^ redis -クラスター-| awk '{print $1}' ` --force
rm - fr / opt / bigdata / servers / redis - cluster / data / data { 1 .. 3 } /* Git アドレス: https://gitee.com/hadoop-bigdata/redis-on-k8s |