
Cara cepat memulai VUE3.0: Mari pelajari
tentang penggunaan fungsi cluster redis di nodejs . Saya tidak menemukan artikel yang relatif lengkap dan mudah dipahami, jadi saya juga mengambil banyak jalan memutar selama pengembangan dan debugging. proses.
Artikel ini akan memperkenalkan secara rinci cara membangun cluster redis secara lokal, cara menggunakan cluster pada klien, dan merangkum serta menjelaskan masalah dan kesalahan yang dihadapi selama proses konstruksi untuk menghindari jalan memutar di lain waktu dan meningkatkan pengembangan dan efisiensi kerja.
Latar belakang penggunaan cluster adalah: pada mode singleton Redis, dengan bertambahnya jumlah pengguna dan kunjungan, nilai qps meningkat tajam??, banyaknya operasi io menyebabkan cpu(100%) pada waktu tertentu, dan mungkin ada waktu henti kapan saja. Ini berbahaya. Pada saat yang sama, pemrosesan batch redis dan metode lain hanya mengatasi gejalanya tetapi bukan akar masalahnya, dan tidak dapat menembus hambatan kinerja server . Oleh karena itu, sangat penting untuk menggunakan solusi cluster atau menambahkan instance redis.
cluster umumnya mengacu pada cluster server, yang berbeda dari sistem terdistribusi, cluster ini mengumpulkan banyak server untuk melakukan layanan yang sama. Dari sudut pandang klien, sepertinya hanya ada satu server. Sebuah cluster dapat menggunakan beberapa komputer untuk komputasi paralel guna mencapai kecepatan komputasi yang tinggi. Cluster juga dapat menggunakan beberapa komputer untuk cadangan, sehingga jika ada mesin yang rusak, seluruh sistem masih dapat berjalan normal. ( Sebelum redis3.0, mode sentinel umumnya digunakan, tetapi konfigurasi sentinel sedikit rumit, dan kinerja serta ketersediaan tinggi rata-rata )
lebih dari setengah dari mekanisme toleransi kesalahan pemungutan suara karena node percaya bahwa node tertentu telah gagal. Node tersebut sedang down, sehingga 2 node tidak dapat membentuk cluster, sehingga cluster Redis memerlukan setidaknya 3 node.
Untuk memastikan ketersediaan cluster yang tinggi, setiap node perlu memiliki node slave (yaitu node cadangan), sehingga cluster Redis memerlukan setidaknya 6 server. (Tiga master dan tiga budak, tiga deposit dan tiga pengambilan, ketersediaan tinggi, dan cadangan)
Tentu saja, tidak mungkin bagi kami untuk menggunakan begitu banyak server saat melakukan debug secara lokal, sehingga kami dapat melakukan simulasi menjalankan 6 instance redis secara lokal Klaster Redis di lingkungan produksi. Pembuatannya pada dasarnya sama seperti di sini.
Anda dapat memilih untuk menginstalnya di situs web resmi, atau Anda dapat menginstalnya dengan baris bernama
#install brew install redis #Mulai server redis #Masuk ke klien redis redis-cli
Anda harus terlebih dahulu mencari lokasi file konfigurasi redis
brew list redis # Periksa lokasicd /opt/homebrew/Cellar/redis/6.2.4 # Masukkan versi sesuai lokasi Folder tempat nomor beradaopen . # Buka folderXcode.app untuk membuka homebrew.mxcl.redis.plist untuk mencari lokasi redis.conf , seperti yang ditunjukkan pada gambar di bawah:

Buat enam file konfigurasi layanan
cd /opt/homebrew/etc/ (direktori file konfigurasi ditemukan pada langkah sebelumnya)
# Harus berada di jalur /opt/homebrew/etc/ mkdir -p redis/cluster/7000 mkdir -p redis/cluster/7001 mkdir -p redis/cluster/7002 mkdir -p redis/cluster/7003 mkdir -p redis/cluster/7004 mkdir -p redis/cluster/7005
Memodifikasi file konfigurasi
File konfigurasi di bawah path /opt/homebrew/etc/redis.conf tidak perlu dimodifikasi. Cukup salin ke direktori redis/cluster/7000 yang dibuat di atas lalu memodifikasinya. Langkah-langkahnya sebagai berikut:
cd /opt/homebrew/etc/ # Masuk ke direktori file konfigurasi cp redis.conf redis/cluster/7000/7000.conf kode redis/cluster/7000/7000.conf # Buka file konfigurasi dengan editor atau vim untuk memodifikasinya.
7000.conf , ubah properti berikut# Nomor port Redis (setiap file konfigurasi 7000-7005 harus diubah) pelabuhan 7000 # Aktifkan mode cluster dan jalankan cluster-enabled ya # Jalur file konfigurasi internal cluster, default node-6379.conf (setiap file konfigurasi 7000-7005 harus dimodifikasi) cluster-config-file node-7000.conf # Batas waktu komunikasi antar node cluster-node-timeout 5000 # Data persistence appendonly yes
cd /opt/homebrew/etc/redis/cluster # Masuk ke direktori file konfigurasi cp 7000/7000.conf 7001/7001.conf cp 7000/7000.conf 7002/7002.conf cp 7000/7000.conf 7003/7003.conf cp 7000/7000.conf 7004/7004.conf cp 7000/7000.conf 7005/7005.conf
7001.conf-7005.confCatatan: Setiap file konfigurasi harus mengkonfigurasi port和cluster-config-file yang berbeda. nilai port和cluster-config-file (jika tidak, cluster tidak akan berpengaruh), yang dibedakan berdasarkan port.
Direktori file konfigurasi dapat ditemukan melalui perintah find /opt/homebrew -name nodes-7000.conf .
Karena kami telah mengonfigurasi 6 layanan, tidak mungkin untuk memulai atau menghentikannya satu per satu. Anda perlu menggunakan skrip shell untuk
masuk ke direktori /opt/homebrew/etc/redis/cluster dan membuat.
dan
hentikan
redis-server /opt/homebrew/etc/redis/cluster/7000/7000.conf & redis-server /opt/homebrew/etc/redis/cluster/7001/7001.conf & redis-server /opt/homebrew/etc/redis/cluster/7002/7002.conf & redis-server /opt/homebrew/etc/redis/cluster/7003/7003.conf & redis-server /opt/homebrew/etc/redis/cluster/7004/7004.conf & redis-server /opt/homebrew/etc/redis/cluster/7005/7005.conf & # stop.sh file #!/bin/sh redis-cli -p 7000 mematikan & redis-cli -p 7001 mematikan & redis-cli -p 7002 mematikan & redis-cli -p 7003 mematikan & redis-cli -p 7004 mematikan & redis-cli -p 7005 shutdown &jalankan ./start.sh
atau
./start.sh ./stop.sh memulai dan menghentikan layanan.
Jalankan ps -ef |grep redis untuk melihat layanan redis yang dimulai.
start.sh untuk pertama kalinya. Otorisasi izin eksekusi melalui sudo chmod +x start.sh
redis-cli -p 7000 # Mulai satu klien redis-server 7000/7000.conf # Mulai satu server redis-cli -p 7000 shutdown # Matikan server sudo chmod +x start.sh # Aktifkan izin eksekusi skrip # Atur hubungan master-slave redis (tiga master dan tiga budak) redis-cli --cluster buat --cluster-replika 1 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 node cluster #Lihat status node cluster (masukkan klien untuk mengeksekusi) info cluster #Lihat informasi cluster (masukkan klien untuk mengeksekusi) Lihat semua nilai kunci: kunci * Hapus nilai pada indeks yang ditentukan: kunci del Hapus data seluruh server Redis: flushall Hapus semua kunci di perpustakaan saat ini:
Redis.Cluster menyediakan fungsi sharding otomatis pada beberapa node Redis. Gunakan enam server redis yang dibangun sebelumnya, dan kemudian mulai node redis.js , Anda dapat menguji efek cluster. ioredis
// redis.js
const Redis = memerlukan("ioredis");
cluster const = Redis.Cluster baru([
{
pelabuhan: 7000,
tuan rumah: "127.0.0.1",
},
{
pelabuhan: 7001,
tuan rumah: "127.0.0.1",
},
]);
cluster.set("foo", "bar");
cluster.mendapatkan("foo", (err, res) => {
// res === 'bilah'
}); impor Antrean dari 'banteng'
// Membuat instance antrian redis const instance = new Queue('custom', {
awalan : '{prefiks saya}',
buatKlien(ketik) {
// instance cluster cluster sama dengan cluster return di atas
}
})
//Tambahkan data ke antrian redis (produser)
contoh.tambahkan(
'meminta',
{
...param
},
{
hapusOnComplete: salah
}
).menangkap(e => {
konsol.kesalahan(e)
})
// Callback konsumen instance.process('permintaan', 5, async (pekerjaan, selesai) => {
console.log('Dapatkan data yang saat ini digunakan:', pekerjaan.data)
//Lakukan operasi asinkron menunggu Janji baru((resolve)=>resolve())
Selesai()
}) Ada masalah saat menggunakan kerangka bull untuk terhubung ke cluster ioredis : setiap kali data push ke antrian redis , fungsi panggilan balik yang sesuai mungkin terpicu beberapa kali penggunaan atau masalah dengan kerangka itu sendiri (jika Anda tahu lebih banyak, selamat datang semuanya Tinggalkan pesan untuk menginformasikan).
Alternatif untuk pengelompokan: Jika sinkronisasi data dan migrasi data tidak diperlukan, beberapa instance redis dapat digunakan pada klien, dikombinasikan dengan Math.random() untuk membagi data secara merata ke dalam salah satu redis , sehingga memecahkan masalah perangkat keras instance tunggal ( cpu dll.) masalah kemacetan.
1. Terjadi kesalahan saat menghubungkan ke redis pada sistem Mac?
Pesan kesalahan konsol: Tidak dapat terhubung ke Redis di 127.0.0.1:6379: Koneksi ditolak
Alasan: Server tidak dimulai atau gagal memulai
Solusi: Anda harus memulai server redis terlebih dahulutautan
referensi
server redis
https://blog.csdn.net/qq_23347459/article/details/104257529
2. Saat memulai klien, apakah klien melaporkan kesalahan saat membaca atau menulis?
Pesan kesalahan: ClusterAllFailedError: Gagal menyegarkan cache slot.
Alasan: Atribut cluster-config-file dalam file konfigurasi pada setiap layanan konsisten.
Pemrosesan: Ubah ke nilai atribut unik
Tautan referensi 1
https://stackoverflow.com/questions/57350961/ioredis-clusterallfailederror-failed-to-refresh-slots-cache
Referensi 2
https://github.com/luin/ioredis/ issue /711
3. Gagal mengeksekusi pernyataan create master-slave redis?
Jalankan pernyataan: redis-cli --cluster create --cluster-replicas 1 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005
Kesalahan cepat: [ERR] Node 127.0.0.1:7000 is not empty. Either the node already knows other nodes (check with CLUSTER NODES) or contains some key in database 0
: Saat menjalankan pernyataan create, data tidak dihapus dan cluster tidak direset .Memproses
: Menghapus data Dan mereset cluster, menghapus file rdb dan aof,
lihat menghapus data redis
https://stackoverflow.com/questions/37206993/redis-server-cluster-not-working
# Ambil layanan port 7000. sebagai contoh, ulangi operasi berikut untuk 7001-7005 $redis-cli -p 7000 127.0.0.1:7000> siram 127.0.0.1:7000> pengaturan ulang kluster 127.0.0.1:7000>keluar # Gunakan find untuk menemukan file rdb dan aof (juga di direktori rdb) temukan /opt/homebrew -nama dump.rdb # Jalankan kembali pernyataan create dengan sukses redis-cli --cluster create --cluster-replicas 1 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1: 7005
Penggunaan cluster redis pada klien sangat sederhana, sebaliknya konfigurasi pada server akan lebih rumit.
Penggunaan spesifik klien hanya dijelaskan secara singkat. Selama penggunaan, perhatian harus diberikan pada masalah seperti sinkronisasi dan migrasi data redis.
Meskipun menggunakan cluster dapat meningkatkan kemampuan layanan, mendukung replikasi master-slave, mode sentinel, pemisahan baca-tulis, dan mendistribusikan tekanan secara merata pada server, dll. Namun, sistem ini tidak memiliki toleransi kesalahan otomatis dan fungsi pemulihan. Jika terjadi waktu henti, beberapa permintaan baca dan tulis akan gagal, sehingga mengurangi ketersediaan sistem. Saat menggunakan, menganalisis dan memilih solusi yang berbeda berdasarkan kondisi bisnis.
Artikel ini direproduksi dari: https://juejin.cn/post/7079928963107127327
Penulis: tager