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

1つは、Redisマスタースレーブレプリケーションです。

1.Redisマスタースレーブレプリケーションの概念

マスタースレーブレプリケーションとは、1つのRedisサーバーのデータを他のRedisサーバーにコピーすることです。前者はマスターノード(マスター)と呼ばれ、後者はスレーブノード(スレーブ)と呼ばれます。データレプリケーションは一方向であり、マスターノードからスレーブノードへのみ実行できます。
デフォルトでは、各Redisサーバーがマスターノードであり、マスターノードは複数のスレーブノードを持つことができます(またはスレーブノードなし)が、スレーブノードは1つのマスターノードしか持つことができません。

2.Redisマスタースレーブレプリケーションの役割

(1)データの冗長性:マスタースレーブレプリケーションは、データのホットバックアップを実現します。これは、永続性に加えてデータの冗長性の方法です。

(2)障害回復:マスターノードに問題が発生した場合、スレーブノードは迅速な障害回復を実現するためのサービスを提供できます。実際、これは一種のサービス冗長性です。

(3)負荷分散:マスタースレーブレプリケーションに基づいて、読み取りと書き込みを分離することで、マスターノードは書き込みサービスを提供でき、スレーブノードは読み取りサービスを提供できます(つまり、アプリケーションはRedisデータを書き込むときにマスターノード、Redisデータを読み取るときにアプリケーションが接続します。スレーブノード)サーバーの負荷を共有します。特に、書き込みを減らして読み取りを増やすシナリオでは、複数のスレーブノードで読み取り負荷を共有すると、の同時実行性が大幅に向上します。 Redisサーバー。

(3)高可用性の基礎:上記の機能に加えて、マスタースレーブレプリケーションはセンチネルとクラスターの実装の基礎でもあります。したがって、マスタースレーブレプリケーションはRedisの高可用性の基礎です。

3.マスタースレーブレプリケーションのプロセス

(1)スレーブマシンプロセスが開始されると、マスターマシンに「同期コマンド」コマンドを送信して同期接続を要求します。

(2)初回接続でも再接続でも、マスターマシンはバックグラウンドプロセスを開始してデータスナップショットをデータファイルに保存し(rdb操作を実行)、マスターはデータを変更するためのすべてのコマンドを記録し、のデータファイルにそれらをキャッシュします。

(3)バックグラウンド処理がキャッシュ操作を完了すると、マストマシンはデータファイルをスレーブマシンに送信し、スレーブマシンはデータファイルをハードディスクに保存してからメモリにロードし、次にマスターマシンはすべてのデータを変更します操作はスレーブマシンに送信されます。スレーブに障害が発生してダウンタイムが発生した場合、通常に戻った後、スレーブは自動的に再接続します。

(4)マスターマシンはスレーブ側マシンからの接続を受信した後、完全なデータファイルをスレーブ側マシンに送信します。Materが複数のスレーブから同時に同期要求を受信すると、マスターはバックグラウンドでプロセスを開始します。保存するにはデータファイルがすべてのスレーブ側マシンに送信され、すべてのスレーブ側マシンが正常であることを確認します。

4.Redisマスタースレーブレプリケーションをビルドします

(1)環境構成

ホスト オペレーティング・システム IP インストールパッケージ
主人 cetos7 192.168.177.8 redis-5.0.7.ta​​r.gz
slave1 centos7 192.168.177.11 redis-5.0.7.ta​​r.gz
slave2 centos7 192.168.177.18 redis-5.0.7.ta​​r.gz

(2)redisをインストールします

systemctl stop firewalld
setenforce 0

yum install -y gcc gcc-c++ make

tar zxvf redis-5.0.7.tar.gz -C /opt/

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/

(3)マスターノードのredis設定ファイルを変更します

vim /etc/redis/6379.conf
bind 0.0.0.0						#70行,修改bind 项,0.0.0.0监听所有网段
daemonize yes						#137行,开启守护进程
logfile /var/log/redis_6379.log		#172行,指定日志文件目录
dir /var/lib/redis/6379				#264行,指定工作目录
appendonly yes						#700行,开启AOF持久化功能

/etc/init.d/redis_6379 restart

ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入

(4)スレーブノードのRedis設定ファイルを変更します

vim /etc/redis/6379.conf
bind 0.0.0.0						#70行,修改bind 项,0.0.0.0监听所有网卡
daemonize yes						#137行,开启守护进程
logfile /var/log/redis_6379.log		#172行,指定日志文件目录
dir /var/lib/redis/6379				#264行,指定工作目录
replicaof 192.168.177.8 6379		#288行,指定要同步的Master节点IP和端口
appendonly yes						#700行,开启AOF持久化功能

/etc/init.d/redis_6379 restart

ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入

(5)マスタースレーブ効果を確認します

a。マスターノードのログを確認します

tail -f /var/log/redis_6379.log 

