Redis Sentinel adalah rekomendasi resmi untuk menjalankan konfigurasi Redis yang sangat tersedia dengan menjalankan sejumlah proses redis sentinel tambahan untuk secara aktif memantau instance master dan slave redis yang ada untuk memastikan masing-masing berfungsi seperti yang diharapkan. Jika berdasarkan konsensus ditentukan bahwa master tidak lagi tersedia, maka secara otomatis akan melakukan failover dan mempromosikan salah satu budak yang direplikasi sebagai master baru. Penjaga juga memelihara daftar otoritatif dari instans redis yang tersedia yang menyediakan repositori pusat bagi klien untuk menemukan instans yang tersedia yang dapat mereka hubungkan.
Dukungan untuk Redis Sentinel tersedia dengan RedisSentinel
class yang mendengarkan Sentinel yang tersedia untuk mencari sumber dari daftar master, slave, dan instans redis sentinel lainnya yang tersedia yang digunakannya untuk mengonfigurasi dan memelihara Redis Client Managers, memulai semua failover seperti yang dilaporkan.
Penggunaan #
Untuk menggunakan dukungan Sentinel yang baru, alih-alih mengisi Redis Client Managers dengan string koneksi instans master dan slave, Anda akan membuat satu RedisSentinel
instance yang dikonfigurasi dengan string koneksi dari Redis Sentinels yang sedang berjalan:
var sentinelHosts = new[]{ "sentinel1", "sentinel2:6390", "sentinel3" };
var sentinel = new RedisSentinel(sentinelHosts, masterName: "mymaster");
Ini menunjukkan contoh khas untuk mengonfigurasi RedisSentinel
yang mereferensikan 3 host penjaga (yaitu jumlah minimum untuk pengaturan yang sangat tersedia yang dapat bertahan dari kegagalan node apa pun). Itu juga dikonfigurasi untuk melihat mymaster
set konfigurasi (grup master default).
INFORMASI
Redis Sentinel dapat memantau lebih dari 1 grup master / slave, masing-masing dengan nama grup master yang berbeda.
Port default untuk penjaga adalah 26379 (bila tidak ditentukan) dan karena RedisSentinel dapat menemukan penjaga lain secara otomatis, konfigurasi minimum yang diperlukan hanyalah:
var sentinel = new RedisSentinel("sentinel1");
INFORMASI
Pemindaian dan penemuan otomatis Sentinel lain dapat dinonaktifkan dengan ScanForOtherSentinels=false
Mulai memantau Penjaga #
Setelah dikonfigurasi, Anda dapat mulai memantau server Redis Sentinel dan mengakses manajer klien yang telah dikonfigurasi sebelumnya dengan:
IRedisClientsManager redisManager = sentinel.Start();
Yang seperti sebelumnya, dapat didaftarkan di IOC pilihan Anda sebagai lajang contoh:
container.Register<IRedisClientsManager>(c => sentinel.Start());
Konfigurasi Sentinel Lanjutan #
RedisSentinel secara default mengelola PooledRedisClientManager
configured yang dikonfigurasi instance yang menyelesaikan kedua klien master Redis untuk membaca/menulis GetClient()
dan budak untuk hanya baca GetReadOnlyClient()
API.
Ini dapat diubah untuk menggunakan RedisManagerPool
yang lebih baru dengan:
sentinel.RedisManagerFactory = (master,slaves) => new RedisManagerPool(master);
String Koneksi Redis Kustom #
Host yang dikonfigurasi dengan RedisSentinel hanya berlaku untuk Host Sentinel itu, Anda masih dapat menggunakan fleksibilitas Redis Connection Strings untuk mengonfigurasi masing-masing Klien Redis dengan menentukan HostFilter
khusus :
sentinel.HostFilter = host => "{0}?db=1&RetryTimeout=5000".Fmt(host);
Ini akan mengembalikan klien yang dikonfigurasi untuk menggunakan Database 1 dan Batas Waktu Coba Ulang 5 detik (digunakan dalam fitur Coba Ulang Otomatis yang baru).
Konfigurasi RedisSentinel Lainnya #
Sementara di atas mencakup konfigurasi Sentinel populer yang biasanya digunakan, hampir setiap aspek RedisSentinel
perilaku dapat disesuaikan dengan konfigurasi di bawah ini:
OnSentinelMessageReceived | Dipecat saat pekerja Sentinel menerima pesan dari Langganan Sentinel |
OnFailover | Dipecat ketika Sentinel gagal melalui Redis Client Manager ke master baru |
OnWorkerError | Diaktifkan saat koneksi Redis Sentinel Worker gagal |
IpAddressMap | Petakan IP host redis internal yang dikembalikan oleh Sentinel ke IP eksternalnya |
ScanForOtherSentinels | Apakah akan memindai host penjaga lain secara rutin (default benar) |
RefreshSentinelHostsAfter | Berapa interval untuk memindai host penjaga lainnya (default 10 menit) |
TungguBetweenFailedHosts | Berapa lama menunggu setelah gagal sebelum terhubung ke instance redis berikutnya (default 250ms) |
MaxWaitBetweenFailedHosts | Berapa lama untuk mencoba menyambung kembali ke host sebelum melempar (default 60-an) |
TungguSebelumForcingMasterFailover | Berapa lama setelah upaya gagal berturut-turut untuk memaksa failover (default 60-an) |
Setel Ulang Saat Secara Subjektif Turun | Setel ulang klien ketika Sentinel melaporkan redis secara subjektif (default benar) |
Reset WhenObjectivelyDown | Setel ulang klien saat Sentinel melaporkan redis secara objektif (default benar) |
SentinelWorkerConnectTimeoutMs | Waktu Koneksi Maksimum untuk Pekerja Sentinel (default 100 md) |
SentinelWorkerSendTimeoutMs | Maks. Waktu Kirim Socket TCP untuk Pekerja Sentinel (default 100ms) |
SentinelWorkerReceiveTimeoutMs | Maks. TCP Socket Menerima waktu untuk Sentinel Worker (default 100ms) |
Konfigurasi Server Redis Sentinel #
Proyek konfigurasi redis menyederhanakan pengaturan dan menjalankan konfigurasi Redis Sentinel multi-simpul yang sangat tersedia termasuk skrip start/stop untuk secara instan menyiapkan konfigurasi Redis Sentinel minimal yang sangat tersedia pada satu (atau beberapa) server Windows, OSX atau Linux. Konfigurasi server tunggal/multi-proses ini ideal untuk menyiapkan konfigurasi penjaga yang berfungsi pada stasiun kerja pengembang tunggal atau server jarak jauh.
Repositori redis-config juga menyertakan binari redis MS OpenTech Windows dan tidak memerlukan instalasi perangkat lunak apa pun.
Penggunaan Windows #
Untuk menjalankan konfigurasi Sentinel yang disertakan, klon repo redis-config di server tempat Anda ingin menjalankannya:
git clone https://github.com/ServiceStack/redis-config.git
Kemudian Mulai 1x Master, 2x Slave, dan 3x Sentinel redis-server dengan:
cd redis-config\sentinel3\windows
start-all.cmd
Instance yang mulai dimatikan:
stop-all.cmd
Jika Anda menjalankan proses redis secara lokal di dev workstation Anda, konfigurasi minimal untuk terhubung ke instance yang sedang berjalan adalah:
var sentinel = new RedisSentinel("127.0.0.1:26380");
container.Register(c => sentinel.Start());
Localhost vs IP Jaringan #
Konfigurasi sentinel mengasumsikan semua instance redis berjalan secara lokal di 127.0.0.1 . Jika Anda menjalankannya di server jauh yang Anda ingin semua pengembang di jaringan Anda dapat mengaksesnya, Anda harus mengubah Alamat IP di *.conf
file untuk menggunakan server IP Jaringan. Jika tidak, Anda dapat meninggalkan default dan menggunakan RedisSentinel
Fitur IP Address Map untuk memetakan IP localhost secara transparan ke IP Jaringan yang dapat disambungkan oleh setiap pc di jaringan Anda.
Misalnya. jika ini berjalan di server jauh dengan 10.0.0.9 IP jaringan, dapat dikonfigurasi dengan:
var sentinel = new RedisSentinel("10.0.0.9:26380") {
IpAddressMap = {
{"127.0.0.1", "10.0.0.9"},
}
};
container.Register(c => sentinel.Start());
Google Cloud - Klik untuk Menerapkan Redis #
Layanan Cloud termudah yang kami temukan yang dapat langsung menyiapkan multi node-Redis Sentinel Configuration menggunakan klik Google Cloud untuk menerapkan fitur Redis yang tersedia dari Google Cloud Console di bawah Deploy &Manage :
Mengklik Terapkan tombol akan memungkinkan Anda mengonfigurasi jenis, ukuran, dan lokasi tempat Anda ingin menerapkan VM Redis. Lihat panduan lengkap Klik untuk Menyebarkan Redis untuk panduan tentang penyiapan dan pemeriksaan konfigurasi redis yang sangat tersedia di Google Cloud.
Ubah untuk menggunakan RedisManagerPool #
Secara default, RedisSentinel menggunakan PooledRedisClientManager
, ini dapat diubah untuk menggunakan RedisManagerPool
yang lebih baru dengan:
sentinel.RedisManagerFactory = (master,replicas) => new RedisManagerPool(master);
Mulai memantau Penjaga #
Setelah dikonfigurasi, Anda dapat mulai memantau server Redis Sentinel dan mengakses manajer klien yang telah dikonfigurasi sebelumnya dengan:
IRedisClientsManager redisManager = sentinel.Start();
Yang seperti sebelumnya, dapat didaftarkan di IOC pilihan Anda sebagai lajang contoh:
container.Register<IRedisClientsManager>(c => sentinel.Start());
Konfigurasi Server Redis Sentinel #
Lihat proyek konfigurasi redis untuk cara cepat menyiapkan konfigurasi Redis Sentinel minimal yang sangat tersedia termasuk skrip start/stop untuk menjalankan beberapa instans redis secara instan pada satu (atau beberapa) server Windows, OSX, atau Linux.
Statistik Redis #
Anda dapat menggunakan RedisStats
class untuk visibilitas dan introspeksi ke dalam instance Anda yang sedang berjalan. Wiki Redis Stats mencantumkan statistik yang tersedia.
Coba Ulang Otomatis #
Untuk meningkatkan ketahanan koneksi klien, RedisClient
akan secara transparan mencoba kembali operasi Redis yang gagal karena Pengecualian Soket dan I/O dalam backoff eksponensial mulai dari 10 md sampai RetryTimeout
dari 10000 md . Default ini dapat diubah dengan:
RedisConfig.DefaultRetryTimeout = 10000;
RedisConfig.BackOffMultiplier = 10;