Redis の高可用性の実践

WBOY
WBOYオリジナル
2024-08-20 16:51:041227ブラウズ
0×01 Kata Pengantar

Redis ialah pangkalan data Nilai Kunci jenis log sumber terbuka yang ditulis dalam bahasa ANSI C, menyokong rangkaian, boleh berasaskan memori dan berterusan serta menyediakan API dalam berbilang bahasa.

Kini, data perniagaan Internet berkembang pada kadar yang lebih pantas, dan jenis data menjadi semakin banyak, yang mengemukakan keperluan yang lebih tinggi untuk kelajuan dan keupayaan pemprosesan data. Redis ialah pangkalan data bukan perkaitan dalam ingatan sumber terbuka yang membawa pengalaman yang mengganggu kepada pembangun. Direka dari awal hingga akhir dengan mengambil kira prestasi tinggi, Redis ialah pangkalan data NoSQL terpantas yang tersedia hari ini.

Semasa mempertimbangkan prestasi tinggi, ketersediaan tinggi juga merupakan pertimbangan yang sangat penting. Internet menyediakan perkhidmatan tanpa gangguan 7×24 dan Failover pada kelajuan terpantas semasa kegagalan, yang boleh membawa kerugian minimum kepada perusahaan.

Jadi, apakah seni bina ketersediaan tinggi yang terdapat dalam aplikasi praktikal? Apakah kebaikan dan keburukan antara seni bina? Bagaimana kita harus memilih? Apakah beberapa amalan terbaik?

0×02 Prinsip Sentinel

Sebelum menerangkan penyelesaian ketersediaan tinggi Redis, mari kita lihat terlebih dahulu prinsip Redis Sentinel.

  1. Sentinel cluster menemui induk melalui fail konfigurasi yang diberikan dan memantau induk apabila ia bermula. Dapatkan semua pelayan hamba di bawah pelayan ini dengan menghantar maklumat maklumat kepada tuan.
  2. Kluster Sentinel menghantar maklumat helo (sekali sesaat) kepada pelayan induk dan hamba yang dipantau melalui sambungan arahan Maklumat ini termasuk IP, port, id, dll. Sentinel sendiri, untuk mengumumkan kewujudannya kepada Sentinel lain.
  3. Kluster Sentinel menerima maklumat helo yang dihantar oleh Sentinel lain melalui sambungan langganan untuk menemui Sentinel lain yang memantau pelayan induk yang sama; kluster akan membuat sambungan arahan antara satu sama lain untuk komunikasi, kerana sudah ada pelayan tuan-hamba sebagai penghantar No sambungan langganan akan dibuat antara Sentinel dan perantara yang menerima maklumat helo.
  4. Kluster Sentinel menggunakan perintah ping untuk mengesan status tika itu Jika tiada balasan dalam masa yang ditentukan (selepas milisaat) atau balasan yang salah dikembalikan, tika itu dinilai sebagai di luar talian.
  5. Apabila suis failover aktif/siap sedia dicetuskan, failover tidak akan meneruskan serta-merta dapatkan kebenaran kuorum Sentinels yang ditetapkan , masukkan keadaan ODOWN selepas berjaya. Sebagai contoh, jika 2 korum dikonfigurasikan antara 5 Penjaga, failover akan dilaksanakan apabila 2 Penjaga menganggap bahawa tuan sudah mati.
  6. Sentinel menghantar arahan SLAVEOF NO ONE kepada hamba yang dipilih sebagai tuan. Jika keutamaan adalah sama, semak subskrip replikasi, mana-mana yang menerima lebih banyak data replikasi daripada induk akan diletakkan pada kedudukan pertama. Jika keutamaan dan indeks adalah sama, yang mempunyai ID proses yang lebih kecil akan dipilih.
  7. Selepas Sentinel dibenarkan, ia akan memperoleh nombor versi konfigurasi terkini (zaman konfigurasi) induk yang gagal Apabila pelaksanaan failover selesai, nombor versi ini akan digunakan untuk konfigurasi terkini melalui siaran Beritahu Sentinel lain dalam. borang, dan Sentinel lain mengemas kini konfigurasi induk yang sepadan.

1 hingga 3 ialah mekanisme penemuan automatik:

  • Hantar arahan info kepada induk yang dipantau setiap 10 saat dan dapatkan maklumat induk semasa berdasarkan balasan.
  • Hantar arahan PING ke semua pelayan redis, termasuk Sentinel, pada kekerapan 1 saat dan tentukan sama ada pelayan berada dalam talian melalui balasan.
  • Hantar mesej maklumat induk Sentinel semasa kepada semua pelayan induk dan hamba yang dipantau pada kekerapan 2 saat.

4 ialah mekanisme pengesanan, 5 dan 6 ialah mekanisme failover, dan 7 ialah mekanisme konfigurasi kemas kini. [1]

0×03 Redis High Availability Architecture

