Rumah  >  Artikel  >  pangkalan data  >  Apakah prinsip failover Sentinel dalam Redis?

Apakah prinsip failover Sentinel dalam Redis?

王林
王林ke hadapan
2023-05-27 10:55:171213semak imbas

Apakah itu Sentinel?

Sentinel ialah penyelesaian ketersediaan tinggi untuk redis Replikasi tuan-hamba yang kita bincangkan sebelum ini adalah asas ketersediaan tinggi, tetapi replikasi tuan-hamba tulen memerlukan campur tangan manual untuk menyelesaikannya. . Failover, Sentinel boleh menyelesaikan masalah ini Dalam kes replikasi tuan-hamba, apabila nod induk gagal, Sentinel boleh mengesan kegagalan secara automatik dan melengkapkan failover, mencapai ketersediaan tinggi redis. Dalam kelompok sentinel, sentinel akan memantau status semua pelayan redis dan nod sentinel lain, mengesan kegagalan dalam masa dan pemindahan lengkap, dengan itu memastikan ketersediaan redis yang tinggi.

Membina Kluster Sentinel

Walaupun Sentinel pada asasnya adalah perkhidmatan Redis, ia menyediakan fungsi yang berbeza daripada perkhidmatan Redis biasa. Sentinel ialah seni bina yang diedarkan, kerana jika anda ingin memastikan ketersediaan redis yang tinggi, anda perlu memastikan ketersediaan tinggi anda sendiri terlebih dahulu, jadi jika kita perlu membina sentinel, kita perlu menggunakan sekurang-kurangnya tiga kejadian, sebaik-baiknya nombor ganjil , kerana dalam failover seterusnya Akan ada pengundian yang terlibat.

Kami boleh memuat turun fail konfigurasi sentinel di bawah projek GitHub redis Terdapat fail yang dipanggil sentinel.conf di bawah projek Anda boleh menggunakannya sebagai templat konfigurasi sentinel kami, anda juga boleh menggunakan redis. conf Fail konfigurasi, cuma tambah konfigurasi berkaitan sentinel.

Tidak banyak item konfigurasi yang berkaitan dengan Sentinel, terutamanya terdapat item konfigurasi berikut:

// 端口号,默认是 redis 实例+20000,所以我们沿用这个规则就好了 port 26379  // 是否守护进程运行 daemonize yes // 日志存放的位置,这个非常重要,通过日志可以查看故障转移的过程 logfile "26379.log"  // 监视一个名为 mymaster(自定义) 的 redis 主服务器, 这个主服务器的 IP 地址为 127.0.0.1 , 端口号为 6379 , // 最后面的 2 代表着至少有两个哨兵认为主服务器出现故障才会进行故障转移,否则认定主服务未失效 sentinel monitor mymaster 127.0.0.1 6379 2  // 哨兵判断服务器失效的响应时间,超过这个时间未接收到服务器的回应,就认为该服务器失效了 sentinel down-after-milliseconds mymaster 30000  // 完成故障转移之后,最多多少个从服务器可以同时发起数据复制,数字越小,说明完成全部从服务数据复制的时间越长 // 数字越大,对主服务器的压力就变大了 sentinel parallel-syncs mymaster 1  // 故障转移超时时间 sentinel failover-timeout mymaster 180000

Kecuali konfigurasi port dan fail log yang berbeza untuk setiap contoh Sentinel, item konfigurasi lain adalah sama. . Selepas mengubah suai konfigurasi, kita boleh menggunakan perintah ./redis-sentinel sentinel.conf untuk memulakan sentinel Perintah itu serupa dengan permulaan instance redis Kerana sentinel juga merupakan instance redis, kita boleh menggunakan ./redis-. cli -p 26379 info arahan sentinel untuk melihatnya Maklumat sentinel semasa adalah seperti yang ditunjukkan di bawah:

Apakah prinsip failover Sentinel dalam Redis?

Maklumat sentinel

Soalan: Bagaimana untuk menemui hamba. pelayan dan pelayan lain apabila hanya pelayan induk dikonfigurasikan Sentinel ?

Penemuan pelayan hamba, Sentinel boleh mendapatkan maklumat pelayan hamba dengan meminta pelayan induk Untuk penemuan nod Sentinel lain, ia dilaksanakan melalui penerbitan dan langgan fungsi, dan dicapai dengan menghantar maklumat ke saluran sentinel:hello Terdapat dua langkah utama:

1 Setiap Sentinel akan menghantar mesej kepada saluran sentinel:hello semua perkhidmatan induk dan pelayan hamba setiap 2 saat. melalui fungsi terbitkan dan langgan. Mesej mengandungi alamat IP Sentinel, nombor port dan ID berjalan (runid)

2 Setiap Sentinel melanggan saluran sentinel:hello semua pelayan induk dan pelayan hamba yang dipantau olehnya. dan mencari pengawal yang belum muncul sebelum ini (mencari pengawal yang tidak diketahui). Apabila Sentinel menemui Sentinel baharu, ia menambahkan Sentinel baharu pada senarai yang menyimpan semua Sentinel lain yang diketahui Sentinel dan memantau pelayan induk yang sama

Prinsip failover Sentinel

