Redis の高可用性の実践

王林
王林オリジナル
2024-08-20 16:51:02799ブラウズ
0×01 序文

Redis は、ANSI C 言語で書かれたオープンソースのログタイプの Key-Value データベースで、ネットワークをサポートし、メモリベースで永続化でき、複数の言語で API を提供します。

現在、インターネット ビジネス データはより速い速度で増加しており、データの種類はますます豊富になっており、データ処理の速度と機能に対する要求が高まっています。 Redis は、開発者に破壊的なエクスペリエンスをもたらすオープンソースのインメモリ非リレーショナル データベースです。 Redis は、最初から最後まで高いパフォーマンスを念頭に置いて設計されており、現在利用できる最速の NoSQL データベースです。

高パフォーマンスを考慮する一方で、高可用性も重要な考慮事項です。インターネットは、24 時間 365 日中断のないサービスと、障害発生時の最速のフェールオーバーを提供するため、企業にもたらす損失は最小限に抑えられます。

それでは、実際のアプリケーションにおける高可用性アーキテクチャとは何でしょうか?それぞれのアーキテクチャの長所と短所は何ですか?どうやって選べばいいのでしょうか?ベストプラクティスにはどのようなものがありますか?

0×02センチネル原理

Redis の高可用性ソリューションを説明する前に、まず Redis Sentinel の原則 を見てみましょう。

  1. Sentinel クラスターは、指定された構成ファイルを通じてマスターを検出し、マスターの開始時にマスターを監視します。 info 情報をマスターに送信して、このサーバーの下にあるすべてのスレーブ サーバーを取得します。
  2. Sentinel クラスターは、他の Sentinel にその存在を通知するために、コマンド接続を通じて監視対象のマスター サーバーとスレーブ サーバーに hello 情報を送信します (1 秒に 1 回)。この情報には、Sentinel 自体の IP、ポート、ID などが含まれます。
  3. Sentinel クラスターは、同じマスター サーバーを監視している他の Sentinel を検出するために、サブスクリプション接続を通じて他の Sentinel から送信された hello 情報を受信します。hello を送受信するマスター/スレーブ サーバーがすでに存在するため、クラスターは通信のために相互にコマンド接続を作成します。 Sentinel と Sentinel の間に接続が作成されます。
  4. Sentinel クラスターは、ping コマンドを使用してインスタンスの状態を検出します。指定された時間 (ミリ秒後) 以内に応答がない場合、または誤った応答が返された場合、インスタンスはオフラインであると判断されます。
  5. フェイルオーバーのアクティブ/スタンバイ切り替えがトリガーされると、フェイルオーバーはすぐには続行されません。また、フェイルオーバーを実行する前に、Sentinel 内の大半の Sentinel の承認が必要になります。指定されたクォーラム Sentinel の承認を取得すると、ODOWN 状態に入ります。たとえば、5 つの Sentinel 間で 2 つのクォーラムが構成されている場合、2 つの Sentinel がマスターが停止していると判断したときにフェイルオーバーが実行されます。
  6. Sentinel は、マスターとして選択されたスレーブに SLAVEOF NO ONE コマンドを送信します。スレーブを選択する条件は、Sentinel が優先順位に従ってスレーブを最初に並べ替えることです。優先順位が同じ場合は、レプリケーションのサブスクリプトを確認して、マスターからより多くのレプリケーション データを受信した方が最初にランク付けされます。優先度とインデックスが同じ場合は、プロセス ID の小さい方が選択されます。
  7. Sentinel が承認されると、障害が発生したマスターの最新の構成バージョン番号 (config-epoch) が取得され、フェイルオーバーの実行が完了すると、このバージョン番号が最新の構成に使用され、ブロードキャスト Sentinel や他の Sentinel を通じて他の人に通知されます。対応するマスターの構成を更新します。

1 ~ 3 は自動検出メカニズムです:

  • 監視対象のマスターにinfoコマンドを10秒ごとに送信し、その返信に基づいて現在のマスター情報を取得します。
  • Sentinel を含むすべての Redis サーバーに 1 秒の頻度で PING コマンドを送信し、応答を通じてサーバーがオンラインかどうかを判断します。
  • 現在の Sentinel マスター情報メッセージを、監視対象のすべてのマスター サーバーとスレーブ サーバーに 2 秒の頻度で送信します。

4 は検出メカニズム、5 と 6 はフェイルオーバー メカニズム、7 は更新構成メカニズムです。 [1]

0×03 Redis 高可用性アーキテクチャ

