linuxインストールredis-6.0.1シングルマシンとクラスタ

12247 ワード

redisはメモリを直接操作するkey-valueストレージシステムであり、データの持続化をサポートするNosqlデータベースでもあり、データキャッシュ、メッセージキューなどに非常に高速な読み書き速度を有する.
一、スタンドアロン版のインストール
1.redisのダウンロード
Redis公式サイトにアクセスしてインストールパッケージをダウンロードします.ここでは現在の最新版6.0.4を使用しています.
http://download.redis.io/releases/redis-6.0.4.tar.gz

2.サーバーにアップロードして解凍する
サーバ/usr/localディレクトリにアップロードして解凍
tar -zxvf redis-6.0.4.tar.gz

3.コンパイルとインストール
3.1コンパイル、redisルートディレクトリに入り、コマンドを実行する
make

コンパイルレポートが間違っている場合は、コンパイル環境gccとtclが欠けている可能性があります.
1)gccをインストールし、前のステップでコンパイルしたファイルを削除し、コマンドを実行する
make distclean

gccをインストールし、コマンドを実行
yum install gcc -y

ここで問題があります.バージョン6.0.1 makeをインストールするときにこのようなエラーが発生します.server.c:xxxx:xx:error:‘xxxxxxxx’has no member named‘xxxxxx原因:gccコンパイルツールバージョンの問題、centos 7のデフォルトインストールバージョンは4.8.5ですが、対応バージョンは5.3以上で、gccバージョンコマンドを表示する必要があります
gcc -v

解決方法:5.3以上のバージョンにアップグレードし、コマンドを順次実行
yum -y install centos-release-scl
yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils
scl enable devtoolset-9 bash
echo "source /opt/rh/devtoolset-9/enable" >>/etc/profile

2)tclをインストールし、コマンドを実行する
yum install tcl -y

再コンパイルmake
3.2インストール、srcディレクトリに入り、コマンドを実行する
make install PREFIX=/usr/local

この場合、/usr/localディレクトリの下にredisディレクトリが生成され、その後、redisはこのディレクトリの下のファイルを使用して、コンパイルされたディレクトリをソースディレクトリとして解凍します.
4.構成
ソースディレクトリのルートディレクトリの下にあるredisをコピーします.confファイルは生成された/usr/local/redisディレクトリの下で、コマンドを実行します.
cp redis.conf /usr/local/redis

vi編集を使用してredisを構成します.conf
bind 0.0.0.0         ip,0.0.0.0        
protected-mode no        ,      
daemonize yes      

5.オープンポート番号をファイアウォールに追加
ポートの追加とファイアウォールの再起動
firewall-cmd  --zone=public --add-port=6379/tcp --permanent && firewall-cmd --reload

オープンポート番号のリスト
firewall-cmd --zone=public --permanent --list-ports

6.起動
redisを起動し、redisルートディレクトリに入り、コマンドを実行します.
./bin/redis-server redis.conf

