誰もがRedisマスタースレーブレプリケーションの原則について話しているので、実践を要約しましょう

レプリケーションの概要

非リレーショナルデータベースであるRedisは、リレーショナルデータベース(MySQL)と同じレプリケーション機能を備えており、実現原理が異なります。Redisのレプリケーション機能は、他のメモリデータベース(memcached)にも固有のものです。

Redisレプリケーション機能の主な役割は、クラスタリングおよびシャーディング機能を実現するための基盤です。また、単一マシンの同時実行の問題、データセキュリティ、その他の問題の解決など、Redisが高可用性を実現するための戦略でもあります。

サービス紹介

この記事の環境デモンストレーションでは、ホストがあり、2つのRedisの例が開始されています。

誰もがRedisマスタースレーブレプリケーションの原則について話しているので、実践を要約しましょう


実現する方法

Redisレプリケーションは、次の3つの方法で実装できます。

1.サービスの開始時刻を構成します

このメソッドは、コマンドラインパラメーターを使用して、Redisサービスの開始時にマスター/スレーブレプリケーション機能を開始します。この方法の欠点は、構成の永続性を実現できないことです。サービスを停止してサービスを開始するときに、同じコマンドパラメータを追加する必要があります。

1.1マスターサーバーは事前にredis.confgにrequirepassアイテムを追加します。

requirepass 6379

1.2スレーブサーバーを起動します。

redis-server --port 6380 --replicaof 192.168.2.102 6379

2.コマンドライン構成

このメソッドは、redis-cliを使用して、構成用の操作ラインインターフェイスに入ります。この方法の欠点は、構成の永続性を実現できないことです。サービスを停止すると、同じコマンドを実行してサービスを開始する必要があります。

2.1マスターサーバーが実行されます。

127.0.0.1:6379> config set requirepass 6379OK

2.2サーバーから実行します。

127.0.0.1:6380>192.168.2.102のレプリカ6379OK127.0.0.1:6380> config set masterauth 6379OK

3.構成ファイルの構成

この方法は、redis.conf構成ファイルを介して設定されます。これは、構成の永続性を実現できるため、推奨される方法です。

3.1メインサーバーredis.configを構成します。

requirepass 6379

3.2スレーブサーバーredis.configを構成します。

masterauth 6379replicaof 192.168.2.102 6379

4.構成手順

1. masterauth:この値が設定されている場合は、redis.confi接続パスワードを設定します。他のクライアントがサーバーに接続するときは、アクセスする前にパスワードを追加する必要があります。

2. requirepass:マスターサーバーの接続パスワードを設定します。これは1のmasterauthと一致します。

3. Replicaof:サーバーからサーバーのIPアドレス+ポート番号に接続します。

効果テスト

1.メインサーバーにデータを追加します。

誰もがRedisマスタースレーブレプリケーションの原則について話しているので、実践を要約しましょう


2.サーバーからデータを取得します。

誰もがRedisマスタースレーブレプリケーションの原則について話しているので、実践を要約しましょう


実現原理

誰もがRedisマスタースレーブレプリケーションの原則について話しているので、実践を要約しましょう


// uml figure @startumlスレーブサーバー->マスターサーバー:1。構成の保存
スレーブサーバー->マスターサーバー:2。ソケット接続の確立
スレーブサーバー->マスターサーバー:3。
サーバーからpingコマンドを送信->マスターサーバー:4。承認の検証
スレーブサーバー->マスターサーバー:5。データの同期
スレーブサーバー->マスターサーバー:6。データのコピーを続行@enduml

マスタースレーブレプリケーションの主な実装プロセスは、上の図に示すとおりです。

1.最初のステップで、スレーブサーバーはマスターサーバーの構成情報を保存します。保存後、スレーブサーバー内のタイマーが実行されると、レプリケーションプロセスがトリガーされます。

2. 2番目のステップでは、スレーブサーバーは最初にマスタースレーブ通信のためにマスターサーバーとのソケットソケット接続を確立します。その後、マスターサーバーはこのバイトセットを介してスレーブサーバーにデータを送信します。

