Maison >Tutoriel système >Linux >Pratique de haute disponibilité Redis

Pratique de haute disponibilité Redis

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBoriginal
2024-08-20 16:51:041276parcourir
0×01 Vorwort

Redis ist eine Open-Source-Schlüsselwertdatenbank vom Protokolltyp, die in der ANSI-C-Sprache geschrieben ist, Netzwerke unterstützt, speicherbasiert und persistent sein kann und APIs in mehreren Sprachen bereitstellt.

Heutzutage wachsen Internet-Geschäftsdaten schneller und die Datentypen werden immer zahlreicher, was höhere Anforderungen an die Geschwindigkeit und Fähigkeiten der Datenverarbeitung stellt. Redis ist eine nicht relationale Open-Source-In-Memory-Datenbank, die Entwicklern ein disruptives Erlebnis bietet. Redis wurde von Anfang bis Ende mit Blick auf hohe Leistung entwickelt und ist die schnellste heute verfügbare NoSQL-Datenbank.

Neben der hohen Leistung ist auch die hohe Verfügbarkeit ein wichtiger Gesichtspunkt. Das Internet bietet 7x24 ununterbrochenen Service und Failover mit der höchsten Geschwindigkeit bei einem Ausfall, was zu minimalen Verlusten für das Unternehmen führen kann.

Was sind also die Hochverfügbarkeitsarchitekturen in praktischen Anwendungen? Welche Vor- und Nachteile gibt es zwischen den Architekturen? Wie sollen wir wählen? Was sind einige Best Practices?

0×02 Sentinel-Prinzip

Bevor wir die Hochverfügbarkeitslösung von Redis erläutern, werfen wir zunächst einen Blick auf das Redis Sentinel-Prinzip.

  1. Der Sentinel-Cluster erkennt den Master über die angegebene Konfigurationsdatei und überwacht den Master beim Start. Erhalten Sie alle Slave-Server unter diesem Server, indem Sie Informationsinformationen an den Master senden.
  2. Der Sentinel-Cluster sendet über Befehlsverbindungen Hallo-Informationen (einmal pro Sekunde) an die überwachten Master- und Slave-Server. Diese Informationen umfassen die eigene IP, den Port, die ID usw. des Sentinel, um seine Existenz anderen Sentinels mitzuteilen.
  3. Der Sentinel-Cluster empfängt Hallo-Informationen, die von anderen Sentinels über Abonnementverbindungen gesendet werden, um andere Sentinels zu erkennen, die denselben Master-Cluster überwachen, und erstellt Befehlsverbindungen untereinander für die Kommunikation, da es bereits Master-Slave-Server gibt, die Hallo senden und empfangen. Kein Abonnement Es wird eine Verbindung zwischen Sentinel und Sentinel als Informationsvermittler hergestellt.
  4. Der Sentinel-Cluster verwendet den Ping-Befehl, um den Status der Instanz zu erkennen. Wenn innerhalb der angegebenen Zeit (Down-After-Millisekunden) keine Antwort erfolgt oder eine falsche Antwort zurückgegeben wird, wird die Instanz als offline eingestuft.
  5. Wenn die Failover-Aktiv/Standby-Umschaltung ausgelöst wird, wird das Failover nicht sofort fortgesetzt. Es ist außerdem die Autorisierung der meisten Sentinels im Sentinel erforderlich, bevor das Failover durchgeführt werden kann Erhalten Sie die Genehmigung der benannten Quorum-Sentinels. Geben Sie nach Erfolg den ODOWN-Status ein. Wenn beispielsweise 2 Quoren unter 5 Sentinels konfiguriert sind, wird ein Failover ausgeführt, wenn die 2 Sentinels glauben, dass der Master tot ist.
  6. Sentinel sendet den Befehl SLAVEOF NO ONE an den als Master ausgewählten Slave. Voraussetzung für die Auswahl des Slaves ist, dass Sentinel die Slaves zunächst nach ihrer Priorität sortiert. Wenn die Prioritäten gleich sind, überprüfen Sie das Replikationssubskript. Dasjenige, das mehr Replikationsdaten vom Master erhält, wird zuerst eingestuft. Wenn Priorität und Index gleich sind, wird derjenige mit der kleineren Prozess-ID ausgewählt.
  7. Nachdem Sentinel autorisiert wurde, erhält es die neueste Konfigurationsversionsnummer (config-epoch) des ausgefallenen Masters. Wenn die Failover-Ausführung abgeschlossen ist, wird diese Versionsnummer für die neueste Konfiguration verwendet und andere Sentinel über Broadcast benachrichtigt Aktualisieren Sie die Konfiguration des entsprechenden Masters.

