docker redis5.0 clusterの実装 クラスタ構築

docker redis5.0 clusterの実装 クラスタ構築

システム環境: Ubuntu 16.04LTS

この記事では、6 つの Docker コンテナを使用して、単一マシンのクラスター テストを構築します。実際の環境に複数のマシンがある場合は、それに応じてコンテナの数、ポート番号、クラスター IP アドレスを変更できます。各マシンで、以下の同じ手順を実行できます。

公式Redisイメージを取得する

docker pull redis:5.0

設定ファイルとデータディレクトリを作成する

ディレクトリを作成する

mkdir ~/redis_cluster
cd ~/redis_cluster

新しいテンプレート ファイル sudo vim redis_cluster.tmpl を作成し、次の内容を入力します。

# redis ポート ${PORT}

# 保護モードを無効にする protected-mode no

# クラスターを有効にする cluster-enabled yes

# クラスターノード構成 cluster-config-file nodes.conf

#タイムアウト クラスターノードタイムアウト 5000

# クラスタノードIPホストモードはホストマシンのIPです
クラスターアナウンスIP 10.10.100.197

# クラスターノードポート 7000 - 7005
クラスターアナウンスポート ${PORT}
クラスターアナウンスバスポート 1${PORT}

# appendonly バックアップモードを有効にする appendonly yes

# 1秒ごとにバックアップ appendfsync everysec

#ファイルの圧縮時に同期を実行するかどうか no-appendfsync-on-rewrite no

# 現在の aof ファイルのサイズが最後に書き換えられた aof ファイルのサイズの 100% を超えると、再度書き換えられます。auto-aof-rewrite-percentage 100

# 書き換え前のAOFファイルの最小サイズはデフォルトで64MBです
自動 aof 書き換え最小サイズ 5120 MB

# スナップショットバックアップ保存を無効にする ""

設定ファイルとデータ ディレクトリをバッチで作成するには、ターミナルで次のコマンドを実行します。

`seq 7000 7005` のポートの場合、\ を実行します。
 mkdir -p ./${port}/conf \
 && PORT=${port} envsubst < ./redis_cluster.tmpl > ./${port}/conf/redis.conf \
 && mkdir -p ./${port}/data; \
終わり

Redisコンテナをバッチで起動する

コンテナの IP アドレスはホスト モードを使用します。

`seq 7000 7005` のポートの場合、\ を実行します。
 docker run -d -it --memory=1G \
 -v ~/redis_cluster/${port}/conf/redis.conf:/usr/local/etc/redis/redis.conf \
 -v ~/redis_cluster/${ポート}/data:/data \
 --restart 常に --name redis-${port} --net ホスト \
 --sysctl net.core.somaxconn=1024 redis:5.0 redis-server /usr/local/etc/redis/redis.conf; \
終わり

ここで、--memeory=1G は、単一の Docker コンテナのメモリ サイズを 1G に制限します。この制限を超えると、プロセスは強制終了されます。実行時に、「スワップなしではメモリが制限されます...」という警告が表示される場合がありますが、これは無視できます。メモリを制限する必要がない場合は、--memeory パラメータを削除できます。

クラスターの作成

いずれかのコンテナーを入力します。

docker exec -it redis-7000 bash

入力後、以下のコマンドを実行してクラスターを作成します。

redis-cli --cluster を作成します 10.10.100.197:7000 10.10.100.197:7001 10.10.100.197:7002 10.10.100.197:7003 10.10.100.197:7004 10.10.100.197:7005 --cluster-replicas 1

redis-cli コマンドをインストールします (すでにインストールされている場合はこの手順をスキップしてください)。

sudo apt で redis-tools をインストールします

yes と入力すると、クラスターが作成されます。Docker を終了し、いずれかのノードにログインして、クラスターの可用性を確認します。

redis-cli -c -p 7000

クラスターのステータスを表示するにはクラスターノードを入力します

127.0.0.1:7000> クラスターノード
06851aa134d50096d82a434eced9194233b5204e 10.10.100.197:7003@17003 スレーブ 8b33f273386c9504ef8bd10b005e24825b3b9596 0 1567671901000 4 台接続済み
a42297b65f7101fc9e4941ef8a0e65080d1b6338 10.10.100.197:7005@17005 スレーブ 0aa20378d14e3ef0859815196cbafa67e1001d0e 0 1567671901581 6 が接続されています
e7b6a35b1e92f94c225c507ea19f7f0318f0d1c3 10.10.100.197:7002@17002 マスター - 0 1567671902582 3 接続済み 10923-16383
0aa20378d14e3ef0859815196cbafa67e1001d0e 10.10.100.197:7000@17000 自分、マスター - 0 1567671901000 1 接続済み 0-5460
8b33f273386c9504ef8bd10b005e24825b3b9596 10.10.100.197:7001@17001 マスター - 0 1567671902383 2 接続 5461-10922
fe355eed99100197f43d1216d1de82643dd496a5 10.10.100.197:7004@17004 スレーブ e7b6a35b1e92f94c225c507ea19f7f0318f0d1c3 0 1567671901380 5 接続済み

クラスターパスワードを設定する

テンプレートファイルを使用して設定ファイルを一括作成する場合、上記の手順でパスワードを記述してみてはいかがでしょうか?

クラスターを作成するために ruby​​ を使用する redis 5.x でも以前の redis バージョンでも、クラスターを作成する redis-cli --cluster create プロセスにはパスワード パラメータ設定がないため、クラスターを作成した後にパスワードを設定する必要があります。

