Redisサービスのマスター/スレーブレプリケーション、センチネルモード、クラスターモード

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.ta​​r.gz
関連のインストールパッケージ
抽出コード:37z7
環境構成

ホスト オペレーティング・システム IPアドレス インストールパッケージ
主人 CentOS7 192.168.2.9 redis-5.0.7.ta​​r.gz
スレーブ1 CentOS7 192.168.2.10 redis-5.0.7.ta​​r.gz
スレーブ2 CentOS7 192.168.2.11 redis-5.0.7.ta​​r.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.ta​​r.gz
スレーブ1 CentOS7 192.168.2.10 redis-5.0.7.ta​​r.gz
スレーブ2 CentOS7 192.168.2.11 redis-5.0.7.ta​​r.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

ここに画像の説明を挿入します

ここに画像の説明を挿入します

おすすめ

転載: blog.csdn.net/qq_35456705/article/details/114594621