1 bis 3 sind automatische Erkennungsmechanismen:

  • Senden Sie alle 10 Sekunden den Info-Befehl an den überwachten Master und erhalten Sie anhand der Antwort die aktuellen Master-Informationen.
  • Senden Sie PING-Befehle mit einer Frequenz von 1 Sekunde an alle Redis-Server, einschließlich Sentinel, und ermitteln Sie anhand der Antwort, ob der Server online ist.
  • Senden Sie aktuelle Sentinel-Master-Informationsnachrichten im Abstand von 2 Sekunden an alle überwachten Master- und Slave-Server.

4 ist der Erkennungsmechanismus, 5 und 6 sind Failover-Mechanismen und 7 ist der Update-Konfigurationsmechanismus. [1]

0×03 Redis Hochverfügbarkeitsarchitektur

Après avoir expliqué le principe de Redis Sentinel, expliquons l'architecture haute disponibilité Redis couramment utilisée.

  • Cluster Redis Sentinel + DNS intranet + script personnalisé
  • Redis Sentinel Cluster + VIP + Script personnalisé
  • Encapsulez le client pour vous connecter directement au port Redis Sentinel
    • JedisSentinelPool, adapté à Java
    • PHP est auto-emballé basé sur PHPredis
  • Redis Sentinel Cluster + Keepalived/Haproxy
  • Redis M/S + Keepalived
  • Cluster Redis
  • Twemproxy
  • Codis

Ce qui suit sera expliqué un par un avec des images et du texte.

3.1 Cluster Redis Sentinel + DNS Intranet + Script personnalisé

Pratique de haute disponibilité Redis

L'image ci-dessus est une solution qui a été appliquée dans un environnement en ligne. La couche inférieure est le cluster Redis Sentinel, qui agit comme agent pour le maître et l'esclave Redis. Le côté Web se connecte au DNS intranet pour fournir des services. Le DNS intranet est attribué selon certaines règles, telles que xxxx.redis.cache/queue.port.xxx.xxx Le premier segment indique l'abréviation de l'entreprise, le deuxième segment indique qu'il s'agit du nom de domaine intranet Redis et le le troisième segment représente le type Redis, le cache représente le cache, la file d'attente représente la file d'attente, le quatrième segment représente le port Redis et les cinquième et sixième segments représentent le nom de domaine principal de l'intranet.

Lorsque le nœud maître échoue, comme une panne de machine, une panne de nœud Redis ou une inaccessibilité du réseau, le cluster Sentinel appellera le script configuré client-reconfig-script pour modifier le nom de domaine intranet du port correspondant. Le nom de domaine intranet du port correspondant pointe vers le nouveau nœud maître Redis.

Avantages :

  • Commutation de deuxième niveau, effectuez toute l'opération de commutation en 10 secondes
  • Personnalisation du script et architecture contrôlable
  • Transparent à l'application, le front-end n'a pas à se soucier des changements dans le back-end

Inconvénients :

  • Le coût de maintenance est légèrement élevé. Il est recommandé d'investir dans plus de 3 machines pour le cluster Redis Sentinel
  • Dépend du DNS, il y a un délai de résolution
  • Le service en mode Sentinelle sera indisponible pendant une courte période
  • Cette solution ne peut pas être utilisée si le service est accessible via le réseau externe
3.2 Redis Sentinel Cluster + VIP + Script personnalisé

Pratique de haute disponibilité Redis

