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 使用例

推薦する

Linux で MySQL のデフォルト エンコーディングを変更する方法

開発プロセス中に、MySQL データベースを復元した後にデータベース データに文字化けが発生した場合...

Ubuntuはポート22を開きます

シナリオssh 経由で Ubuntu サーバーに接続するには、xshell ツールを使用する必要があ...

JavaScript が重複したネットワークリクエストを防ぐ方法の例

序文開発中は、インターフェース要求の繰り返しによってさまざまな問題が発生することがよくあります。ネッ...

レスポンシブ Web デザイン手法を実装し、ウォーターフォール モデルに別れを告げる 5 つのステップ (グラフィック チュートリアル)

次の Web デザイン プロジェクトはレスポンシブにする必要があると上司をようやく納得させることがで...

Docker で Confluence をデプロイする

1. 環境要件1. Docker 17以上がインストールされている2. コンテナ操作docker r...

Zabbix 監視 Docker アプリケーション構成

コンテナの応用はますます一般的になっていますが、大量のコンテナをどのように管理すればよいのでしょうか...

vue構成ファイルはルーティングとメニューインスタンスコードを自動的に生成します

目次前面に書かれたルータ.jsonルート生成メニュー生成効果要約する前面に書かれたルートを繰り返し記...

この記事ではCSSボーダーの使い方を説明します

境界線のスタイルborder-style プロパティは、表示する境界線の種類を指定します。 bord...

ウェブサイトの再設計はどの家族にとっても難しい作業です

<br />どの家庭にもそれぞれの問題があり、改訂はどの IT 企業にとっても問題の 1...

CSS3 は反転可能なホバー効果を実現します

CSS3 は反転可能なホバー効果を実装します。具体的なコードは次のとおりです。 1.css /*基本...

MySQL の完全なデータベース バックアップからデータベースとテーブルを復元する方法

公式の MySQL ダンプ ツールで、特定のデータベースのみを復元するにはどうすればよいですか?完全...

HTMLフォーム要素の詳しい解説(パート1)

HTML フォームは、さまざまな種類のユーザー入力を収集するために使用されます。 HTML フォー...

Docker-compose を使用して GitLab をデプロイする方法

Docker-compose は GitLab をデプロイします1. Dockerをインストールする...

MySQL 整合性制約の例の詳細な説明

この記事では、MySQL の整合性制約について説明します。ご参考までに、詳細は以下の通りです。メイン...

Nginx 500 内部サーバーエラーの解決方法

今日、Nginxを使っていたら500エラーが発生しました。エラーコードを検索してみんなに共有しました...