3. 3番目のステップでは、ソケットソケットが正常に接続された後、authentication pingコマンドが送信されます。通常の状況では、メインサーバーは対応する応答を送信します。pingコマンドの機能は、ソケットソケットバイトを使用できるかどうかを確認し、メインサーバーが操作コマンドを受け入れるかどうかを確認することです。

4. 4番目のステップとそれに続く認証検証は、スレーブノードによって構成されたマスターノード接続パスワードが正しいかどうかを判別することです。

5.第五步,鉴权成功之后,就可以开始复制数据了。主服务器此时会进行全量复制,将主服务的数据全部发给从服务器,从服务器保存主服务器发送的数据。

6.接下来就是持续复制操作。主服务器会进行异步复制,一边将写的数据写入自身,同时会将新的写命令发送给从服务器。

实现策略

Redis主从复制主要分为三种弄策略方式,不同的策略方式都是针对不同的场景下进行使用。三种场景方式分别如下:

1.全量复制。全量复制用在主从复制刚建立时或者从切主服务器时,从服务器没有主服务器的数据,主服务器会将自身的数据通过rdb文件方式发送给从服务器,从服务器会清空自身数据,接着将主服务器发送的数据加载到自身中。

誰もがRedisマスタースレーブレプリケーションの原則について話しているので、実践を要約しましょう


// uml图@startuml从服务器->主服务器: 1.psync ? -1主服务器->从服务器: 2.fullsync runid offset
从服务器: 3.保存 runid offset
主服务器: 4.执行bgsave生成rdb
主服务器->从服务器: 5.发送rdb
从服务器: 6.清空自身老数据
从服务器: 7.加载主服务器数据@enduml

2.部分复制。部分复制用在一些异常情况下,例如主从延迟、从服务宕机之后重新启动接收主服务器发送的部分数据。

部分复制的实现主要依赖于复制缓存区、主服务的runid、主从服务器各自的复制偏移量(offset)。

复制缓存区:主服务在接收写命令时,会将命令写入缓存区,以便从服务器在异常情况下,减少数据的丢失。当从服务器正常连接之后,主服务器会将缓存区内的数据发送给从服务器。这里的缓存区是一个长队列。

メインサーバーのrunid:メインサーバーは、サービスが開始されるたびに、独自のIDとして一意のIDを生成します。スレーブサーバーは識別子を保存し、いくつかのコピーコマンドを送信するときにrunidを使用します。

psyncrunidオフセット

マスタースレーブレプリケーションのそれぞれのオフセット:マスタースレーブサービスがレプリケーションを確立した後、独自のオフセットがあります。スレーブノードは、毎秒独自のレプリケーションオフセットをスレーブノードに送信します。マスターノードが書き込みコマンドを送信した後、スレーブノードも独自のレプリケーションオフセットを増やします。マスターノードは、各書き込みコマンドの後に独自のオフセットも増やします。ここでのオフセットは、コマンドのバイト長を累積することによって計算されます。

3.非同期レプリケーション。非同期レプリケーションとは、マスターとスレーブ間のレプリケーション関係の確立を指し、マスターサーバーとスレーブサーバーは引き続きレプリケーション関係を維持します。

シーンの問題

1.データセキュリティ。

//サーバーから読み取り専用レプリカ読み取り専用はい//サーバー接続パスワードからmasterauth

2.データの遅延。

デフォルトでは、マスターノードに新しいデータがある場合、そのデータはすぐにスレーブサーバーに送信されません。オンになっている場合、マスターノードはすぐにスレーブサーバーに送信されます。Linuxカーネルでは、デフォルトの時刻は拒否されます。

//レプリケーション遅延repl-disable-tcp-nodelayyes

3.マスターノードとスレーブノードの接続ステータス。

マスタースレーブノードが接続を確立すると、相手のクライアントを定期的に模倣して、相手のサービスステータスを検出します。マスターノードは、repl-ping-replica-period構成パラメーターを設定することで設定できます。デフォルトの頻度は10秒です。

スレーブノードがreplconfack {offsetid}を実行すると、スレーブノードは独自のレプリケーションオフセットもマスターサーバーに送信し、マスターサーバーはオフセットに基づいてデータ遅延を決定します。データ遅延がある場合、対応するデータがコピーバックログバッファのデータシンクからスレーブノードに再発行されます。


おすすめ

転載: blog.51cto.com/15128443/2665207