Redis Scaling dan Failover untuk Layanan DirectumRX

Redis adalah sistem manajemen basis data kelas NoSQL (DBMS non-relasional) yang ditempatkan seluruhnya dalam RAM. Untuk mengakses data, model "kunci" - "nilai" digunakan. DBMS seperti itu sering digunakan untuk menyimpan cache dalam layanan yang skalabel, untuk menyimpan gambar dan data kecil.

Redis DBMS banyak digunakan karena:

  • kecepatan tinggi, karena semua data disimpan dalam RAM;
  • lintas platform;
  • distribusi di bawah lisensi BSD (berlaku untuk perangkat lunak open source).

Luasnya distribusi dan penerapan Redis dapat diperkirakan dengan sejumlah besar dokumentasi dengan semua jenis kasus di situs web resmi proyek .

Jika Anda menggunakan penskalaan horizontal layanan DirectumRX, Anda harus menggunakan instalasi Redis fail-safe untuk bekerja dengan benar dengan layanan penyimpanan DirectumRX dan layanan akses web DirectumRX.

gambar

Redis akan menyimpan data operasional, cache, dan informasi lain yang diperlukan untuk pengoperasian layanan dalam mode penskalaan sehingga proses interaksi pengguna dengan sistem tidak bergantung pada instalasi yang sedang digunakannya.

Redis tidak akan menyimpan data sensitif dan tidak akan berada di bawah beban berat. Tetapi jika terjadi kegagalan Redis, pengguna akan mengalami banyak kesalahan saat beralih antar instalasi.

Di situs web resmi Redis, ada 2 cara untuk memastikan penskalaan horizontal dan toleransi kesalahan:

  1. Menggunakan Redis Sentiel .
  2. Menggunakan Redis Cluster .

Pertimbangkan untuk menyesuaikan opsi ini.

Konfigurasikan Redis Sentiel


Opsi menggunakan Redis Sentiel (Redis Tracking Node) diimplementasikan dalam Redis 2.4 dan terdiri dalam menggunakan layanan Redis Sentiel tambahan untuk memantau ketersediaan wizard. Dia juga melakukan konfigurasi node replika jika terjadi kegagalan wizard. Menentukan node SLAVE mana yang akan menjadi MASTER dan melakukan konfigurasi ulang saat bepergian.

Menerapkan skema klasik:

gambar

Mungkin ada banyak node SLAVE (hingga 1000 menurut situs resmi), untuk pekerjaan produktif disarankan untuk menggunakan setidaknya dua node SLAVE.

Biasanya, skema dikonfigurasi sedemikian rupa sehingga layanan Redis Sentiel dikonfigurasi pada node MASTER dan SLAVE, dan jika simpul MASTER gagal, node pemantauan yang tersisa memutuskan untuk memperkenalkan MASTER baru.

Versi Redis saat ini tersedia untuk diunduh dari situs web resmi pengembang produk . Namun, situs distribusi hanya tersedia untuk Linux. Pada suatu waktu, proyek Microsoft untuk porting Redis ke Windows sedang berkembang, tetapi saat ini proyek menghentikan pengembangan pada versi 3.2.100, jadi dalam artikel ini kami akan mempertimbangkan opsi penyebaran yang paling relevan - di Linux.

Sebagai node uji, kita akan menggunakan dua host virtual redis1 dan redis2 dengan distribusi Linux yang diinstal dari Debian 10.

Pertama, perbarui daftar paket dari repositori default dan instal Redis:

apt-get update && apt-get upgrade apt install redis-server 

Periksa versinya:

 root@redis1:/home/user# redis-server -v Redis server v=5.0.3 sha=00000000:0 malloc=jemalloc-5.1.0 bits=64 build=afa0decbb6de285f 

Biarkan redis1 bertindak sebagai simpul MASTER dan redis2 bertindak sebagai simpul SLAVE.

Untuk melakukan ini, kami menulis dalam konfigurasi Redis file parameter yang diperlukan yang akan memungkinkan Anda untuk membuat replika (belum toleran terhadap kesalahan).

Untuk redis1 di file konfigurasi /etc/redis/redis.conf, tentukan:

 # ,   MASTER     . requirepass TestPass 

Untuk redis2 di file konfigurasi /etc/redis/redis.conf, tentukan:

 #   MASTER  . slaveof redis1 6379 #      . masterauth TestPass #   ,         . requirepass TestPass 

Mulai ulang layanan redis-server di kedua node:

 root@redis1:/etc/redis# /etc/init.d/redis-server stop [ ok ] Stopping redis-server (via systemctl): redis-server.service. root@redis1:/etc/redis# /etc/init.d/redis-server start [ ok ] Starting redis-server (via systemctl): redis-server.service. root@redis2:/etc/redis# /etc/init.d/redis-server stop [ ok ] Stopping redis-server (via systemctl): redis-server.service. root@redis2:/etc/redis# /etc/init.d/redis-server start [ ok ] Starting redis-server (via systemctl): redis-server.service. 

Kami memeriksa pada sisi MASTER bahwa node menjadi replika dan menerima peran yang diperlukan:

 root@redis1:/etc/redis# redis-cli -a TestPass info replication Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe. # Replication role:master connected_slaves:1 slave0:ip=192.168.9.96,port=6379,state=online,offset=28,lag=0 master_replid:56b0a702d5823d107b0ca1ca2c80f8ef650a4b28 master_replid2:0000000000000000000000000000000000000000 master_repl_offset:28 second_repl_offset:-1 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:1 repl_backlog_histlen:28 

Di sisi BUDAK, kami melihat situasi yang sama:
 root@redis2:/etc/redis# redis-cli -a TestPass info replication Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe. # Replication role:slave master_host:redis1 master_port:6379 master_link_status:up master_last_io_seconds_ago:4 master_sync_in_progress:0 slave_repl_offset:14 slave_priority:100 slave_read_only:1 connected_slaves:0 master_replid:56b0a702d5823d107b0ca1ca2c80f8ef650a4b28 master_replid2:0000000000000000000000000000000000000000 master_repl_offset:14 second_repl_offset:-1 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:1 repl_backlog_histlen:14 

Sekarang Anda perlu mengkonfigurasi replika sehingga secara otomatis dikembalikan jika salah satu node gagal. Untuk melakukan ini, kita memerlukan layanan pelacakan Redis Sentinel.

Berdasarkan dokumentasi , layanan pemantauan Redis Sentinel dapat melakukan operasi berikut:

  1. Memeriksa ketersediaan node MASTER dan SLAVE dan dapat mengirim peringatan tentang tidak dapat diaksesnya node.
  2. Jika simpul MASTER gagal, simpul saksi dapat menempatkan simpul SLAVE dalam mode MASTER, serta mengkonfigurasi ulang simpul-simpul SLAVE yang tersisa, dan mereka mulai bekerja dengan MASTER yang baru.
  3. Membuat perubahan pada file konfigurasi dari MASTER dan SLAVE node.

Untuk kemurnian percobaan, kami akan menempatkan layanan saksi pada VM redis3 terpisah.

Kami menghubungkan repositori Redis dengan cara yang sama dan menginstal paket redis-sentinel:

 apt install redis-sentinel 

Setelah instalasi, Anda perlu membuat pengaturan dalam file konfigurasi dari node pemantauan /etc/redis/sentinel.conf:

 #    redis1   6379. #   1 -      , #        MASTER-. #       , #     MASTER-. sentinel monitor master01 redis1 6379 1 #  3 ,       . sentinel down-after-milliseconds master01 3000 #    MASTER- sentinel failover-timeout master01 6000 # ,  SLAVE-   . #    ,    , #      . sentinel parallel-syncs master01 1 #    . bind 192.168.9.97 127.0.0.1 ::1 #    MASTER-. sentinel auth-pass master01 TestPass 

Mulai ulang layanan setelah melakukan pengaturan:

 root@redis3:/etc/redis# /etc/init.d/redis-sentinel restart [ ok ] Restarting redis-sentinel (via systemctl): redis-sentinel.service. 

Pastikan layanan pelacakan melihat MASTER dan SLAVE:

 root@redis3:/etc/redis# redis-cli -p 26379 info sentinel # Sentinel sentinel_masters:1 sentinel_tilt:0 sentinel_running_scripts:0 sentinel_scripts_queue_length:0 sentinel_simulate_failure_flags:0 master0:name=master01,status=ok,address=192.168.9.95:6379,slaves=1,sentinels=1 

Kami memulai eksperimen.

Kami mensimulasikan kegagalan, menghentikan layanan redis-server pada redis1 node dan mendapatkan informasi terkini dari node saksi:

 root@redis3:/etc/redis# redis-cli -p 26379 info sentinel # Sentinel sentinel_masters:1 sentinel_tilt:0 sentinel_running_scripts:0 sentinel_scripts_queue_length:0 sentinel_simulate_failure_flags:0 master0:name=master01,status=ok,address=192.168.9.96:6379,slaves=1,sentinels=1 

Kami melihat MASTER telah berubah.

Kami akan mengembalikan operasi simpul redis1 dan memeriksa kondisinya:

 root@redis3:/var/log/redis# redis-cli -h redis1 -p 6379 -a TestPass info replication Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe. # Replication role:slave master_host:192.168.9.96 master_port:6379 master_link_status:up master_last_io_seconds_ago:1 master_sync_in_progress:0 slave_repl_offset:15977 slave_priority:100 slave_read_only:1 connected_slaves:0 master_replid:6c0c7d0eedccede56f211f2db74a98c4d0ff6d56 master_replid2:0000000000000000000000000000000000000000 master_repl_offset:15977 second_repl_offset:-1 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:1 repl_backlog_histlen:15977 

Kita melihat bahwa simpul menerima peran SLAVE, dan simpul redis2 adalah simpul MASTER.

Mensimulasikan kegagalan simpul redis2 dan memeriksa status simpul saksi:

 root@redis3:/var/log/redis# redis-cli -p 26379 info sentinel # Sentinel sentinel_masters:1 sentinel_tilt:0 sentinel_running_scripts:0 sentinel_scripts_queue_length:0 sentinel_simulate_failure_flags:0 master0:name=master01,status=ok,address=192.168.9.95:6379,slaves=1,sentinels=1 

Dan status simpul redis1:

 root@redis3:/var/log/redis# redis-cli -h redis1 -p 6379 -a TestPass info replication Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe. # Replication role:master connected_slaves:0 master_replid:6e9d67d6460815b925319c2bafb58bf2c435cffb master_replid2:6c0c7d0eedccede56f211f2db74a98c4d0ff6d56 master_repl_offset:33610 second_repl_offset:26483 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:1 repl_backlog_histlen:33610 

Hebat, mekanismenya bekerja. Tetapi sekarang muncul pertanyaan bagaimana kami akan menghubungkan layanan DirectumRX kami, karena mereka membutuhkan alamat node tunggal. Kami akan mengatasi situasi menggunakan layanan HAProxy.

Redis Node Proxying


Layanan proxy tcp dapat bertindak sebagai proxy terbalik untuk simpul Redis. Pada artikel ini, kami akan mempertimbangkan penggunaan HAProxy, karena ini adalah alat khusus yang dirancang untuk memberikan ketersediaan dan penyeimbangan muatan yang tinggi, dan digunakan oleh layanan online yang dikenal secara universal. Baca lebih lanjut tentang HAProxy di halaman pengembang .

Instal HAProxy pada simpul redis3:

 root@redis3:/var/log/redis# apt install haproxy 

Dalam file konfigurasi HAProxy /etc/haproxy/haproxy.cfg, tambahkan pengaturan untuk permintaan proxy ke node Redis:

 … frontend ft_redis bind *:6379 name redis mode tcp default_backend bk_redis backend bk_redis mode tcp option tcp-check tcp-check connect #  ,         . tcp-check send AUTH\ TestPass\r\n tcp-check expect string +OK tcp-check send PING\r\n tcp-check expect string +PONG tcp-check send info\ replication\r\n #    MASTER, .. SLAVE      . tcp-check expect string role:master tcp-check send QUIT\r\n tcp-check expect string +OK server Redis1 redis1:6379 check inter 3s server Redis2 redis2:6379 check inter 3s 

Dalam konfigurasi ini, diindikasikan bahwa kami akan mem-proxy setiap permintaan yang datang ke semua antarmuka mesin virtual saat ini di alamat pada port 6379. Kami akan mentransfer permintaan ke node yang akan menjawab bahwa ia memiliki peran MASTER.

Mulai ulang layanan haproxy:

 root@redis3:/etc/haproxy# /etc/init.d/haproxy restart 

Mari kita coba sambung menggunakan klien redis-cli dan buat kunci uji:

 root@redis3:/etc/haproxy# redis-cli -p 6379 -a TestPass Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe. 127.0.0.1:6379> SET TestKey "Some test string" OK 127.0.0.1:6379> GET TestKey "Some test string" 127.0.0.1:6379> info keyspace # Keyspace db0:keys=1,expires=0,avg_ttl=0 

Hentikan redis1 node dan kueri lagi daftar kunci:

 127.0.0.1:6379> info keyspace Error: Server closed the connection (3.01s) 127.0.0.1:6379> info keyspace # Keyspace db0:keys=1,expires=0,avg_ttl=0 (2.01s) 127.0.0.1:6379> GET TestKey "Some test string" 

Kita melihat bahwa untuk beberapa waktu koneksi terputus, tetapi kemudian koneksi dipulihkan kembali dan semua data tetap di tempatnya.

Sekarang cukup untuk mendaftarkan alamat proxy terbalik di file konfigurasi layanan DirectumRX untuk terhubung ke Redis.

Konfigurasikan Redis Cluster


Opsi pengelompokan Redis Cluster, diimplementasikan untuk versi redis 3.0 dan lebih tinggi, adalah solusi untuk membuat dan mengelola sebuah cluster dengan segmentasi dan replikasi data. Melakukan tugas-tugas manajemen simpul, replikasi, sinkronisasi data pada node dan memastikan akses aplikasi klien ke simpul MASTER dalam hal kegagalan salah satu dari beberapa simpul MASTER.

gambar

Redis Cluster bekerja dalam mode multimaster, setiap node MASTER dapat memiliki satu atau lebih node SLAVE (hingga 1000).

Penskalaan adalah fungsi utama gugus. Selain itu, cluster dapat menjamin toleransi kesalahan dari layanan Redis:

  • jika beberapa node tidak berfungsi, cluster mendistribusikan kembali beban dari mereka ke node lain;
  • jika node kunci tidak berfungsi, maka seluruh cluster berakhir.

Situasi mungkin muncul ketika Klien 2 menulis ke simpul M2. M2 menjawab "OK" dan mencoba menulis ke S2. Pada saat yang sama, M2 tidak menunggu penyelesaian pertukaran data yang benar dengan S2, tetapi segera menanggapi klien. Dalam hal ini, replika S2 mungkin tidak memiliki semua data. Oleh karena itu, disarankan untuk menggunakan beberapa replika SLAVE.

Situasi juga dapat muncul ketika M1, M3 berhenti untuk "melihat" M2, dan klien masih terus menulis data ke M2. Jika ketidaktersediaan akan berlanjut untuk beberapa waktu (parameter cluster-node-timeout), maka dalam hal ini S2 akan dimasukkan ke mode MASTER, dan M2 akan berhenti bekerja sendiri.

Dokumentasi resmi merekomendasikan menggunakan 6 node - satu instance Redis per node, yang memungkinkan keandalan yang lebih besar, tetapi tidak ada yang melarang menggunakan tiga node dengan topologi koneksi berikut:

gambar

Jika salah satu node fisik gagal, replika SLAVE yang sesuai akan masuk ke mode MASTER, dan operasi tidak akan terganggu.

Kami menerapkan 3 mesin virtual (redis1, redis2 dan redis3) di bangku tes, yang masing-masing akan menjalankan 2 instance Redis.

Aplikasi klien akan terhubung ke port tertentu yang ditentukan dalam file konfigurasi klien, oleh karena itu, pasangan MASTER - SLAVE harus bekerja pada port yang sama.

Untuk pasangan M1 - S1 kita akan menggunakan port 6381
Untuk pasangan M2 - S2 kita akan menggunakan port 6382
Untuk pasangan M3 - S3 kita akan menggunakan port 6383

Siapkan file konfigurasi

Di redis1:

 cp /etc/redis/redis.conf /etc/redis/m1_redis.conf cp /etc/redis/redis.conf /etc/redis/s2_redis.conf mv /etc/redis/redis.conf /etc/redis/redis.bak 

Di redis2:

 cp /etc/redis/redis.conf /etc/redis/m2_redis.conf cp /etc/redis/redis.conf /etc/redis/s3_redis.conf mv /etc/redis/redis.conf /etc/redis/redis.bak 

Pada redis3:

 cp /etc/redis/redis.conf /etc/redis/m3_redis.conf cp /etc/redis/redis.conf /etc/redis/s1_redis.conf mv /etc/redis/redis.conf /etc/redis/redis.bak 

Isi file konfigurasi sesuai dengan templat:

 bind <IP- > protected-mode no #      ,    . port <> pidfile /var/run/redis_<>.pid # <yes/no> -   Redis Cluster cluster-enabled yes # ,      : #  ,  ,    . #         . cluster-config-file nodes-<>.conf #  ,  master-   , #          slaves #    . cluster-node-timeout 15000 

Mari kita meluncurkan node Redis:

Node redis1:

 root@redis1:/etc/redis# redis-server /etc/redis/m1_redis.conf root@redis1:/etc/redis# redis-server /etc/redis/s2_redis.conf 

Redis2 simpul:

 root@redis2:/etc/redis# redis-server /etc/redis/m2_redis.conf root@redis2:/etc/redis# redis-server /etc/redis/s3_redis.conf 

Redis3 simpul:

 root@redis3:/etc/redis# redis-server /etc/redis/m3_redis.conf root@redis3:/etc/redis# redis-server /etc/redis/s1_redis.conf 

Untuk mengkonfigurasi cluster, Anda perlu menggunakan utilitas klien redis-cli, memberikannya daftar ip: port pasang server yang akan memainkan peran MASTER dan SLAVE:

 redis-cli --cluster create redis1-ip:6381 redis2-ip:6382 redis3-ip:6383 redis1-ip:6382 redis2-ip:6383 redis3-ip:6381 --cluster-replicas 1 

, di mana opsi --cluster-replicas 1 memberi tahu Anda berapa banyak SLAVE yang akan dimiliki masing-masing master, dan mereka secara otomatis dipilih dari daftar replika yang ditransfer.

 root@redis1:~/redis/src# redis-cli --cluster create 192.168.9.51:6381 192.168.9.52:6382 192.168.9.53:6383 192.168.9.51:6382 192.168.9.52:6383 192.168.9.53:6381 --cluster-replicas 1 >>> Performing hash slots allocation on 6 nodes... Master[0] -> Slots 0 - 5460 Master[1] -> Slots 5461 - 10922 Master[2] -> Slots 10923 - 16383 Adding replica 192.168.9.52:6383 to 192.168.9.51:6381 Adding replica 192.168.9.51:6382 to 192.168.9.52:6382 Adding replica 192.168.9.53:6381 to 192.168.9.53:6383 >>> Trying to optimize slaves allocation for anti-affinity [OK] Perfect anti-affinity obtained! M: e92cb96fd6c20db7509662a248902e3751ebe95f 192.168.9.51:6381 slots:[0-5460] (5461 slots) master M: d499af3672b3063c7239572ec311ad3160f280ae 192.168.9.52:6382 slots:[5461-10922] (5462 slots) master M: 3a41475e1613519c3ecdec695736a898262a24a5 192.168.9.53:6383 slots:[10923-16383] (5461 slots) master S: 182e5cffc9c31c231de69ddbaf507ec1fe17bb09 192.168.9.51:6382 replicates d499af3672b3063c7239572ec311ad3160f280ae S: 44f656062259005adea58bc5ad024071a050e192 192.168.9.52:6383 replicates 3a41475e1613519c3ecdec695736a898262a24a5 S: 485ffb786e9763955e6f10ffc59247690ad9bc11 192.168.9.53:6381 replicates e92cb96fd6c20db7509662a248902e3751ebe95f Can I set the above configuration? (type 'yes' to accept): yes >>> Nodes configuration updated >>> Assign a different config epoch to each node >>> Sending CLUSTER MEET messages to join the cluster Waiting for the cluster to join ..... >>> Performing Cluster Check (using node 192.168.9.51:6381) M: e92cb96fd6c20db7509662a248902e3751ebe95f 192.168.9.51:6381 slots:[0-5460] (5461 slots) master 1 additional replica(s) M: d499af3672b3063c7239572ec311ad3160f280ae 192.168.9.52:6382 slots:[5461-10922] (5462 slots) master 1 additional replica(s) S: 485ffb786e9763955e6f10ffc59247690ad9bc11 192.168.9.53:6381 slots: (0 slots) slave replicates e92cb96fd6c20db7509662a248902e3751ebe95f S: 182e5cffc9c31c231de69ddbaf507ec1fe17bb09 192.168.9.51:6382 slots: (0 slots) slave replicates d499af3672b3063c7239572ec311ad3160f280ae S: 44f656062259005adea58bc5ad024071a050e192 192.168.9.52:6383 slots: (0 slots) slave replicates 3a41475e1613519c3ecdec695736a898262a24a5 M: 3a41475e1613519c3ecdec695736a898262a24a5 192.168.9.53:6383 slots:[10923-16383] (5461 slots) master 1 additional replica(s) [OK] All nodes agree about slots configuration. >>> Check for open slots... >>> Check slots coverage... [OK] All 16384 slots covered. 

Cluster dibangun dengan benar. Kami akan menampilkan informasi tentang klaster:

 root@redis1:~/redis/src# redis-cli -c -h 192.168.9.51 -p 6381 192.168.9.51:6381> CLUSTER INFO cluster_state:ok cluster_slots_assigned:16384 cluster_slots_ok:16384 cluster_slots_pfail:0 cluster_slots_fail:0 cluster_known_nodes:6 cluster_size:3 cluster_current_epoch:6 cluster_my_epoch:1 cluster_stats_messages_ping_sent:1254 cluster_stats_messages_pong_sent:1243 cluster_stats_messages_sent:2497 cluster_stats_messages_ping_received:1238 cluster_stats_messages_pong_received:1254 cluster_stats_messages_meet_received:5 cluster_stats_messages_received:2497 192.168.9.51:6381> 

Untuk menguji replika tertentu, seperti Redis Sentiel, Anda dapat menggunakan perintah replikasi INFO:

 root@redis1:~/redis/src# redis-cli -c -h 192.168.9.51 -p 6381 192.168.9.51:6381> INFO replication # Replication role:master connected_slaves:1 slave0:ip=192.168.9.53,port=6381,state=online,offset=1946,lag=0 master_replid:59cd95d394dad9d0e49042637fdfd5290db4abfe master_replid2:0000000000000000000000000000000000000000 master_repl_offset:1946 second_repl_offset:-1 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:1 repl_backlog_histlen:1946 192.168.9.51:6381> 

Mari kita coba membuat beberapa kunci dan memverifikasi bahwa kunci-kunci ini muncul di replika:

 192.168.9.51:6381> SET key1 test1 -> Redirected to slot [9189] located at 192.168.9.52:6382 OK 192.168.9.52:6382> SET key2 test2 -> Redirected to slot [4998] located at 192.168.9.51:6381 OK 192.168.9.51:6381> SET key3 test3 OK 192.168.9.51:6381> 

Periksa M2:

 root@redis2:/home/user# redis-cli -c -h 192.168.9.52 -p 6382 192.168.9.52:6382> GET key1 "test1" 192.168.9.52:6382> GET key2 -> Redirected to slot [4998] located at 192.168.9.51:6381 "test2" 192.168.9.51:6381> GET key3 "test3" 192.168.9.51:6381> 

Dan di M3:

 root@redis3:/home/user# redis-cli -c -h 192.168.9.53 -p 6383 192.168.9.53:6383> GET key1 -> Redirected to slot [9189] located at 192.168.9.52:6382 "test1" 192.168.9.52:6382> GET key2 -> Redirected to slot [4998] located at 192.168.9.51:6381 "test2" 192.168.9.51:6381> GET key3 "test3" 192.168.9.51:6381> 

Kami akan menonaktifkan redis1 node dan memeriksa cara kerja S1:

 192.168.9.52:6382> CLUSTER NODES <b>182e5cffc9c31c231de69ddbaf507ec1fe17bb09 192.168.9.51:6382@16382 slave,fail d499af3672b3063c7239572ec311ad3160f280ae 1569509904727 1569509900000 4 connected</b> 485ffb786e9763955e6f10ffc59247690ad9bc11 <i>192.168.9.53:6381@16381 master</i> - 0 1569510017272 7 connected 0-5460 44f656062259005adea58bc5ad024071a050e192 192.168.9.52:6383@16383 slave 3a41475e1613519c3ecdec695736a898262a24a5 0 1569510018274 5 connected <b>e92cb96fd6c20db7509662a248902e3751ebe95f 192.168.9.51:6381@16381 master,fail - 1569509906731 1569509901721 1 connected</b> 3a41475e1613519c3ecdec695736a898262a24a5 192.168.9.53:6383@16383 master - 0 1569510019275 3 connected 10923-16383 d499af3672b3063c7239572ec311ad3160f280ae 192.168.9.52:6382@16382 myself,master - 0 1569510017000 2 connected 5461-10922 

Kami melihat informasi tentang kegagalan M1 dan S2 dan S3 telah beralih ke mode MASTER.

Periksa di mana kunci disimpan:

 192.168.9.52:6382> GET key1 "test1" 192.168.9.52:6382> GET key2 -> Redirected to slot [4998] located at 192.168.9.53:6381 "test2" 192.168.9.53:6381> GET key3 "test3" 192.168.9.53:6381> 

Kunci yang sebelumnya disimpan di redis1 sekarang tersedia di redis3.

Kembalikan operasi simpul redis1 dan periksa keadaan simpul M1 dan S2:

 192.168.9.53:6381> CLUSTER NODES <i>e92cb96fd6c20db7509662a248902e3751ebe95f 192.168.9.51:6381@16381 slave 485ffb786e9763955e6f10ffc59247690ad9bc11 0 1569511658217 7 connected 182e5cffc9c31c231de69ddbaf507ec1fe17bb09 192.168.9.51:6382@16382 slave d499af3672b3063c7239572ec311ad3160f280ae 0 1569511657000 4 connected</i> d499af3672b3063c7239572ec311ad3160f280ae 192.168.9.52:6382@16382 master - 0 1569511656000 2 connected 5461-10922 3a41475e1613519c3ecdec695736a898262a24a5 192.168.9.53:6383@16383 master - 0 1569511656000 3 connected 10923-16383 485ffb786e9763955e6f10ffc59247690ad9bc11 192.168.9.53:6381@16381 myself,master - 0 1569511656000 7 connected 0-5460 44f656062259005adea58bc5ad024071a050e192 192.168.9.52:6383@16383 slave 3a41475e1613519c3ecdec695736a898262a24a5 0 1569511657216 5 connected 

Kesehatan M1 dan S2 telah pulih, tetapi sekarang M1 dalam mode SLAVE.

Dan kuncinya juga pada simpul redis3:

 192.168.9.53:6383> GET key1 -> Redirected to slot [9189] located at 192.168.9.52:6382 "test1" 192.168.9.52:6382> GET key2 -> Redirected to slot [4998] located at 192.168.9.53:6381 "test2" 192.168.9.53:6383> GET key3 -> Redirected to slot [935] located at 192.168.9.53:6381 "test3" 

Cluster dikonfigurasi dan pemulihan Redis diuji.

Untuk mengakses layanan DirectumRX, Anda juga perlu mengonfigurasi proksi terbalik, seperti dalam hal mengatur Redis Sentiel.

Alih-alih sebuah kesimpulan


Artikel ini tidak mempertimbangkan cara lain untuk meningkatkan toleransi kesalahan Redis - menggunakan manajer sumber daya gugus pihak ketiga, misalnya Pacemaker . Dalam hal ini, akan dimungkinkan untuk bertahan dengan dua node, namun, ada kemungkinan besar kehilangan data jika terjadi keadaan darurat.

Untuk proksi terbalik (dalam hal ini, HAProxy), juga diinginkan untuk memberikan toleransi kesalahan, tetapi masalah ini juga di luar cakupan artikel ini. Jika Anda tertarik dengan topik ini, opsi penyebaran ini juga dapat dipertimbangkan dalam artikel terpisah dengan penyetelan langkah-demi-langkah dan menguji hasilnya.

Anda dapat menemukan tautan di bawah ini untuk mengetahui lebih lanjut tentang topik ini:
Redis cluster tutorial
Dokumentasi Redis Sentinel
Manual Konfigurasi HAProxy .

Source: https://habr.com/ru/post/id469543/


All Articles