Redis Sentry モードのデプロイメント
記事ディレクトリ
この記事は、itmrl というブロガーによるブログ投稿の再版です。彼の記事は私が今まで読んだ中で最も明確で包括的だと思うので、メモを取るために使用しています。以下に元の記事へのリンクを示します。
1 インストール前の準備
1.1 設置環境
1.1.1 インストール手順
Redis Sentinel は、Redis Cluster が使用されていない場合に Redis に高可用性を提供します。Redis Sentinel は、監視、通知、クライアントの構成プロバイダーとしての機能など、他のサイド タスクも提供します。
1.1.2 オペレーティングシステム
CentOS 7.5 (64 ビット)
1.1.3 ホストの計画
サービスの種類 | IPアドレス | ポート |
---|---|---|
レディス | 192.168.140.11 | 6379 |
レディス | 192.168.140.12 | 6379 |
レディス | 192.168.140.13 | 6379 |
センチネル | 192.168.140.11 | 26379 |
センチネル | 192.168.140.12 | 26379 |
センチネル | 192.168.140.13 | 26379 |
1.1.4 システム構成手順
Redis サービスと Sentinel サービスはポートを占有する必要があります。まず、上記のホスト プランに従ってファイアウォールのポートを開くように設定してください。
1.1.5 Redis バージョン番号の説明
Redis のバージョンは 5.0.5 です。
2 マスター/スレーブ構成
Redis のインストール手順は、ダウンロード、解凍、コンパイル、構成、開始です。
2.1 Redis サービスのインストール
以下では 192.168.140.11 サーバーのインストールを例に挙げていますが、他も同様です (Redis メイン構成ファイルで、スレーブ ノードをマスター ノード IP で構成する必要があることに注意してください)。
2.1.1 Redis ホストへの SSH ログイン
ssh root@192.168.140.11
2.1.2 必要な環境とツールをインストールする
yum -y install wget vim tcl gcc make
2.1.3 Redisのダウンロード
2.1.3 Redisのダウンロード
cd /opt/itmrl/srclib/
wget http://download.redis.io/releases/redis-5.0.5.tar.gz
または FTP 経由で redis-5.0.5.tar.gz をアップロードします
2.1.4 解凍
tar -zxvf redis-5.0.5.tar.gz
2.1.5 コンパイル
cd redis-5.0.5/
make install PREFIX=/opt/itmrl/redis/redis-5.0.5
構成ファイルを Redis プログラム ディレクトリにコピーします。
cp redis.conf /opt/itmrl/redis/redis-5.0.5/bin
cp sentinel.conf /opt/itmrl/redis/redis-5.0.5/bin
redis.conf は Redis サービスの構成ファイルであり、sentinel.conf は Sentinel サービスの構成ファイルです。
2.1.6 カーネルパラメータの設定
カーネル パラメータ overcommit_memory
はメモリ割り当て戦略です
オプションの値: 0、1、2。
0,:表示内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存,内存申请允许;否则,内存申请失败,并把错误返回给应用进程。
1:表示内核允许分配所有的物理内存,而不管当前的内存状态如何。
2: 表示内核允许分配超过所有物理内存和交换空间总和的内存。
vm.overcommit_memory を 1 に構成すると、データの切り捨てを回避できます。
vim /etc/sysctl.conf を編集し、次のように変更します。
vm.overcommit_memory=1
sysctl -p
2.1.7 設定ファイルの変更
mkdir -p /opt/itmrl/redis/redis-5.0.5/run
mkdir -p /opt/itmrl/redis/redis-5.0.5/log
mkdir -p /opt/itmrl/redis/redis-5.0.5/working
vim /opt/itmrl/redis/redis-5.0.5/bin/redis.conf
Redis の一般的なメイン構成。マスター ノードに接続するには、必ずレプリカ 192.168.140.11 6379 をスレーブ ノードに追加してください。
# 工作目录
dir /opt/itmrl/redis/redis-5.0.5/working
# 需要不同服务器的节点连通,就不能设置为 127.0.0.1
bind 0.0.0.0
# 需要不同服务器的节点连通,这个就要设置为 no
protected-mode no
# 设置后台运行redis
daemonize yes
# 端口
port 6379
# 密码
requirepass itmrl@123qwe
# PID文件
pidfile /opt/itmrl/redis/redis-5.0.5/run/redis_6379.pid
# LOG文件
logfile /opt/itmrl/redis/redis-5.0.5/log/redis.log
# RDB文件名
dbfilename dump.rdb
# 开启AOF
appendonly yes
# AOF文件名
appendfilename "appendonly.aof"
# 主节点认证,主从节点均需要配置
masterauth itmrl@123qwe
2.1.9 サービスの開始
cd /opt/itmrl/redis/redis-5.0.5/bin
./redis-server redis.conf
ps -ef|grep redis を使用して、すべてが正常に開始されたかどうか、IP とポート番号が正しいかどうかを確認します。
情報レプリケーションを使用してマスター/スレーブ レプリケーションのステータスを表示する
2.1.11 ファイアウォールのポート番号開放ポリシー
センチネル バス ポートを開く必要があります。センチネル バス ポート = ポート番号 + 20000
例: 6379 のセンチネル バス ポートは 26379 です。このセンチネル バス ポートは開いていないため、展開中に外部サーバーのノードを追加できません。
firewall-cmd --zone=public --add-port=6379/tcp --permanent
firewall-cmd --zone=public --add-port=26379/tcp --permanent
firewall-cmd --reload
3 センチネル構成
セントリー モードは 1 つのマスター、2 つのスレーブ、および 3 つのセントリー モードを採用しています。
3.1 構成の変更
cd /opt/itmrl/redis/redis-5.0.5/bin
vi sentine.conf
# 保护模式默认关闭
protected-mode no
# 哨兵端口
port 26379
# 后台运行
daemonize yes
# pid
pidfile /opt/itmrl/redis/redis-5.0.5/run/redis-sentinel.pid
# log
logfile /opt/itmrl/redis/redis-5.0.5/log/redis-sentinel.log
# 工作目录
dir /opt/itmrl/redis/redis-5.0.5/working
# 监控Redis主服务
sentinel monitor redis-master 192.168.140.11 6379 2
# 配置认证密码
sentinel auth-pass redis-master itmrl@123qwe
# S_DOWN时间
sentinel down-after-milliseconds redis-master 30000
# 设置在故障转移后可以重新配置以同时使用新主服务器的副本数
sentinel parallel-syncs redis-master 1
# 故障转移超时时间
sentinel failover-timeout redis-master 180000
3.2 起動
./redis-sentinel sentinel.conf
4 検証
4.1 情報を見る
任意のホストにログインしてinfoコマンドを実行し、マシン41に接続する例を示します。
cd /opt/itmrl/redis/redis-5.0.5/bin
./redis-cli -p 26379 info
出力される情報は次のとおりです。
# Server
redis_version:5.0.5
redis_git_sha1:00000000
redis_git_dirty:0
redis_build_id:dd4fc568347dd241
redis_mode:sentinel
os:Linux 3.10.0-957.el7.x86_64 x86_64
arch_bits:64
multiplexing_api:epoll
atomicvar_api:atomic-builtin
gcc_version:4.8.5
process_id:60336
run_id:1ee2ed34a11d346c61f5d591bb82837da098496c
tcp_port:26379
uptime_in_seconds:839
uptime_in_days:0
hz:11
configured_hz:10
lru_clock:13438056
executable:/opt/itmrl/redis/redis-5.0.5/bin/./redis-sentinel
config_file:/opt/itmrl/redis/redis-5.0.5/bin/sentinel.conf
# Clients
connected_clients:3
client_recent_max_input_buffer:2
client_recent_max_output_buffer:0
blocked_clients:0
# CPU
used_cpu_sys:1.875286
used_cpu_user:0.071192
used_cpu_sys_children:0.000000
used_cpu_user_children:0.000000
# Stats
total_connections_received:10
total_commands_processed:2196
instantaneous_ops_per_sec:2
total_net_input_bytes:128865
total_net_output_bytes:24810
instantaneous_input_kbps:0.17
instantaneous_output_kbps:0.02
rejected_connections:0
sync_full:0
sync_partial_ok:0
sync_partial_err:0
expired_keys:0
expired_stale_perc:0.00
expired_time_cap_reached_count:0
evicted_keys:0
keyspace_hits:0
keyspace_misses:0
pubsub_channels:0
pubsub_patterns:0
latest_fork_usec:0
migrate_cached_sockets:0
slave_expires_tracked_keys:0
active_defrag_hits:0
active_defrag_misses:0
active_defrag_key_hits:0
active_defrag_key_misses:0
# Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=redis-master,status=ok,address=192.168.140.11:6379,slaves=2,sentinels=3
4.2 センチネル情報の表示
任意のホストにログインし、cluster infoコマンドを実行し、192.168.140.11のマシンに接続する例を示します。
cd /opt/itmrl/redis/redis-5.0.5/bin
./redis-cli -p 26379 info Sentinel
出力される情報は次のとおりです。
# Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=redis-master,status=ok,address=192.168.140.11:6379,slaves=2,sentinels=3
4.3 マスターサービスを停止し、フェイルオーバーステータスを確認する
4.3.1 Redisメインサービスプロセスの削除
4.3.2 情報の表示
192.168.140.13 がすでにマスターであることがわかります。
4.4 元のマスター サービスを復元し、フェイルオーバー ステータスを確認する
4.4.1 サービスの開始
4.4.2 情報の表示
現在ダウン状態です
Sentinel ログを確認すると、現在の 11 ノードが正常に起動していないことがわかります。
調査の結果、メインサービスの設定ファイルに認証の設定がされていないことが判明しました。
5 SpringBoot は Redis セントリー モードを構成します
application.yml Redis 構成を追加します
spring:
redis:
database: 1
password: itmrl@123qwe
# 哨兵模式
sentinel:
master: redis-master
nodes: 192.168.140.11:26379,192.168.140.12:26379,192.168.140.13:26379