ホームページ  >  記事  >  データベース  >  Redis はマスター/スレーブ レプリケーションをどのように実装しますか?

Redis はマスター/スレーブ レプリケーションをどのように実装しますか?

PHPz
PHPz転載
2023-05-29 14:21:351683ブラウズ

    1. マスター&スレーブとは何ですか?

    これは、マスター/スレーブ レプリケーションと呼ばれるものです。ホスト データが更新されると、構成とポリシーに従って、スタンバイ マシンのマスター/スレーバー メカニズムに自動的に同期されます。マスターは主に書き込み用です。 、スレーブは主に読書用です。

    2.何ができるのでしょうか?

    1. 読み取りと書き込みの分離;

    2. 災害復旧。

    3. 遊び方は?

    1. スレーブ (ライブラリ) は装備されていますが、マスター (ライブラリ) は装備されていません;

    2. スレーブ ライブラリの構成: smileof [メイン ライブラリ IP] [メイン ライブラリ ポート];

    • 補足: redis.conf ファイルを設定しない限り、スレーブはマスターから切断されるたびに再接続する必要があります。

    • タイプ情報のレプリケーションを次のように設定します。 Redis のマスター/スレーブ情報を表示します。

    3. 設定ファイルの詳細を変更します

    #- 複数の redis.conf ファイルをコピーします

    Redis はマスター/スレーブ レプリケーションをどのように実装しますか?

    - ポートを指定します

    Redis はマスター/スレーブ レプリケーションをどのように実装しますか?#-デーモン化を開くはい

    ##-PID ファイル名Redis はマスター/スレーブ レプリケーションをどのように実装しますか?

    #-ログ ファイル名

    Redis はマスター/スレーブ レプリケーションをどのように実装しますか?

    -Dump.rdb 名

    Redis はマスター/スレーブ レプリケーションをどのように実装しますか?

    4. 3 つの一般的なトリック

    Redis はマスター/スレーブ レプリケーションをどのように実装しますか?- 1 つのマスターと 2 つのサーヴァント

    1 つのマスター、2 つのスレーブ。スレーブは読み取りのみ可能ですが書き込みはできません。スレーブがマスターから切断されると、必要なスレーブになります。この場合のみ、以前のマスターとスレーブの関係が確立され、マスターが切断された後もマスター関係はまだ存在しており、マスターを再起動することで復元できます。

    Redis はマスター/スレーブ レプリケーションをどのように実装しますか?- ファイアの引き継ぎ

    前のスレーブは次のスレーブのマスターになることができ、スレーブは他のスレーブからの接続および同期リクエストを受信することもできます。スレーブの場合、スレーブはチェーン内の次のスレーブのマスターとして機能し、マスターの書き込みプレッシャーを効果的に軽減できます。スレーブサーバーがデータ同期のマスターサーバーを途中で変更した場合、古いデータは消去され、最新のマスターサーバーとの同期が再確立されます。

    #-顧客に敵対するRedis はマスター/スレーブ レプリケーションをどのように実装しますか?

    マスターが電話を切ると、スレーブはコマンド「slaveof no one」を入力して、現在の Redis が他のマスター Redis とデータを同期するのを停止し、それをマスター Redis に変えることができます。 。

    4. コピー原則

    1. スレーブが起動してマスターに正常に接続すると、同期コマンドが送信されます;

    2. マスターがコマンドを受信した後、保存プロセスを開始し、同時にデータ セットを変更するために受信したすべてのコマンドを収集します。バックグラウンド プロセスが実行された後、マスターはデータ ファイル全体をスレーブに転送して、完全な同期を完了します。

    3完全レプリケーション: スレーブ サービスはデータベース内にあります ファイル データが保存された後、保存され、メモリにロードされます;

    4. 増分コピー: マスターは、新しく収集されたすべての変更コマンドを順番にスレーブに渡し続けます。完全同期;

    5. ただし、マスターが再接続されている限り、完全同期 (完全レプリケーション) が自動的に実行されます。

    5. センチネルモード (sentinel)

    マスターデータベースの障害をバックグラウンドで監視し、障害が発生した場合にはスレーブデータベースを自動で監視する顧客志向の自動バージョンです。投票数に基づいてマスターデータベースに変換されます。センチネルのグループは複数のマスターを同時に監視できます。

    使用手順:

    1. マスターの対応する redis.conf と同じディレクトリに新しい Sentinel.conf ファイルを作成します。名前は間違ってはいけません。

    2 、センチネルを設定し、sentinel.conf ファイルに内容を入力します。

    センチネル モニターの監視対象データベース名 (自分で名前を付けます) ip ポート 1

    • 説明: 上記の最後の数字 1 は、ホストが電話を切った後、誰がホストを引き継ぐかをスレーブが投票することを意味します。スレーブは、投票数を取得した後にホストになります。 。

    • 3. センチネル モードの開始:

    コマンド入力: redis-sentinel /myredis/sentinel.conf

    • 注: 上記の Sentinel.conf パスは、実際の条件に従って構成されています

    • 6. レプリケーションの欠点

      すべての書き込み操作が実行されるため、遅延が発生します。操作はマスターで実行されてからスレーブに同期されるため、マスターからスレーブ マシンへの同期にはある程度の遅延が発生します。システムが非常にビジーな場合、遅延の問題はさらに深刻になります。スレーブ マシンもこの問題をさらに深刻にします。
    Redis マスター、スレーブ ノードのデプロイの詳細

    1. 2 つの redis.conf ファイル (マスター 1 つとスレーブ 1 つ) を作成します

    redis_6379.conf
    redis_6380.conf

    2. マスター conf のメイン構成

    bind 127.0.0.1
    port 6379
    protected-mode yes
    daemonize yes
    pidfile /var/run/redis_6379.pid
    logfile "/Data/apps/redis-3.2.12/logs/redis_6379.log"
    dbfilename dump_6379.rdb
    dir /Data/apps/redis-3.2.12/workplace
    requirepass paopao

    3. スレーブ構成のメイン設定

    bind 127.0.0.1
    port 6380
    protected-mode yes
    daemonize yes
    pidfile /var/run/redis_6380.pid
    logfile "/Data/apps/redis-3.2.12/logs/redis_6380.log"
    dbfilename dump_6380.rdb
    dir /Data/apps/redis-3.2.12/workplace
    slaveof 127.0.0.1 6379
    masterauth paopao

    4. マスター/スレーブ redis-server プロセスを開始します

    redis-server /Data/apps/redis-3.2.12/conf/redis_6379.conf
    redis-server /Data/apps/redis-3.2.12/conf/redis_6380.conf

    5. その他の関連する設定

    # 当从库同主机失去连接或者复制正在进行,从机库有两种运行方式:
    # 1) 如果slave-serve-stale-data设置为yes(默认设置),从库会继续相应客户端的请求
    # 2) 如果slave-serve-stale-data是指为no,除去INFO和SLAVOF命令之外的任何请求都会返回一个
    #    错误"SYNC with master in progress"
    slave-serve-stale-data yes
    slave-read-only yes
    # 从库会按照一个时间间隔向主库发送PINGs.可以通过repl-ping-slave-period设置这个时间间隔,默认是10秒
    repl-ping-slave-period 10
    # repl-timeout 设置主库批量数据传输时间或者ping回复时间间隔,默认值是60秒
    # 一定要确保repl-timeout大于repl-ping-slave-period
    repl-timeout 60
    # slave节点磁盘慢, 网速快时, 置为yes, master上的rdb文件将以socket方式传输, 跳过磁盘存储
    repl-diskless-sync no
    # 传输前等待秒数, 为了等待更多的slave节点加入
    repl-diskless-sync-delay 5
    # 传输时,是否禁用tcp nodelay
    repl-disable-tcp-nodelay no
    # 复制缓冲区大小
    repl-backlog-size 1mb
    # 复制缓冲区释放周期
    repl-backlog-ttl 3600
    # 为了sentinal模式, 选举master准备, 数值越小, 优先级越高
    slave-priority 100
    # require at least 3 slaves with a lag <= 10 seconds use
    min-slaves-to-write 3
    min-slaves-max-lag 10
    # 可覆盖bind, port 配置, 对外ip port
    slave-announce-ip 5.5.5.5
    slave-announce-port 1234

    以上がRedis はマスター/スレーブ レプリケーションをどのように実装しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

    声明:
    この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。