After explaining the principle of Redis Sentinel, let’s explain the commonly used Redis high-availability architecture.

  • Redis Sentinel cluster + intranet DNS + custom script
  • Redis Sentinel Cluster + VIP + Custom Script
  • Encapsulate the client to directly connect to the Redis Sentinel port
    • JedisSentinelPool, suitable for Java
    • PHP is self-packaged based on phpredis
  • Redis Sentinel Cluster + Keepalived/Haproxy
  • Redis M/S + Keepalived
  • Redis Cluster
  • Twemproxy
  • Codis

The following will be explained one by one with pictures and text.

3.1 Redis Sentinel Cluster + Intranet DNS + Custom Script

Redis の高可用性の実践

The picture above is a solution that has been applied in an online environment. The bottom layer is the Redis Sentinel cluster, which acts as an agent for the Redis master and slave. The Web side connects to the intranet DNS to provide services. Intranet DNS is allocated according to certain rules, such as xxxx.redis.cache/queue.port.xxx.xxx. The first segment indicates the business abbreviation, the second segment indicates that this is the Redis intranet domain name, and the third segment Represents the Redis type, cache represents the cache, queue represents the queue, the fourth segment represents the Redis port, and the fifth and sixth segments represent the main domain name of the intranet.

When the master node fails, such as machine failure, Redis node failure, or network unreachability, the Sentinel cluster will call the client-reconfig-script configured script to modify the intranet domain name of the corresponding port. The intranet domain name of the corresponding port points to the new Redis master node.

Advantages:

  • Second-level switching, complete the entire switching operation within 10s
  • Script customization and controllable architecture
  • Transparent to the application, the front end does not have to worry about changes in the back end

Disadvantages:

  • The maintenance cost is slightly high. It is recommended to invest in more than 3 machines for the Redis Sentinel cluster
  • Depends on DNS, there is resolution delay
  • Sentinel mode service will be unavailable for a short period of time
  • This solution cannot be used if the service is accessed through the external network
3.2 Redis Sentinel Cluster + VIP + Custom Script

Redis の高可用性の実践

This plan is slightly different from the previous one. The first solution uses the intranet DNS, and the second solution replaces the intranet DNS with a virtual IP. The bottom layer is the Redis Sentinel cluster, which acts as an agent for Redis master and slave, and the Web side provides services through VIP. When deploying Redis master-slave, you need to bind the virtual IP to the current Redis master node. When the master node fails, such as machine failure, Redis node failure, or network unreachability, the Sentinel cluster will call the script configured by client-reconfig-script to float the VIP to the new master node.

Advantages:

  • Second-level switching, complete the entire switching operation within 5s
  • Script customization and controllable architecture
  • Transparent to the application, the front end does not have to worry about changes in the back end

Disadvantages:

  • The maintenance cost is slightly high. It is recommended to invest in more than 3 machines for the Redis Sentinel cluster
  • Using VIP increases maintenance costs and risks IP chaos
  • Sentinel mode service will be unavailable for a short period of time
3.3 Encapsulate the client to directly connect to the Redis Sentinel port

Redis の高可用性の実践

一部の企業は外部ネットワーク経由でのみ Redis にアクセスできるため、上記の 2 つのソリューションのどちらも利用できないため、このソリューションが派生しました。 Web は、クライアントを使用して Redis Sentinel クラスターのいずれかにあるマシンの特定のポートに接続し、このポートを通じて現在のマスター ノードを取得し、実際の Redis マスター ノードに接続して、対応するセールスマン操作を実行します。 Redis Sentinel ポートと Redis マスター ノードの両方にオープン アクセスが必要であることに注意することが重要です。フロントエンド ビジネスが Java を使用している場合は、JedisSentinelPool を再利用できます。フロントエンド ビジネスが PHP を使用している場合は、phpredis に基づいて二次カプセル化を実行できます。

利点:

  • 時間内にサービス検出に失敗する
  • DBA の低メンテナンスコスト

デメリット:

  • クライアントのサポート Sentinel によって異なります
  • Sentinel サーバーと Redis ノードにはオープン アクセスが必要です
  • アプリケーションへの侵入
3.4 Redis Sentinel クラスター + Keepalived/Haproxy

Redis の高可用性の実践

最下層は Redis Sentinel クラスターで、Redis マスターとスレーブのエージェントとして機能し、Web 側は VIP を通じてサービスを提供します。マシン障害、Redis ノード障害、ネットワーク到達不能など、マスター ノードに障害が発生した場合、Redis 間の切り替えは Redis Sentinel の内部メカニズムによって保証され、VIP 切り替えは Keepalived によって保証されます。

利点:

  • 2回目の切り替え
  • アプリケーションに対して透過的

デメリット:

  • 維持費が高い
  • スプリットブレインがある
  • センチネル モード サービスはしばらくの間利用できなくなります
3.5 Redis M/S + Keepalived

Redis の高可用性の実践

このソリューションは Redis Sentinel を使用しません。このソリューションでは、ネイティブのマスター/スレーブと Keepalived を使用し、Redis のマスター/スレーブ間の切り替えにはカスタム スクリプトが必要です。

