Redisサービスのマスター/スレーブレプリケーション、センチネルモード、クラスターモード
記事のディレクトリ
1つは、Redisマスタースレーブレプリケーションです。
1.Redisマスタースレーブレプリケーションの概念
マスタースレーブレプリケーションとは、1つのRedisサーバーのデータを他のRedisサーバーにコピーすることです。
前者はマスターノード(マスター)と呼ばれ、後者はスレーブノード(スレーブ)と呼ばれます。
データレプリケーションは一方向であり、マスターノードからスレーブノードへのみ実行できます。
デフォルトでは、各Redisサーバーがマスターノードです。
マスターノードは複数のスレーブノードを持つことができます(またはスレーブノードなし)が、スレーブノードは1つのマスターノードしか持つことができません。
2.Redisマスタースレーブレプリケーションの役割
データの冗長性:マスタースレーブレプリケーションは、データのホットバックアップを実現します。これは、永続性に加えてデータの冗長性の方法です。
障害回復:マスターノードに問題がある場合、スレーブノードは迅速な障害回復を実現するためのサービスを提供できます。実際、これは一種のサービス冗長性です。
負荷分散:マスタースレーブレプリケーションに基づいて、読み取りと書き込みを分離することで、マスターノードは書き込みサービスを提供でき、スレーブノードは読み取りサービスを提供します(つまり、アプリケーションは書き込み時にマスターノードに接続します)データをRedisし、アプリケーションはRedisデータを読み取るときにスレーブノードに接続します)、サーバーの負荷を共有します。特に、書き込みを減らして読み取りを増やすシナリオでは、複数のスレーブノードで読み取り負荷を共有すると、Redisサーバーの同時実行性が大幅に向上します。 。
高可用性の基礎:上記の機能に加えて、マスタースレーブレプリケーションはセンチネルとクラスターの実装の基礎でもあります。したがって、マスタースレーブレプリケーションはRedisの高可用性の基礎です。
3.Redisマスタースレーブレプリケーションプロセス
ステップ1:スレーブマシンプロセスが開始されると、「syncコマンド」コマンドがマスターマシンに送信され、同期接続が要求されます。
ステップ2:最初の接続か再接続かに関係なく、マスターマシンはバックグラウンドプロセスを開始してデータスナップショットをデータファイルに保存し(rdb操作を実行)、マスターはデータを変更するためのすべてのコマンドを記録し、それらをデータファイルにキャッシュします。
ステップ3:バックグラウンドプロセスがキャッシュ操作を完了した後、マストマシンはデータファイルをスレーブマシンに送信し、スレーブマシンはデータファイルをハードディスクに保存してからメモリにロードし、次にマスターマシンがデータを変更し、すべての操作がスレーブマシンに送信されます。スレーブに障害が発生してダウンタイムが発生した場合、通常に戻った後、スレーブは自動的に再接続します。
ステップ4:マスターマシンがスレーブ側のマシンから接続を受信すると、完全なデータファイルをスレーブ側のマシンに送信します。Materが複数のスレーブから同時に同期要求を受信すると、マスターはバックグラウンドでプロセスを開始します。 。データファイルを保存し、それをすべてのスレーブ側マシンに送信して、すべてのスレーブ側マシンが正常であることを確認します。
4.Redisマスタースレーブレプリケーションの構築
Redis-5.0.7.tar.gz
関連のインストールパッケージ
抽出コード:37z7
環境構成
ホスト | オペレーティング・システム | IPアドレス | インストールパッケージ |
---|---|---|---|
主人 | CentOS7 | 192.168.2.9 | redis-5.0.7.tar.gz |
スレーブ1 | CentOS7 | 192.168.2.10 | redis-5.0.7.tar.gz |
スレーブ2 | CentOS7 | 192.168.2.11 | redis-5.0.7.tar.gz |
ホストごと
hostnamectl set-hostname master #修改主机名,每台主机要改的不一样
su
systemctl stop firewalld
setenforce 0
(1)Redis(すべてのホスト)をインストールします
マスター:192.168.2.9
スレーブ1:192.168.2.10
スレーブ2:192.168.2.11
yum install -y gcc gcc-c++ make
cd /opt
tar zxvf redis-5.0.7.tar.gz
cd /opt/redis-5.0.7/
make && make PREFIX=/usr/local/redis install
cd /opt/redis-5.0.7/utils
./install_server.sh
......
#回车四次后,手动输入,需要一次性输入正确
Please select the redis executable path [] /usr/local/redis/bin/redis-server
ln -s /usr/local/redis/bin/* /usr/local/bin/
(2)マスターノードのRedis構成ファイルを変更します
マスター:192.168.2.9
vim /etc/redis/6379.conf
#70行,修改bind 项,0.0.0.0监听所有网段
bind 0.0.0.0
#137行,开启守护进程
daemonize yes
#172行,指定日志文件目录
logfile /var/log/redis_6379.log
#264行,指定工作目录
dir /var/lib/redis/6379
#700行,开启AOF持久化功能
appendonly yes
/etc/init.d/redis_6379 restart
(3)スレーブノードのRedis設定ファイルを変更します
スレーブ1:192.168.2.10
スレーブ2:192.168.2.11
vim /etc/redis/6379.conf
#70行,修改bind 项,0.0.0.0监听所有网卡
bind 0.0.0.0
#137行,开启守护进程
daemonize yes
#172行,指定日志文件目录
logfile /var/log/redis_6379.log
#264行,指定工作目录
dir /var/lib/redis/6379
#288行,指定要同步的Master节点IP和端口
replicaof 192.168.163.10 6379
#700行,开启AOF持久化功能
appendonly yes
/etc/init.d/redis_6379 restart
(4)マスタースレーブ効果を確認します
マスター:
マスターノードの192.168.2.9ビューログ
tail -f /var/log/redis_6379.log
マスターノードのスレーブノードを確認します
redis-cli info replication
2、Redisセンチネルモード
- Sentinelのコア機能:マスタースレーブレプリケーションに基づいて、Sentinelはマスターノードの自動フェイルオーバーを導入します
1.センチネルモードの原理
Sentinel:マスタースレーブ構造の各サーバーを監視するために使用される分散システムです。障害が発生すると、投票メカニズムによって新しいマスターが選択され、すべてのスレーブが新しいマスターに接続されます。したがって、センチネルを実行しているクラスター全体の数は3ノード以上である必要があります。
2.センチネルモードの役割
- 監視:番兵は、マスターノードとスレーブノードが正常に動作しているかどうかを常にチェックします。
- 自動フェイルオーバー:マスターノードが正常に機能しない場合、センチネルは自動フェイルオーバー操作を開始し、障害が発生したマスターノードのスレーブノードの1つを新しいマスターノードにアップグレードし、他のスレーブノードに新しいマスターノードをコピーさせます。
- 通知(リマインダー):歩哨はフェイルオーバーの結果をクライアントに送信できます。
3.センチネルモードの構造
センチネル構造は、センチネルノードとデータノードの2つの部分で構成されています。
- センチネルノード:センチネルシステムは、1つ以上のセンチネルノードで構成されます。センチネルノードは特別なredisノードであり、データを格納しません。
- データノード:マスターノードとスレーブノードの両方がデータノードです。
歩哨の開始はマスタースレーブモードに依存するため、歩哨モードを実行する前にマスタースレーブモードをインストールする必要があります。すべてのノードが歩哨モードをデプロイする必要があります。歩哨モードは、すべてのRedis作業ノードが正常かどうかを監視します。マスターが表示された場合他のノードがマスターノードとの接続を失ったために問題が発生した場合、投票します。投票の半分以上がこのマスターに問題があると見なされ、歩哨室に通知されます。 、次に、スレーブの1つが新しいマスターとして選択されます。
注:目的オフラインはマスターノードに固有の概念です。スレーブノードとセンチネルノードに障害が発生した場合、センチネルによって主観的にオフラインになった後、その後の目的オフラインおよびフェイルオーバー操作は行われません。
4.センチネルモードの構築
環境構成
マスター:確立されたマスター/スレーブレプリケーションに基づく
ホスト | オペレーティング・システム | IPアドレス | インストールパッケージ |
---|---|---|---|
主人 | CentOS7 | 192.168.2.9 | redis-5.0.7.tar.gz |
スレーブ1 | CentOS7 | 192.168.2.10 | redis-5.0.7.tar.gz |
スレーブ2 | CentOS7 | 192.168.2.11 | redis-5.0.7.tar.gz |
(1)Redis設定ファイルの変更(全ノード操作)
マスター:192.168.2.9
スレーブ1:192.168.2.10
スレーブ2:192.168.2.11
vim /opt/redis-5.0.7/sentinel.conf
#17行,关闭保护模式
protected-mode no
#21行,Redis哨兵默认的监听端口
port 26379
#26行,指定sentinel为后台启动
daemonize yes
#36行,指定日志存放路径
logfile "/var/log/sentinel.log"
#65行,指定数据库存放路径
dir "/var/lib/redis/6379"
#84行,修改 指定该哨兵节点监控192.168.2.9:6379这个主节点,该主节点的名称是mymaster,最后的2的含义与主节点的故障判定有关:至少需要2个哨兵节点同意,才能判定主节点故障并进行故障转移
sentinel monitor mymaster 192.168.2.9 6379 2
#113行,判定服务器down掉的时间周期,默认30000毫秒(30秒)
sentinel down-after-milliseconds mymaster 30000
#146行,故障节点的最大超时时间为180000(180秒)
sentinel failover-timeout mymaster 180000
(2)センチネルモードを開始します
マスター:192.168.2.9
スレーブ1:192.168.2.10
スレーブ2:192.168.2.11
注:最初にマスターを起動し、次にスレーブを起動します
cd /opt/redis-5.0.7/
redis-sentinel sentinel.conf &
最初にマスターノードを起動し、
次にスレーブノードを起動します
(3)センチネルモード情報を表示する
マスター:192.168.2.9
redis-cli -p 26379 info Sentinel
(4)故障シミュレーション
マスター:192.168.2.9
#查看redis-server进程号
ps aux | grep redis
root 56039 0.0 0.4 162696 7820 ? Ssl 3月09 0:02 /usr/local/redis/bin/redis-server 0.0.0.0:6379
root 56626 0.1 0.1 153992 2668 ? Ssl 00:30 0:01 redis-sentinel *:26379 [sentinel]
root 56745 0.0 0.0 112824 980 pts/3 S+ 00:42 0:00 grep --color=auto redis
#杀死 Master 节点上redis-server的进程号,模拟故障
kill -9 56039 #Master节点上redis-server的进程号
(5)検証結果
tail -f /var/log/sentinel.log
redis-cli -p 26379 INFO Sentinel