「クラウドネイティブ」Redis on K8s オーケストレーションの導入解説と実践的な運用

「クラウドネイティブ」Redis on K8s オーケストレーションの導入解説と実践的な運用

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/ホスト名
演算子:

- { { 。ホスト} }
---
{ { -終わり} }
  • redis/values.yaml
グローバル:
レディス:
パスワード: "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レイアウトを変更する

  • redis-sentinel/値.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年114金曜日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​

<<:  Alibaba Cloudの「Automotive Cloud」がYunqiカンファレンスでデビューしました。 Xpeng、FAW、Great Wall、Horizo​​nなどはすべてクラウドに移行しました

>>:  Kubecon 2022 概要: Kubernetes は産業化に向けて前進

推薦する

Canalys:2022年第1四半期のクラウドインフラサービス支出は世界全体で559億ドルに達した

市場調査会社カナリスが最近発表したレポートによると、企業がデジタル戦略を優先する中、2022年第1四...

ウェブサイトの登録数が増減を繰り返す4つの理由の分析例

最近、多くのウェブマスターが、自分のウェブサイトのインクルード数が一夜にして解放前のレベルに戻ったと...

#無制限トラフィックサーバー# sharktech-$89/X3470/12gメモリ/1.5Tハードディスク/1Gbps/デンバー

2003年から運営されているSharktechは、新年から特別低価格サーバーの提供を開始しました。1...

2023年に注目すべきクラウドコンピューティングの3つのトレンド

企業がコストを抑制しながら近代化を進めるにつれ、競合する物語が収束しつつあります。クラウド コンピュ...

A5 Webmaster Networkの第3回Taobao SEOトレーニングコースの申し込み受付を開始しました

Taobao 検索ランキングの最適化は、Taobao SEO とも呼ばれ、Taobao ストアを開設...

VMware COO: 企業のデジタル変革にはまず基盤とプロセスが必要

[51CTO.comより引用] 近年、デジタルトランスフォーメーションの潮流が世界を席巻し、さまざま...

Google アナリティクスで顧客からの電話を追跡および分析する方法

9月の深センウェブサイト分析共有イベントで、友人が顧客コールトラッキングの内容について質問しました。...

aim2game-6ドル/2gメモリ/50g SSD/2Tトラフィック/ニューヨーク

aim2gameは2009年3月に設立され、主にMCホスティング事業を営み、その後VPS事業も手掛け...

「ZS討論会」イベントマーケティングにおけるウェブサイト所有者間の思考の衝突を分析

2013年のウェブマスターイベント「zs討論」もその1つです。ここでは、Zhan Yi Paiフォー...

Pinduoduo はなぜ成功しているのでしょうか?

数日前、 Pinduoduo は2019 年通期業績報告書を発表しました。報告書によると、Pindu...

LeTao.comが美人社員に売却された?公式サイトのドメイン名は正常にアクセスできます

eName.cnは4月24日、昨日のFantong.comの崩壊に続き、今日、靴専門B2CサイトLe...

継続的な進歩に向けて協力 - サンフォーと西安テレコムが共同でネットワークセキュリティ研究所を設立

1月8日、「共存、融合、共創」をテーマにした中国電信西安支社のDICTエコロジカルパートナー会議が成...

ビッグモデルの時代において、Kingsoft Cloudはクラウドを基盤とし、差別化された戦略で未来を計画しています

生成型人工知能の波に後押しされ、あらゆる企業は時代の潮流に遅れずについていき、ビジネスモデルを革新す...

キーワードの本当の意味をどれだけ知っていますか?

今日はキーワードとは何かを皆さんにお伝えしたいと思います。主に5つのパートに分かれており、キーワード...

SaaS、IaaS、PaaS...クラウドコンピューティング業界は急速に熱を帯びている

現在、デジタル経済は中国経済の新たな原動力となっている。デジタル工業化と産業デジタル化の「両輪駆動」...