Ce plan est légèrement différent du précédent. La première solution utilise le DNS intranet et la seconde solution remplace le DNS intranet par une IP virtuelle. La couche inférieure est le cluster Redis Sentinel, qui agit comme un agent pour le maître et l'esclave Redis, et le côté Web fournit des services via VIP. Lors du déploiement maître-esclave Redis, vous devez lier l'adresse IP virtuelle au nœud maître Redis actuel. Lorsque le nœud maître échoue, comme une panne de machine, une panne de nœud Redis ou une inaccessibilité du réseau, le cluster Sentinel appellera le script configuré par client-reconfig-script pour faire flotter le VIP vers le nouveau nœud maître.

Avantages :

  • Commutation de deuxième niveau, effectuez toute l'opération de commutation en 5 secondes
  • Personnalisation du script et architecture contrôlable
  • Transparent à l'application, le front-end n'a pas à se soucier des changements dans le back-end

Inconvénients :

  • Le coût de maintenance est légèrement élevé. Il est recommandé d'investir dans plus de 3 machines pour le cluster Redis Sentinel
  • L'utilisation de VIP augmente les coûts de maintenance et risque le chaos IP
  • Le service en mode Sentinelle sera indisponible pendant une courte période
3.3 Encapsuler le client pour se connecter directement au port Redis Sentinel

Pratique de haute disponibilité Redis

部分业务只能通过外网访问 Redis,上述两种方案均不可用,于是衍生出了这种方案。Web 使用客户端连接其中一台 Redis Sentinel 集群中的一台机器的某个端口,然后通过这个端口获取到当前的主节点,然后再连接到真实的 Redis 主节点进行相应的业务员操作。需要注意的是,Redis Sentinel 端口和 Redis 主节点均需要开放访问权限。如果前端业务使用 Java,有 JedisSentinelPool 可以复用;如果前端业务使用 PHP,可以在 phpredis 的基础上做二次封装。

优点:

  • 服务探测故障及时
  • DBA 维护成本低

缺点:

  • 依赖客户端支持 Sentinel
  • Sentinel 服务器和 Redis 节点需要开放访问权限
  • 对应用有侵入性
3.4 Redis Sentinel 集群 + Keepalived/Haproxy

Pratique de haute disponibilité Redis

底层是 Redis Sentinel 集群,代理着 Redis 主从,Web 端通过 VIP 提供服务。当主节点发生故障,比如机器故障、Redis 节点故障或者网络不可达,Redis 之间的切换通过 Redis Sentinel 内部机制保障,VIP 切换通过 Keepalived 保障。

优点:

  • 秒级切换
  • 对应用透明

缺点:

  • 维护成本高
  • 存在脑裂
  • Sentinel 模式存在短时间的服务不可用
3.5 Redis M/S + Keepalived

Pratique de haute disponibilité Redis

此方案没有使用到 Redis Sentinel。此方案使用了原生的主从和 Keepalived,VIP 切换通过 Keepalived 保障,Redis 主从之间的切换需要自定义脚本实现。

优点:

  • 秒级切换
  • 对应用透明
  • 部署简单,维护成本低

缺点:

  • 需要脚本实现切换功能
  • 存在脑裂
3.6 Redis Cluster

Pratique de haute disponibilité Redis

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

Redis 3.0.0 在 2015 年 4 月 2 日正式发布,距今已有两年多的时间。Redis 集群采用 P2P 模式,无中心化。把 key 分成 16384 个 slot,每个实例负责一部分 slot。客户端请求对应的数据,若该实例 slot 没有对应的数据,该实例会转发给对应的实例。另外,Redis 集群通过 Gossip 协议同步节点信息。

优点:

  • 组件 all-in-box,部署简单,节约机器资源
  • 性能比 proxy 模式好
  • 自动故障转移、Slot 迁移中数据可用
  • 官方原生集群方案,更新与支持有保障

缺点:

  • 架构比较新,最佳实践较少
  • 多键操作支持有限(驱动可以曲线救国)
  • 为了性能提升,客户端需要缓存路由表信息
  • 节点发现、reshard 操作不够自动化
3.7 Twemproxy

Pratique de haute disponibilité 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

Pratique de haute disponibilité 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 のレプリケーション、Sentinel の構築と原理の説明。http://www.cnblogs.com/zhoujinyi/p/5570024.html から取得。

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn