Redis クラスターとは Redis クラスターは、Redis が提供する分散データベース ソリューションです。クラスターはシャーディングを通じてデータを共有し、レプリケーションとフェイルオーバー機能を提供します。 ノード Redis クラスターは通常、複数のノードで構成されます。最初は、各ノードは互いに独立しています。それらはすべて、自分自身だけを含むクラスター内にあります。実際に機能するクラスターを形成するには、独立したノードを接続して、複数のノードを含むクラスターを形成する必要があります。 クラスター構成 設定ファイル 設定ファイルをダウンロードしてください: https://raw.githubusercontent.com/antirez/redis/5.0/redis.conf CLUSTERノード構成を調整する # クラスターを有効にする cluster-enabled yes # クラスター構成ファイル cluster-config-file nodes-6379.conf # クラスターノードのタイムアウト cluster-node-timeout 15000 DockerはRedisクラスターを素早く構築します Redisをインストールする 参考記事: https://www.jb51.net/article/150054.htm 準備 ├── 会議 │ ├── redis.conf │ └── センチネル.conf ├── レディス │ ├── data_6379 │ ├── data_6380 │ ├── data_6381 │ ├── data_6382 │ ├── data_6383 │ └── data_6384 └── スクリプト ├── クラスタ.sh ├── run.sh └── センチネル run.sh スクリプト ファイル #!/usr/bin/env バッシュ セット-e # スクリプトの現在のディレクトリ cPath=$(cd $(dirname "$0") || exit; pwd) # ルートディレクトリ dirPath=$(dirname "$cPath") # ポートを取得します port="$1" [[ ! "$port" ]]; の場合 ポート=6379 フィ # データディレクトリを作成する mkdir -p "$dirPath"/redis/data_"$port" # 開始したサービスを削除します。containerId=$(docker ps -a | grep "redis_$port" | awk -F' ' '{print $1}') [[ "$containerId" ]]の場合 docker rm -f ${コンテナID} > /dev/null フィ # サービスを開始します。containerName=redis_"$port" docker run -itd --privileged=true -p "$port":6379 --name ${containerName} \ -v="$dirPath"/conf/redis.conf:/etc/redis/redis.conf \ -v="$dirPath"/redis/data_"$port":/data \ レディス \ redis-server /etc/redis/redis.conf > /dev/null # コンテナの IP アドレスを取得します。dockerIp=$(docker inspect -f "{{.NetworkSettings.IPAddress}}" "$containerName") # コンテナの起動ステータスを取得します isRunning=$(docker inspect -f "{{.State.Running}}" "$containerName") [[ "$isRunning" == "true" ]]の場合 echo "コンテナ: $containerName - IP: $dockerIp - 正常に起動しました" フィ cluster.sh スクリプト ファイル #!/usr/bin/env バッシュ セット-e # スクリプトの現在のディレクトリ cPath=$(cd $(dirname "$0") || exit; pwd) # クラスター番号 num="$1" を開始します [[ ! "$num" ]]; の場合 番号=6 フィ ポート=6378 for((i=1;i<=$num;i++)); 実行する sh ${cPath}/run.sh $(($sPort+$i)) 終わり サービスを開始する スクリプトファイルを実行し、デフォルトで6つのノードを作成します。 sh スクリプト/cluster.sh スクリプトは結果を返します
docker ps を実行して、起動が成功したかどうかを確認します。 root@DESKTOP-Q13EI52:~/docker-config/redis# docker ps コンテナID イメージ コマンド 作成ステータス ポート名 c0601df1a456 redis "docker-entrypoint.s..." 27 秒前 26 秒前にアップ 0.0.0.0:6384->6379/tcp redis_6384 6fecf70465b8 redis "docker-entrypoint.s..." 27 秒前 26 秒前にアップ 0.0.0.0:6383->6379/tcp redis_6383 1af15e90b7a0 redis "docker-entrypoint.s..." 28 秒前 27 秒前にアップ 0.0.0.0:6382->6379/tcp redis_6382 6c495f31a5df redis "docker-entrypoint.s..." 28 秒前 28 秒前に起動 0.0.0.0:6381->6379/tcp redis_6381 e54fd9fd0550 redis "docker-entrypoint.s..." 29 秒前 28 秒前にアップ 0.0.0.0:6380->6379/tcp redis_6380 be92ad2f7046 redis "docker-entrypoint.s..." 29 秒前 29 秒前にアップ 0.0.0.0:6379->6379/tcp redis_6379 これまでに 6 つの独立したクラスター ノードが作成されましたが、まだ正常に動作していません。 クラスターの作成 この部分は飛ばしていただいて構いません。面倒なことは避けたいだけです コンテナ redis_ によって起動されたすべてのコンテナの IP アドレスを取得します。 docker examine -f "{{.NetworkSettings.IPAddress}}:6379" `docker ps | grep redis_ | awk -F' ' '{print $1}'` | sort |xargs | sed 's/ /, /g' # 結果を返す# 172.17.0.2:6379、172.17.0.3:6379、172.17.0.4:6379、172.17.0.5:6379、172.17.0.6:6379、172.17.0.7:6379 初期クラスタ作成の実行 ./redis-cli --cluster を作成します 172.17.0.2:6379、172.17.0.3:6379、172.17.0.4:6379、172.17.0.5:6379、172.17.0.6:6379、172.17.0.7:6379 --cluster-replicas 1 出力 リカ 1 >>> 6 つのノードでハッシュ スロットの割り当てを実行しています... マスター[0] -> スロット0 - 5460 マスター[1] -> スロット5461 - 10922 マスター[2] -> スロット 10923 - 16383 レプリカ 172.17.0.6:6379 を 172.17.0.2:6379 に追加しています レプリカ 172.17.0.7:6379 を 172.17.0.3:6379 に追加しています レプリカ 172.17.0.5:6379 を 172.17.0.4:6379 に追加しています :e8da1fef656984de3ec2a677edc8d9c48d01cd95 172.17.0.2:6379 スロット:[0-5460] (5461スロット) マスター 男: 68b925ab0fbbc1a632c1754587fb6dad3fa14c91 172.17.0.3:6379 スロット:[5461-10922] (5462スロット) マスター 0a46ab2f6d176738b55fe699c2df1c34f8200d06 172.17.0.4:6379 スロット:[10923-16383] (5461 スロット) マスター s: bd3064ad5297dfc258e9236943455c589be8b2a3 172.17.0.5:6379 0a46ab2f6d176738b55fe699c2df1c34f8200d06 を複製します 172.17.0.6:6379 ... 複製 e8da1fef656984de3ec2a677edc8d9c48d01cd95 619e1cb52f39e07b321719b77fc3631fa6293cef 172.17.0.7:6379 68b925ab0fbbc1a632c1754587fb6dad3fa14c91 を複製します 上記の構成を設定できますか? (承認するには「はい」と入力してください): 入力: はい、スロットは均等に分配されます >>> ノード構成が更新されました >>> 各ノードに異なる構成エポックを割り当てる >>> クラスターに参加するためにCLUSTER MEETメッセージを送信する クラスターの参加を待機中 ..... >>> クラスター チェックを実行しています (ノード 172.17.0.2:6379 を使用) :e8da1fef656984de3ec2a677edc8d9c48d01cd95 172.17.0.2:6379 スロット:[0-5460] (5461スロット) マスター 追加のレプリカ 1 個 s: f1d8c897882d29e6538b1158525493b3b782289a 172.17.0.6:6379 スロット: (0 スロット) スレーブ 複製 e8da1fef656984de3ec2a677edc8d9c48d01cd95 s: bd3064ad5297dfc258e9236943455c589be8b2a3 172.17.0.5:6379 スロット: (0 スロット) スレーブ 0a46ab2f6d176738b55fe699c2df1c34f8200d06 を複製します 0a46ab2f6d176738b55fe699c2df1c34f8200d06 172.17.0.4:6379 スロット:[10923-16383] (5461 スロット) マスター 追加のレプリカ 1 個 619e1cb52f39e07b321719b77fc3631fa6293cef 172.17.0.7:6379 スロット: (0 スロット) スレーブ 68b925ab0fbbc1a632c1754587fb6dad3fa14c91 を複製します 男: 68b925ab0fbbc1a632c1754587fb6dad3fa14c91 172.17.0.3:6379 スロット:[5461-10922] (5462スロット) マスター 追加のレプリカ 1 個 [OK] すべてのノードがスロット構成に同意します。 >>> 空きスロットがあるか確認します... >>> スロットのカバレッジを確認してください... [OK] 16384 スロットすべてがカバーされました。 クラスターへの接続 クライアント経由で接続 redis-cli -c <ポート> 次のコマンドを実行します: 127.0.0.1:6379> クラスター情報 クラスター状態:正常 割り当てられたクラスタースロット:16384 クラスタースロットOK:16384 クラスタースロットp失敗:0 クラスタースロット失敗:0 クラスターの既知のノード:6 クラスターサイズ:3 クラスター現在のエポック:6 クラスター_マイ_エポック:1 クラスター統計メッセージping送信:104 クラスター統計メッセージ送信:120 クラスター統計メッセージ送信数:224 クラスター統計メッセージping受信:115 クラスター統計メッセージ受信:104 クラスター統計メッセージ会議受信数:5 クラスター統計受信メッセージ:224
クライアントコンソール: 127.0.0.1:6379> クラスターヘルプ 1) CLUSTER <サブコマンド> arg arg ... arg。サブコマンドは次のとおりです。 2) ADDSLOTS <slot> [slot ...] -- 現在のノードにスロットを割り当てます。 3) BUMPEPOCH -- クラスター構成エポックを進めます。 4) COUNT-failure-reports <node-id> -- <node-id> の障害レポートの数を返します。 5) COUNTKEYSINSLOT <スロット> - <スロット>内のキーの数を返します。 6) DELSLOTS <slot> [slot ...] -- 現在のノードからスロット情報を削除します。 7) FAILOVER [force|takeover] - 現在のレプリカ ノードをマスターに昇格します。 8) FORGET <node-id> -- クラスターからノードを削除します。 9) GETKEYSINSLOT <スロット> <カウント> -- 現在のノードによってスロットに格納されているキー名を返します。 10) FLUSHSLOTS -- 現在のノードのスロット情報を削除します。 11) INFO - クラスターに関する情報を返します。 12) KEYSLOT <key> -- <key> のハッシュスロットを返します。 13) MEET <ip> <port> [bus-port] -- 稼働中のクラスターにノードを接続します。 14) MYID -- ノード ID を返します。 15) NODES -- ノードから見たクラスター構成を返します。出力形式: 16) <id> <ip:port> <flags> <master> <pings> <pongs> <epoch> <link> <slot> ... <slot> 17) REPLICATE <node-id> -- 現在のノードを <node-id> のレプリカとして設定します。 18) RESET [hard|soft] -- 現在のノードをリセットします(デフォルト: soft)。 19) SET-config-epoch <epoch> - 現在のノードの設定エポックを設定します。 20) SETSLOT <スロット> (インポート|移行|安定|ノード <ノード ID>) -- スロットの状態を設定します。 21) REPLICAS <node-id> -- <node-id> レプリカを返します。 22) SAVECONFIG - クラスター構成をディスクに強制的に保存します。 23) SLOTS -- スロット範囲のマッピングに関する情報を返します。各範囲は次の要素で構成されます。 24) 開始、終了、マスター、レプリカの IP アドレス、ポート、ID クライアントが提供するクラスター関連のコマンドを表示します: クラスター マネージャー コマンド: ホスト1:ポート1 ... ホストN:ポートNを作成します --cluster-replicas <引数> ホスト:ポートを確認する --cluster-search-複数の所有者 情報ホスト:ポート ホスト:ポートを修正 --cluster-search-複数の所有者 リシャードホスト:ポート --cluster-from <引数> --cluster-to <引数> --cluster-slots <引数> --cluster-yes --cluster-timeout <引数> --cluster-pipeline <引数> --クラスタ置換 ホスト:ポートの再バランス --cluster-weight <node1=w1...nodeN=wN> --cluster-use-empty-masters --cluster-timeout <引数> --クラスタシミュレート --cluster-pipeline <引数> --cluster-threshold <引数> --クラスタ置換 ノードの追加 新しいホスト:新しいポート 既存のホスト:既存のポート --クラスタスレーブ --cluster-master-id <引数> del-node ホスト:ポート ノードID ホスト:ポート コマンド arg arg .. arg を呼び出す タイムアウト設定 ホスト:ポート ミリ秒 ホスト:ポートをインポートする --cluster-from <引数> --クラスタコピー --クラスタ置換 これで、Docker で Redis クラスターを素早く構築する方法についての記事は終了です。Docker で Redis クラスターを構築する方法の詳細については、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: MySQL をインストールするときに初期パスワードを忘れた場合のシンプルで効果的な解決策
>>: JavaScriptのループの違いについての詳細な説明
目次1. データベース設計2. フロントエンドページ3. 完全なデモフロントエンド開発では、カスケー...
MySQLへのリモートアクセスを有効にするデフォルトでは、MySQL ユーザーにはリモート アクセス...
目次Vuex は単一の状態ツリーを使用するため、すべてのアプリケーション状態が比較的大きなオブジェク...
MySQL バージョン: MySQL Community Edition (GPL) ------ ...
Docker コンテナを適用する場合、多くの場合、ホスト ディレクトリを Docker コンテナにマ...
テーブルを素早くコピーする方法まず、テーブル db1.t を作成し、1000 行のデータを挿入します...
目次識別子の長さ制限権限テーブルの範囲フィールドの長さ制限データベースとテーブルの数の制限テーブルサ...
目次1. 基本1.参照2. 参照3. 参照4. 最適な使い方2. 詳細な1. なぜrefが必要なのか...
CSS Houdini は、CSS 分野における最もエキサイティングなイノベーションとして知られてい...
マーキー要素を使用すると、単純なフォント(画像など)のスライドやその他の効果を実現できます。コードを...
1. HTMLページの文字セットを指定する2つの方法方法1: <メタ文字セット="u...
jQueryは劇場の座席選択と予約の効果を実現します。参考までに、具体的な内容は次のとおりです。効果...
1. MySQL 8.0.20をダウンロードして解凍するダウンロードリンク: https://dev...
読み取り専用入力を実現するには、無効と読み取り専用の 2 つの方法があります。当然、どちらの結果も読...
HTML タグ: 上付き文字HTML では、<sup> タグは上付き文字のテキストを定義...