redisクラスタ構築のチュートリアルと発生した問題
ここでは、Linuxの仮想マシン上に6ノードのredis疑似クラスタを構築するため、考え方は簡単で、仮想マシン上に6つのredisインスタンスを開き、それぞれ専用のポートを用意します。これは、6台のマシンをシミュレートし、その6台のインスタンスを使用してredisクラスタを構築することと同じです。
前提条件:redisが/usr/local/redis-4.0.1にインストール済みであること そうでない場合は、以下の記事を参照してください。 Windowsでのredisインストール Linuxでのredisのインストール
redisクラスタはrubyスクリプトを使用しているので、そのスクリプトを実行するには、ruby環境 . これはredisソースコードのsrcディレクトリにあるredis-trib.rbに対応します。redis-trib.rbはredisクラスターを管理するためのredis公式ツールで、redisが提供するクラスターコマンドをベースに、シンプルで便利で役立つ操作ツールとしてカプセル化されたものですので。
ruby環境をインストールする。
1.
yum install ruby
2.
yum install rubygems
3.
gem install redis
Centosはデフォルトでrubyを2.0.0までサポートしていますが、redisは最低でも2.2.2が必要です。
1.
sudo yum install curl
2. rvmのインストール
curl -L get.rvm.io | bash -s stable
3.
source /usr/local/rvm/scripts/rvm
4. rvmリポジトリで既知のrubyのバージョンを表示する
rvm list known
5. rubyのバージョンをインストールする
rvm install 2.3.3
6. ルビーバージョンの使用
rvm use 2.3.3
7. 既知のバージョンのアンインストール
rvm remove 2.0.0
8. バージョンを見る
ruby --version
9. redisを再度インストールする
gem install redis
redisクラスタの構築
redis-clusterディレクトリを作成し、redis-8001, redis-8002, redis-8003ノードディレクトリを作成し、redis-confを各ノードディレクトリにコピーしてください。
各インスタンスは、1つのマシン(192.16819.129)上にあるので、異なるポートを持つべきです。また、各インスタンスは当然、データを保存する独自の場所を持ちます。
redisサービスを起動し、起動するか確認してください。
startall.shスクリプトの作成(prompt permission deniedはパーミッションが足りないことを意味し、chmod 777 startall.shを実行してパーミッションを変更する)。
startall.shスクリプトを起動します。
stopall.shスクリプトを作成します。
クラスターを作成する
次に、Rubyスクリプトでクラスタを作成します。
redis-trib.rbには、以下のような機能があることがわかります。
- create : クラスターを作成する
- check : クラスターをチェックする
- info : クラスタ情報を見る
- fix : クラスタを修復する
- reshard : スロットをオンラインに移行する
- rebalance : クラスターノードスロット数のバランスをとる。
- add-node : クラスタに新しいノードを追加します。
- del-node : クラスタからノードを削除する
- set-timeout:クラスタノード間のハートビート接続のタイムアウトを設定する
- call : クラスタの全ノードでコマンドを実行します。
- import : 外部REDISデータをクラスタに取り込む
redis-trib.rbには、主に2つのクラスがあります。
ClusterNode
と
RedisTrib
.
ClusterNode
で、各ノードに関する情報を保持する。
RedisTrib
は、redis-trib.rbの各関数の実装です。
Note: Prompt for minimum of 3 master cluster nodes, earlier it was saying to create 6, but actually I only created 3 nodes, so we can conclude that we are creating a redis cluster with minimum of three master nodes, it should be a odd number, so don't lazy and create three more.
ここで重要なのはオプションのreplicasパラメータ、--replicas 2で、これは各マスターに2つのスレーブが割り当てられることを意味します。replicasはスレーブが何個必要かを意味し、このパラメータなしでマスターが3つあるようにうまく作成することができます。replicasパラメータは後ほど説明します。
まず、--replicas 1 1 は実際には比率を表しており、マスターノード数/スレーブノード数の比率を表しています。つまり、クラスタを作るときに、どのノードがマスターノードになるのか?どのノードがスレーブノードなのか?答えは、コマンドのIP:PORTの順番で、3つのマスターノードと3つのスレーブノードになります。
次に、図中のスロットの概念に注目してください。Redisクラスタのスロットとは、データを格納する場所、つまりスロットのことです。各Masterにはスロットの範囲が存在しますが、Slaveには存在しません。Redisクラスタでは、やはり読み書きできるのはMasterで、Slaveは読み込みのみです。データの書き込みは、実際にはスロットに分散して格納されるため、従来の1.XのMaster-Slaveモデル(Master/Slaveモードではデータ格納は同一)とは異なり、Redisクラスタ内の3つのMasterのデータ格納は同一にならないからです。これについては、続報で検証する予定です。
関連
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Ruby on Rails ラックミドルウェア基礎学習チュートリアル
-
bundlerを使ったRuby環境のインストールと複数バージョンのgemの管理
-
Ruby on Rails:rakeとデータベースのデータ移行作業
-
Rubyのオブジェクト指向プログラミングにおけるスコープの簡単な説明
-
RubyのプログラムでXML形式のデータをパースするためにREXMLを呼び出す例
-
Ruby は REXML ライブラリを使って xml 形式のデータをパースする
-
Ruby on RailsでPing ++プラットフォームでの決済を実現
-
Rubyの4つの比較関数(equal?, eql?, ==, ===)について解説します。
-
Ruby on Railsのインストールに関する簡潔で迅速なガイド
-
Rubyにおけるrequireの使用例