CentOS7 をインストールして Redis をインストールする
確実に実行するには、ノードの数が少なくとも 6 である必要があります。完全で高可用性の構成 クラスター
cluster ├── 9001 │ ├── data │ │ ├── appendonly.aof │ │ └── nodes-9001.conf │ ├── redis-9001.conf │ └── redis-9001.log ├── 9002 │ ├── data │ │ ├── appendonly.aof │ │ └── nodes-9002.conf │ ├── redis-9002.conf │ └── redis-9002.log ...
cd cluster mkdir -p 9001/data 9002/data 9003/data 9004/data 9005/data 9006/data cp ../redis-6.0.9/redis.conf 9001/redis-9001.conf vi 9001/redis-9001.conf port 9001 daemonize yes bind 192.168.11.40 dir /root/cluster/9001/data/ pidfile /var/run/redis_9001.pid cluster-enabled yes # 集群模式运行 cluster-config-file nodes-9001.conf cluster-node-timeout 15000 # appendonly yes logfile "/root/cluster/9001/redis-9001.log"
コピーと置換::%s/9001 /9002/g
/usr/local/redis/bin/redis-server /root/cluster/9001/redis-9001.conf ... tail 9001/redis-9001.log kill `cat /var/run/redis_9001.pid`
起動後、クラスター構成ファイル nodes-9001.conf
が作成されます。データディレクトリに自動的に作成されます。クラスター内のノード情報が変更されると、ノードはクラスターのステータスをこの構成ファイルに自動的に保存します。手動で変更しないことをお勧めします。起動時にクラスター構成ファイルが存在する場合、ノードは構成ファイルの内容を使用してクラスター情報を初期化します。
$ cat 9001/data/nodes-9001.conf 8ccdb0963411ebd05ce21952bdd4b7597825afdc :0@0 myself,master - 0 0 0 connected vars currentEpoch 0 lastVoteEpoch 0 $ /usr/local/redis/bin/redis-cli -h 192.168.11.40 -p 9001 192.168.11.40:9001> cluster nodes 8ccdb0963411ebd05ce21952bdd4b7597825afdc :9001@19001 myself,master - 0 0 0 connected
ノード ID: ノードを一意に識別するために使用される 40 桁の 16 進数の文字列。クラスター。ノード ID は一度だけ作成され、実行中の ID は再起動されるたびに変更されます
ノード ハンドシェイク クラスター モードで実行されているノードのバッチは、次の方法で相互に通信します。相互に通信するための Gossip プロトコル 認識
$ /usr/local/redis/bin/redis-cli -h 192.168.11.40 -p 9001 192.168.11.40:9001> cluster meet 192.168.11.40 9002 OK 192.168.11.40:9001> cluster nodes 8ccdb0963411ebd05ce21952bdd4b7597825afdc 192.168.11.40:9001@19001 myself,master - 0 0 0 connected 5786e3237c7fa413ed22465d15be721f95e72cfa 192.168.11.40:9002@19002 master - 0 1620703357871 1 connected
cluster meets は、ノード間でステータス データ情報を交換するために使用される asynchronous コマンドです。実行後すぐに戻り、実行されます。ターゲット ノードとの内部ハンドシェイク通信:
ノード 9001 は、ローカルで 9002 ノード情報オブジェクトを作成し、ミート メッセージを送信します。
ミートを受信した後、メッセージが送信されると、ノード 9002 は 9001 ノードの情報を保存し、ポン メッセージに応答します。
その後、ノード 9001 と 9002 はピンポン メッセージを通じて定期的に通信します。
クラスター内任意の ノードは、cluster meets コマンドを実行して、新しいノードに参加できます。ハンドシェイク ステータスは、メッセージを通じてクラスター内に伝播されます。他のノードは自動的に新しいノードを検出し、開始します。
ノードがハンドシェイクを確立した後、クラスターは正常に動作できません。この時点では、クラスターは オフライン ステータスになり、すべてのデータの読み取りと書き込みが禁止されます。スロットがノードに割り当てられていないため、クラスターはスロットのノードへのマッピングを完了できません
192.168.11.40:9001> set hello world (error) CLUSTERDOWN Hash slot not served 192.168.11.40:9001> cluster info cluster_state:fail cluster_slots_assigned:0 cluster_slots_ok:0 cluster_slots_pfail:0 cluster_slots_fail:0 cluster_known_nodes:6 cluster_size:0 ...
Redis クラスターはすべてのデータを 16384 にマッピングします。スロット真ん中。すべてのスロット がノードに割り当てられている場合にのみ、クラスターはオンライン状態になります
割り当てられたスロット:
/usr/local/redis/bin/redis-cli -h 192.168.11.40 -p 9001 cluster addslots {0..5461} /usr/local/redis/bin/redis-cli -h 192.168.11.40 -p 9002 cluster addslots {5462..10922} /usr/local/redis/bin/redis-cli -h 192.168.11.40 -p 9003 cluster addslots {10923..16383}
クラスター情報の表示:
192.168.11.40:9001> cluster info cluster_state:ok cluster_slots_assigned:16384 cluster_slots_ok:16384 cluster_slots_pfail:0 cluster_slots_fail:0 cluster_known_nodes:6 cluster_size:3 ... 192.168.11.40:9001> cluster nodes cebb7ed63d469748d4015ede6b4a0f5ff59c9322 192.168.11.40:9006@19006 master - 0 1620704406746 0 connected 1b7785f80c4712c6ba4abd71cc93027fa85a02f8 192.168.11.40:9005@19005 master - 0 1620704406000 4 connected 8ccdb0963411ebd05ce21952bdd4b7597825afdc 192.168.11.40:9001@19001 myself,master - 0 1620704404000 2 connected 0-5461 9408059de8b2dd712f0a9381a3b7aad561aef206 192.168.11.40:9004@19004 master - 0 1620704407753 5 connected 85ceb9826e8aa003169c46fb4ba115c72002d4f9 192.168.11.40:9003@19003 master - 0 1620704407000 3 connected 10923-16383 5786e3237c7fa413ed22465d15be721f95e72cfa 192.168.11.40:9002@19002 master - 0 1620704408763 1 connected 5462-10922
各人スロットを処理するノードには、障害が発生したときに自動的にフェイルオーバーできるように、スレーブ ノードが必要です。
初めて起動されるノードとスロットが割り当てられるノードは両方ともマスター ノード。スレーブ ノードは、マスター ノードのスロット情報と関連データをレプリケートする役割を果たします。
192.168.11.40:9004> cluster replicate 8ccdb0963411ebd05ce21952bdd4b7597825afdc OK 192.168.11.40:9005> cluster replicate 5786e3237c7fa413ed22465d15be721f95e72cfa OK 192.168.11.40:9006> cluster replicate 85ceb9826e8aa003169c46fb4ba115c72002d4f9 OK
192.168.11.40:9001> cluster nodes cebb7ed63d469748d4015ede6b4a0f5ff59c9322 192.168.11.40:9006@19006 slave 85ceb9826e8aa003169c46fb4ba115c72002d4f9 0 1620704825926 3 connected 1b7785f80c4712c6ba4abd71cc93027fa85a02f8 192.168.11.40:9005@19005 slave 5786e3237c7fa413ed22465d15be721f95e72cfa 0 1620704825000 1 connected 8ccdb0963411ebd05ce21952bdd4b7597825afdc 192.168.11.40:9001@19001 myself,master - 0 1620704824000 2 connected 0-5461 9408059de8b2dd712f0a9381a3b7aad561aef206 192.168.11.40:9004@19004 slave 8ccdb0963411ebd05ce21952bdd4b7597825afdc 0 1620704824921 2 connected 85ceb9826e8aa003169c46fb4ba115c72002d4f9 192.168.11.40:9003@19003 master - 0 1620704824000 3 connected 10923-16383 5786e3237c7fa413ed22465d15be721f95e72cfa 192.168.11.40:9002@19002 master - 0 1620704823914 1 connected 5462-10922
[ Redis5.0 以降のクラスターを構築するには、redis-cli を使用します。]
redis-trib.rb は、Ruby で実装された Redis クラスター管理ツールです。内部的には、クラスター関連のコマンドを使用して、クラスターの作成、検査、スロットの移行、バランシングなどの一般的な運用およびメンテナンス操作を簡素化します。
Ruby のインストール
wget https://cache.ruby-lang.org/pub/ruby/2.7/ruby-2.7.3.tar.gz tar -zxvf ruby-2.7.3.tar.gz cd ruby-2.7.3 ./configure --prefix=/usr/local/ruby make make install cd /usr/local/ruby cp bin/ruby /usr/local/bin cp bin/gem /usr/local/bin
rubygem redis の依存関係をインストールします
wget http://rubygems.org/downloads/redis-4.2.5.gem gem install -l redis-4.2.5.gem gem list
問題が発生しました
$ gem install -l redis-4.2.5.gem ERROR: Loading command: install (LoadError) cannot load such file -- zlib ERROR: While executing gem ... (NoMethodError) undefined method `invoke_with_build_args' for nil:NilClass
解決策 (openssl についても同じ)
yum -y install zlib-devel cd ruby-2.7.3/ext/zlib ruby ./extconf.rb make make install
redis-trib.rbをインストールします
cp /{redis_home}/src/redis-trib.rb /usr/local/bin redis-trib.rb
# --replicas 1:指定集群中每个主节点配备几个从节点 redis-trib.rb create --replicas 1 192.168.11.40:9001 192.168.11.40:9002 192.168.11.40:9003 192.168.11.40:9004 192.168.11.40:9005 192.168.11.40:9006 # 集群完整性检查 redis-trib.rb check 192.168.11.40:9001
redis-cli --cluster create 192.168.11.40:9001 192.168.11.40:9002 192.168.11.40:9003 192.168.11.40:9004 192.168.11.40:9005 192.168.11.40:9006 --cluster-replicas 1
以上がCentOS7でRedisクラスターを構築する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。