Apakah redis cluster membutuhkan sentinel?
Apakah redis cluster membutuhkan sentinel?
Dengan Gitlab Enterprise Edition, Anda dapat menggunakan paket Omnibus untuk mengatur beberapa mesin dengan daemon sentinel.
Redis Sentinel dan Fix-Slave-Config Masalah: Redis Node Ditetapkan sebagai Slave of Two Masters ketika seharusnya tidak.
Saya telah menggunakan Redis Sentinel untuk failover dalam armada Redis besar yang terdiri dari 12 Sentinel dan lebih dari 500 shard, masing -masing dengan satu master dan satu budak. Namun, saya telah mengalami masalah aneh di mana node Redis tertentu berulang kali mengeluarkan perintah +fix-slave-config oleh Sentinels. Ini telah mengakibatkan beberapa budak beralih antara master yang benar dan master yang salah lainnya. Saya tidak melihat masalah ini dalam skala yang lebih kecil. Saya mencari nasihat tentang cara memperbaiki atau men -debug lebih lanjut masalah ini.
Saya telah mengamati dua masalah spesifik:
A) Pesan +fix-slave-config yang saya sebutkan sebelumnya.
B) Sentinel.File conf menunjukkan bahwa budak tertentu memiliki dua tuan, meskipun mereka seharusnya hanya memilikinya.
Awalnya, armada memiliki node slave tertentu xxx.Xxx.Xxx.177 dengan master xxx.Xxx.Xxx.244 (membentuk Shard 188). Namun, tanpa pemadaman simpul, master budak ini dialihkan ke xxx.Xxx.Xxx.96 (yang merupakan master untuk Shard 188) dan kemudian kembali ke master yang benar, dan siklus ini berulang. Saya telah memverifikasi ini dengan mengakses node slave dan master dan menggunakan perintah info redis-cli. Semua node Redis dimulai dengan konfigurasi yang benar, dan semua node sentinel memiliki konfigurasi yang benar dalam sentinel mereka.file conf. Ketika saya menanyakan setiap sentinel, mereka semua memiliki daftar tuan yang sama persis setelah setiap perubahan budak-ke-tuan.
Setelah memeriksa file log dari 12 Sentinels saya, saya melihat bahwa setiap menit ada pesan +fix-slave-config yang sedang dikirim. Berikut beberapa contoh:
Sentinel #8: 20096: x 22 Okt 01:41:49.793 * +fix-slave-config slave xxx.Xxx.Xxx.177: 6379 xxx.Xxx.Xxx.177 6379 @ shard-188 xxx.Xxx.Xxx.96 6379
Sentinel #1: 9832: x 22 Okt 01:42:50.795 * +fix-slave-config slave xxx.Xxx.Xxx.177: 6379 xxx.Xxx.Xxx.177 6379 @ shard-172 xxx.Xxx.Xxx.244 6379
Sentinel #6: 20528: x 22 Okt 01:43:52.458 * +fix-slave-config slave xxx.Xxx.Xxx.177: 6379 xxx.Xxx.Xxx.177 6379 @ shard-188 xxx.Xxx.Xxx.96 6379
Sentinel #10: 20650: x 22 Okt 01:43:52.464 * +fix-slave-config slave xxx.Xxx.Xxx.177: 6379 xxx.Xxx.Xxx.177 6379 @ shard-188 xxx.Xxx.Xxx.96 6379
Sentinel #2: 20838: x 22 Okt 01:44:53.489 * +fix-slave-config slave xxx.Xxx.Xxx.177: 6379 xxx.Xxx.Xxx.177 6379 @ shard-172 xxx.Xxx.Xxx.244 6379
Ketika saya menjalankan perintah Sentinel Masters, saya melihat sesuatu yang aneh. Dalam Kasus 1, Shard-188 memiliki dua budak, bukan satu. Pola yang sama diamati saat xxx.Xxx.Xxx.177 jatuh di bawah Shard-172 atau Shard-182:
Kasus 1) Master adalah xxx.Xxx.Xxx.244 dan xxx.Xxx.Xxx.177 adalah salah satu budaknya:
183) 1) “Nama”
2) “Shard-172”
3) “IP”
4) “xxx.Xxx.Xxx.244 “
5) “Port”
6) “6379”
7) “RUNID”
8) “CA02DA1F0002A25A880E6765AED306B1857AE2F7”
9) “Bendera”
10) “Master”
11) “Pernyataan Tertunda”
12) “0”
13) “Last-Ping-Sent”
14) “0”
15) “Last-OK-Ping-Reply”
16) “14”
17) “Last-Ping-Reply”
18) “14”
19) “down-after-milliseconds”
20) “30000”
21) “Info-Refresh”
22) “5636”
23) “dilaporkan peran”
24) “Master”
25) “waktu yang dilaporkan peran”
26) “17154406”
27) “Config-Epoch”
28) “0”
29) “num-slave”
30) “1”
31) “Num-lainnya-Sentinels”
32) “12”
33) “Kuorum”
34) “7”
35) “Failover-Timeout”
36) “60000”
37) “Syncs Paralel”
38) “1”
72) 1) “Nama”
2) “Shard-188”
3) “IP”
4) “xxx.Xxx.Xxx.96 “
5) “Port”
6) “6379”
7) “RUNID”
8) “95CD3A457EF71FC91FF1A1C5A6D5D4496B266167”
9) “Bendera”
10) “Master”
11) “Pernyataan Tertunda”
12) “0”
13) “Last-Ping-Sent”
14) “0”
15) “Last-OK-Ping-Reply”
16) “927”
17) “Last-Ping-Reply”
18) “927”
19) “down-after-milliseconds”
20) “30000”
21) “Info-Refresh”
22) “5333”
23) “dilaporkan peran”
24) “Master”
25) “waktu yang dilaporkan peran”
26) “17154312”
27) “Config-Epoch”
28) “0”
29) “num-slave”
30) “2”
31) “Num-lainnya-Sentinels”
32) “12”
33) “Kuorum”
34) “7”
35) “Failover-Timeout”
36) “60000”
37) “Syncs Paralel”
38) “1”
Case 2) master adalah xxx.Xxx.Xxx.96 dan xxx.Xxx.Xxx.177 adalah salah satu budaknya:
79) 1) “Nama”
2) “Shard-172”
3) “IP”
4) “xxx.Xxx.Xxx.244 “
5) “Port”
6) “6379”
7) “RUNID”
8) “CA02DA1F0002A25A880E6765AED306B1857AE2F7”
9) “Bendera”
10) “Master”
11) “Pernyataan Tertunda”
12) “0”
13) “Last-Ping-Sent”
14) “0”
15) “Last-OK-Ping-Reply”
16) “1012”
17) “Last-Ping-Reply”
18) “1012”
19) “down-after-milliseconds”
20) “30000”
21) “Info-Refresh”
22) “1261”
23) “dilaporkan peran”
24) “Master”
25) “waktu yang dilaporkan peran”
26) “17059720”
27) “Config-Epoch”
28) “0”
29) “num-slave”
30) “1”
31) “Num-lainnya-Sentinels”
32) “12”
33) “Kuorum”
34) “7”
35) “Failover-Timeout”
36) “60000”
37) “Syncs Paralel”
38) “1”
273) 1) “Nama”
2) “Shard-188”
3) “IP”
4) “xxx.Xxx.Xxx.96 “
5) “Port”
6) “6379”
7) “RUNID”
8) “95CD3A457EF71FC91FF1A1C5A6D5D4496B266167”
9) “Bendera”
10) “Master”
11) “Pernyataan Tertunda”
12) “0”
13) “Last-Ping-Sent”
14) “0”
15) “Last-OK-Ping-Reply”
16) “886”
17) “Last-Ping-Reply”
18) “886”
19) “down-after-milliseconds”
20) “30000”
21) “Info-Refresh”
22) “5333”
23) “dilaporkan peran”
24) “Master”
25) “waktu yang dilaporkan peran”
26) “17154312”
27) “Config-Epoch”
28) “0”
29) “num-slave”
30) “2”
31) “Num-lainnya-Sentinels”
32) “12”
33) “Kuorum”
34) “7”
35) “Failover-Timeout”
36) “60000”
37) “Syncs Paralel”
38) “1”
Ini adalah rincian masalah saya dengan Redis Sentinel dan masalah fix-slave-config. Tampaknya budak tertentu ditetapkan sebagai budak dari dua tuan, yang menyebabkan perilaku tak terduga di redis cluster saya. Saya mencari solusi untuk masalah ini dan akan menghargai saran atau saran apa pun.
Apakah redis cluster membutuhkan sentinel
Dengan Gitlab Enterprise Edition, Anda dapat menggunakan paket Omnibus untuk mengatur beberapa mesin dengan daemon sentinel.
Redis Sentinel dan Fix-Slave-Config Masalah: Redis Node Ditetapkan sebagai Slave of Two Masters ketika seharusnya tidak.
Возожно, ареса электронной почты явюю аонимныи дря дой говииииииamah дancing дзии дзпы дilat е ктнной почты частников, чтобы увидеть иходное собщение нandi.
Saya mencoba menggunakan Sentinel untuk failover dalam armada Redis besar (12 Sentinels, 500+ Shard of One Master dan masing -masing satu budak). Saya menghadapi masalah yang sangat aneh di mana penjaga saya berulang kali mengeluarkan perintah +fix-slave-config ke node Redis tertentu, dan hasilnya adalah budak tertentu yang beralih antara master yang benar dan master yang salah lainnya. Saya tidak melihat ini terjadi pada skala yang lebih kecil, untuk apa nilainya. Saran apa pun tentang apa yang harus diperbaiki atau debug lebih lanjut?
Saya telah memperhatikan dua masalah spesifik:
A) +pesan fix-slave-config, seperti yang dinyatakan di atas.
B) Sentinel.conf menunjukkan budak tertentu yang memiliki dua tuan (mereka seharusnya hanya memiliki satu)
Armada dalam keadaan awal memiliki simpul budak tertentu xxx.Xxx.Xxx.177 dengan master xxx.Xxx.Xxx.244 (bersama -sama, mereka terdiri dari Shard 188 di armada). Tanpa pemadaman simpul, master slave dialihkan ke xxx.Xxx.Xxx.96 (master untuk shard 188) dan kemudian kembali, dan kemudian. Ini diverifikasi dengan sshing ke dalam node budak dan master dan memeriksa info redis-cli. Semua node Redis dimulai dalam konfigurasi yang benar. Semua node sentinel memiliki konfigurasi yang benar di Sentinel mereka.conf. Setiap Sentinel memiliki daftar tuan yang sama persis ketika saya menanyakannya setelah masing-masing Slave-> Master Change ini.
Di 12 Sentinels saya, berikut ini dicatat. Setiap menit, ada pesan +fix-slave-config yang dikirim:
Sentinel #8: 20096: x 22 Okt 01:41:49.793 * +fix-slave-config slave xxx.Xxx.Xxx.177: 6379 xxx.Xxx.Xxx.177 6379 @ shard-188 xxx.Xxx.Xxx.96 6379
Sentinel #1: 9832: x 22 Okt 01:42:50.795 * +fix-slave-config slave xxx.Xxx.Xxx.177: 6379 xxx.Xxx.Xxx.177 6379 @ shard-172 xxx.Xxx.Xxx.244 6379
Sentinel #6: 20528: x 22 Okt 01:43:52.458 * +fix-slave-config slave xxx.Xxx.Xxx.177: 6379 xxx.Xxx.Xxx.177 6379 @ shard-188 xxx.Xxx.Xxx.96 6379
Sentinel #10: 20650: x 22 Okt 01:43:52.464 * +fix-slave-config slave xxx.Xxx.Xxx.177: 6379 xxx.Xxx.Xxx.177 6379 @ shard-188 xxx.Xxx.Xxx.96 6379
Sentinel #2: 20838: x 22 Okt 01:44:53.489 * +fix-slave-config slave xxx.Xxx.Xxx.177: 6379 xxx.Xxx.Xxx.177 6379 @ shard-172 xxx.Xxx.Xxx.244 6379
Inilah output dari perintah Sentinel Masters. Yang aneh adalah bahwa Shard-188 memiliki dua budak, padahal sebenarnya seharusnya hanya memiliki 1. Output terlihat sama saat xxx.Xxx.Xxx.177 berada di bawah Shard-172 dan Shard-182.
Kasus 1) xxx.Xxx.Xxx.244 adalah master xxx.Xxx.Xxx.177
183) 1) “Nama”
2) “Shard-172”
3) “IP”
4) “xxx.Xxx.Xxx.244 ”
5) “Port”
6) “6379”
7) “RUNID”
8) “CA02DA1F0002A25A880E6765AED306B1857AE2F7”
9) “Bendera”
10) “Master”
11) “Pernyataan Tertunda”
12) “0”
13) “Last-Ping-Sent”
14) “0”
15) “Last-OK-Ping-Reply”
16) “14”
17) “Last-Ping-Reply”
18) “14”
19) “down-after-milliseconds”
20) “30000”
21) “Info-Refresh”
22) “5636”
23) “dilaporkan peran”
24) “Master”
25) “waktu yang dilaporkan peran”
26) “17154406”
27) “Config-Epoch”
28) “0”
29) “num-slave”
30) “1”
31) “Num-lainnya-Sentinels”
32) “12”
33) “Kuorum”
34) “7”
35) “Failover-Timeout”
36) “60000”
37) “Syncs Paralel”
38) “1”
72) 1) “Nama”
2) “Shard-188”
3) “IP”
4) “xxx.Xxx.Xxx.96 ”
5) “Port”
6) “6379”
7) “RUNID”
8) “95CD3A457EF71FC91FF1A1C5A6D5D4496B266167”
9) “Bendera”
10) “Master”
11) “Pernyataan Tertunda”
12) “0”
13) “Last-Ping-Sent”
14) “0”
15) “Last-OK-Ping-Reply”
16) “927”
17) “Last-Ping-Reply”
18) “927”
19) “down-after-milliseconds”
20) “30000”
21) “Info-Refresh”
22) “5333”
23) “dilaporkan peran”
24) “Master”
25) “waktu yang dilaporkan peran”
26) “17154312”
27) “Config-Epoch”
28) “0”
29) “num-slave”
30) “2”
31) “Num-lainnya-Sentinels”
32) “12”
33) “Kuorum”
34) “7”
35) “Failover-Timeout”
36) “60000”
37) “Syncs Paralel”
38) “1”
Case 2) xxx.Xxx.Xxx.96 adalah master xxx.Xxx.Xxx.177
79) 1) “Nama”
2) “Shard-172”
3) “IP”
4) “xxx.Xxx.Xxx.244 ”
5) “Port”
6) “6379”
7) “RUNID”
8) “CA02DA1F0002A25A880E6765AED306B1857AE2F7”
9) “Bendera”
10) “Master”
11) “Pernyataan Tertunda”
12) “0”
13) “Last-Ping-Sent”
14) “0”
15) “Last-OK-Ping-Reply”
16) “1012”
17) “Last-Ping-Reply”
18) “1012”
19) “down-after-milliseconds”
20) “30000”
21) “Info-Refresh”
22) “1261”
23) “dilaporkan peran”
24) “Master”
25) “waktu yang dilaporkan peran”
26) “17059720”
27) “Config-Epoch”
28) “0”
29) “num-slave”
30) “1”
31) “Num-lainnya-Sentinels”
32) “12”
33) “Kuorum”
34) “7”
35) “Failover-Timeout”
36) “60000”
37) “Syncs Paralel”
38) “1”
273) 1) “Nama”
2) “Shard-188”
3) “IP”
4) “xxx.Xxx.Xxx.96 ”
5) “Port”
6) “6379”
7) “RUNID”
8) “95CD3A457EF71FC91FF1A1C5A6D5D4496B266167”
9) “Bendera”
10) “Master”
11) “Pernyataan Tertunda”
12) “0”
13) “Last-Ping-Sent”
14) “0”
15) “Last-OK-Ping-Reply”
16) “886”
17) “Last-Ping-Reply”
18) “886”
19) “down-after-milliseconds”
20) “30000”
21) “Info-Refresh”
22) “5762”
23) “dilaporkan peran”
24) “Master”
25) “waktu yang dilaporkan peran”
26) “17059758”
27) “Config-Epoch”
28) “0”
29) “num-slave”
30) “2”
31) “Num-lainnya-Sentinels”
32) “12”
33) “Kuorum”
34) “7”
35) “Failover-Timeout”
36) “60000”
37) “Syncs Paralel”
38) “1”
Sentinel awal saya.conf untuk setiap sentinel adalah
MaxClients 20000
PEMBERITAHUAN LOGLEVEL
logfile “/home/redis/log/sentinel.catatan”
Sentinel Monitor Shard-172 Redis-B-172 7
Sentinel down-after-milliseconds shard-172 30000
Sentinel Failover-Timeout Shard-172 60000
Sentinel Parallel-Syncs Shard-172 1
.
Sentinel Monitor Shard-188 Redis-B-188 7
Sentinel down-after-milliseconds shard-188 30000
Sentinel Failover-Timeout Shard-188 60000
Sentinel Parallel-Syncs Shard-188 1
Inilah sentinel yang dihasilkan.conf (untuk semua penjaga) setelah beberapa menit- perhatikan kedua budak:
Sentinel Monitor Shard-172 XXX.Xxx.Xxx.244 6379 7
Sentinel Failover-Timeout Shard-172 60000
Sentinel Config-Epoch Shard-172 0
Pemimpin Sentinel-Epoch Shard-172 0
Sentinel dikenal-Slave Shard-172 XXX.Xxx.Xxx.177 6379 Sentinel Dikenal-Sentinel Shard-172 .
.
Sentinel Monitor Shard-188 XXX.Xxx.Xxx.96 6379 7
Sentinel Failover-Timeout Shard-188 60000
Sentinel Config-Epoch Shard-188 0
Pemimpin Sentinel-Epoch Shard-188 0
Sentinel dikenal-Slave Shard-188 XXX.Xxx.Xxx.194 6379 Sentinel dikenal-Slave Shard-188 XXX.Xxx.Xxx.177 6379
Sentinel dikenal-Sentinel Shard-188 .
Replikasi dan failover redis dengan omnibus gitlab (Diri premium)
Catatan: Ini adalah dokumentasi untuk paket Omnibus Gitlab. Untuk menggunakan Redis Anda sendiri yang tidak terikat, ikuti dokumentasi yang relevan.
Catatan: Dalam bahasa Redis, primer disebut master. Dalam dokumen ini, primer digunakan sebagai ganti master, kecuali pengaturan di mana master diperlukan.
Menggunakan redis di lingkungan yang dapat diskalakan dimungkinkan menggunakan a Utama X Replika Topologi dengan layanan Redis Sentinel untuk ditonton dan secara otomatis memulai prosedur failover.
Redis membutuhkan otentikasi jika digunakan dengan sentinel. Lihat Dokumentasi Keamanan Redis untuk informasi lebih lanjut. Kami sarankan menggunakan kombinasi kata sandi redis dan aturan firewall ketat untuk mengamankan layanan redis Anda. Anda sangat terdorong untuk membaca dokumentasi Redis Sentinel sebelum mengkonfigurasi Redis dengan GitLab untuk sepenuhnya memahami topologi dan arsitektur.
Sebelum menyelam ke detail pengaturan Redis dan Redis Sentinel untuk topologi yang direplikasi, pastikan Anda membaca dokumen ini sekali secara keseluruhan untuk lebih memahami bagaimana komponen diikat bersama.
Anda membutuhkan setidaknya 3 mesin independen: fisik, atau VM yang berjalan ke mesin fisik yang berbeda. Sangat penting bahwa semua instance Redis primer dan replika berjalan di mesin yang berbeda. Jika Anda gagal menyediakan mesin dengan cara tertentu, masalah apa pun dengan lingkungan bersama dapat menurunkan seluruh pengaturan Anda.
Tidak apa -apa untuk menjalankan sentinel di samping instance primer atau replika redis. Seharusnya tidak ada lebih dari satu sentinel di mesin yang sama.
Anda juga perlu mempertimbangkan topologi jaringan yang mendasari, memastikan Anda memiliki konektivitas yang berlebihan antara instance Redis / Sentinel dan GitLab, jika tidak jaringan menjadi satu titik kegagalan tunggal.
Menjalankan Redis di lingkungan yang berskala membutuhkan beberapa hal:
- Beberapa instance Redis
- Jalankan Redis di a Utama X Replika topologi
- Beberapa contoh sentinel
- Dukungan dan visibilitas aplikasi untuk semua contoh Sentinel dan Redis
Redis Sentinel dapat menangani tugas -tugas terpenting di lingkungan HA dan itu untuk membantu menjaga server online dengan minimal atau tidak ada downtime. Redis Sentinel:
- Monitor Utama Dan Replika contoh untuk melihat apakah tersedia
- Mempromosikan a Replika ke Utama ketika Utama gagal
- Demotes a Utama ke Replika Saat gagal Utama Datang Kembali Secara Online (Untuk Mencegah Partisi Data)
- Dapat ditanya dengan aplikasi untuk selalu terhubung ke arus Utama server
Ketika sebuah Utama Gagal merespons, itu adalah tanggung jawab aplikasi (dalam kasus kami gitlab) untuk menangani batas waktu dan terhubung kembali (menanyakan a Penjaga untuk yang baru Utama).
Untuk mendapatkan pemahaman yang lebih baik tentang cara mengatur dengan benar Sentinel, silakan baca dokumentasi Redis Sentinel terlebih dahulu, karena gagal mengkonfigurasinya dengan benar dapat menyebabkan kehilangan data atau dapat menurunkan seluruh cluster Anda, membatalkan upaya failover yang membatalkan.
Pengaturan yang disarankan
Untuk pengaturan minimal, Anda perlu menginstal paket omnibus gitlab dalam 3 mandiri mesin, keduanya dengan Redis Dan Penjaga:
- Redis Primary + Sentinel
- REDIS Replica + Sentinel
- REDIS Replica + Sentinel
Jika Anda tidak yakin atau tidak mengerti mengapa dan dari mana jumlah node berasal, baca ikhtisar Pengaturan Redis dan ikhtisar pengaturan Sentinel.
Untuk pengaturan yang disarankan yang dapat menahan lebih banyak kegagalan, Anda perlu menginstal paket omnibus gitlab dalam 5 mandiri mesin, keduanya dengan Redis Dan Penjaga:
- Redis Primary + Sentinel
- REDIS Replica + Sentinel
- REDIS Replica + Sentinel
- REDIS Replica + Sentinel
- REDIS Replica + Sentinel
Tinjauan Pengaturan Redis
Anda harus memiliki setidaknya 3 server Redis: 1 primer, 2 replika, dan mereka perlu masing -masing pada mesin independen (lihat penjelasan di atas).
Anda dapat memiliki node Redis tambahan, yang membantu bertahan dari situasi di mana lebih banyak node turun. Setiap kali hanya ada 2 node online, failover tidak dimulai.
Sebagai contoh, jika Anda memiliki 6 node Redis, maksimal 3 dapat secara bersamaan turun.
Ada persyaratan yang berbeda untuk node sentinel. Jika Anda meng -host mereka di mesin Redis yang sama, Anda mungkin perlu mempertimbangkan pembatasan itu saat menghitung jumlah node yang akan disediakan. Lihat Dokumentasi Gambaran Umum Pengaturan Sentinel untuk informasi lebih lanjut.
Semua node redis harus dikonfigurasi dengan cara yang sama dan dengan spesifikasi server yang serupa, seperti dalam situasi failover, apapun Replika dapat dipromosikan sebagai yang baru Utama oleh server Sentinel.
Replikasi membutuhkan otentikasi, jadi Anda perlu mendefinisikan kata sandi untuk melindungi semua node Redis dan sentinel. Semuanya berbagi kata sandi yang sama, dan semua contoh harus dapat berbicara satu sama lain melalui jaringan.
Tinjauan Pengaturan Sentinel
Sentinels menonton kedua Sentinels dan Redis Node. Setiap kali seorang Sentinel mendeteksi bahwa simpul Redis tidak menanggapi, ia mengumumkan status node ke Sentinel lainnya. Sentinel harus mencapai a jumlah anggota minimum (Jumlah minimum Sentinels yang menyetujui node turun) untuk dapat memulai failover.
Kapan pun jumlah anggota minimum terpenuhi, mayoritas Dari semua node sentinel yang diketahui harus tersedia dan dapat dijangkau, sehingga mereka dapat memilih Sentinel pemimpin yang mengambil semua keputusan untuk mengembalikan ketersediaan layanan dengan:
- Mempromosikan yang baru Utama
- Mengkonfigurasi ulang yang lain Replika dan membuat mereka menunjuk ke yang baru Utama
- Mengumumkan yang baru Utama untuk setiap rekan penjaga lainnya
- Konfigurasikan ulang yang lama Utama dan diturunkan ke Replika Saat kembali online
Anda harus memiliki setidaknya 3 server Redis Sentinel, dan mereka harus masing -masing dalam mesin independen (yang diyakini gagal secara mandiri), idealnya di wilayah geografis yang berbeda.
Anda dapat mengonfigurasinya di mesin yang sama di mana Anda telah mengkonfigurasi server Redis lainnya, tetapi pahami bahwa jika seluruh node turun, Anda kehilangan contoh dan instance redis.
Jumlah penjaga idealnya harus selalu menjadi aneh angka, agar algoritma konsensus efektif dalam hal kegagalan.
Dalam topologi 3 node, Anda hanya mampu membeli 1 simpul sentinel turun. Kapan pun mayoritas Dari Sentinels turun, perlindungan partisi jaringan mencegah tindakan destruktif dan failover tidak dimulai.
Berikut beberapa contoh:
- Dengan 5 atau 6 Sentinels, maksimal 2 bisa turun untuk Failover Begin.
- Dengan 7 Sentinels, maksimal 3 node bisa turun.
Itu Pemimpin pemilihan terkadang bisa gagal dalam putaran pemungutan suara saat konsensus tidak tercapai (lihat jumlah ganjil persyaratan node di atas). Dalam hal ini, upaya baru dilakukan setelah jumlah waktu yang ditentukan dalam Sentinel [‘failover_timeout’] (dalam milidetik).
Catatan: Kita dapat melihat di mana Sentinel [‘failover_timeout’] didefinisikan nanti.
Variabel failover_timeout memiliki banyak kasus penggunaan yang berbeda. Menurut dokumentasi resmi:
- Waktu yang dibutuhkan untuk memulai kembali failover setelah kegagalan sebelumnya sudah dicoba terhadap primer yang sama dengan sentinel yang diberikan, adalah dua kali lipat dari batas waktu failover.
- Waktu yang dibutuhkan untuk replikasi replikasi ke primer yang salah sesuai dengan konfigurasi arus sentinel, untuk dipaksa untuk direplikasi dengan primer yang tepat, adalah persis timeout failover (menghitung sejak saat seorang penjaga mendeteksi kesalahan konfigurasi)).
- Waktu yang dibutuhkan untuk membatalkan failover yang sudah berlangsung tetapi tidak menghasilkan perubahan konfigurasi (replika belum ada orang yang belum diakui oleh replika yang dipromosikan).
- Waktu maksimum yang sedang berlangsung dalam proses menunggu semua replika dikonfigurasi ulang sebagai replika primer baru. Namun bahkan setelah waktu ini replika dikonfigurasi ulang oleh Sentinels, tetapi tidak dengan perkembangan paralel-sink yang tepat seperti yang ditentukan seperti yang ditentukan.
Mengkonfigurasi Redis
Ini adalah bagian tempat kami menginstal dan mengatur instance redis baru.
Diasumsikan bahwa Anda telah menginstal gitlab dan semua komponennya dari awal. Jika Anda sudah menginstal dan menjalankan Redis, baca cara beralih dari instalasi mesin tunggal.
CATATAN: Redis node (baik primer dan replika) membutuhkan kata sandi yang sama yang didefinisikan dalam redis [‘kata sandi’] . Kapan saja selama failover, Sentinel dapat mengkonfigurasi ulang simpul dan mengubah statusnya dari primer ke replika dan sebaliknya.
Persyaratan
Persyaratan untuk pengaturan Redis adalah sebagai berikut:
- Ketentuan Jumlah instance minimum yang diperlukan sebagaimana ditentukan dalam bagian pengaturan yang disarankan.
- Kami Tidak Merekomendasikan menginstal redis atau redis sentinel di mesin yang sama aplikasi gitlab Anda berjalan saat ini melemahkan konfigurasi HA Anda. Namun Anda dapat memilih untuk menginstal Redis dan Sentinel di mesin yang sama.
- Semua node Redis harus dapat berbicara satu sama lain dan menerima koneksi yang masuk melalui Redis (6379) dan Sentinel (26379) port (kecuali Anda mengubah yang default).
- Server yang meng -host aplikasi gitlab harus dapat mengakses node redis.
- Lindungi node dari akses dari jaringan eksternal (internet), menggunakan firewall.
Beralih dari instalasi mesin tunggal yang ada
Jika Anda sudah memiliki pemasangan gitlab mesin tunggal, Anda perlu mereplikasi dari mesin ini terlebih dahulu, sebelum mende-aktivasi instance Redis di dalamnya.
Instalasi mesin tunggal Anda adalah yang awal Utama, dan 3 lainnya harus dikonfigurasi sebagai Replika menunjuk ke mesin ini.
Setelah replikasi menyusul, Anda harus menghentikan layanan dalam pemasangan mesin tunggal, untuk memutar Utama ke salah satu node baru.
Buat perubahan yang diperlukan dalam konfigurasi dan restart node baru lagi.
Untuk menonaktifkan redis di instalasi tunggal, edit/etc/gitlab/gitlab.RB:
Redis['memungkinkan'] = PALSU Jika Anda gagal meniru terlebih dahulu, Anda dapat kehilangan data (pekerjaan latar belakang yang tidak diproses).
Langkah 1. Mengkonfigurasi instance redis utama
- Ssh ke dalam Utama Server Redis.
- Unduh/Instal Paket Omnibus Gitlab yang ingin Anda gunakan Langkah 1 dan 2 Dari halaman unduhan gitlab.
- Pastikan Anda memilih paket omnibus yang benar, dengan versi dan ketik yang sama (komunitas, edisi perusahaan) dari instalasi Anda saat ini.
- Jangan lengkapi langkah lain di halaman unduh.
- Edit/etc/gitlab/gitlab.RB dan tambahkan isinya:
# Tentukan peran server sebagai 'redis_master_role' peran ['redis_master_role'] # Alamat IP menunjuk ke IP lokal yang dapat dicapai oleh mesin lain. # Anda juga dapat mengatur Bind ke '0.0.0.0 'yang mendengarkan di semua antarmuka. # Jika Anda benar -benar perlu mengikat IP yang dapat diakses eksternal, buat # yakin Anda menambahkan aturan firewall tambahan untuk mencegah akses yang tidak sah. Redis['mengikat'] = '10.0.0.1 ' # Tentukan port sehingga redis dapat mendengarkan permintaan TCP yang memungkinkan orang lain # mesin untuk menghubungkannya. Redis['pelabuhan'] = 6379 # Mengatur otentikasi kata sandi untuk redis (gunakan kata sandi yang sama di semua node). Redis['kata sandi'] = 'redis-password-goes-here' gitlab_rails['auto_migrate'] = PALSU Catatan: Anda dapat menentukan beberapa peran seperti Sentinel dan Redis sebagai: Peran [‘Redis_sentinel_role’, ‘Redis_Master_Role’] . Baca lebih lanjut tentang peran.
Langkah 2. Mengkonfigurasi Instance Redis Replica
- Ssh ke dalam replika Server Redis.
- Unduh/Instal Paket Omnibus Gitlab yang ingin Anda gunakan Langkah 1 dan 2 Dari halaman unduhan gitlab.
- Pastikan Anda memilih paket omnibus yang benar, dengan versi dan ketik yang sama (komunitas, edisi perusahaan) dari instalasi Anda saat ini.
- Jangan lengkapi langkah lain di halaman unduhan.
- Edit/etc/gitlab/gitlab.RB dan tambahkan isinya:
# Tentukan peran server sebagai 'redis_replica_role' peran ['redis_replica_role'] # Alamat IP menunjuk ke IP lokal yang dapat dicapai oleh mesin lain. # Anda juga dapat mengatur Bind ke '0.0.0.0 'yang mendengarkan di semua antarmuka. # Jika Anda benar -benar perlu mengikat IP yang dapat diakses eksternal, buat # yakin Anda menambahkan aturan firewall tambahan untuk mencegah akses yang tidak sah. Redis['mengikat'] = '10.0.0.2 ' # Tentukan port sehingga redis dapat mendengarkan permintaan TCP yang memungkinkan orang lain # mesin untuk menghubungkannya. Redis['pelabuhan'] = 6379 # Kata sandi yang sama untuk otentikasi redis yang Anda atur untuk simpul utama. Redis['kata sandi'] = 'redis-password-goes-here' # IP dari simpul Redis utama. Redis['master_ip'] = '10.0.0.1 ' # Port server redis primer, uncomment untuk berubah menjadi non -default. Default # ke `6379`. #redis ['master_port'] = 6379 sentuhan sudo /etc/gitlab/skip-auto-reconfigure Catatan: Anda dapat menentukan beberapa peran seperti Sentinel dan Redis sebagai: Peran [‘Redis_sentinel_role’, ‘Redis_Master_Role’] . Baca lebih lanjut tentang peran.
Nilai -nilai ini tidak harus diubah lagi di/etc/gitlab/gitlab.RB Setelah failover, karena node dikelola oleh Sentinels, dan bahkan setelah konfigurasi ulang GitLab-CTL, mereka mendapatkan konfigurasi mereka dipulihkan oleh Sentinel yang sama.
Langkah 3. Mengkonfigurasi Instance Redis Sentinel
Catatan: Jika Anda menggunakan instance Redis Sentinel eksternal, pastikan untuk mengecualikan parameter PersyaratanPass dari konfigurasi Sentinel. Parameter ini menyebabkan klien melaporkan otentikasi noauth yang diperlukan. . Redis Sentinel 3.2.x tidak mendukung otentikasi kata sandi.
Sekarang server Redis sudah diatur, mari kita konfigurasikan server Sentinel.
Jika Anda tidak yakin apakah server Redis Anda berfungsi dan direplikasi dengan benar, silakan baca replikasi pemecahan masalah dan perbaiki sebelum melanjutkan dengan pengaturan Sentinel.
Anda harus memiliki setidaknya 3 server Redis Sentinel, dan mereka harus masing -masing di mesin independen. Anda dapat mengonfigurasinya di mesin yang sama di mana Anda telah mengkonfigurasi server Redis lainnya.
Dengan Gitlab Enterprise Edition, Anda dapat menggunakan paket Omnibus untuk mengatur beberapa mesin dengan daemon sentinel.
- Ssh ke server yang meng -host Redis Sentinel.
- Anda dapat menghilangkan langkah ini jika Sentinels di -host di simpul yang sama dengan instance Redis lainnya.Unduh/Instal Paket Edisi Perusahaan Omnibus Gitlab Langkah 1 dan 2 Dari halaman unduhan gitlab.
- Pastikan Anda memilih paket Omnibus yang benar, dengan versi yang sama dengan aplikasi GitLab sedang berjalan.
- Jangan lengkapi langkah lain di halaman unduhan.
- Edit/etc/gitlab/gitlab.RB dan tambahkan konten (jika Anda memasang sentinel di simpul yang sama dengan instance Redis lainnya, beberapa nilai mungkin duplikat di bawah):
peran ['redis_sentinel_role'] # Harus sama di setiap simpul Sentinel Redis['master_name'] = 'gitlab-redis' # Kata sandi yang sama untuk otentikasi redis yang Anda atur untuk simpul utama. Redis['password master'] = 'redis-password-goes-here' # IP dari simpul Redis utama. Redis['master_ip'] = '10.0.0.1 ' # Tentukan port sehingga redis dapat mendengarkan permintaan TCP yang memungkinkan orang lain # mesin untuk menghubungkannya. Redis['pelabuhan'] = 6379 # Port server redis primer, uncomment untuk berubah menjadi non -default. Default # ke `6379`. #redis ['master_port'] = 6379 ## Konfigurasikan Sentinel penjaga['mengikat'] = '10.0.0.1 ' # Port yang didengarkan Sentinel, uncomment untuk berubah menjadi non -default. Default # ke `26379`. # Sentinel ['port'] = 26379 ## kuorum harus mencerminkan jumlah penjaga suara yang diperlukan untuk memulai failover. Nilai ## tidak boleh lebih besar dari jumlah sentinel. ## ## Kuorum dapat digunakan untuk menyetel Sentinel dengan dua cara: ## 1. Jika kuorum diatur ke nilai yang lebih kecil dari mayoritas sentinel ## Kami menggunakan, kami pada dasarnya membuat Sentinel lebih masuk akal untuk kegagalan primer, ## memicu failover segera setelah hanya sebagian kecil dari Sentinels tidak lagi ## mampu berbicara dengan yang utama. ## 1. Jika kuorum diatur ke nilai yang lebih besar dari mayoritas Sentinel, kami adalah ## Membuat Sentinel Mampu Failover Hanya Ketika Ada Sejumlah Yang Sangat Besar (Lebih Besar ## dari mayoritas) dari sentinel yang terhubung dengan baik yang setuju tentang primer yang turun.S penjaga['jumlah anggota minimum'] = 2 ## Pertimbangkan server yang tidak responsif setelah x jumlah MS. # Sentinel ['down_after_milliseconds'] = 10000 ## Menentukan batas waktu failover dalam milidetik. Ini digunakan dalam banyak hal: ## ## - waktu yang dibutuhkan untuk memulai kembali failover setelah kegagalan sebelumnya adalah ## Sudah dicoba terhadap primer yang sama dengan sentinel yang diberikan, adalah dua ## kali batas waktu failover. ## ## - Waktu yang dibutuhkan untuk replikasi replikasi ke primer yang salah menurut ## Untuk konfigurasi arus sentinel, dipaksa untuk ditiru ## dengan primer yang tepat, tepat waktu failover (menghitung sejak itu ## Saat Sentinel mendeteksi kesalahan konfigurasi). ## ## - waktu yang dibutuhkan untuk membatalkan failover yang sudah berlangsung tetapi ## tidak menghasilkan perubahan konfigurasi (replika belum ada yang belum ## Diakui oleh replika yang dipromosikan). ## ## - Waktu maksimum yang dalam kemajuan dalam proses menunggu semua replika menjadi ## dikonfigurasi ulang sebagai replika primer baru. Namun bahkan setelah ini ## Replika dikonfigurasi ulang oleh Sentinels, tetapi tidak dengan ## Perkembangan paralel-sink yang tepat seperti yang ditentukan. # Sentinel ['failover_timeout'] = 60000 sentuhan sudo /etc/gitlab/skip-auto-reconfigure Langkah 4. Mengkonfigurasi Aplikasi GitLab
Bagian terakhirnya adalah untuk menginformasikan server aplikasi GitLab utama dari server Redis Sentinels dan kredensial otentikasi.
Anda dapat mengaktifkan atau menonaktifkan dukungan Sentinel kapan saja di instalasi baru atau yang sudah ada. Dari perspektif aplikasi GitLab, yang dibutuhkan hanyalah kredensial yang benar untuk node sentinel.
Meskipun tidak memerlukan daftar semua node sentinel, jika terjadi kegagalan, ia perlu mengakses setidaknya satu dari yang terdaftar.
Catatan: Langkah -langkah berikut harus dilakukan di server aplikasi GitLab yang idealnya tidak boleh memiliki redis atau sentinel di atasnya untuk pengaturan HA.
- Ssh ke server tempat aplikasi gitlab diinstal.
- Edit/etc/gitlab/gitlab.RB dan tambahkan/ubah baris berikut:
## Harus sama di setiap simpul Sentinel Redis['master_name'] = 'gitlab-redis' ## Kata sandi yang sama untuk otentikasi redis yang Anda atur untuk simpul utama. Redis['password master'] = 'redis-password-goes-here' ## Daftar Sentinel dengan `host` dan` port` gitlab_rails['redis_sentinels'] = [ 'tuan rumah' => '10.0.0.1 ', 'pelabuhan' => 26379>, 'tuan rumah' => '10.0.0.2 ', 'pelabuhan' => 26379>, 'tuan rumah' => '10.0.0.3 ', 'pelabuhan' => 26379> ] Langkah 5. Aktifkan pemantauan
Jika Anda mengaktifkan pemantauan, itu harus diaktifkan semua Server Redis.
- Pastikan untuk mengumpulkan CONSUL_SERVER_NODES, yang merupakan alamat IP atau catatan DNS dari node server konsul, untuk langkah berikutnya. Perhatikan mereka disajikan sebagai y.Y.Y.Y konsul1.Gitlab.contoh.com z.Z.Z.Z
- Buat/edit/etc/gitlab/gitlab.RB dan tambahkan konfigurasi berikut:
# Aktifkan penemuan layanan untuk Prometheus konsul['memungkinkan'] = BENAR konsul['monitoring_service_discovery'] = BENAR # Ganti placeholder # Y.Y.Y.Y konsul1.Gitlab.contoh.com z.Z.Z.Z # dengan alamat node server konsul konsul['konfigurasi'] = Retry_join: %w (y.Y.Y.Y konsul1.Gitlab.contoh.com z.Z.Z.Z), > # Atur alamat jaringan yang didengarkan eksportir node_exporter['listen_address'] = '0.0.0.0: 9100 ' redis_exporter['listen_address'] = '0.0.0.0: 9121 ' Contoh konfigurasi minimal dengan 1 primer, 2 replika dan 3 sentinel
Dalam contoh ini kami menganggap bahwa semua server memiliki antarmuka jaringan internal dengan IP di 10.0.0.rentang x, dan mereka dapat terhubung satu sama lain menggunakan IP ini.
Dalam penggunaan dunia nyata, Anda juga akan menetapkan aturan firewall untuk mencegah akses tidak sah dari mesin lain dan memblokir lalu lintas dari luar (internet).
Kami menggunakan 3 node yang sama dengan Redis + Penjaga Topologi yang dibahas dalam Tinjauan Pengaturan Redis dan Dokumentasi Tinjauan Pengaturan Sentinel.
Berikut adalah daftar dan deskripsi masing -masing mesin dan yang ditugaskan AKU P:
- 10.0.0.1: Redis Primer + Sentinel 1
- 10.0.0.2: Redis Replica 1 + Sentinel 2
- 10.0.0.3: Redis Replica 2 + Sentinel 3
- 10.0.0.4: Aplikasi Gitlab
Setelah konfigurasi awal, jika failover diprakarsai oleh node sentinel, node redis dikonfigurasi ulang dan Utama perubahan secara permanen (termasuk di redis.conf) Dari satu simpul ke yang lain, sampai failover baru dimulai lagi.
Hal yang sama terjadi dengan Sentinel.conf yang ditimpa setelah eksekusi awal, setelah simpul sentinel baru mulai menonton Utama, atau failover mempromosikan berbeda Utama node.
Contoh Konfigurasi untuk Redis Primer dan Sentinel 1
peran ['redis_sentinel_role', 'redis_master_role'] Redis['mengikat'] = '10.0.0.1 ' Redis['pelabuhan'] = 6379 Redis['kata sandi'] = 'redis-password-goes-here' Redis['master_name'] = 'gitlab-redis' # Harus sama di setiap simpul Sentinel Redis['password master'] = 'redis-password-goes-here' # Nilai yang sama didefinisikan dalam redis ['password'] dalam contoh utama Redis['master_ip'] = '10.0.0.1 ' # ip instance redis primer awal #redis ['master_port'] = 6379 # port dari instance redis primer awal, tidak berkomentar untuk berubah menjadi non -default penjaga['mengikat'] = '10.0.0.1 ' # Sentinel ['port'] = 26379 # uncomment untuk mengubah port default penjaga['jumlah anggota minimum'] = 2 # Sentinel ['down_after_milliseconds'] = 10000 # Sentinel ['failover_timeout'] = 60000 Konfigurasikan ulang omnibus gitlab agar perubahan berlaku.
Contoh Konfigurasi untuk Redis Replica 1 dan Sentinel 2
peran ['redis_sentinel_role', 'redis_replica_role'] Redis['mengikat'] = '10.0.0.2 ' Redis['pelabuhan'] = 6379 Redis['kata sandi'] = 'redis-password-goes-here' Redis['password master'] = 'redis-password-goes-here' Redis['master_ip'] = '10.0.0.1 ' # Ip server redis primer #redis ['master_port'] = 6379 # port dari server redis primer, uncomment untuk berubah menjadi non default Redis['master_name'] = 'gitlab-redis' # Harus sama di setiap simpul Sentinel penjaga['mengikat'] = '10.0.0.2 ' # Sentinel ['port'] = 26379 # uncomment untuk mengubah port default penjaga['jumlah anggota minimum'] = 2 # Sentinel ['down_after_milliseconds'] = 10000 # Sentinel ['failover_timeout'] = 60000 Konfigurasikan ulang omnibus gitlab agar perubahan berlaku.
Contoh Konfigurasi untuk Redis Replica 2 dan Sentinel 3
peran ['redis_sentinel_role', 'redis_replica_role'] Redis['mengikat'] = '10.0.0.3 ' Redis['pelabuhan'] = 6379 Redis['kata sandi'] = 'redis-password-goes-here' Redis['password master'] = 'redis-password-goes-here' Redis['master_ip'] = '10.0.0.1 ' # Ip server redis primer #redis ['master_port'] = 6379 # port dari server redis primer, uncomment untuk berubah menjadi non default Redis['master_name'] = 'gitlab-redis' # Harus sama di setiap simpul Sentinel penjaga['mengikat'] = '10.0.0.3 ' # Sentinel ['port'] = 26379 # uncomment untuk mengubah port default penjaga['jumlah anggota minimum'] = 2 # Sentinel ['down_after_milliseconds'] = 10000 # Sentinel ['failover_timeout'] = 60000 Konfigurasikan ulang omnibus gitlab agar perubahan berlaku.
Contoh konfigurasi untuk aplikasi gitlab
Redis['master_name'] = 'gitlab-redis' Redis['password master'] = 'redis-password-goes-here' gitlab_rails['redis_sentinels'] = [ 'tuan rumah' => '10.0.0.1 ', 'pelabuhan' => 26379>, 'tuan rumah' => '10.0.0.2 ', 'pelabuhan' => 26379>, 'tuan rumah' => '10.0.0.3 ', 'pelabuhan' => 26379> ] Konfigurasikan ulang omnibus gitlab agar perubahan berlaku.
Konfigurasi lanjutan
Omnibus gitlab mengkonfigurasi beberapa hal di balik tirai untuk membuat kehidupan Sysadmins lebih mudah. Jika Anda ingin tahu apa yang terjadi di bawahnya terus membaca.
Menjalankan beberapa kelompok Redis
Omnibus Gitlab mendukung menjalankan instance Redis dan Sentinel terpisah untuk kelas kegigihan yang berbeda.
| Kelas | Tujuan |
|---|---|
| cache | Simpan data yang di -cache. |
| antrian | Simpan Pekerjaan Latar Belakang Sidekiq. |
| shared_state | Simpan data terkait sesi dan gigih lainnya. |
| ActionCable | Pub/Sub Antrian Backend untuk ActionCable. |
| trace_chunks | Simpan Data Potongan Jejak CI. |
Untuk membuat pekerjaan ini dengan Sentinel:
- Konfigurasikan berbagai instance Redis/Sentinels berdasarkan kebutuhan Anda.
- Untuk setiap contoh aplikasi Rails, edit/etc/gitlab/gitlab.File RB:
gitlab_rails['redis_cache_instance'] = Redis_cache_url gitlab_rails['redis_queues_instance'] = Redis_queues_url gitlab_rails['redis_shared_state_instance'] = Redis_shared_state_url gitlab_rails['redis_actioncable_instance'] = Redis_actioncable_url gitlab_rails['redis_trace_chunks_instance'] = Redis_trace_chunks_url # Konfigurasikan Sentinel gitlab_rails['redis_cache_sentinels'] = [ tuan rumah: Redis_cache_sentinel_host, pelabuhan: 26379 >, tuan rumah: Redis_cache_sentinel_host2, pelabuhan: 26379 > ] gitlab_rails['redis_queues_sentinels'] = [ tuan rumah: Redis_queues_sentinel_host, pelabuhan: 26379 >, tuan rumah: Redis_queues_sentinel_host2, pelabuhan: 26379 > ] gitlab_rails['redis_shared_state_sentinels'] = [ tuan rumah: Shared_state_sentinel_host, pelabuhan: 26379 >, tuan rumah: Shared_state_sentinel_host2, pelabuhan: 26379 > ] gitlab_rails['redis_actioncable_sentinels'] = [ tuan rumah: Actioncable_sentinel_host, pelabuhan: 26379 >, tuan rumah: Actioncable_sentinel_host2, pelabuhan: 26379 > ] gitlab_rails['redis_trace_chunks_sentinels'] = [ tuan rumah: Trace_chunks_sentinel_host, pelabuhan: 26379 >, tuan rumah: Trace_chunks_sentinel_host2, pelabuhan: 26379 > ] - Redis URL harus dalam format: redis: //: kata sandi@sentinel_primary_name, di mana:
- Kata sandi adalah kata sandi plaintext untuk instance redis.
- Sentinel_primary_name adalah nama utama Sentinel dengan redis [‘master_name’], misalnya Gitlab-Redis-Cache .
sudo Konfigurasi ulang Gitlab-CTLCatatan: Untuk setiap kelas kegigihan, default gitlab untuk menggunakan konfigurasi yang ditentukan dalam gitlab_rails [‘redis_sentinels’] kecuali ditimpa oleh pengaturan yang dijelaskan sebelumnya.
Kontrol Layanan Menjalankan
Dalam contoh sebelumnya, kami telah menggunakan redis_sentinel_role dan redis_master_role yang menyederhanakan jumlah perubahan konfigurasi.
Jika Anda ingin lebih banyak kontrol, inilah yang ditetapkan masing -masing untuk Anda secara otomatis saat diaktifkan:
## Redis Sentinel Peran redis_sentinel_role['memungkinkan'] = BENAR # Saat peran sentinel diaktifkan, layanan berikut juga diaktifkan penjaga['memungkinkan'] = BENAR # Layanan berikut dinonaktifkan Redis['memungkinkan'] = PALSU Bootstrap['memungkinkan'] = PALSU Nginx['memungkinkan'] = PALSU PostgreSQL['memungkinkan'] = PALSU gitlab_rails['memungkinkan'] = PALSU ruang surat['memungkinkan'] = PALSU ------- ## Redis Peran Primer/Replika redis_master_role['memungkinkan'] = BENAR # Aktifkan hanya satu dari mereka redis_replica_role['memungkinkan'] = BENAR # Aktifkan hanya satu dari mereka # Saat redis peran primer atau replika diaktifkan, layanan berikut # Diaktifkan dinonaktifkan. Jika peran Redis dan Sentinel digabungkan, keduanya # Layanan diaktifkan. # Layanan berikut dinonaktifkan penjaga['memungkinkan'] = PALSU Bootstrap['memungkinkan'] = PALSU Nginx['memungkinkan'] = PALSU PostgreSQL['memungkinkan'] = PALSU gitlab_rails['memungkinkan'] = PALSU ruang surat['memungkinkan'] = PALSU # Untuk peran replika Redis, juga ubah pengaturan ini dari default 'true' menjadi 'false': Redis['menguasai'] = PALSUAnda dapat menemukan atribut yang relevan yang ditentukan dalam gitlab_rails.RB .
Penyelesaian masalah
Bacaan lebih lanjut
- Arsitektur referensi
- Konfigurasikan database
- Konfigurasikan NFS
- Konfigurasikan penyeimbang beban
Redis Sentinel
Perhatian. Mekanisme Redis Sentinel yang sudah usang akan pensiun dalam Creatio Version 7.18.3. Kami sarankan beralih ke redis cluster setelah memperbarui kreato ke versi 7.18.0.
Mekanisme Redis Sentinel digunakan untuk memberikan toleransi kesalahan untuk repositori Redis yang digunakan oleh Creatio. Ini memberikan fitur berikut:
- Pemantauan. Sentinel memastikan bahwa instance master/slave bekerja dengan benar di redis.
- Pemberitahuan. Administrator Sistem Peringatan Sentinel Jika ada kesalahan terkait instance yang terjadi di Redis.
- Failover otomatis. Jika instance Redis Master tidak berfungsi dengan benar, Sentinel mempromosikan salah satu instance budak menjadi master, dan mengkonfigurasi ulang sisanya untuk bekerja dengan instance master baru. Creatio juga diberitahu tentang alamat koneksi redis baru.
Perhatian. Creatio tidak mendukung cluster Redis di versi 7.17.4 dan lebih awal.
Redis Sentinel adalah sistem terdistribusi yang dirancang untuk menjalankan banyak contoh yang bekerja sama. Pendekatan ini memiliki keunggulan berikut:
- Kesalahan terdaftar hanya jika beberapa instance sentinel (yang membentuk kuorum) setuju bahwa instance master tidak tersedia di redis. Ini dilakukan untuk mengurangi jumlah peringatan palsu.
- Mekanisme sentinel masih akan tersedia bahkan jika beberapa contoh sentinel tidak merespons atau tidak berfungsi sama sekali. Ini dilakukan untuk meningkatkan toleransi kesalahan.
Spesifik Sentinel Terkemuka
- Setidaknya tiga contoh sentinel diperlukan untuk penyebaran yang kuat. Contoh -contoh ini harus ditempatkan ke komputer atau mesin virtual yang diyakini gagal dengan cara yang independen, saya. e., Kesalahan yang didaftarkan oleh instance sentinel ini harus disebabkan oleh sumber yang berbeda. Misalnya, komputer terletak di zona jaringan yang berbeda.
- Karena replikasi asinkron, sistem terdistribusi (Sentinel + Redis) tidak menjamin bahwa semua data akan disimpan jika kegagalan terjadi.
- Toleransi kesalahan konfigurasi harus dipantau secara teratur dan dikonfirmasi lebih lanjut melalui tes yang mensimulasikan kegagalan.
- Repapping Port Docker membuat masalah tertentu dengan proses sentinel (lihat blok Sentinel, Docker, NAT, dan kemungkinan masalah dari dokumentasi Sentinel).
Persyaratan toleransi kesalahan minimal untuk Redis Sentinel
- M1, M2 adalah instance master redis.
- R1, R2, R3 adalah instance budak redis.
- S1, S2, S3 adalah contoh sentinel.
- C1 adalah aplikasi kreatif.
- [M2] adalah contoh yang dipromosikan (e. G., dari budak ke tuan).
Kami merekomendasikan menggunakan konfigurasi dengan setidaknya tiga instance Redis dan Sentinel (lihat Contoh 2: Pengaturan Dasar dengan Tiga Kotak Blok Dokumentasi Sentinel). Konfigurasi ini didasarkan pada tiga node (komputer atau mesin virtual), masing -masing berisi instance berjalan dari Redis dan Sentinel (gbr. 1). Dua instance sentinel (S2 dan S3) membentuk kuorum (jumlah instance yang diperlukan untuk memastikan toleransi kesalahan dari instance master saat ini).
Ara. 1 Konfigurasi Tiga Node: Quorum = 2

Selama operasi reguler, aplikasi klien Creatio menulis data ke master instance (M1). Data ini kemudian direplikasi secara asinkron ke instance slave (R2 dan R3).
Jika instance Redis Master (M1) menjadi tidak tersedia, contoh sentinel (S1 dan S2) menganggap ini kegagalan dan memulai proses failover. Salah satu instance Redis Slave (R2 atau R3) dipromosikan ke master, memungkinkan aplikasi untuk menggunakannya alih -alih instance master sebelumnya.
Perhatian. Ada risiko kehilangan catatan dalam konfigurasi sentinel apa pun, yang menggunakan replikasi data asinkron. Ini terjadi jika data tidak ditulis ke instance slave, dipromosikan menjadi master.
Catatan. Konfigurasi toleran kesalahan lain yang mungkin dijelaskan dalam dokumentasi sentinel .
Masalah Pemisahan Jaringan
Jika koneksi jaringan hilang, ada risiko bahwa Creatio akan terus bekerja dengan instance Redis Master yang lama (M1), sedangkan instance master yang baru dipromosikan ([M2]) telah ditugaskan (Gbr. 2).
Ara. 2 Pemisahan Jaringan

Ini mudah dihindari dengan mengaktifkan opsi untuk berhenti menulis data jika contoh master mendeteksi bahwa jumlah instance budak telah menurun. Untuk melakukan ini, atur nilai -nilai berikut di redis.File konfigurasi conf dari instance redis master:
Min-Slaves-to-Write 1 Min-Slaves-Max-Lag 10
Akibatnya, jika instance master redis (M1) tidak akan dapat mentransfer data ke setidaknya satu instance budak, itu akan berhenti menerima data dalam 10 detik setelah upaya pertama. Setelah sistem dipulihkan oleh contoh sentinel yang membentuk kuorum (S2 dan S3), aplikasi kreatio (C1) akan dikonfigurasi ulang untuk bekerja dengan master -instance baru (M2).
Perhatian. Jika jaringan dipulihkan, instance master tidak akan dapat melanjutkan operasinya secara otomatis setelah berhenti. Jika instance Redis Slave yang tersisa (R3) juga menjadi tidak tersedia, sistem akan berhenti bekerja sama sekali.
Persyaratan sistem
Redis adalah database dalam memori, oleh karena itu kapasitas RAM dan tingkat kinerja adalah persyaratan utama untuk operasinya yang benar. Karena Redis adalah aplikasi satu utamanya yang menggunakan inti prosesor tunggal, satu node (komputer atau mesin virtual) dengan prosesor dual-core diperlukan untuk bekerja dengan instance Redis tunggal. Contoh Sentinel membutuhkan sumber daya yang relatif sedikit dan dapat berjalan pada simpul yang sama dengan Redis.
Dianjurkan untuk menggunakan Redis dan Sentinel di Linux OS.
Tabel di bawah ini menunjukkan persyaratan sistem yang disarankan untuk satu node (komputer atau mesin virtual), tergantung pada jumlah pengguna Creatio.
Apakah redis cluster membutuhkan sentinel?
Об этой страницental
Ы заре kondecedit. С помощю этой страницы с сожем определить, что запросы о о ancing оеет иенно ы,. Почем это мопо произойтиonya?
Ээ страница отображается в тех слчаях, когда автомически систе secara google ристрюи uman рисисilan рancing рancing рancing рancing рancing рancing рancing рancing рancing рancing рancing рancing рancing рancing рancing рancing рancing рии и menelepon которые наршают уловия исполззованияisah. Страница перестанет отображаться после то A, как эти запросы прекратяupanisah яяisah ancing ancing. До это A.
Источником запросов может слжить Врддносно secara п, пар иа бас00 иасазаз) ыылку запросов. Если Вы исползеет общий дсст в и итернет, проблем м ы ы ip ip ip00 ip ip ip ip ip uman ip ip ip ip ip ip uman ip ip ip ip ip ip ip uman ip ip ip ip ip ip ip ON ip ip ip ip ip ip ON. Обратитесь к своем системном аинистратору. Подробнее secara.
Пожет такжeda появлят secara, если Вы Вонот A рлжвввв dari рыч о оаilat оыч о оаilat, еами, ии же Водитedit запросы чень часто засто.