ここに画像の説明を挿入
b。マスターノードのスレーブノードを確認します

redis-cli info replication

ここに画像の説明を挿入

2、Redisセンチネルモード

注:マスタースレーブレプリケーションに基づいて、Sentinelはマスターノードの自動フェイルオーバーを導入します

1.センチネルモードの原理

これは、マスタースレーブ構造内の各サーバーを監視するために使用される分散システムです。障害が発生すると、投票メカニズムによって新しいマスターが選択され、すべてのスレーブが新しい​​マスターに接続されます。したがって、センチネルを実行しているクラスター全体の数は3ノード以上である必要があります。

2.センチネルモードの役割

(1)監視:番兵は、マスターノードとスレーブノードが正常に動作しているかどうかを常にチェックします。

(2)自動フェイルオーバー:マスターノードが正常に動作しない場合、センチネルは自動フェイルオーバー操作を開始し、故障したマスターノードのスレーブノードの1つを新しいマスターノードにアップグレードし、他のスレーブノードにコピーさせます。新しい1つのマスターノード。

(3)通知(リマインダー):歩哨はフェイルオーバーの結果をクライアントに送信できます。

3.センチネルモードの構造

(1)センチネルノード:センチネルシステムは1つ以上のセンチネルノードで構成されます。センチネルノードは特別なredisノードであり、データを保存しません。
(2)データノード:マスターノードとスレーブノードの両方がデータノードです。
歩哨の開始はマスタースレーブモードに依存するため、歩哨モードを実行する前にマスタースレーブモードをインストールする必要があります。すべてのノードが歩哨モードをデプロイする必要があります。歩哨モードは、すべてのRedis作業ノードが正常かどうかを監視します。マスターが表示された場合他のノードがマスターノードとの接続を失ったために問題が発生した場合、投票します。投票の半分以上がこのマスターに問題があると見なされ、歩哨室に通知されます。 、次に、スレーブの1つが新しいマスターとして選択されます。

4.セントリーモードを構築する

(1)環境構成

ホスト オペレーティング・システム IP インストールパッケージ
主人 centos7 192.168.177.8 redis-5.0.7.ta​​r.gz
slave1 centos7 192.168.177.11 redis-5.0.7.ta​​r.gz
slave2 centos7 192.168.177.18 redis-5.0.7.ta​​r.gz

(2)redis構成ファイル(マスタースレーブ)を変更します

systemctl stop firewalld
setenforce 0

vim /opt/redis-5.0.7/sentinel.conf
protected-mode no								#17行,关闭保护模式
port 26379										#21行,Redis哨兵默认的监听端口
daemonize yes									#26行,指定sentinel为后台启动
logfile "/var/log/sentinel.log"					#36行,指定日志存放路径
dir "/var/lib/redis/6379"						#65行,指定数据库存放路径
sentinel monitor mymaster 192.168.184.10 6379 2	#84行,修改 指定该哨兵节点监控192.168.184.10:6379这个主节点,该主节点的名称是mymaster,最后的2的含义与主节点的故障判定有关:至少需要2个哨兵节点同意,才能判定主节点故障并进行故障转移
sentinel down-after-milliseconds mymaster 30000	#113行,判定服务器down掉的时间周期,默认30000毫秒(30秒)
sentinel failover-timeout mymaster 180000		#146行,故障节点的最大超时时间为180000(180秒)

ここに画像の説明を挿入
ここに画像の説明を挿入

(3)センチネルモードを開始します(マスターとスレーブ)

cd /opt/redis-5.0.7/
redis-sentinel sentinel.conf &

ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入

(4)故障シミュレーション

redis-serverプロセス番号を表示する

ps aux | grep redis

ここに画像の説明を挿入
マスターノードのredisサーバーのプロセスIDを強制終了します
ここに画像の説明を挿入

(5)検証結果

tail -f /var/log/sentinel.log

ここに画像の説明を挿入

redis-cli -p 26379 INFO Sentinel

ここに画像の説明を挿入

3、redisクラスターモード(Redisクラスター)

1.クラスターの概念

クラスターは複数のノード(ノード)で構成され、Redisデータはこれらのノードに分散されます。クラスター内のノードは、マスターノードとスレーブノードに分けられます。マスターノードのみが読み取りおよび書き込み要求とクラスター情報の保守を担当し、スレーブノードはマスターノードのデータとステータス情報のみを複製します。

2.クラスターの役割

(1)データパーティション:データパーティション(またはデータシャーディング)は、クラスターのコア機能です。
クラスターはデータを複数のノードに分散します。一方で、Redis単一マシンのメモリサイズ制限を突破し、ストレージ容量が大幅に増加します。他方、各マスターノードは外部の読み取りおよび書き込みサービスを提供できます。クラスターの応答性が大幅に向上します。
Redisスタンドアロンメモリサイズの制限は、永続性とマスタースレーブレプリケーションの導入で言及されています。たとえば、スタンドアロンメモリが大きすぎる場合、bgsaveとbgrewriteaofのフォーク操作により、メインプロセスがブロックされる可能性があります。マスタースレーブ環境でホストを切り替えると、スレーブノードが長時間サービスを提供できなくなり、フルレプリケーションフェーズでマスターノードのレプリケーションバッファがオーバーフローする可能性があります。