Redis Sentinel の原理を説明した後、一般的に使用される Redis 高可用性アーキテクチャ について説明しましょう。

  • Redis Sentinel クラスター + イントラネット DNS + カスタム スクリプト
  • Redis Sentinel クラスター + VIP + カスタム スクリプト
  • クライアントをカプセル化して Redis Sentinel ポートに直接接続する
    • JedisSentinelPool、Java に適しています
    • PHP は phpredis に基づいて自己パッケージ化されています
  • Redis Sentinel クラスター + Keepalived/Haproxy
  • Redis M/S + キープアライブ
  • Redis クラスター
  • トゥエンプロキシ
  • コディス

以下、写真と文章で一つ一つ解説していきます。

3.1 Redis Sentinel クラスター + イントラネット DNS + カスタム スクリプト

Redis の高可用性の実践

上の写真は、オンライン環境に適用されたソリューションです。最下層は Redis Sentinel クラスターで、Redis マスターとスレーブのエージェントとして機能します。Web 側はイントラネット DNS に接続してサービスを提供します。イントラネット DNS は、xxxx.redis.cache/queue.port.xxx.xxx などの特定のルールに従って割り当てられます。最初のセグメントはビジネスの略称を示し、2 番目のセグメントはこれが Redis イントラネット ドメイン名であることを示します。 3 番目のセグメントは Redis タイプを表し、cache はキャッシュを表し、queue はキューを表します。4 番目のセグメントは Redis ポートを表し、5 番目と 6 番目のセグメントはイントラネットのメイン ドメイン名を表します。

マシンの障害、Redis ノードの障害、ネットワークの到達不能など、マスター ノードに障害が発生すると、Sentinel クラスターは client-reconfig-script で構成されたスクリプトを呼び出して、対応するポートのイントラネット ドメイン名を変更します。対応するポートのイントラネット ドメイン名は、新しい Redis マスター ノードを指します。

利点:

  • 第 2 レベルのスイッチング、スイッチング操作全体を 10 秒以内に完了します
  • スクリプトのカスタマイズと制御可能なアーキテクチャ
  • アプリケーションに対して透過的であるため、フロントエンドはバックエンドの変更を気にする必要がありません

短所:

  • メンテナンスコストが若干高くなります。Redis Sentinel クラスターには 3 台以上のマシンに投資することをお勧めします。
  • DNSによっては解決に時間がかかります
  • センチネルモードサービスは短期間利用できなくなります
  • 外部ネットワーク経由でサービスにアクセスする場合、このソリューションは使用できません
3.2 Redis Sentinel クラスター + VIP + カスタム スクリプト

Redis の高可用性の実践

このプランは以前のプランとは少し異なります。最初のソリューションはイントラネット DNS を使用し、2 番目のソリューションはイントラネット DNS を仮想 IP に置き換えます。最下層は Redis Sentinel クラスターで、Redis マスターとスレーブのエージェントとして機能し、Web 側は VIP を通じてサービスを提供します。 Redis マスター/スレーブをデプロイする場合、仮想 IP を現在の Redis マスター ノードにバインドする必要があります。マシンの障害、Redis ノードの障害、ネットワーク到達不能など、マスター ノードに障害が発生すると、Sentinel クラスターは

client-reconfig-script で構成されたスクリプトを呼び出して、VIP を新しいマスター ノードにフローティングします。

利点:

    第 2 レベルのスイッチング、スイッチング操作全体を 5 秒以内に完了します
  • スクリプトのカスタマイズと制御可能なアーキテクチャ
  • アプリケーションに対して透過的であるため、フロントエンドはバックエンドの変更を気にする必要がありません
短所:

    メンテナンスコストが若干高くなります。Redis Sentinel クラスターには 3 台以上のマシンに投資することをお勧めします。
  • VIPを使用すると、メンテナンスコストが増加し、IP混乱のリスクが高まります
  • センチネルモードサービスは短期間利用できなくなります
3.3 Redis Sentinel ポートに直接接続するためにクライアントをカプセル化します

Redis の高可用性の実践

Sesetengah perniagaan hanya boleh mengakses Redis melalui rangkaian luaran kedua-dua penyelesaian di atas tidak tersedia, jadi penyelesaian ini diperoleh. Web menggunakan klien untuk menyambung ke port tertentu mesin dalam salah satu gugusan Redis Sentinel, dan kemudian mendapatkan nod induk semasa melalui port ini, dan kemudian menyambung ke nod induk Redis sebenar untuk melaksanakan operasi jurujual yang sepadan. Adalah penting untuk ambil perhatian bahawa kedua-dua port Redis Sentinel dan nod induk Redis memerlukan akses terbuka. Jika perniagaan front-end menggunakan Java, JedisSentinelPool boleh digunakan semula jika perniagaan front-end menggunakan PHP, enkapsulasi sekunder boleh dilakukan berdasarkan phpredis.

