Berbagi teknologi

Check-in Pembelajaran 7.11 Hari —— Redis Pembelajaran Pemula (6)

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

Check-in Belajar 7.11 Hari

Masukkan deskripsi gambar di sini

1. transaksi redis

Konsep transaksi dan properti ACID

Masukkan deskripsi gambar di sini
Transaksi tingkat basis data

Pada tingkat basis data, transaksi adalah serangkaian operasi yang semuanya berhasil dijalankan atau tidak ada satupun yang dijalankan.

Empat karakteristik utama transaksi database

  • A: Atom, atomisitas, mengeksekusi semua SQL sebagai unit kerja atom, baik semuanya dieksekusi atau tidak ada satupun yang dieksekusi;
  • C: Konsisten, setelah transaksi selesai status semua data konsisten, yaitu selama akun A dikurangi 100, akun B akan ditambah 100;
  • I: Isolasi, jika beberapa transaksi dieksekusi secara bersamaan, maka modifikasi yang dilakukan oleh setiap transaksi harus diisolasi dari transaksi lainnya;
  • D: Durasi, persistensi, yaitu setelah transaksi selesai, modifikasi data database disimpan secara persisten.

Transaksi ulang

Transaksi Redis adalah sekumpulan perintah. Semua perintah dalam suatu transaksi akan diserialkan dan serangkaian perintah akan dieksekusi secara satu kali, berurutan, dan eksklusif.

Masukkan deskripsi gambar di sini

Tiga karakteristik utama transaksi Redis

  • operasi karantina terpisah : Semua perintah dalam transaksi akan diserialkan dan dieksekusi secara berurutan. Selama pelaksanaan transaksi, tidak akan terganggu oleh permintaan perintah yang dikirim oleh klien lain;
  • Tidak ada konsep tingkat isolasi: Perintah-perintah dalam antrian tidak akan benar-benar dieksekusi sampai dikirimkan, karena tidak ada instruksi yang benar-benar dieksekusi sebelum transaksi dikirimkan, sehingga tidak ada "query di dalam transaksi untuk melihat pembaruan dalam transaksi, dan query di luar transaksi" Tidak dapat melihat".
  • Tidak ada jaminan atomisitas: Jika suatu perintah gagal dijalankan dalam transaksi redis yang sama, perintah berikutnya akan tetap dijalankan tanpa rollback;

Tiga tahap eksekusi transaksi Redis

Masukkan deskripsi gambar di sini

  • menyalakan:olehMULTIMulai transaksi;
  • Bergabung dengan tim: Memasukkan beberapa perintah ke dalam suatu transaksi. Perintah ini tidak akan langsung dieksekusi setelah menerimanya, tetapi akan ditempatkan dalam antrian transaksi menunggu eksekusi;
  • melaksanakan:Bergantung padaEXECPerintah tersebut memicu transaksi;

Operasi dasar transaksi Redis

Masukkan deskripsi gambar di sini
Multi, Eksekutif, buang

masukan transaksi dariMultiSaat perintah dimulai, perintah yang dimasukkan akan dimasukkan ke dalam antrian buffer perintah satu per satu dan tidak akan dieksekusi hinggaExec Setelahnya, Redis akan mengeksekusi perintah pada antrian buffer perintah sebelumnya secara berurutan.Selama proses pembentukan tim, Anda bisa lolosdiscardAyo serahkan tim.

contoh

127.0.0.1:6379> set t1 1
OK
127.0.0.1:6379> MULTI
OK
127.0.0.1:6379(TX)> set id 12
QUEUED
127.0.0.1:6379(TX)> get id
QUEUED
127.0.0.1:6379(TX)> incr t1
QUEUED
127.0.0.1:6379(TX)> incr t1
QUEUED
127.0.0.1:6379(TX)> get t1
QUEUED
127.0.0.1:6379(TX)> EXEC
1) OK
2) "12"
3) (integer) 2
4) (integer) 3
5) "3"
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

meninggalkan transaksi

127.0.0.1:6379> MULTI
OK
127.0.0.1:6379(TX)> set name z3
QUEUED
127.0.0.1:6379(TX)> set age 29
QUEUED
127.0.0.1:6379(TX)> incr t1
QUEUED
127.0.0.1:6379(TX)> DISCARD
OK
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