RedisツールまたはAPIを使用してリモートアクセスします.
OK、スタンドアロン版の構築に成功しました!
二、クラスタ版のインストール
知ると知るということはなぜredisクラスタを使うのか.1)まずredisは1つのメモリデータベースであり,つまり格納データの容量がホストメモリサイズ(一般的に数十G)を超えてはならない.場合によっては,100以上のGのような大量のデータをredisに格納しなければならない.単一のredisインスタンスであれば,動的レベルの拡張が困難であるため,クラスタを考慮しなければならない.2)次に、redis単一インスタンスは流量圧力上限の問題を有するため、データパーティションを構築し、複数のmasterインスタンスが同時に読み書きサービスを提供する必要がある.redis 3.0以降はclusterをサポートし始め、hash slot(hashスロット、redisは16384個のhashスロット)を採用しており、複数のredisインスタンスを統合し、hashスロットを各masterに分け、redisクラスタ、すなわちクラスタ内の複数のredisインスタンスにデータを分散させ、データを作成すると1つのkeyが1つのインスタンスにのみ割り当てられる.redis clusterは中心のない構造であり,各ノードは自分のデータと他のノードの情報を保存し,他のノードが担当するスロットを知っており,他のノードとタイミングよく心拍情報を送信し,クラスタ内の異常なノードをタイムリーに感知することができる.では、keyを新規作成すると、redisクラスタはどのようにしてノードにデータを割り当てますか?redisクラスタにkey−valueを配置する必要がある場合、redisはまずkeyに対してcrc 16アルゴリズムを用いて結果を計算し、その後、この数値を16384と余り求め、hashスロットの位置を決定し、hashスロットの値に基づいて以前にhashスロットを均等に分割したノードにデータを割り当てることを決定する.キーを取り出すと、どのように位置決めされますか?現在のredisノードがデータを取得するコマンドを受信すると、処理するデータベース・キーがどのスロットに属するかが格納時と同じアルゴリズムを用いて計算され、このスロットが自分に割り当てられているかどうかを確認し、現在のノードにちょうど割り当てられている場合は、このノードでコマンド取得データを直接実行します.そうでない場合、ノードはクライアントにmovedコマンドを返し、クライアントを正しいノードに移動させ、送信前に実行したコマンドでデータを取得するように指示します.redisはクラスタを使用するには、クラスタの高可用性を保証し、プライマリ・スレーブ・レプリケーションと自動フェイルオーバ・ホイッスル・メカニズム(sentinel)を使用して、単一の障害を解決します.データパーティションとプライマリ・スレーブ・レプリケーションによりredisクラスタのパフォーマンスと高可用性が向上します.redisクラスタはどのようにクラスタの高可用性を保証しますか?redis clusterは投票フォールトトレランスメカニズムを採用し,クラスタロールにはmasterとslaveがある.master間にslotsを割り当て、slaveが指定したmasterにデータを同期し、バックアップを実現します.masterはデータを書くために、slaveはデータを読むために、slaveにデータを書くとエラーが発生します.いずれかのmasterがサービスを提供できない場合、masterのslaveはmasterに昇格し、masterの代わりにサービスを提供する.クラスタ内のslotの完全性、すなわちクラスタデータの完全性を保証する.クラスタの1つのmasterとそのすべてのslaveがすべて失効し、slotが不完全になると、クラスタは使用できなくなり、手動で処理する必要があります.投票プロセスはクラスタ内のすべてのmasterが参加し,半数以上のノードとノード間の通信時間がcluster-node-timeoutを超えると,現在のノードが停止していると考えられる.したがって、一般的にmasterノードの数は奇数個であり、3個以上である.クラスタ全体が使用できない場合は?a.クラスタのいずれかのmasterノードが削除され、slaveノードが置換されていない場合、クラスタは使用不可能な状態に入る.クラスタが使用できない場合、クラスタ内のアクションは使用できません.クラスタ構築:ここでは擬似分布式のクラスタを構築し、クラスタには3つのノードがあり、各ノードには1つのプライマリ・スペアがあり、理論的には6台の仮想マシンが必要であり、6つのredisインスタンスを用いて作成をシミュレートします.
注:ここでのクラスタ環境rubyは、後でクラスタコマンドを作成するための実行環境ですが、redis-5.0.5バージョンなどのバージョンが高い場合は、この環境をインストールする必要はありません.バージョンが高いクラスタを作成するにはredis-tribは使用されません.rbこのスクリプトではなく、独自のredis-cliを使用して作成します.
1.クラスタ環境rubyのインストール
rubyをインストールし、コマンドを実行
yum install ruby rubygems  -y

redisとrubyの接続パッケージをインストールし、コマンドを実行します.
gem install redis

rubyバージョンが低すぎるとプロンプトされた場合、rubyバージョンをアップグレードする必要があります.rvm(コマンドラインツール、ruby環境管理とバージョン切り替えを提供する)をインストールする必要があります.rvmをインストールする前にcurl(ファイル転送ツール)をインストールし、コマンドを実行する必要があります.
yum install curl -y

curlを使用してrvmをインストールし、コマンドを実行します.
curl -L get.rvm.io | bash -s stable

インストールはエラーを報告し、公開鍵を生成し、コマンドを実行します.
gpg --keyserver hkp://keys.gnupg.net --recv-keys (         )

もう一度命令を実行して、一度に何度も実行できません.
curl -sSL https://get.rvm.io | bash -s stable

インストールが完了すると/user/localディレクトリの下にrvmディレクトリが見つかり、shellにコマンドを入れ、コマンドを実行します
source /usr/local/rvm/scripts/rvm

