Redisクラスタの設定
今日はRedisクラスタについて説明し、3台のサーバにクラスタを設定します.
各サーバには、プライマリノードとセカンダリノードが追加されます.
Redisクラスタは、複数のRedisノードに自動的にデータを格納する方法を提供する.また、一部のノードが死亡したり、通信できなくなったりしても作業を継続できる可用性も提供します.ただし,半数以上のプライマリノードが死亡するとクラスタも停止する.
つまり、Redisclusterのメリットは次のとおりです.
1.複数のノードに自動的にデータを格納
2.一部のノードが死亡または通信できない場合は、作業を続行できます.
また,Redisがユーザ命令を処理する部分は単一スレッドである.(Redis 6.0からThreadedIOを追加してマルチスレッドのユーザコマンドをサポートするが、実行コマンドのカーネル部分は依然としてシングルスレッドであり、IO socketの読み取り/書き込み時にマルチスレッドとして実行される.Redis 6.0 features)
したがって、一定規模のプロジェクトについては、Redisを使用するときにクラスタとして構成することを推奨します.
短いRedisの使用経験から、テストプラットフォーム環境で独立したRedisを使用すると、クラスタ構成時のパフォーマンスに大きな違いがあります.
To be continued
サーバは全部で3台、1つのプライマリノード、1つのスレーブノード、全部で6つのノードがあります.
そのため、redisは3台のサーバに別々にインストールする必要があります.(Redis公式ホームページ参照)
RedisクラスタをインストールするサーバはCentos 7.0で、Redisバージョンでは最新の安定バージョン6.2がインストールされます.
redisをインストールするコマンドは以下のとおりです.順番に入力すれば、インストールできます.
各サーバは、プライマリノードとセカンダリノードを駆動します.
マスターはすべて7000番ポートに、slaveは7001番ポートに変更されます.
クラスタ構成の場合、クラスタバス通信のポートは各ノードポート+10000個であるため、合計7000、7001、17000、17001個のポートのファイアウォールを解除する必要がある.クラスタバス: 障害検出、構成更新、およびフェイルオーバ承認用
また、メモリの使用量が多すぎる処理方法や、スロット数の設定を変更してください.(設定されていない場合は
requirePass:redisサーバにパスワードを設定します.デフォルトはnull,redisに設定されています.confでは純テキストで書きます.長さ制限はなく、150 K程度まで伸びるそうです. masterauth:プライマリノードにパスワードが設定されている場合は、ノードからコピー同期操作を行う前に、スレーブノードにパスワードを通知する必要があります.slaveがパスワードを知らない場合、masterはslaveの要求を拒否します.上のRequiremePassに小さなパスワードを入力します. クラスタ-クラスタモードをオンにするにはenabled yesを追加する必要があります.Noに設定すると、独立モードで実行されます. cluster-config-file nodes.conf:このファイルはクラスタの状態を記録するバイナリファイルです.クラスタの状態が変化するたびに,状態が記録される. クラスタ-node-timeout 5000:Redisノードがダウンタイムしたかどうかを判断する時間.単位はミリ秒です. クラスタ-通知-ip:docker、NAT設定、またはポート転送を使用すると、Redisクラスタノードは見つかりません.(redis.confドキュメントを参照)この場合、各ノード自身の静的パブリックIPを教える必要がある.
各サーバの7000、7001番ノードが実行されます.(面倒くさいから、脚本を書きましょう)
デーモンモードで実行され、画面にはログが表示されません.
1台のサーバで、次のコマンドを使用してクラスタを実行し、
土をすくうconfファイルにクラスタ-通知-ipを入力せず、NAT接続のパブリックIPを使用してクラスタを接続している場合は、ノードを接続できません.
最初はサーバーのファイアウォールの問題だと思っていました.😩 ファイアウォールはすべて通じていて、どうしてだめなのか、長い時間の除去を経て...
現在のサーバの共通IPがNATに設定されている場合、redisクラスタのノードアドレス発見に失敗する可能性があります.
したがってcollection-blease-ip設定を追加してノード設定を行い、結果は正常です.😂
1台のサーバで、次のコマンドを使用してslaveノードを追加します.
サーバ2の7001ノードはサーバ1のプライマリノードのスレーブノードであり、サーバ3の7001ノードはサーバ2のプライマリノードのスレーブノードである…これにより、異なるサーバにmaster-slaveを配置します.
クラスタ情報を検証するために、任意のredisノード(
入力
クラスタ・モードで接続されていない場合、キーの設定中に次のエラーが発生します.
-cでクラスタモードを開いて接続すると、次のように成功し、3番ノードに切り替わります.設定
Redis Client UIプログラムP 3 Xをローカルにインストールします.
P 3 Xを実行しSETTINGに入り、NEW CONNECTIONボタンをクリックします.
hostnameにサーバのIPアドレスとプライマリポートを入力し、 左下隅で、
クラスタ設定が完了しました.
次の記事では、フェイルオーバ・リカバリ・スキームを試みます.
各サーバには、プライマリノードとセカンダリノードが追加されます.
Redisクラスタ
必要性
Redisクラスタは、複数のRedisノードに自動的にデータを格納する方法を提供する.また、一部のノードが死亡したり、通信できなくなったりしても作業を継続できる可用性も提供します.ただし,半数以上のプライマリノードが死亡するとクラスタも停止する.
つまり、Redisclusterのメリットは次のとおりです.
1.複数のノードに自動的にデータを格納
2.一部のノードが死亡または通信できない場合は、作業を続行できます.
また,Redisがユーザ命令を処理する部分は単一スレッドである.(Redis 6.0からThreadedIOを追加してマルチスレッドのユーザコマンドをサポートするが、実行コマンドのカーネル部分は依然としてシングルスレッドであり、IO socketの読み取り/書き込み時にマルチスレッドとして実行される.Redis 6.0 features)
したがって、一定規模のプロジェクトについては、Redisを使用するときにクラスタとして構成することを推奨します.
短いRedisの使用経験から、テストプラットフォーム環境で独立したRedisを使用すると、クラスタ構成時のパフォーマンスに大きな違いがあります.
こうぞう
To be continued
サーバにredisをインストールする
サーバは全部で3台、1つのプライマリノード、1つのスレーブノード、全部で6つのノードがあります.
そのため、redisは3台のサーバに別々にインストールする必要があります.(Redis公式ホームページ参照)
サーバのバージョン
RedisクラスタをインストールするサーバはCentos 7.0で、Redisバージョンでは最新の安定バージョン6.2がインストールされます.
設定
redisをインストールするコマンドは以下のとおりです.順番に入力すれば、インストールできます.
wget http://download.redis.io/redis-stable.tar.gz
tar xvzf redis-stable.tar.gz
cd redis-stable
make
make install
インストール後にredis-server
コマンドを入力し、サーバーの表示が良好であればインストールに成功します.クラスタ設定
プロファイル設定
1.サーバの設定
各サーバは、プライマリノードとセカンダリノードを駆動します.
マスターはすべて7000番ポートに、slaveは7001番ポートに変更されます.
クラスタ構成の場合、クラスタバス通信のポートは各ノードポート+10000個であるため、合計7000、7001、17000、17001個のポートのファイアウォールを解除する必要がある.
また、メモリの使用量が多すぎる処理方法や、スロット数の設定を変更してください.(設定されていない場合は
WARNING overcommit_memory is set to 0! Background save may fail under low memory condition.
警告)# 메모리 사용량이 허용량을 초과할 경우, overcommit을 처리하는 방식 결정하는 값을 "항상"으로 변경
sudo sysctl vm.overcommit_memory=1
sudo echo "vm.overcommit_memory=1" >> /etc/sysctl.conf
sudo sysctl -a | grep vm.overcommit
# 서버 소켓에 Accept를 대기하는 소켓 개수 파라미터를 변경
sudo sysctl -w net.core.somaxconn=1024
sudo echo "net.core.somaxconn=1024" >> /etc/sysctl.conf
sudo sysctl -a | grep somaxconn
2.ディレクトリ構造
/opt/redis
ディレクトリを作成し、redisインストールディレクトリ(そのまま入力すればredis-stable
であるべき)のredis.conf
ファイルを/opt/redis
にコピーします./opt/redis
の下に、7000
、7001
というフォルダが作成されます.(/opt/redis/7000
、/opt/redis/7001
)3.マスターノードconfファイルの作成
/opt/redis/7000
に7000を追加します.confファイルを作成し、次のように入力します.include /opt/redis/redis.conf
bind 0.0.0.0
daemonize yes
protected-mode no
port 7000
pidfile /opt/redis/7000/redis_7000.pid
logfile /opt/redis/7000/redis-7000.log
dir /opt/redis/7000
dbfilename dump_7000.rdb
requirepass [redis password]
masterauth [redis password]
cluster-config-file node-7000.conf
cluster-enabled yes
cluster-node-timeout 5000
cluster-announce-ip [서버 public ip] # NAT/포트포워딩 사용시
rename-command keys ""
appendonly no
openssl rand -base64 32
でランダムパスワードを生成しました.4.スレーブノードconfファイルの作成
/opt/redis/70001
7001.confファイルを作成し、次のように入力します.include /opt/redis/redis.conf
bind 0.0.0.0
daemonize yes
protected-mode no
port 7001
pidfile /opt/redis/7001/redis_7001.pid
logfile /opt/redis/7001/redis-7001.log
dir /opt/redis/7001
dbfilename dump_7001.rdb
requirepass [redis password]
masterauth [redis password]
cluster-config-file node-7001.conf
cluster-enabled yes
cluster-node-timeout 5000
cluster-announce-ip [서버 public ip]
rename-command keys ""
appendonly no
5.オフセットノード
各サーバの7000、7001番ノードが実行されます.(面倒くさいから、脚本を書きましょう)
redis-server 7000/7000.conf
redis-server 7001/7001.conf
ps -ef | grep redis
で7000、7001番ノードがすべて昇っているか確認します.デーモンモードで実行され、画面にはログが表示されません.
/opt/redis/7000/redis-7000.log
を確認すればいいです.クラスタへのマスターノードの追加
1台のサーバで、次のコマンドを使用してクラスタを実行し、
Can I set the above configuration? (type 'yes' to accept)
にyesを入力します.redis-cli -a [비밀번호] --cluster create [서버1 IP]:7000 [서버2 IP]:7000 [서버3 IP]:7000
このとき、Waiting for the cluster to join
とともに...無限の画面が撮れたら、ポートファイアウォールがすべて開いているかどうかを確認してください.土をすくうconfファイルにクラスタ-通知-ipを入力せず、NAT接続のパブリックIPを使用してクラスタを接続している場合は、ノードを接続できません.
最初はサーバーのファイアウォールの問題だと思っていました.😩 ファイアウォールはすべて通じていて、どうしてだめなのか、長い時間の除去を経て...
現在のサーバの共通IPがNATに設定されている場合、redisクラスタのノードアドレス発見に失敗する可能性があります.
したがってcollection-blease-ip設定を追加してノード設定を行い、結果は正常です.😂
ノードからクラスタへの追加
1台のサーバで、次のコマンドを使用してslaveノードを追加します.
サーバ2の7001ノードはサーバ1のプライマリノードのスレーブノードであり、サーバ3の7001ノードはサーバ2のプライマリノードのスレーブノードである…これにより、異なるサーバにmaster-slaveを配置します.
redis-cli -a [비밀번호] --cluster add-node [서버2 IP]:7001 [서버1 IP]:7000 --cluster-slave
redis-cli -a [비밀번호] --cluster add-node [서버3 IP]:7001 [서버2 IP]:7000 --cluster-slave
redis-cli -a [비밀번호] --cluster add-node [서버1 IP]:7001 [서버3 IP]:7000 --cluster-slave
[OK] New node added correctly
メッセージが確認された場合、ノードの追加は成功しました.クラスタ情報を検証するために、任意のredisノード(
redis-server -h [서버IP] -p 7000
)を接続します.[IP]:7000> AUTH [비밀번호] # 사용자 인증 필요
[IP]:7000> 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
cluster_current_epoch:3
cluster_my_epoch:1
cluster_stats_messages_ping_sent:1934
cluster_stats_messages_pong_sent:1915
cluster_stats_messages_sent:3849
cluster_stats_messages_ping_received:1911
cluster_stats_messages_pong_received:1934
cluster_stats_messages_meet_received:4
cluster_stats_messages_received:3849
[IP]:7000> cluster nodes
XXX [IP]:7001@17001 slave XXX 0 1635593861555 3 connected
XXX [IP]:7000@17000 myself,master - 0 1635593860000 1 connected 0-5460
XXX [IP]:7001@17001 slave XXX 0 1635593861254 2 connected
XXX [IP]:7000@17000 master - 0 1635593860550 2 connected 5461-10922
XXX [IP]:7001@17001 slave XXX 0 1635593860000 1 connected
XXX [IP]:7000@17000 master - 0 1635593860249 3 connected 10923-16383
テスト
セットテスト
入力
redis-server -h [서버IP] -p 7000 -c -a [비밀번호]
は、クラスタモードでredis-serverに接続されます.(入力-cが必要)クラスタ・モードで接続されていない場合、キーの設定中に次のエラーが発生します.
[IP-1]:7000> set key hi
(error) MOVED 12539 [IP-3]:7000
set key hi
鍵のslotは12539で、3番ノードに割り当てる必要がありますが、クラスタモードでアクセスしていないため、redis-cliが他のノードに接続できないためエラーが発生しました.-cでクラスタモードを開いて接続すると、次のように成功し、3番ノードに切り替わります.
[IP-1]:7000> set key hi
-> Redirected to slot [12539] located at [IP-3]:7000
OK
[IP-3]:7000> get hi
Redis Client UIプログラムを使用したテスト
Redis Client UIプログラムP 3 Xをローカルにインストールします.
P 3 Xを実行しSETTINGに入り、NEW CONNECTIONボタンをクリックします.
hostnameにサーバのIPアドレスとプライマリポートを入力し、
ADD NODE
ボタンをクリックして残りの5つのノードを設定します.TEST CONNECTION
ボタンをクリックすると、右下にsuccessful
のメッセージが表示されます.CONNECT
ボタンをクリックし、入力したプロファイルを選択し、下図のように表示します.😎次の記事では、フェイルオーバ・リカバリ・スキームを試みます.
Reference
この問題について(Redisクラスタの設定), 我々は、より多くの情報をここで見つけました https://velog.io/@tngusqkr1/Redis-cluster-설정-1テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol