Saya memiliki 6 node Redis cluster yang aktif dan berjalan dengan, seperti yang Anda harapkan, 3 slave dan 3 master.
Dari sudut pandang server Redis semuanya tampak keren, dan saya dapat memanggil cluster failover atau debug segfault di server dan budak yang sesuai menjadi master.

Dari sisi .net, saya telah mengikuti dokumentasi StackExchange Redis, jadi saya memiliki IConnectionMultiplexer statis, dari mana saya mendapatkan IDatabase, dan dari sana saya dapat menyimpan dan mengambil nilai.

Saya menggunakan string koneksi seperti: srv1:7001,srv2:7001,srv3:7001,srv1:7002,srv2:7002,srv3:7002

Sejauh ini bagus.

Namun, saya mencoba mencari cara untuk menangani kegagalan master di cluster saat menggunakan multiplexer koneksi. Saat ini, yang terbaik yang bisa saya lakukan adalah menangkap pengecualian, membuang multiplexer koneksi saat ini dan membuat yang baru, yang terasa agak menjijikkan.

Mengingat bahwa saya memberi tahu multiplexer semua titik akhir potensial ketika saya terhubung, saya mengharapkannya untuk mengawasi hal seperti ini dan mulai berbicara dengan master baru secara otomatis. Beberapa dokumentasi menyinggung hal ini juga pepatah:

Demikian juga, ketika konfigurasi diubah (terutama konfigurasi master/slave), penting bagi instans yang terhubung untuk membuat diri mereka mengetahui situasi baru (melalui INFO, CONFIG, dll - jika tersedia). StackExchange.Redis melakukan ini secara otomatis...

Jika saya mematikan srv1:7001 dan tidak melakukan apa-apa, maka koneksi tidak akan pernah pulih, dan setiap panggilan untuk menetapkan nilai baru memunculkan RedisConnectionException.

Saya telah mencoba melampirkan ke acara ConfigurationChanged, ConfigurationChangedBroadcast, ConnectionFailed dan berlangganan berbagai saluran dengan harapan melihat siaran saat master turun. Tak satu pun dari ini tampaknya memicu jika saya menyebabkan master berubah di cluster.

Jadi saya bertanya-tanya apakah ada sesuatu yang saya lewatkan sehubungan dengan ini?

Salam,
Craig.

1
Craig H 24 Oktober 2017, 17:41

1 menjawab

Jawaban Terbaik

Setelah beberapa bermain-main, saya perhatikan bahwa multiplexer akhirnya mengkonfigurasi ulang dirinya sendiri. Awalnya saya memperhatikan ini ketika saya dihentikan dalam mode debug memeriksa sesuatu, dan ketika saya melanjutkan, itu tiba-tiba mulai bekerja lagi.

Jika saya menetapkan configCheckSeconds=1 dalam string koneksi, daripada default 60, konfigurasi ulang berlangsung lebih cepat jadi saya berasumsi ini adalah pelakunya.

Saya tidak yakin berapa banyak overhead yang mengubah pengaturan ini secara dramatis. Saya kira dalam penggunaan umum, node cluster yang gagal mungkin agak tidak mungkin dan karenanya tidak perlu sering-sering mengkonfigurasi ulang. Saya baru saja membuat skenario ekstrem dengan pengujian.

0
Craig H 25 Oktober 2017, 13:06