Semua duduk bersama

127.0.0.1:6379> MULTI
OK
127.0.0.1:6379(TX)> set name z3
QUEUED
127.0.0.1:6379(TX)> get name
QUEUED
127.0.0.1:6379(TX)> incr t1
QUEUED
127.0.0.1:6379(TX)> get t1
QUEUED
127.0.0.1:6379(TX)> set email
(error) ERR wrong number of arguments for 'set' command
127.0.0.1:6379(TX)> exec
(error) EXECABORT Transaction discarded because of previous errors.
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

Melihat
Kumpulan perintah berisi instruksi yang salah (perhatikan bahwa itu adalah kesalahan sintaksis). Semuanya terhubung dan semuanya gagal.

Setiap ketidakadilan ada pemiliknya, setiap hutang ada pemiliknya

127.0.0.1:6379> MULTI
OK
127.0.0.1:6379(TX)> set age 11
QUEUED
127.0.0.1:6379(TX)> incr t1
QUEUED
127.0.0.1:6379(TX)> set email [email protected]
QUEUED
127.0.0.1:6379(TX)> incr email
QUEUED
127.0.0.1:6379(TX)> get age
QUEUED
127.0.0.1:6379(TX)> exec
1) OK
2) (integer) 5
3) OK
4) (error) ERR value is not an integer or out of range
5) "11"
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

Melihat
Untuk kesalahan runtime, yaitu kesalahan non-tata bahasa, perintah yang benar akan dijalankan, dan perintah yang salah akan menghasilkan kesalahan.

2. gugus redis

replikasi master-slave

Masukkan deskripsi gambar di sini
Ringkasan
Di antara perusahaan-perusahaan yang ada, 80% perusahaan sebagian besar menggunakan layanan Redis yang berdiri sendiri. Dalam skenario sebenarnya, Redis pada satu node rentan terhadap risiko.

menghadapi masalah:

  • kerusakan mesin. Kami menyebarkan ke server Redis. Ketika terjadi kegagalan mesin, kami perlu bermigrasi ke server lain dan memastikan bahwa data disinkronkan.
  • Kemacetan kapasitas. Ketika kita perlu memperluas memori Redis, dari memori 16G ke 64G, satu mesin pasti tidak akan mampu memuaskannya. Tentu saja Anda dapat membeli mesin 128G baru.

Larutan

Untuk mencapai kapasitas penyimpanan yang lebih besar dari database terdistribusi dan menahan akses bersamaan yang tinggi, kami akan menyimpan data dari database terpusat asli di beberapa node jaringan lainnya.

Melihat
Untuk mengatasi masalah satu node ini, Redis juga akan menyebarkan banyak salinan data ke node lain untuk direplikasi guna mencapai ketersediaan Redis yang tinggi dan pencadangan data yang berlebihan untuk memastikan ketersediaan data dan layanan yang tinggi.

Apa itu replikasi master-slave

Replikasi master-slave mengacu pada penyalinan data dari satu server Redis ke server Redis lainnya. Yang pertama disebut node master, dan yang terakhir disebut node slave. Replikasi data bersifat satu arah, dan hanya dapat dilakukan dari node master ke node slave.

Masukkan deskripsi gambar di sini
Peran replikasi master-slave

  • Redundansi data: Replikasi master-slave mengimplementasikan pencadangan data panas, yang merupakan metode redundansi data selain persistensi.
  • Pemulihan: Ketika masalah terjadi pada node master, node budak dapat menyediakan layanan untuk mencapai pemulihan kesalahan yang cepat; ini sebenarnya semacam redundansi layanan.
  • penyeimbang beban: Berdasarkan replikasi master-slave, dengan pemisahan membaca dan menulis, node master dapat menyediakan layanan tulis dan node slave dapat menyediakan layanan baca (yaitu, saat menulis data Redis, aplikasi harus terhubung ke node master , dan ketika membaca data Redis, aplikasi harus terhubung ke node budak), berbagi beban Server terutama dalam skenario di mana terdapat lebih sedikit penulisan dan lebih banyak pembacaan, berbagi beban baca melalui beberapa node budak dapat sangat meningkatkan konkurensi server Redis; .
  • Landasan ketersediaan tinggi: Selain fungsi di atas, replikasi master-slave juga menjadi dasar implementasi sentinel dan cluster. Oleh karena itu, replikasi master-slave menjadi dasar ketersediaan tinggi Redis.

Pengaturan lingkungan replikasi master-slave

Masukkan deskripsi gambar di sini
Tulis file konfigurasi
Buat redis6379.conf baru

include /usr/local/redis-7.2.4/redis.config
pidfile /var/run/redis_6379.pid
port 6379
dbfilename dump6379.rdb
  • 1
  • 2
  • 3
  • 4

Buat redis6380.conf baru

include /usr/local/redis-7.2.4/redis.config
pidfile /var/run/redis_6380.pid
port 6380
dbfilename dump6380.rdb
  • 1
  • 2
  • 3
  • 4

Buat redis6381.conf baru

include /usr/local/redis-7.2.4/redis.config
pidfile /var/run/redis_6381.pid
port 6381
dbfilename dump6381.rdb
  • 1
  • 2
  • 3
  • 4

Mulai tiga server redis

./redis-server ../redis6379.conf
./redis-server ../redis6380.conf
./redis-server ../redis6381.conf
  • 1
  • 2
  • 3

Lihat proses sistem

[root@localhost src]# ps -ef |grep redis
root    40737    1  0 22:05 ?     00:00:00 ./redis-server *:6379
root    40743    1  0 22:05 ?     00:00:00 ./redis-server *:6380
root    40750    1  0 22:05 ?     00:00:00 ./redis-server *:6381
root    40758  40631  0 22:05 pts/0   00:00:00 grep --color=auto redis
  • 1
  • 2
  • 3
  • 4
  • 5

Periksa status berjalan dari tiga host

#打印主从复制的相关信息
./redis-cli -p 6379
./redis-cli -p 6380
./redis-cli -p 6381
127.0.0.1:6379> info replication
127.0.0.1:6380> info replication
127.0.0.1:6381> info replication
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

Dilengkapi dengan database slave tetapi tidak dengan database master

Format sintaksis:

slaveof  <ip> <port>
  • 1

Contoh:

Dieksekusi pada 6380 dan 6381.

127.0.0.1:6380> SLAVEOF 127.0.0.1 6379
OK
  • 1
  • 2

Menulis di host dan membaca data di slave

set k1 v1
  • 1

Analisis prinsip replikasi master-slave

Masukkan deskripsi gambar di sini
Replikasi master-slave dapat dibagi menjadi 3 tahap

  • Fase pembentukan koneksi (yaitu fase persiapan)
  • Fase sinkronisasi data
  • tahap propagasi perintah

Proses penyalinan secara kasar dibagi menjadi 6 proses

Masukkan deskripsi gambar di sini

  1. Simpan informasi simpul utama (master).
    Lihat informasi status setelah menjalankan slaveof
info replication
# Replication
role:slave
master_host:127.0.0.1
master_port:6379
master_link_status:up
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  1. Node budak (slave) memelihara logika terkait replikasi melalui tugas terjadwal yang dijalankan setiap detik. Ketika tugas terjadwal menemukan bahwa ada node master baru, ia akan mencoba membuat koneksi jaringan dengan node tersebut.
    Masukkan deskripsi gambar di sini
  2. Buat koneksi jaringan antara node budak dan node master
    Node budak akan membuat soket. Node budak membuat soket dengan port 51234, yang khusus digunakan untuk menerima perintah replikasi yang dikirim oleh node master.

Masukkan deskripsi gambar di sini
4. Kirim perintah ping

Setelah koneksi berhasil dibuat, node budak mengirimkan permintaan ping untuk komunikasi pertama.

Masukkan deskripsi gambar di sini

memengaruhi:

  • Deteksi apakah soket jaringan antara master dan slave tersedia.
  • Deteksi apakah node master saat ini dapat menerima perintah
  1. ASD.
    Jika parameter requirepass diatur pada node master, verifikasi kata sandi diperlukan. Node budak harus mengkonfigurasi parameter masterauth untuk memastikan bahwa kata sandi sama dengan node master untuk lolos verifikasi; jika verifikasi gagal, replikasi akan dilakukan dihentikan dan node budak akan memulai kembali proses replikasi.

  2. Sinkronisasi kumpulan data.
    Setelah koneksi replikasi master-slave berkomunikasi secara normal, ketika replikasi dibuat untuk pertama kalinya, node master akan mengirimkan semua data yang disimpannya ke node slave. Bagian operasi ini adalah langkah terpanjang.
    Masukkan deskripsi gambar di sini

Strategi sinkronisasi master-slave

Ketika master dan slave baru saja terhubung, sinkronisasi penuh dilakukan; setelah sinkronisasi penuh selesai, sinkronisasi tambahan dilakukan. Tentu saja, jika perlu, budak dapat memulai sinkronisasi penuh kapan saja. Strategi redisnya adalah, apa pun yang terjadi, sinkronisasi tambahan akan dilakukan terlebih dahulu, dan jika tidak berhasil, mesin budak akan diminta untuk melakukan sinkronisasi penuh.

Misalnya

menyimpan cache

set name jjy
  • 1

Perintah perekamannya adalah

$3 r n
set r n
$4 r n
name r n
$5  r n
jjy r n
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
Mengimbangi100010011002100310041005100610071008
Nilai byte$3RN$4NAM

7. Perintah disalin terus menerus.
Ketika node master menyinkronkan data saat ini ke node budak, proses pembuatan replikasi selesai. Selanjutnya, node master akan terus mengirimkan perintah tulis ke node slave untuk memastikan konsistensi data master-slave.

Pemantauan penjaga

Masukkan deskripsi gambar di sini
Kerugian dari replikasi master-slave Redis

Ketika host Master down, kita perlu menyelesaikan saklar secara manual.

Masukkan deskripsi gambar di sini

Masalah paparan:
Setelah node master mati dan layanan tulis tidak dapat digunakan, Anda perlu beralih secara manual, memilih ulang node master, dan mengatur hubungan master-slave secara manual.

Teknologi peralihan master-slave

Ketika server master mati, server budak perlu dialihkan secara manual ke server master, yang memerlukan intervensi manual, memakan waktu dan tenaga, dan juga akan menyebabkan layanan tidak tersedia untuk jangka waktu tertentu.Ini bukan pendekatan yang direkomendasikan, lebih sering kita memberikan prioritasModus penjaga

Ikhtisar Penjaga

Mode sentinel adalah mode khusus. Pertama, Redis menyediakan perintah sentinel. Sebagai sebuah proses, Sentinel akan berjalan secara independen. Prinsipnya adalah sentinel memantau beberapa instance Redis yang berjalan dengan mengirimkan perintah dan menunggu server Redis merespons.

Masukkan deskripsi gambar di sini
Peran penjaga

  • Pemantauan klaster: Bertanggung jawab untuk memantau apakah proses master dan slave redis berfungsi dengan baik
  • pemberitahuan: Jika instance redis gagal, sentinel bertanggung jawab mengirimkan pesan sebagai pemberitahuan alarm kepada administrator.
  • kegagalan: Jika node master hang, maka secara otomatis akan ditransfer ke node slave.
  • Pusat konfigurasi: Jika terjadi failover, beri tahu klien tentang alamat master baru

Konstruksi lingkungan pemantauan penjaga

Masukkan deskripsi gambar di sini

Buat file sentinel-26379.conf baru

#端口
port 26379
#守护进程运行
daemonize yes
#日志文件
logfile "26379.log"
sentinel monitor mymaster localhost 6379 2
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

parameter:
sentinel monitor mymaster 192.168.92.128 6379 2 Arti konfigurasinya adalah: node sentinel memonitor node master 192.168.92.128:6379. Arti dari 2 yang terakhir terkait dengan penentuan kesalahan node master: setidaknya diperlukan 2. Hanya ketika dua node sentinel setuju, kegagalan node master dapat ditentukan dan failover dapat dilakukan.

Buat file sentinel-26380.conf baru

#端口
port 26380
#守护进程运行
daemonize yes
#日志文件
logfile "26380.log"
sentinel monitor mymaster localhost 6379 2
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

Buat file sentinel-26381.conf baru

#端口
port 26381
#守护进程运行
daemonize yes
#日志文件
logfile "26381.log"
sentinel monitor mymaster localhost 6379 2
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

Memulai simpul penjaga

redis-sentinel sentinel-26379.conf
  • 1

Lihat status simpul sentinel

[root@localhost src]# ./redis-cli -p 26379
127.0.0.1:26379> 
127.0.0.1:26379> 
127.0.0.1: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=mymaster,status=ok,address=192.168.66.100:6379,slaves=2,sentinels=3
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

Analisis prinsip kerja Sentinel

Masukkan deskripsi gambar di sini
fase pemantauan
Masukkan deskripsi gambar di sini

Melihat:

  • sentinel (sentinel 1)-----&gt;Memulai info ke master (master) dan slave (slave) dan dapatkan informasi lengkapnya.
  • sentinel (sentinel 2)-----&gt;Mulai info ke master (master), Anda akan mengetahui informasi sentinel yang ada (sentinel 1), dan terhubung ke slave (slave).
  • sentinel (sentinel 2)-----&gt;Memulai berlangganan ke sentinel (sentinel 1).

Tahap pemberitahuan

Sentinel terus mengirimkan notifikasi ke master dan slave untuk mengumpulkan informasi.

fase kegagalan

Pada tahap notifikasi, jika notifikasi yang dikirim oleh sentinel tidak mendapat respon dari master, maka master akan ditandai sebagai SRI_S_DOWN dan mengirimkan status master ke setiap sentinel. Ketika sentinel lain mendengar bahwa master telah meninggal, kata mereka Saya tidak percaya, saya juga akan memeriksanya dan mengirimkannya. Hasilnya dibagikan kepada masing-masing penjaga. Ketika setengah dari penjaga mengira masternya mati, mereka akan menandai masternya sebagai SRI_0_DOWN.
Masukkan deskripsi gambar di sini
Inilah pertanyaannya:

Saat ini, master harus diganti.

Bagaimana cara memilih

Jalan:

Penjaga mana pun yang saya terima pemberitahuan pemilunya terlebih dahulu akan memilihnya.

Hilangkan beberapa kasus:

  • Tidak online
  • Respon lambat
  • Terputus dari master aslinya untuk waktu yang lama
  • prinsip prioritas

kegagalan

Masukkan deskripsi gambar di sini
Ringkasan
Menunjukkan kemampuan pemantauan dan failover otomatis Sentinel ketika node master gagal.

Tunjukkan kegagalan
Gunakan perintah kill untuk mematikan node master

ps aux |grep redis
kill -9 pid
  • 1
  • 2

Lihat informasi simpul sentinel

Jika Anda segera menggunakan perintah info Sentinel pada node sentinel untuk melihatnya.

[root@localhost src]# ./redis-cli -p 26379
127.0.0.1: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=mymaster,status=ok,address=127.0.0.1:6381,slaves=5,sentinels=3
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

Melihat
Anda akan menemukan bahwa node master belum dialihkan, karena sentinel memerlukan waktu untuk mendeteksi kegagalan node master dan mentransfernya.

Mulai ulang simpul 6379

[root@localhost src]# ./redis-cli info replication
# Replication
role:slave
master_host:127.0.0.1
master_port:6381
master_link_status:down
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

File konfigurasi akan ditulis ulang
Selama fase failover, file konfigurasi node sentinel dan master-slave akan ditulis ulang.

include /usr/local/redis/redis.conf
pidfile "/var/run/redis_6379.pid"
port 6379
dbfilename "dump6379.rdb"
# Generated by CONFIG REWRITE
daemonize yes
protected-mode no
appendonly yes
slowlog-max-len 1200
slowlog-log-slower-than 1000
save 5 1
user default on nopass ~* &* +@all
dir "/usr/local/redis"
replicaof 127.0.0.1 6381
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

Kesimpulannya

  • Node master-slave dalam sistem Sentinel tidak berbeda dengan node master-slave biasa.
  • Node sentinel pada dasarnya adalah node redis.
  • Setiap node sentinel hanya perlu mengkonfigurasi node master pemantauan untuk secara otomatis menemukan node sentinel dan node slave lainnya.
  • Selama fase startup dan failover node sentinel, file konfigurasi setiap node akan ditulis ulang (config rewrite).

Modus klaster

Redis memiliki tiga mode cluster

  • mode master-budak
  • Modus penjaga
  • Modus klaster

Kekurangan Mode Penjaga
Masukkan deskripsi gambar di sini
kekurangan

  • Saat master menutup telepon, sentinel akan memilih master. Selama pemilihan, tidak ada cara untuk mengakses Redis, dan akan ada gangguan sementara pada akses;
  • Dalam mode penjaga, hanya node master yang dapat ditulis secara eksternal, dan node slave hanya dapat digunakan untuk membaca. Meskipun satu node Redis mendukung QPS hingga 10W, selama promosi e-commerce, seluruh tekanan penulisan data ada pada master.
  • Memori node tunggal Redis tidak dapat diatur terlalu besar. Jika datanya terlalu besar, sinkronisasi master-slave akan sangat lambat ketika node dimulai, ini akan memakan waktu lama;

Ikhtisar mode klaster
Masukkan deskripsi gambar di sini
Cluster Redis adalah cluster layanan terdistribusi yang terdiri dari beberapa grup node master-slave. Cluster ini memiliki fitur replikasi, ketersediaan tinggi, dan sharding.

Keuntungan dari klaster Redis

  • Klaster Redis memiliki banyak master, yang dapat mengurangi dampak masalah akses sementara.
  • Klaster Redis memiliki banyak master, yang dapat memberikan konkurensi lebih tinggi
  • Cluster Redis dapat disimpan dalam shard sehingga lebih banyak data yang dapat disimpan

Konstruksi mode cluster

Konstruksi cluster Redis memerlukan setidaknya 3 node master. Kami membangun 3 master di sini, masing-masing dengan node slave, dengan total 6 node Redis;
Masukkan deskripsi gambar di sini
Konstruksi klaster

Buat 6 node redis berbeda dengan nomor port masing-masing 6379, 6380, 6381, 6382, 6383, dan 6384.

Melihat: File dump.rdb dan appendonly.aof harus dihapus sebelum disalin.

1. Buat file konfigurasi baru
Buat file redis6379.config, redis6380.config, redis6381.config, redis6382.config, redis6383.config, redis6384.config. Ubah nomor port di file konfigurasi agar sesuai dengan nomor port file.

daemonize yes
dir /usr/local/redis-7.2.4/redis-cluster/6382/
bind 192.168.47.100
port 6382
dbfilename dump6382.rdb
cluster-enabled yes
cluster-config-file nodes-6382.conf
cluster-node-timeout 5000
appendonly yes
protected-mode no
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

parameter

  • cluster-config-file: File konfigurasi persistensi cluster, yang berisi status node lain, variabel persistensi, dll., akan secara otomatis dibuat di direktori direktori yang dikonfigurasi di atas. Setiap node akan menyimpan file konfigurasi cluster selama operasi; setiap kali informasi cluster berubah (seperti menambah atau menghapus node), semua node di cluster akan memperbarui informasi terbaru ke file konfigurasi; file konfigurasi untuk mendapatkan informasi cluster, dan Anda dapat dengan mudah bergabung kembali dengan cluster. File konfigurasi cluster dikelola oleh Redis dan tidak memerlukan modifikasi manual.
  • clouster-enabled: mengaktifkan cluster

Membuat folder

mkdir -p /usr/local/redis-7.2.4/redis-cluster/6379/
mkdir -p /usr/local/redis-7.2.4/redis-cluster/6380/
mkdir -p /usr/local/redis-7.2.4/redis-cluster/6381/
mkdir -p /usr/local/redis-7.2.4/redis-cluster/6382/
mkdir -p /usr/local/redis-7.2.4/redis-cluster/6383/
mkdir -p /usr/local/redis-7.2.4/redis-cluster/6384/
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

Mulai enam node

[root@bogon src]# ./redis-server ../redis6379.config
[root@bogon src]# ./redis-server ../redis6380.config
[root@bogon src]# ./redis-server ../redis6381.config
[root@bogon src]# ./redis-server ../redis6382.config
[root@bogon src]# ./redis-server ../redis6383.config
[root@bogon src]# ./redis-server ../redis6384.config
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

Periksa apakah setiap node berhasil dimulai

[root@bogon src]# ps -ef | grep redis
root    3889    1 0 09:56 ?    00:00:03 ./redis-server 0.0.0.0:6379 [cluster]
root    3895    1 0 09:56 ?    00:00:03 ./redis-server 0.0.0.0:6380 [cluster]
root    3901    1 0 09:57 ?    00:00:03 ./redis-server 0.0.0.0:6381 [cluster]
root    3907    1 0 09:57 ?    00:00:02 ./redis-server *:6382 [cluster]
root    3913    1 0 09:57 ?    00:00:02 ./redis-server 0.0.0.0:6383 [cluster]
root    3919    1 0 09:57 ?    00:00:02 ./redis-server 0.0.0.0:6384 [cluster]
root    4247  2418 0 10:22 pts/0  00:00:00 grep --color=auto redis
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

Konfigurasikan kluster

Format perintah: --cluster-replicas 1 berarti membuat node slave untuk setiap master

Melihat: IP di sini adalah IP sebenarnya dari mesin tempat setiap node berada.

[root@localhost src]# ./redis-cli --cluster create 192.168.47.100:6379 192.168.47.100:6380 192.168.47.100:6381 192.168.47.100:6382 192.168.47.100:6383 192.168.47.100:6384 --cluster-replicas 1
  • 1

Masukkan deskripsi gambar di sini

Verifikasi klaster

Hubungkan ke klien mana pun

./redis-cli -h 192.168.47.100  -p 6379 -c
  • 1

parameter:

‐h : alamat host
-p : nomor port
-c: menunjukkan mode cluster

Tes penulisan data

[root@bogon src]# ./redis-cli -p 6379 -c
127.0.0.1:6379> set name zhangsan
-> Redirected to slot [5798] located at 192.168.47.100:6380
OK
192.168.47.100:6380> get name
"zhangsan"
192.168.47.100:6380>
[root@bogon src]# ./redis-cli -p 6383 -c
127.0.0.1:6383> get name
-> Redirected to slot [5798] located at 192.168.47.100:6380
"zhangsan"
192.168.47.100:6380>
[root@bogon src]# ./redis-cli -p 6383 -c
127.0.0.1:6383> readonly
OK
127.0.0.1:6383> get name
"zhangsan"
127.0.0.1:6383>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

Analisis Prinsip Pola Cluster

Gugus Redis Semua data dibagi menjadi 16384 slot (slot), dan setiap node bertanggung jawab atas bagian dari slot tersebut. Informasi slot disimpan di setiap node. Hanya node master yang akan diberi slot, dan node budak tidak akan diberi slot.

Masukkan deskripsi gambar di sini

Algoritma penentuan posisi slot: nilai k1 = 127001

Secara default, Cluster akan menggunakan algoritma crc16 untuk melakukan hash pada nilai kunci untuk mendapatkan nilai integer, dan kemudian menggunakan nilai integer ini ke modulo 16384 untuk mendapatkan slot tertentu.

HASH_SLOT = CRC16(kunci) % 16384

Pemulihan
Lihat node

192.168.66.103:8001> cluster nodes
  • 1

Bunuh simpul Master

lsof -i:8001
kill -9 pid
  • 1
  • 2

Amati informasi simpul

Masukkan deskripsi gambar di sini

Kluster Redis yang mengoperasikan Java

Masukkan deskripsi gambar di sini
Ubah file konfigurasi

spring.data.redis.cluster.nodes=192.168.47.100:6381,192.168.47.100:6383,192.168.47.100:6380
  • 1

Melihat
1. Klaster Redis memerlukan setidaknya 3 node untuk memastikan ketersediaan tinggi.
2. Anda harus mencoba untuk menghindari penambahan atau penghapusan node saat klaster Redis berjalan, karena hal ini dapat menyebabkan migrasi data dan dengan demikian mempengaruhi kinerja klaster Redis secara keseluruhan.

Kode ditulis dalam Java

@SpringBootTest
public class CluseterTest {

  @Autowired
  private RedisTemplate<String,Object> redisTemplate;

  @Test
  void string() {
    //  保存字符串
    redisTemplate.opsForValue().set("itbaizhan","itbaizhan123");

    System.out.println(redisTemplate.opsForValue().get("itbaizhan"));

   }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

Jika konten saya bermanfaat bagi Anda, silakanSuka, komentar, favorit .Berkarya itu tidak mudah, dukungan semua oranglah yang membuat saya terus maju
Masukkan deskripsi gambar di sini