rvm管理のrubyバージョンを表示し、コマンドを実行
rvm list known

新しいバージョンをインストールするには、接続パッケージのインストール時にプロンプトされた最低バージョンのインストールを参照してください.ここでは2.5.7バージョンをインストールし、コマンドを実行します.
rvm install ruby-2.5.7

rubyのインストールが完了するのを待って、インストールされたバージョンを表示します.
rvm list

このバージョンを使用
rvm use ruby-2.5.7

現在使用されているバージョンを確認します
ruby -v

最後にコマンドを再実行
gem install redis

環境インストール完了!
2.クラスタディレクトリの作成
/usr/localディレクトリに入り、コマンドを実行
mkdir redis_cluster

3.redisインスタンスのコピー
redisディレクトリをredis_にコピーclusterで、コマンドを実行
cp -r /usr/local/redis /usr/local/redis_cluster/redis7001

ps:ここで注意してください.このときデータベースにデータがある場合、rdbファイルを一緒にコピーすると、後続のクラスタの作成に失敗し、データがある場合はクラスタを作成できません.解決:インスタンスのrdbバックアップファイルと、後で生成されるnodesを削除します.confファイル.
4.構成の変更
redis 7001の構成redisを変更します.confパラメータ
port 7001       
cluster-enabled yes        

redis 7001インスタンスを現在のフォルダに6部コピーし、
cp redis7001 redis7002
cp redis7001 redis7003
	......

各インスタンスのポート番号の変更
5.クラスタを作成したrubyスクリプトをクラスタディレクトリにコピーする
redisのsrcディレクトリに入り、コマンドを実行
cp redis-trib.rb /usr/local/redis_cluster/

6.クラスタの作成
6つのredisインスタンスを起動します.ここでは、起動スクリプトを簡単に作成するためにredis_clusteディレクトリの下に新しいファイルを作成
touch start-all.sh

編集は次のように入力します.
cd ./redis7001
./bin/redis-server redis.conf
echo "  redis7001  ..."

cd ../redis7002
./bin/redis-server redis.conf
echo "  redis7002  ..."

cd ../redis7003
./bin/redis-server redis.conf
echo "  redis7003  ..."

cd ../redis7004
./bin/redis-server redis.conf
echo "  redis7004  ..."

cd ../redis7005
./bin/redis-server redis.conf
echo "  redis7005  ..."

cd ../redis7006
./bin/redis-server redis.conf
echo "  redis7006  ..."


実行権限の付与
chmod +x start-all.sh

新しいredisクラスタスクリプトを閉じる
touch stop-all.sh

編集は次のように入力します.
cd ./redis7001
bin/redis-cli -p 7001 shutwodn
echo "  redis7001  ..."

cd ../redis7002
bin/redis-cli -p 7002 shutdown
echo "  redis7002  ..."

cd ../redis7003
bin/redis-cli -p 7003 shutdown
echo "  redis7003  ..."

cd ../redis7004
bin/redis-cli -p 7004 shutdown
echo "  redis7004  ..."

cd ../redis7005
bin/redis-cli -p 7005 shutdown
echo "  redis7005  ..."

cd ../redis7006
bin/redis-cli -p 7006 shutdown
echo "  redis7006  ..."


クラスタの作成コマンド:クラスタ内のインスタンスの下にあるbinディレクトリに入り、高バージョンで実行
./redis-cli --cluster create --cluster-replicas 1 192.168.2.75:7001 192.168.2.75:7002 192.168.2.75:7003 192.168.2.75:7004 192.168.2.75:7005 192.168.2.75:7006

低バージョン実行
./redis-trib.rb create --replicas 1 192.168.2.75:7001 192.168.2.75:7002 192.168.2.75:7003 192.168.2.75:7004 192.168.2.75:7005 192.168.2.75:7006

注意:replicasパラメータは、masterにslaveが接続されていることを示し、デフォルトでmatser、主従関係が割り当てられます.
7.テスト
コマンドを使用してクラスタ上のノードを接続する
./redis-cli -p 7001 -c

コマンドcluster infoとcluster nodesを使用してクラスタ情報を表示します.注意:パラメータ-cを必ず追加してください.そうしないと、各ノードの通信はできません.これで、クラスタ版が完成!!
疲れた、休む~~~
間違いがあれば、ご指摘ありがとうございます.