config set メソッドを使用して、各ノードに同じパスワードを設定します (Redis を再起動する必要はなく、再起動後も有効です)。その前に、すべての Redis 構成ファイルに w 権限を追加してください。そうしないと、パスワードをファイルに保存できません。

現在のパスはまだ ~/redis_cluster/ であることに注意してください。

`seq 7000 7005` のポートの場合、\ を実行します。
 chmod a+w ./${port}/conf/redis.conf; \
終わり

例として 1 つ挙げてみましょう。

ノードにログインします。

redis-cli -c -p 7000

パスワードを設定:

127.0.0.1:7000> 設定マスター認証 123456
わかりました
127.0.0.1:7000> config に requirepass 123456 を設定します
わかりました
127.0.0.1:7000>認証123456
わかりました
127.0.0.1:7000> 設定の書き換え
わかりました

次のデバイスでも同じ操作を実行します。

クラスタ書き込みデータの簡単なテスト

任意のクラスターノードにログインします。

redis-cli -c -p 7003 -a 123456

データの書き込み:

127.0.0.1:7003> va 1 を設定
-> 10.10.100.197:7001 にあるスロット [7800] にリダイレクトされました
わかりました
10.10.100.197:7001> vaを取得
「1」
10.10.100.197:7001> デルヴァ
(整数) 1

クラスター内の任意のノードによって書き込まれたデータは、他の任意のノードによって読み取ることができることがわかります。

この時点で、Redis クラスターが構築されます。

その他の考慮事項

  • 外部ネットワークから Redis にアクセスするには、ファイアウォールで対応するポートを開く必要がある場合があります。
  • コンテナを削除する必要がある場合は、バッチで実行できます。
`seq 7000 7005` のポートの場合、\ を実行します。
 docker redis-${port} を停止します。
 docker rm redis-${port};
終わり

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • Dockerを使用してRedisクラスターを構築する方法
  • Docker ベースの Redis マスタースレーブ クラスタの実装
  • Docker 上で Redis クラスターを構築する
  • Docker を使用してスタンドアロン Pulsar とクラスター化された Redis をデプロイする方法 (開発アーティファクト)
  • Docker を使用して Redis マスター スレーブ レプリケーション クラスターを構築する
  • Docker で Redis クラスターを素早く構築する方法の例
  • Docker で Redis センチネル モードを構成する方法 (複数のサーバー上)
  • Docker ベースの Redis 1 マスター、2 スレーブ、3 センチネルの実装
  • 5分でDockerを使ってRedisのクラスターモードとセンチネルモードを構築する方法を教えます

<<:  WangEditor リッチ テキスト コンポーネントを Angular でカプセル化する方法

>>:  MySQL における 8 つの一般的な SQL 使用例

推薦する

Mysql5.7.14 Linux版のパスワードを忘れた場合の完璧な解決策

/etc/my.confファイルで、[mysqld]の下に次の行を追加します: skip-grant...

Vue 3 カスタムディレクティブ開発の概要

指令とは何ですか? Angular と Vue はどちらもディレクティブの概念を持っており、これは通...

Linux に JDK1.8 をインストールするための詳細なチュートリアル

1. 設置前の清掃 rpm -qa | grep jdk rpm -qa | grep gcj yu...

MySQL 接続クエリを本当に学びましたか?

1. 内部結合クエリの概要内部結合は、アプリケーションで非常に一般的な結合操作であり、通常はデフォ...

MySQL ページング中にオフセットが大きすぎる場合の SQL 最適化の経験の共有

問題を見つけるコンテンツをリストで表示すると、リスト内のコンテンツの数は多いかもしれませんが、ユーザ...

JavaScript 中断要求に対するいくつかの解決策の詳細な説明

目次1 約束呼び出しチェーンを中断する約束を破る中止メソッドのラッピング - Axios の Can...

JavaScript オブジェクト (詳細)

目次JavaScript オブジェクト1. 定義2. オブジェクトの分類3. オブジェクトを定義する...

binlog2sql と簡単なバックアップおよびリカバリを使用して mysql8.0.20 を構成するための詳細な手順

目次最初のステップのインストールステップ2: MySQLデータを準備する3 番目のステップは、bin...

バックエンドから返される 100,000 個のデータをフロントエンドでより適切に表示するにはどうすればよいですか?

目次予備作業バックエンド構築フロントエンドページダイレクトレンダリングsetTimeout ページン...

Linux サーバーの状態を監視する方法

私たち、特に Linux エンジニアは毎日 Linux サーバーを扱っています。サーバーのセキュリテ...

Vue 親子コンポーネントの相互値の転送と呼び出し

目次1. 親が子コンポーネントに値を渡す2. 子コンポーネントが親コンポーネントに値を渡す3. 子コ...

Dockerはnextcloudを使用してプライベートBaiduクラウドディスクを構築します

突然、ドキュメントの保存と共同作業のためのプライベート サービスを構築する必要がありました。多くの場...

Linux のリンク解除機能とファイルの削除方法

1. リンク解除機能ハード リンクの場合、unlink はディレクトリ エントリを削除し、inode...

Vueプロジェクトがグラフィック検証コードを実装

この記事の例では、グラフィック検証コードを実装するためのVueプロジェクトの具体的なコードを参考まで...

MySQL データベースのインデックスとトランザクション

目次1. 索引1.1 コンセプト1.2 機能1.3 索引作成の原則1.3.1 ディスクアクセス回数を...