Kelebihan:

  • Perkhidmatan mengesan kerosakan dengan segera
  • Kos penyelenggaraan DBA adalah rendah

Keburukan:

  • Bergantung pada sokongan pelanggan Sentinel
  • Pelayan sentinel dan nod Redis memerlukan akses terbuka
  • Mengganggu aplikasi
3.4 Redis Sentinel Cluster + Keepalived/Haproxy

Redis の高可用性の実践

Lapisan bawah ialah kelompok Redis Sentinel, yang bertindak sebagai ejen untuk tuan dan hamba Redis, dan bahagian Web menyediakan perkhidmatan melalui VIP. Apabila nod induk gagal, seperti kegagalan mesin, kegagalan nod Redis atau rangkaian tidak dapat dicapai, pertukaran antara Redis dijamin oleh mekanisme dalaman Redis Sentinel dan penukaran VIP dijamin oleh Keepalived.

Kelebihan:

  • Tukar dalam beberapa saat
  • Telus kepada aplikasi

Keburukan:

  • Kos penyelenggaraan yang tinggi
  • Mempunyai otak berpecah
  • Perkhidmatan mod Sentinel tidak akan tersedia untuk tempoh masa yang singkat
3.5 Redis M/S + Keepalived

Redis の高可用性の実践

Penyelesaian ini tidak menggunakan Redis Sentinel. Penyelesaian ini menggunakan tuan-hamba asli dan Pensuisan VIP dijamin oleh Keepalived Pertukaran antara hamba tuan-Redis memerlukan skrip tersuai.

Kelebihan:

  • Tukar dalam beberapa saat
  • Telus kepada aplikasi
  • Pengerahan yang mudah dan kos penyelenggaraan yang rendah

Keburukan:

  • Memerlukan skrip untuk melaksanakan fungsi pensuisan
  • Mempunyai otak berpecah
3.6 Kluster Redis

Redis の高可用性の実践

Daripada: http://intro2libsys.com/focused-redis-topics/day-one/intro-redis-cluster

Redis 3.0.0 telah dikeluarkan secara rasmi pada 2 April 2015, lebih daripada dua tahun lalu. Kelompok Redis menggunakan mod P2P dan tidak berpusat. Bahagikan kunci kepada 16384 slot, dan setiap contoh bertanggungjawab untuk sebahagian daripada slot. Klien meminta data yang sepadan Jika slot contoh tidak mempunyai data yang sepadan, tika akan dimajukan ke tika yang sepadan. Selain itu, kelompok Redis menyegerakkan maklumat nod melalui protokol Gossip.

Kelebihan:

  • Komponen semua dalam kotak, mudah digunakan dan menjimatkan sumber mesin
  • Prestasi lebih baik daripada mod proksi
  • Failover automatik dan data tersedia semasa penghijrahan slot
  • Penyelesaian kluster asli rasmi, kemas kini terjamin dan sokongan

Keburukan:

  • Seni binanya agak baharu dan terdapat beberapa amalan terbaik
  • Sokongan operasi berbilang kunci adalah terhad (pemandu boleh menyelamatkan negara melalui selekoh)
  • Untuk meningkatkan prestasi, pelanggan perlu menyimpan maklumat jadual penghalaan cache
  • Penemuan nod dan operasi pengerasan semula tidak cukup automatik
3.7 Twemproxy

Redis の高可用性の実践

Daripada: http://engineering.bloomreach.com/the-evolution-of-fault-tolerant-redis-cluster

Berbilang Twemproxy isomorfik (konfigurasi yang sama) berfungsi pada masa yang sama, menerima permintaan pelanggan dan memajukannya ke Redis yang sepadan mengikut algoritma cincang.

Penyelesaian Twemproxy agak matang Pasukan kami telah menggunakan penyelesaian ini untuk masa yang lama, tetapi kesannya tidak begitu memuaskan. Di satu pihak, masalah kedudukan lebih sukar, dan sebaliknya, sokongannya untuk menghapuskan nod secara automatik tidak begitu mesra.

Kelebihan:

  • Mudah dibangunkan dan hampir telus kepada aplikasi
  • Sejarah panjang dan penyelesaian matang