(2)高可用性:クラスターは、マスタースレーブレプリケーションとマスターノードの自動フェイルオーバー(センチネルと同様)をサポートします。いずれかのノードに障害が発生した場合でも、クラスターは外部サービスを提供できます。

3.クラスターデータシャーディングをRedisします

(1)Redisクラスターはハッシュスロットの概念を導入してい
ます。Redisクラスターには16384個のハッシュスロット(番号0-16383)があり
ます。クラスター内の各ノードはハッシュスロットの一部を担当します。
各キーはCRC16によってチェックされ、16384はどのハッシュスロットを配置するか、この値を使用して対応するスロットに対応するノードを見つけ、アクセス操作のために対応するノードに自動的にジャンプします
(2)例として3つのノードで構成されるクラスターを取り上げます。
ノードAにはハッシュスロット
0〜5460が含まれノードBに
ハッシュスロット5461〜10922が含まれノードCにはハッシュスロット10923〜16383が含まれます
(3)Redisクラスターマスタースレーブレプリケーションモデル
クラスターには3つのノードA、B、およびCがありますノードBに障害が発生した場合、5461〜10922の範囲のスロットがないため、クラスター全体が使用できなくなります。
各ノードにスレーブノードA1、B1、C1を追加します。クラスター全体は、3つのマスターノードと3つのスレーブノードで構成されます。ノードBに障害が発生した後、クラスターは、B1をメインノードとしてマスターノードを選択し、サービスを継続します。BとB1の両方に障害が発生すると、クラスターは使用できなくなります
ここに画像の説明を挿入

4.redisクラスターモードを構築します

redisクラスターには通常、6つのノード、3つのマスター、3つのスレーブが必要です。便宜上、すべてのノードは同じサーバー上で実行されます。ポート番号を使用して区別します。3つのマスターノードのポート番号は1701、1702、1703であり、対応するスレーブノードのポート番号は1704、1705、1706です。

cd /etc/redis/
mkdir -p redis-cluster/redis170{1..6}

for i in {1. .6}
do
cp /opt/redis-5.0.7/redis.conf /etc/redis/redis-cluster/redis170$i
cp /opt/redis-5.0.7/src/redis-cli /opt/redis-5.0.7/src/redis-server /etc/redis/redis-cluster/redis170$i
done
 
#开启群集功能:
#其他5个文件夹的配置文件以此类推修改
cd /etc/redis/redis-cluster/redis1701
vim redis.conf
#bind 127.0.0.1         #69行,注释掉bind项,默认监听所有网卡
protected-mode no       #88行,修改,关闭保护模式
port 1701               #92行,修改redis监听端口
daemonize yes           #136行,开启守护进程,以独立进程启动
appendonly yes          #699行,修改,开启AOF持久化
cluster-enabled yes     #832行,取消注释,开启群集功能
cluster-config-file nodes-1701.conf    #840行,取消注释,群集名称文件设置
cluster-node-timeout 15000             #846行,取消注释群集超时时间设置

写一个for循环将1701的文件复制给1702~1706,
for i in {2..6}
do
/usr/bin/cp -f /etc/redis/redis-cluster/redis1701/redis.conf /etc/redis/redis-cluster/redis170$i/redis.conf
done
#之后稍微修改文件即可

# 启动redis节点
分别进入那六个文件夹,执行命令: redis-server redis.conf,来启动redis节点
cd /etc/redis/redis-cluster/redis1701
redis-server redis.conf

for d in {1..6}
do
cd /etc/redis/redis-cluster/redis170$d
redis-server redis.conf
done

ps -ef | grep redis

#启动集群
redis-cli --cluster create 127.0.0.1:1701 127.0.0.1:1702 127.0.0.1:1703 127.0.0.1:1704 127.0.0.1:1705 127.0.0.1:1706 --cluster-replicas 1

#六个实例分为三组,每组一主一从,前面的做主节点,后面的做从节点。下面交互的时候需要输入yes 才可以创建。
-replicas 1       #表示每个主节点有1个从节点。

#测试群集
redis-cli -p 1701 -c              #加-c参数,节点之间就可以互相跳转
127.0.0.1:1701> cluster slots     #查看节点的哈希槽编号范围

127.0.0.1:1701> set name zhangsan
-> Redirected to slot [5798] located at 127.0.0.1: 1703
OK

127.0.0.1:1701> cluster keyslot name    #查看name键的槽编号
(integer) 5798

ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/tefuiryy/article/details/114302873