Failover ialah yang utama kerja Sentinel. Logik pelaksanaan di belakangnya juga sangat rumit Sila semak buku yang berkaitan untuk logik pelaksanaan khusus Saya telah meringkaskan tiga perkara berikut tentang kegagalan Sentinel:

1 🎜>

Setiap nod Sentinel menghantar arahan ping ke nod induk, nod hamba dan nod Sentinel lain setiap 1 saat untuk pengesanan degupan jantung bagi menentukan status pelayan. Nod

juga akan bertindak balas dengan sewajarnya kepada Sentinel Antara balasan ini, tiga balasan berikut adalah balasan yang sah:

  • Pulangan +PONG

  • PULANGAN-MEMUAT
  • RETURN-MASTERDOWN
  • Jika nod berada dalam tetapan induk-turun-selepas Sentinel fail konfigurasi Dalam nilai pilihan milisaat, tiada balasan yang sah, maka Sentinel akan menandai pelayan sebagai luar talian Kami memanggilnya di luar talian sebagai luar talian subjektif, yang bermaksud hanya pengawal ini yang menganggap pelayan itu di luar talian.

Jika pelayan yang secara subjektif di luar talian adalah pelayan utama, untuk mengesahkan sama ada pelayan utama benar-benar luar talian, Sentinel akan meminta Sentinel lain yang juga memantau pelayan utama untuk melihat sama ada mereka juga berpendapat bahawa Pelayan utama memasuki keadaan luar talian Apabila cukup Sentinel percaya bahawa pelayan utama berada di luar talian, Sentinel akan menilai pelayan utama secara objektif Ini benar-benar luar talian, dan akan melakukan operasi failover padanya.

2. Pilih nod Sentinel untuk menyelesaikan tugas pemindahan

Failover tidak diselesaikan oleh semua sentinel bersama-sama, tetapi dengan memilih nod sentinel sebagai ketua untuk menyelesaikan ini. , apabila pelayan utama ditandakan sebagai luar talian secara objektif, pengawal akan memilih ketua melalui algoritma Raft untuk menyelesaikan kerja failover. Peraturan dan kaedah amnya adalah seperti berikut.

  • Apabila sentinel menandakan pelayan induk sebagai luar talian secara subjektif, ia akan menghantar arahan sentinel is-master-down-by-addr ke nod Sentinel lain, meminta untuk menetapkan dirinya sebagai ketua

  • Nod Sentinel yang menerima perintah itu mengguna pakai peraturan diutamakan dilayan jika ia tidak bersetuju dengan perintah sentinel is-master-down-by-addr nod Sentinel lain, ia. akan bersetuju dengan permintaan itu, jika tidak, ia akan ditolak

  • Jika nod Sentinel mendapati ia mempunyai lebih daripada separuh undi, ia akan menjadi ketua

  • Jika tiada pemimpin dipilih dalam masa yang ditetapkan ketua pengawal, maka ia akan dipilih semula selepas satu tempoh masa sehingga ketua pengawal dipilih.

  • 3 Pilih pelayan induk baharu untuk melengkapkan failover

    Ketua sentinel yang dipilih akan menyelesaikan kerja failover dan failover yang tinggal Terdapat terutamanya tiga langkah:

    (1) Pilih pelayan induk baharu

    Pilih hamba di antara semua pelayan hamba pelayan induk luar talian dan tukarkannya kepada induk pelayan. atau balasan terakhir kepada arahan PING melebihi lima saat akan dihapuskan

    • Antara pelayan hamba di bawah pelayan induk yang gagal, mereka yang mempunyai pelayan induk yang gagal Pelayan hamba yang sambungannya terputus sambungan selama lebih daripada sepuluh kali masa yang ditentukan oleh pilihan selepas turun akan dihapuskan

    • Selepas dua pusingan penyingkiran di atas, pelayan hamba yang tinggal akan dipilih dengan mengimbangi replikasi terbesar menjadi pelayan induk baharu; jika mengimbangi replikasi tidak tersedia, atau mengimbangi replikasi pelayan hamba adalah sama, maka pelayan hamba dengan ID berjalan terkecil menjadi pelayan induk baharu

    • melaksanakan perintah slaveof no one pada pelayan slave yang dipilih untuk menjadikannya nod induk.

    (2) Ubah suai sasaran replikasi pelayan hamba lain

    Apabila pelayan induk baharu muncul, langkah seterusnya yang perlu dilakukan oleh ketua pengawal ialah membiarkan hamba lain pelayan Pelayan mereplikasi pelayan induk baharu dengan menghantar arahan port slaveof new_master kepada pelayan hamba lain Peraturan replikasi berkaitan dengan parameter penyegerakan selari bagi fail konfigurasi

    (3) Tukar yang lama. pelayan induk kepada Sebagai pelayan hamba

    Perkara terakhir yang perlu dilakukan dalam operasi failover ialah menetapkan pelayan induk luar talian sebagai pelayan hamba perkhidmatan induk baharu, perhatikannya dan perintah ia untuk pergi selepas ia pulih.

    Atas ialah kandungan terperinci Apakah prinsip failover Sentinel dalam Redis?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

    Kenyataan:
    Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam