KubeSphere は Redis クラスターをインストールします。プロセス全体は非常にエキサイティングです

序文

redis開発プロセスでよく使用され缓存中间件展開を生产环境検討したり稳定性高可用一般的に使用されます。集群模式

仮想マシン上での従来のデプロイメントは構成が面倒で、ノードを手動で再起動する必要がありますが、K8Sクラスターのredisデプロイメントには次の利点があります。

  • 簡単なインストール: ミラーイメージまたはyaml構成ファイルを使用して、一体的にインストールします。
  • 自動スケジュール: コンテナがハングアップした後、再起動とリソース割り当てを自動的にスケジュールします。
  • 便利なスケーリングと拡張:ワンクリックで扩容スケーリングできる利点は言うまでもありません。缩容
  • 安定性と効率性:k8sスケジュールはクラスター全体で実行され、クラスター全体がハングアップしない限り、コンテナー サービスを再起動するために常に適切なノードにスケジュールされます。

1. Redis クラスターのインストール

クラスターのすべてのインストール リソースを配置するtest-projectために、ここに新しいプロジェクト スペースを作成しました。プロジェクト スペースの名前は後で使用され、この部分がマークされます。独自のプロジェクト スペース名を使用することに注意する必要があります。RedisDNS

クラスターのインストールは、大きく次の手順に分かれます。

  1. 設定redis.conf辞書
  2. redisサービスを作成する
  3. コンテナグループの構成
  4. ストレージ設定
  5. 高度な設定

さあ、最初のステップから始めましょう。

1.1 redis.conf ディクショナリの構成

プロジェクトスペースの配置配置字典创建で構成辞書を作成します
ここに画像の説明を挿入

名前が呼び出されredis-conf、次のステップではキーと値のペアのデータを追加します。

ここに画像の説明を挿入

key値の内容はredis.confvalue値は次のとおりです。

cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
cluster-require-full-coverage no
cluster-migration-barrier 1
appendonly yes

1.2 Redisサービスの作成

プロジェクトスペースの应用负载服务→にRedisサービスを创建作成します
ここに画像の説明を挿入

有状态服务データ ストレージを必要とするサービスは基本的にステートフル サービスであることを選択してください

ここに画像の説明を挿入

基本設定では、名前が呼ばれてredis-clusterハイライトされ、次のステップに進みます容器组配置

1.3 コンテナグループの構成

このステップの中心は、Redis コンテナーを構成することであり、クラスターの数は従来どおりで、三主三从コンテナーのコピーの数は 6 です。

ここに画像の説明を挿入

コンテナー グループのコピー数を 6 に調整し、[コンテナーの追加] をクリックします。

ここに画像の説明を挿入

イメージdocker hubのバージョンを選択し、デフォルトのポートを使用するように選択し、選択的に予約できます。予約されていない場合は、パブリック リソースがスケジュールされますredis6.2.3CPU内存

ここに画像の説明を挿入
選択すると使用默认端口、上図に示すように次のポート設定が使用され6379、設定起動コマンドもあります。

上に示すように設定します。

  • 注文:redis-server
  • パラメータ:/etc/redis/redis.conf

このパラメーターは前の辞書構成の内容を指しますが、存储设置辞書を使用するには次のステップで構成する必要があります。

ここに画像の説明を挿入

他のコンテンツには何も設定する必要はありません。チェックマークを選択してコンテナーの設定を完了します。

ここに画像の説明を挿入
更新戦略が推奨されており滚动更新、他に変更する必要があるものはありません。[次へ] をクリックして設定してください存储设置

1.4 ストレージ設定

このステップでは 2 つの操作があります

  • 添加持久卷声明模板
  • 挂载配置字典

ここに画像の説明を挿入

1.4.1 Persistent Volume Claim テンプレートの追加

PVC 名のプレフィックス: redis-pvc

容量:10G

マウントパス:

  • 権限: 読み取りおよび書き込み
  • アドレス: /data
    ここに画像の説明を挿入
    は主にマウント パスを選択するためのもので、構成後、チェック マークをクリックして構成を完了します

1.4.2 マウント構成辞書

このステップでは、前に設定した辞書をマウントしますredis-conf。これはredis起動コマンドのパラメータの内容でもあります。

ここに画像の説明を挿入

選択されたredis構成辞書

ここに画像の説明を挿入

マウント権限は: 只读、アドレスは: /etc/redis; 上記のコマンド パラメータの設定に対応します。

ここに画像の説明を挿入

redis.conf背後にある同じ名前の特定のキーを選択しredis.conf、チェック マークをクリックして完了後にストレージ設定に戻ります。

ここに画像の説明を挿入

設定が完了したら、上の図を入力し、「次へ」をクリックして最終的な設定を入力します。高级设置

ここに画像の説明を挿入

高级设置ここにいくつかの追加構成があります。独自のシーンに応じて構成を調整することを選択できます。調整が完了したら、クリックし创建 て Redis クラスター コンテナーを作成します。

2. Redis クラスターを初期化する

作成Redis服务後、次の図に示すように、redisサービス名をクリックしてサービスの詳細を入力します。redis

ここに画像の説明を挿入

6 つのredisコンテナー グループはすべて正常に起動しました。次のステップはクラスターを初期化することです。redis設定したサービスでは有状态服务(Headless)アクセス モードが内部 DNS 経由になるように構成されているため、アクセス形式は( 容器名称) (.Container DNS ).svc.cluster です。地元

ここに画像の説明を挿入

たとえば、上記の例によれば、集群1 节点アクセス アドレスにアクセスするとaddressがredis-cluster-v1-1追加され完全なアドレスは次のようになります。DNSredis-cluster.test-projectsvc.cluster.local

redis-cluster-v1-1.redis-cluster.test-project.svc.cluster.local

最初のノード以外の他のノード端末では、次の図に示すように、redis集群このアドレスからアクセスして相互運用可能かどうかを確認し、 と入力します3节点终端

ここに画像の説明を挿入

ターミナルに入り、次のコマンドを実行します。

redis-cli -h redis-cluster-v1-1.redis-cluster.test-project.svc.clusterredis.local

v1-1下図のようにノードにジャンプできれば、2つのノードが通信できていることになります。

ここに画像の説明を挿入

コマンドを実行します:cluster infoノードのクラスター状態を表示します。

ここに画像の説明を挿入

上図の2つのパラメータに主に注目すると、現在ノードが1つしかないことを示すため、現在ノードnodes存在せず、現時点ではクラスタ構造ではないことを示しています。ここにリストされています:11cluster_sizemasterinfo

  • cluster_state: ok 状態は、クラスターがクエリ要求を正常に受け入れることができることを示します。失敗状態は、少なくとも 1 つのハッシュ スロットがバインドされていないこと (ハッシュ スロットがどのノードにもバインドされていないことを示します)、または間違った状態 (ノードはサービスを提供できますが、FAIL フラグが付いていること) にあること、またはノードがサービスを提供できないことを示します。ほとんどのマスターノードに接続します
  • cluster_slots_assigned:クラスター ノードに割り当てられたハッシュ スロットの数 (バインドされていない数ではありません)。16384 個のハッシュ スロットすべてがクラスター ノードに割り当てられていることが、クラスターの通常の動作に必要な条件です。
  • cluster_slots_ok: FAIL および PFAIL 以外のハッシュ スロット ステータスの数
  • cluster_slots_pfail:ハッシュ スロットのステータスは PFAIL の数です。ハッシュ スロットのステータスが FAIL ステータスにアップグレードされない限り、これらのハッシュ スロットは引き続き正常に処理できます。PFAIL 状態は、現在ノードと対話できないことを意味しますが、この状態は一時的なエラー状態にすぎません
  • cluster_slots_fail:ステータスがFAILのハッシュスロットの数。値が 0 でない場合、cluster-require-full-coverage が no に設定されていない限り、クラスター ノードはクエリを処理できません。
  • cluster_known_nodes:クラスター内のノードの数 (ハンドシェイク状態にあり、まだクラスターの正式なメンバーになっていないノードを含む)
  • cluster_size:少なくとも 1 つのハッシュ スロットを含み、サービスを提供できるマスター ノードの数
  • cluster_current_epoch:クラスターのローカルの現在のエポック変数の値。この値はノードのフェールオーバー プロセス中に役立ち、常に増加し、一意になります。
  • cluster_my_epoch:現在使用中のノードの Config Epoch 値。これは、このノードに関連付けられたバージョン値です。
  • cluster_stats_messages_sent:ノード間のバイナリ バスを介して送信されたメッセージの数
  • cluster_stats_messages_received:ノード間のバイナリ バス経由で受信したメッセージの数

2.1 IPアドレス初期化クラスタ

ip + port最初にクラスターを初期化するメソッドを使用しようとしますが、途中でk8sサービスが変更されるため、最終結果でもクラスターを初期化するメソッドを使用する必要があります。ipDNS

执行本步后再想修改为DNS地址初始化需要从来一遍,如果不想麻烦的同学可以直接跳过。

ここに画像の説明を挿入
redisすべてのクラスターを記録しますip+port。初期化コマンドは次のとおりです。

redis-cli --cluster create 10.233.70.30:6379 10.233.70.32:6379 10.233.90.41:6379 10.233.90.43:6379 10.233.96.47:6379 10.233.96.50:6379 --cluster-replicas 1

クラスターに入り、redis任意のノードで终端上記のコマンドを実行します。

ここに画像の説明を挿入
ここに画像の説明を挿入

redis-cli上図のように、クラスタの初期化が完了したら、コマンドターミナルにコマンドを入力して実行し、cluster infoクラスタ情報を表示します。

ここに画像の説明を挿入
これで、クラスター ノードが61 つとmasterノードが 3 つになり、クラスターが確立され、後続の操作でmaster操作するノードが選択されます。

ここに画像の説明を挿入

クラスター ノードを確認するときに、上の図のエラーが発生した場合は、クラスター モードが有効になっていないことが(error) MOVED 2589 10.233.70.30:6379原因であり、コマンドを に変更することでクラスター モードに切り替えることができます。redis-cliredis-cli -c

2.2 内部DNSで初期化する

アドレスの使用方法はスケジューリングipたびに変わるため、クラスタ内でクラスタを初期化する方法を使用するのは適切ではありませんが、上記のように内部メソッドを使用してクラスタを直接初期化するとエラーが発生します。ドメイン名のサポートはあまり良くないので、現時点では使用できますk8sredisipk8sipDNSredisRedis-tribe

2.2.1 Redis-tribeサービスの作成

カスタム サービスを作成するには、编辑YAML

ここに画像の説明を挿入

namespaceプロジェクト名をパラメータとして書き込みます。

ここに画像の説明を挿入
具体的なYAML内容は以下の通りです。

apiVersion: apps/v1
kind: Deployment
metadata:
  namespace: test-project
  labels:
    app: redis-cluster-tools
  name: redis-cluster-tools
spec:
  replicas: 1
  selector:
    matchLabels:
      app: redis-cluster-tools
  template:
    metadata:
      labels:
        app: redis-cluster-tools
      name: pos-redis
    spec:
     containers:
     - name: pos-redis
       image: sunnywang/redis-tools-ubuntu:v0.5.1
       imagePullPolicy: IfNotPresent
       args:
       - /bin/bash
       - -c
       - sleep 3600

作成後にコンテナー グループ内で見つかりましたredis-cluster-tools

ここに画像の説明を挿入

2.2.2 クラスターの初期化

コンテナ名をクリックしてコンテナの詳細を入力し、ターミナルを入力します。

ここに画像の説明を挿入

まず次のコマンドを実行してmasterノードを初期化します。その後、以前の内部DNSドメイン名が有効になります。

redis-trib.py create `dig +short redis-cluster-v1-0.redis-cluster.test-project.svc.cluster.local`:6379 `dig +short redis-cluster-v1-1.redis-cluster.test-project.svc.cluster.local`:6379 `dig +short redis-cluster-v1-2.redis-cluster.test-project.svc.cluster.local`:6379

実行結果は以下のようになります。

ここに画像の説明を挿入

次に、各masterノードを対応するコピー ノードにバインドします (合計 3 つ)。

0 ノード -> 3 ノード

redis-trib.py replicate --master-addr `dig +short redis-cluster-v1-0.redis-cluster.test-project.svc.cluster.local`:6379 --slave-addr `dig +short redis-cluster-v1-3.redis-cluster.test-project.svc.cluster.local`:6379

1ノード -> 4ノード

redis-trib.py replicate  --master-addr `dig +short redis-cluster-v1-1.redis-cluster.test-project.svc.cluster.local`:6379 --slave-addr `dig +short redis-cluster-v1-4.redis-cluster.test-project.svc.cluster.local`:6379

2 ノード -> 5 ノード

redis-trib.py replicate --master-addr `dig +short redis-cluster-v1-2.redis-cluster.test-project.svc.cluster.local`:6379 --slave-addr `dig +short redis-cluster-v1-5.redis-cluster.test-project.svc.cluster.local`:6379

実行結果は以下の通りです。

ここに画像の説明を挿入

2.2.3 検証

クラスターノードのターミナルを入力するか、cluster infoコマンドを実行してクラスター情報を表示するだけです

ここに画像の説明を挿入

基本的なコマンドを使用して確認し、クラスター モードをredis-cli追加する必要があることを確認します。-c

ここに画像の説明を挿入

クラスターモードが正常に使用できることを確認してから、自由にプレイしてください

あなたが大丈夫だと思うなら、裁判官全員があなたの大金を稼いだ小さな手であなたに親指を立てるでしょう。未来的运气能爆棚哦。

おすすめ

転載: blog.csdn.net/AnNanDu/article/details/126938057