Linux上でredisクラスタ構築を行う(アリクラウドサーバの実際の構築に成功)
Redisクラスタ構築
アリクラウドサーバの実戦構築に成功し、3台のマシン(3つのプライマリノード)を採用し、1台のマシンに2つのノード(1つのプライマリノード、1つのバックアップノード)、計6ノードを採用した.
redisバージョンの使用:4.0.11
サーバー:centos
関連データ
ホストネットワークip
イントラネットアドレス
ポート
コメント
out-ip1
inner-ip1
6379,6380
各マシンの2つのノード、ポートはそれぞれ63796380です.
out-ip2
inner-ip2
6379,6380
各マシンの2つのノード、ポートはそれぞれ63796380です.
out-ip3
inner-ip3
6379,6380
各マシンの2つのノード、ポートはそれぞれ63796380です.
redisパスワード:pwd 2009
注:すべてのノードのパスワードは統一されています.
1スタンドアロン版redisの構築
まず、スタンドアロン版のredisを構築し、使用可能であることを保証します.
ここでは構築プロセスについて詳しくは説明しません.参考:[Linuxインストール構築redis][https://blog.csdn.net/weixin_43566469/article/details/84889639]
2ディレクトリと基本ノードの作成
# 1. redis
mkdir /usr/local/redis-cluster
# 2. redis , , 2
cp -r /usr/local/redis /usr/local/redis-cluster/redis01
cp -r /usr/local/redis /usr/local/redis-cluster/redis02
# 3. redis dump.rdb appendonly.aof。 , slot redis . CRC16 . .
cd /usr/local/redis-cluster/redis01
rm -rvf dump.rdb appendonly.aof
cd /usr/local/redis-cluster/redis02
rm -rvf dump.rdb appendonly.aof
# 4. redis.conf
vi redis.conf
#
daemonize yes
# 。 bind 127.0.0.1 ,
# bind 127.0.0.1
# ,6379 6380
port 6379
#
masterauth pwd2019
#
requirepass pwd2019
#
cluster-enabled yes
#
cluster-config-file nodes-6379.conf
#
cluster-node-timeout 15000
3台のマシンで以上の操作を行い,6つのredisノードを組み立てた.コンフィギュレーションファイルは1部書いてコピーしてもいいですが、ポート番号が変更される可能性があるので注意してください.
3 rubyとgemパッケージのインストール
rubyはスクリプト言語です.redisのクラスタclusterでは、クラスタのノード間でrubyスクリプトを用いるデータ通信を実現する.redisのクラスタはrubyがデータアクセスを提供する必要がある.yum install -y ruby
redisのより高いバージョンを使用しているので、rvmを手動でインストールしてからgemをインストールする必要があります.手順は次のとおりです.#
gpg2 --keyserver hkp://pool.sks-keyservers.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB
# rvm
curl -sSL https://get.rvm.io | bash -s stable
# rvm ruby
rvm list known
# ruby
rvm install 2.5.5
#
rvm use 2.5.5 --default
# gem
gem install redis
4ポートファイアウォールを開く
注:redisクラスタが外部ネットワークにアクセスする必要がある場合は、ポートをオープンする必要があります(イントラネットワークのみにアクセスする場合は、この手順を無視します).
ここでは63796380ポートを使用しています.しかし、実際には、redisはバスポートとして16379および16380ポートを必要とする.ルールはredisが使用するポート+10000です.
そのため、637963801637916380の4つのポートを開く必要があります.
アリクラウドサーバの場合は、セキュリティグループにこれらのポートを開く必要があります.
5クラスタスクリプトの準備
以下の作業は1台の機械で実行すればよい.# src redis-trib.rb
cd /usr/local/redis-4.0.11/src
# redis
cp redis-trib.rb /usr/local/redis-cluster
# , client.rb, ruby gem
find /usr/ -name 'client.rb'
# , ruby , 2.5.5, gems redis
#
/usr/local/rvm/gems/ruby-2.5.5/gems/redis-4.1.2/lib/redis/client.rb
#
vi /usr/local/rvm/gems/ruby-2.5.5/gems/redis-4.1.2/lib/redis/client.rb
# password , ,
DEFAULTS = {
:url => lambda { ENV["REDIS_URL"] },
:scheme => "redis",
:host => "127.0.0.1",
:port => 6379,
:path => nil,
:timeout => 5.0,
:password => "pwd2019",
:db => 0,
:driver => nil,
:id => nil,
:tcp_keepalive => 0,
:reconnect_attempts => 1,
:reconnect_delay => 0,
:reconnect_delay_max => 0.5,
:inherit_socket => false
}
7 redisのすべてのノードの
# 1
cd /usr/local/redis-cluster/redis01
./bin/redis-server redis.conf
# 2
cd /usr/local/redis-cluster/redis02
./bin/redis-server redis.conf
上記のコマンドをスクリプトファイルに書くことができ、実行しやすいです.# start-all.sh
vi start-all.sh
#!/bin/bash
cd /usr/local/redis-cluster/redis01
./bin/redis-server redis.conf
cd /usr/local/redis-cluster/redis02
./bin/redis-server redis.conf
#
chmod u+x start-all.sh
8クラスタの作成
すべてのredisクラスタノードが起動していることを保証
次に、クラスタスクリプトが用意されているマシン(ステップ5)で次のコマンドを実行します.# ip , 。 , ip
cd /usr/local/redis-cluster
./redis-trib.rb create --replicas 1 out-ip1:6379 out-ip2:6379 out-ip3:6379 out-ip3:6380 out-ip1:6380 out-ip2:6380
コマンド解析:
create-クラスタの作成
-replicas 1-ホストノードごとに1つのバックアップマシンに対応するバックアップマシンの数を定義します.
ip:port-redisアプリケーションが存在する物理的な位置とポート番号を提供する.
インタラクティブなヒント、必ずyesを入力してください.その他の入力は、構成解除を表します.
一般的に,上位3ノードがプライマリノードとなり,後3ノードがスレーブノードとなる.ここではip 1,ip 2,ip 3,ip 3,ip 1,ip 2の順に入力し、ip 3をip 1のスレーブノード、ip 1をip 2のスレーブノード、ip 2をip 3のスレーブノードとする.プライマリ・スレーブ・ノードが同じマシンにあることを回避します.どのクラスタのダウンタイムも、クラスタが正常に動作することを保証します.
# 1. redis
mkdir /usr/local/redis-cluster
# 2. redis , , 2
cp -r /usr/local/redis /usr/local/redis-cluster/redis01
cp -r /usr/local/redis /usr/local/redis-cluster/redis02
# 3. redis dump.rdb appendonly.aof。 , slot redis . CRC16 . .
cd /usr/local/redis-cluster/redis01
rm -rvf dump.rdb appendonly.aof
cd /usr/local/redis-cluster/redis02
rm -rvf dump.rdb appendonly.aof
# 4. redis.conf
vi redis.conf
#
daemonize yes
# 。 bind 127.0.0.1 ,
# bind 127.0.0.1
# ,6379 6380
port 6379
#
masterauth pwd2019
#
requirepass pwd2019
#
cluster-enabled yes
#
cluster-config-file nodes-6379.conf
#
cluster-node-timeout 15000
yum install -y ruby
#
gpg2 --keyserver hkp://pool.sks-keyservers.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB
# rvm
curl -sSL https://get.rvm.io | bash -s stable
# rvm ruby
rvm list known
# ruby
rvm install 2.5.5
#
rvm use 2.5.5 --default
# gem
gem install redis
# src redis-trib.rb
cd /usr/local/redis-4.0.11/src
# redis
cp redis-trib.rb /usr/local/redis-cluster
# , client.rb, ruby gem
find /usr/ -name 'client.rb'
# , ruby , 2.5.5, gems redis
#
/usr/local/rvm/gems/ruby-2.5.5/gems/redis-4.1.2/lib/redis/client.rb
#
vi /usr/local/rvm/gems/ruby-2.5.5/gems/redis-4.1.2/lib/redis/client.rb
# password , ,
DEFAULTS = {
:url => lambda { ENV["REDIS_URL"] },
:scheme => "redis",
:host => "127.0.0.1",
:port => 6379,
:path => nil,
:timeout => 5.0,
:password => "pwd2019",
:db => 0,
:driver => nil,
:id => nil,
:tcp_keepalive => 0,
:reconnect_attempts => 1,
:reconnect_delay => 0,
:reconnect_delay_max => 0.5,
:inherit_socket => false
}
# 1
cd /usr/local/redis-cluster/redis01
./bin/redis-server redis.conf
# 2
cd /usr/local/redis-cluster/redis02
./bin/redis-server redis.conf
# start-all.sh
vi start-all.sh
#!/bin/bash
cd /usr/local/redis-cluster/redis01
./bin/redis-server redis.conf
cd /usr/local/redis-cluster/redis02
./bin/redis-server redis.conf
#
chmod u+x start-all.sh
# ip , 。 , ip
cd /usr/local/redis-cluster
./redis-trib.rb create --replicas 1 out-ip1:6379 out-ip2:6379 out-ip3:6379 out-ip3:6380 out-ip1:6380 out-ip2:6380