利点:

  • 第二レベル切り替え
  • アプリケーションに対して透過的
  • シンプルな導入と低いメンテナンスコスト

デメリット:

  • 切り替え機能を実装するにはスクリプトが必要
  • スプリットブレインがある
3.6 Redis クラスター

Redis の高可用性の実践

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

Redis 3.0.0 は、2 年以上前の 2015 年 4 月 2 日に正式にリリースされました。 Redis クラスターは P2P モードを採用しており、非集中型です。キーを 16384 個のスロットに分割し、各インスタンスがスロットの一部を担当します。クライアントが対応するデータを要求した場合、インスタンス スロットに対応するデータが存在しない場合、インスタンスは対応するインスタンスに転送されます。さらに、Redis クラスターは、Gossip プロトコルを通じてノード情報を同期します。

利点:

  • コンポーネントはオールインボックスで、展開が簡単で、マシン リソースを節約できます
  • プロキシ モードよりもパフォーマンスが優れています
  • 自動フェイルオーバー、スロット移行中にデータが利用可能
  • 公式のネイティブ クラスター ソリューション、アップデートとサポートが保証されています

デメリット:

  • アーキテクチャは比較的新しく、ベストプラクティスはほとんどありません
  • 限定的なマルチキー操作サポート(ドライバーは国を救うことができる)
  • パフォーマンスを向上させるために、クライアントはルーティング テーブル情報をキャッシュする必要があります
  • ノード検出とリシャード操作は十分に自動化されていません
3.7 Twemproxy

Redis の高可用性の実践

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

Multiple isomorphic Twemproxy (same configuration) works at the same time, accepts client requests, and forwards them to the corresponding Redis according to the hash algorithm.

Twemproxy solution is relatively mature. Our team has used this solution for a long time, but the effect is not very satisfactory. On the one hand, the positioning problem is more difficult, and on the other hand, its support for automatically eliminating nodes is not very friendly.

Advantages:

  • Easy to develop and almost transparent to the application
  • Long history and mature solutions

Disadvantages:

  • Proxy affects performance
  • LVS and Twemproxy will have node performance bottlenecks
  • Redis expansion is very troublesome
  • Twitter has abandoned the use of this solution internally, and the new architecture is not open source
3.8 Codis

Redis の高可用性の実践

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

Codis is an open source product by Wandoujia and involves many components. Among them, ZooKeeper stores routing tables and proxy node metadata, and distributes Codis-Config commands; Codis-Config is an integrated management tool with a Web interface for use; Codis-Proxy is A stateless proxy compatible with the Redis protocol; Codis-Redis is a secondary development based on Redis 2.8 version, adding slot support to facilitate data migration.

Advantages:

  • Easy to develop and almost transparent to the application
  • Performance is better than Twemproxy
  • Has a graphical interface, easy expansion, and convenient operation and maintenance

Disadvantages:

  • Proxy still affects performance
  • Too many components, requiring a lot of machine resources
  • The Redis code has been modified, resulting in the inability to synchronize with the official, and the follow-up of new features is slow
  • The development team is preparing to promote reborndb based on Redis transformation
0×04 Best Practices

The so-called best practices are practices that are most suitable for specific scenarios.

We mainly recommend the following plans:

  • Redis Sentinel cluster + intranet DNS + custom script
  • Redis Sentinel Cluster + VIP + Custom Script

The following are the best practices summarized during actual combat:

  • Redis Sentinel cluster is recommended to use >= 5 machines
  • Different large businesses can use a Redis Sentinel cluster to proxy all ports under the business
  • Divide the Redis port range according to different businesses
  • Custom scripts are recommended to be implemented in Python for easy expansion
  • Custom scripts need to pay attention to determine the current Sentinel role
  • Pass in the parameters of the custom script:
  • Custom scripts require remote ssh to operate the machine. It is recommended to use the paramiko library to avoid repeatedly establishing SSH connections and consuming time
  • To accelerate SSH connection, it is recommended to turn off the following two parameters
    • UseDNS no
    • GSSAPIAuthentication no
  • If you receive an alert via WeChat or email, it is recommended to fork a process to avoid blocking the main process
  • Automatic switching and failover, it is recommended that all operations be completed within 15s
0×05 Summary

This event shared the necessity of Redis high availability, the Sentinel principle, the common architecture of Redis high availability and the best practices summarized in the actual combat process. I hope it will be helpful to readers. If you need follow-up communication, you can add me WeChat (Wentasy), or send an email to: dbarobinwen@gmail.com

Attached PPT download: https://github.com/dbarobin/slides

Video Playback: Best Practices for Redis High Availability Architecture

0×06 Thanks

Thank you to Tingyun and Operation and Maintenance Gang for their careful organization, and thank you to everyone who came to participate in this event despite the heavy rain. This sharing was videotaped by the IT guru, and I would like to thank the IT guru for his technical support.

0×07 Reference

[1] jyzhou (2016-06-12). Redis replication, Sentinel construction and principle explanation. Retrieved from http://www.cnblogs.com/zhoujinyi/p/5570024.html.

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

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