序文
redis
開発プロセスでよく使用され缓存中间件
、展開を生产环境
検討したり稳定性
、高可用
一般的に使用されます。集群模式
仮想マシン上での従来のデプロイメントは構成が面倒で、ノードを手動で再起動する必要がありますが、K8S
クラスターのredis
デプロイメントには次の利点があります。
- 簡単なインストール: ミラーイメージまたは
yaml
構成ファイルを使用して、一体的にインストールします。 - 自動スケジュール: コンテナがハングアップした後、再起動とリソース割り当てを自動的にスケジュールします。
- 便利なスケーリングと拡張:ワンクリックで
扩容
スケーリングできる利点は言うまでもありません。缩容
- 安定性と効率性:
k8s
スケジュールはクラスター全体で実行され、クラスター全体がハングアップしない限り、コンテナー サービスを再起動するために常に適切なノードにスケジュールされます。
1. Redis クラスターのインストール
クラスターのすべてのインストール リソースを配置するtest-project
ために、ここに新しいプロジェクト スペースを作成しました。プロジェクト スペースの名前は後で使用され、この部分がマークされます。独自のプロジェクト スペース名を使用することに注意する必要があります。Redis
DNS
クラスターのインストールは、大きく次の手順に分かれます。
- 設定
redis.conf
辞書 redis
サービスを作成する- コンテナグループの構成
- ストレージ設定
- 高度な設定
さあ、最初のステップから始めましょう。
1.1 redis.conf ディクショナリの構成
プロジェクトスペースの配置
→ 配置字典
→创建
で構成辞書を作成します
名前が呼び出されredis-conf
、次のステップではキーと値のペアのデータを追加します。
key
値の内容はredis.conf
、value
値は次のとおりです。
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
のバージョンを選択し、デフォルトのポートを使用するように選択し、選択的に予約できます。予約されていない場合は、パブリック リソースがスケジュールされますredis
。6.2.3
CPU
内存
選択すると使用默认端口
、上図に示すように次のポート設定が使用され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
追加され、完全なアドレスは次のようになります。DNS
redis-cluster.test-project
svc.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
が存在せず、現時点ではクラスタ構造ではないことを示しています。ここにリストされています:1
1
cluster_size
master
info
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
サービスが変更されるため、最終結果でもクラスターを初期化するメソッドを使用する必要があります。ip
DNS
执行本步后再想修改为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
クラスタ情報を表示します。
これで、クラスター ノードが6
1 つとmaster
ノードが 3 つになり、クラスターが確立され、後続の操作でmaster
操作するノードが選択されます。
クラスター ノードを確認するときに、上の図のエラーが発生した場合は、クラスター モードが有効になっていないことが(error) MOVED 2589 10.233.70.30:6379
原因であり、コマンドを に変更することでクラスター モードに切り替えることができます。redis-cli
redis-cli -c
2.2 内部DNSで初期化する
アドレスの使用方法はスケジューリングip
のたびに変わるため、クラスタ内でクラスタを初期化する方法を使用するのは適切ではありませんが、上記のように内部メソッドを使用してクラスタを直接初期化するとエラーが発生します。ドメイン名のサポートはあまり良くないので、現時点では使用できます。k8s
redis
ip
k8s
ip
DNS
redis
Redis-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
クラスターモードが正常に使用できることを確認してから、自由にプレイしてください
あなたが大丈夫だと思うなら、裁判官全員があなたの大金を稼いだ小さな手であなたに親指を立てるでしょう。
未来的运气能爆棚哦。