Keburukan:

  • Proksi menjejaskan prestasi
  • LVS dan Twemproxy akan mempunyai kesesakan prestasi nod
  • Peluasan Redis sangat menyusahkan
  • Twitter telah meninggalkan penggunaan penyelesaian ini secara dalaman, dan seni bina baharu bukan sumber terbuka
3.8 Codis

Redis の高可用性の実践

Daripada: https://github.com/CodisLabs/codis

Codis ialah produk sumber terbuka oleh Wandoujia dan melibatkan banyak komponen Antaranya, ZooKeeper menyimpan jadual penghalaan dan metadata nod proksi, dan mengedarkan perintah Codis-Config ialah alat pengurusan bersepadu dengan antara muka Web untuk digunakan; Proksi ialah Proksi tanpa negara yang serasi dengan protokol Redis; Codis-Redis ialah pembangunan sekunder berdasarkan versi Redis 2.8, menambah sokongan slot untuk memudahkan pemindahan data.

Kelebihan:

  • Mudah dibangunkan dan hampir telus kepada aplikasi
  • Prestasi lebih baik daripada Twemproxy
  • Mempunyai antara muka grafik, pengembangan yang mudah dan operasi dan penyelenggaraan yang mudah

Keburukan:

  • Proksi masih menjejaskan prestasi
  • Terlalu banyak komponen, memerlukan banyak sumber mesin
  • Kod Redis telah diubah suai, mengakibatkan ketidakupayaan untuk menyegerakkan dengan rasmi, dan susulan ciri baharu adalah perlahan
  • Pasukan pembangunan sedang bersedia untuk mempromosikan reborndb berdasarkan transformasi Redis
0×04 Amalan Terbaik

Apa yang dipanggil amalan terbaik ialah amalan yang paling sesuai untuk senario tertentu.

Kami terutamanya mengesyorkan pelan berikut:

  • Kluster Redis Sentinel + DNS intranet + skrip tersuai
  • Kluster Redis Sentinel + VIP + Skrip Tersuai

Berikut adalah amalan terbaik yang diringkaskan semasa pertempuran sebenar:

  • Kluster Redis Sentinel disyorkan untuk menggunakan >= 5 mesin
  • Perniagaan besar yang berbeza boleh menggunakan kluster Redis Sentinel untuk memproksi semua port di bawah perniagaan
  • Bahagikan julat pelabuhan Redis mengikut perniagaan yang berbeza
  • Skrip tersuai disyorkan untuk dilaksanakan dalam Python untuk pengembangan mudah
  • Skrip tersuai perlu diberi perhatian untuk menentukan peranan Sentinel semasa
  • Luluskan parameter skrip tersuai: Skrip tersuai memerlukan ssh jauh untuk mengendalikan mesin Adalah disyorkan untuk menggunakan perpustakaan
  • paramiko
  • untuk mengelakkan sambungan SSH berulang kali dan memakan masa. Untuk mempercepatkan sambungan SSH, disyorkan untuk mematikan dua parameter berikut
  • UseDNS no
    • GSSAPIAuthentication no
    Jika anda menerima makluman melalui WeChat atau e-mel, adalah disyorkan untuk menghentikan proses untuk mengelak daripada menyekat proses utama
  • Penukaran dan failover automatik, adalah disyorkan agar semua operasi selesai dalam masa 15s
0×05 Ringkasan
Acara ini berkongsi keperluan ketersediaan tinggi Redis, prinsip Sentinel, seni bina umum ketersediaan tinggi Redis dan amalan terbaik yang diringkaskan dalam proses pertempuran sebenar Saya harap ia akan membantu pembaca Jika anda memerlukan komunikasi susulan. anda boleh menambahkan saya WeChat (
Wentasy

), atau hantar e-mel ke: dbarobinwen@gmail.com Muat turun PPT dilampirkan: https://github.com/dbarobin/slides

Main Balik Video: Amalan Terbaik untuk Seni Bina Ketersediaan Tinggi Redis

0×06 Terima kasih
Terima kasih kepada Tingyun dan Geng Operasi dan Penyelenggaraan atas penganjuran mereka yang berhati-hati, dan terima kasih kepada semua yang datang untuk menyertai acara ini walaupun hujan lebat. Perkongsian ini telah dirakamkan oleh guru IT, dan saya ingin mengucapkan terima kasih kepada guru IT atas sokongan teknikalnya.

0×07 Rujukan

[1] jyzhou (2016-06-12).

以上がRedis の高可用性の実践の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。