


Analisis ringkas tentang prinsip replikasi tuan-hamba kluster dalam Redis
Artikel ini akan memberi anda pemahaman yang mendalam tentang prinsip replikasi tuan-hamba gugusan Redis. Saya harap ia akan membantu anda!
1. Mula-mula fikirkan soalan, mengapa redis memerlukan penyelesaian teragih apabila prestasinya begitu tinggi?
1 Mencapai prestasi yang lebih tinggi: Aplikasi konkurensi tinggi akan memberi kesan pada prestasi mesin tunggal Lebih banyak pelayan redis diperlukan untuk berkongsi tekanan dan mencapai pengimbangan beban
2. Mencapai ketersediaan tinggi: Jika Mesin Tunggal untuk mengelakkan masa henti/kegagalan perkakasan
3. Mencapai kebolehskalaan: Memori dan perkakasan mesin tunggal adalah terhad, capai pengembangan mendatar
Storan berlebihan atau serpihan untuk mencapai ciri di atas .
2. Konfigurasi replikasi-induk-hamba
Seperti Kafka, Mysql dan Rocketmq, redis menyokong penempatan kelompok terbahagi kepada induk dan hamba nod induk Ia adalah induk, dan nod hamba ialah hamba (yang terbaru dipanggil replika). Redis menyediakan arahan yang sangat mudah untuk membolehkan replikasi tuan-hamba. [Cadangan berkaitan: Tutorial video Redis]
Bagaimana untuk mengkonfigurasi dan mendayakan replikasi tuan-hamba?
Ambil membina gugusan pseudo secara tempatan sebagai contoh Port 6379 ialah nod hamba dan port 6378 ialah nod induk.
1. Konfigurasikan replika masterport dalam redis.conf daripada nod hamba, ia akan menyambung secara automatik ke nod induk dan mula menyegerakkan data 🎜>
Jika nod induk baharu diganti, konfigurasi ini akan ditulis semula. 2. Atau nyatakan
./redis-server --replicaof masterip masterport
slaveof masterip masterport
Selepas mengkonfigurasi gugusan, semak status gugusan melalui replikasi maklumat
Gunakan arahan peranan untuk menyemak maklumat peranan nod dalam kelompok
Perhatikan bahawa nod hamba adalah baca sahaja. Ralat akan dilaporkan semasa menulis arahan.
Bagaimana hamba keluar dari kelompok Anda boleh melaksanakan perintah berikut:
3 proses
slaveof no one
1 Mula-mula, replika-replika menyertai kluster
2 sama ada ia mahu bermula dari nod induk secara kerap melalui pemasa Segerakkan data
Perihalan kod sumber:
//每1s执行这个方法 void replicationCron(void) { ... //检查是否需要连接到master 如果是REPL_STATE_CONNECT状态,必须连接到master //#define REPL_STATE_CONNECT 1 Must connect to master if (server.repl_state == REPL_STATE_CONNECT) { serverLog(LL_NOTICE,"Connecting to MASTER %s:%d", server.masterhost, server.masterport); //和master创建连接 if (connectWithMaster() == C_OK) { serverLog(LL_NOTICE,"MASTER <-> REPLICA sync started"); } } //发送ping命令给slave if ((replication_cron_loops % server.repl_ping_slave_period) == 0 && listLength(server.slaves)) { /* Note that we don't send the PING if the clients are paused during * a Redis Cluster manual failover: the PING we send will otherwise * alter the replication offsets of master and slave, and will no longer * match the one stored into 'mf_master_offset' state. */ int manual_failover_in_progress = server.cluster_enabled && server.cluster->mf_end && clientsArePaused(); if (!manual_failover_in_progress) { ping_argv[0] = createStringObject("PING",4); replicationFeedSlaves(server.slaves, server.slaveseldb, ping_argv, 1); decrRefCount(ping_argv[0]); } } //发送换行符到所有slave,告诉slave等待接收rdb文件 listRewind(server.slaves,&li); while((ln = listNext(&li))) { client *slave = ln->value; int is_presync = (slave->replstate == SLAVE_STATE_WAIT_BGSAVE_START || (slave->replstate == SLAVE_STATE_WAIT_BGSAVE_END && server.rdb_child_type != RDB_CHILD_TYPE_SOCKET)); if (is_presync) { if (write(slave->fd, "\n", 1) == -1) { /* Don't worry about socket errors, it's just a ping. */ } } } ... }
Apabila hamba disambungkan kepada induk, gunakan pync (sebelum ini arahan penyegerakan, yang tidak membenarkan separa penyegerakan semula, jadi sekarang gunakan arahan PSYNC) untuk memulakan replikasi dan menyambungkan nod induk Id replikasi dan ofset maksimum yang diproses dihantar kepada induk. Nod induk mempunyai dua atribut berikut, id replikasi (contoh tanda) dan offset (tanda strim ditulis pada nod hamba)
Replication ID, offset
//没有在rdb进程,没有aof重写进程 if (server.rdb_child_pid == -1 && server.aof_child_pid == -1) { time_t idle, max_idle = 0; int slaves_waiting = 0; int mincapa = -1; listNode *ln; listIter li; listRewind(server.slaves,&li); while((ln = listNext(&li))) { client *slave = ln->value; //判断slave是否是等待bgsave状态 if (slave->replstate == SLAVE_STATE_WAIT_BGSAVE_START) { //多久没有发送心跳或查询数据了 空闲时间间隔 idle = server.unixtime - slave->lastinteraction; if (idle > max_idle) max_idle = idle; slaves_waiting++; mincapa = (mincapa == -1) ? slave->slave_capa : (mincapa & slave->slave_capa); } } if (slaves_waiting && (!server.repl_diskless_sync || max_idle > server.repl_diskless_sync_delay)) { /* Start the BGSAVE. The called function may start a * BGSAVE with socket target or disk target depending on the * configuration and slaves capabilities. */ //bgsave rdb生成 startBgsaveForReplication(mincapa); } }
4. Dalam peringkat penyebaran arahan, selepas penyegerakan penuh dilakukan, tuan dan hamba akan menyebarkan arahan untuk mencapai konsistensi data.
4. Memahami id replikasi
Setiap kali kejadian dimulakan semula dari awal sebagai contoh utama atau replika dipromosikan kepada contoh utama, ID replikasi baharu akan dijana untuk tika ini. Jika dua replika mempunyai ID replikasi yang sama, mereka mungkin mempunyai data yang sama pada masa yang berbeza Untuk sejarah tertentu (ID replikasi) yang memegang set data terkini, ofset difahami sebagai masa yang logik. Ia perlu dinilai oleh dua data ID Replikasi dan mengimbangi. Digunakan untuk menentukan di mana nod hamba telah menyegerakkan data.
5. Soalan Lazim tentang Replikasi Master-Slave
1.
Hamba mula-mula memadamkan datanya sendiri dan kemudian memuatkannya dengan fail rdb.
2. Semasa proses menjana fail RDB, bagaimana untuk menangani arahan menulis klien?
Simpan ke cache memori, dan hantar ke hamba selepas penghantaran rdb selesai.
3. Bagaimanakah replikasi Redis mengendalikan tamat tempoh kunci?
1. Salinan tidak akan tamat tempoh kunci, tetapi akan menunggu untuk hos tamat tempoh kunci. Apabila induk tamat tempoh kunci (atau mengusirnya kerana LRU), ia mensintesis arahan DEL yang dihantar ke semua replika.
2 Walau bagaimanapun, disebabkan oleh tamat tempoh dipacu hos, kadangkala replika mungkin masih mempunyai kunci memori yang telah tamat tempoh secara logik kerana pelayan induk tidak dapat menyediakan arahan DEL dalam masa yang ditetapkan. Untuk mengendalikan ini, replika menggunakan jam logiknya untuk melaporkan bahawa kunci tidak wujud, hanya untuk operasi baca yang tidak melanggar ketekalan set data (kerana arahan baharu daripada induk akan tiba)
3 . Tamat tempoh kunci tidak dilakukan semasa pelaksanaan skrip Lua. Apabila skrip Lua dijalankan, secara konsepnya masa dibekukan dalam nod induk, jadi kunci yang diberikan akan wujud atau tidak wujud sepanjang masa skrip berjalan. Ini menghalang kunci daripada tamat tempoh di tengah-tengah skrip dan memerlukan kunci untuk menghantar skrip yang sama ke replika dengan cara yang menjamin kesan yang sama dalam set data.
Sebaik sahaja replika dinaikkan ke peringkat utama, ia akan mula tamat tempoh kunci secara bebas dan tanpa sebarang bantuan daripada kunci utama lama.
6. Ringkasan replikasi tuan-hamba
1 masa pemulihan juga panjang
2. Jika tuan tidak normal, anda perlu memilih replika secara manual sebagai tuan
3 Dalam kes 1 tuan dan berbilang hamba, 1 tuan dan 1 hamba, masih terdapat masalah satu mata
4 Redis Versi 2.8.18 dan kemudiannya menyokong replikasi tanpa cakera dengan prestasi yang lebih tinggi.
7. Arahan replikasi
1 Replikasi tak segerak digunakan secara lalai, dan bilangan arahan disegerakkan disahkan oleh tak segerak
2. Satu induk boleh mempunyai berbilang Setiap salinan
3 Salinan juga boleh mempunyai salinannya sendiri Bermula dari redis4.0, salinan akan menerima aliran replikasi yang sama dari nod induk
4. . Replikasi boleh digunakan untuk sifat berskala, dan juga boleh digunakan untuk berbilang salinan pertanyaan baca sahaja
Untuk lebih banyak pengetahuan berkaitan pengaturcaraan, sila lawati: Pengenalan kepada Pengaturcaraan! !
Atas ialah kandungan terperinci Analisis ringkas tentang prinsip replikasi tuan-hamba kluster dalam Redis. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas











Mod Redis cluster menyebarkan contoh Redis ke pelbagai pelayan melalui sharding, meningkatkan skalabilitas dan ketersediaan. Langkah -langkah pembinaan adalah seperti berikut: Buat contoh Redis ganjil dengan pelabuhan yang berbeza; Buat 3 contoh sentinel, memantau contoh redis dan failover; Konfigurasi fail konfigurasi sentinel, tambahkan pemantauan maklumat contoh dan tetapan failover; Konfigurasi fail konfigurasi contoh Redis, aktifkan mod kluster dan tentukan laluan fail maklumat kluster; Buat fail nodes.conf, yang mengandungi maklumat setiap contoh Redis; Mulakan kluster, laksanakan perintah Buat untuk membuat kluster dan tentukan bilangan replika; Log masuk ke kluster untuk melaksanakan perintah maklumat kluster untuk mengesahkan status kluster; buat

Cara Mengosongkan Data Redis: Gunakan perintah Flushall untuk membersihkan semua nilai utama. Gunakan perintah flushdb untuk membersihkan nilai utama pangkalan data yang dipilih sekarang. Gunakan Pilih untuk menukar pangkalan data, dan kemudian gunakan FlushDB untuk membersihkan pelbagai pangkalan data. Gunakan perintah DEL untuk memadam kunci tertentu. Gunakan alat REDIS-CLI untuk membersihkan data.

Untuk membaca giliran dari Redis, anda perlu mendapatkan nama giliran, membaca unsur -unsur menggunakan arahan LPOP, dan memproses barisan kosong. Langkah-langkah khusus adalah seperti berikut: Dapatkan nama giliran: Namakannya dengan awalan "giliran:" seperti "giliran: my-queue". Gunakan arahan LPOP: Keluarkan elemen dari kepala barisan dan kembalikan nilainya, seperti LPOP Queue: My-Queue. Memproses Baris kosong: Jika barisan kosong, LPOP mengembalikan nihil, dan anda boleh menyemak sama ada barisan wujud sebelum membaca elemen.

Pada sistem CentOS, anda boleh mengehadkan masa pelaksanaan skrip LUA dengan mengubah fail konfigurasi REDIS atau menggunakan arahan REDIS untuk mengelakkan skrip jahat daripada memakan terlalu banyak sumber. Kaedah 1: Ubah suai fail konfigurasi Redis dan cari fail konfigurasi Redis: Fail konfigurasi Redis biasanya terletak di /etc/redis/redis.conf. Edit Fail Konfigurasi: Buka fail konfigurasi menggunakan editor teks (seperti Vi atau nano): sudovi/etc/redis/redis.conf Tetapkan had masa pelaksanaan skrip lua: Tambah atau ubah suai baris berikut dalam fail konfigurasi untuk menetapkan masa pelaksanaan maksimum skrip lua (unit: milidor)

Gunakan alat baris perintah redis (redis-cli) untuk mengurus dan mengendalikan redis melalui langkah-langkah berikut: Sambungkan ke pelayan, tentukan alamat dan port. Hantar arahan ke pelayan menggunakan nama arahan dan parameter. Gunakan arahan bantuan untuk melihat maklumat bantuan untuk arahan tertentu. Gunakan perintah berhenti untuk keluar dari alat baris arahan.

Kaunter Redis adalah satu mekanisme yang menggunakan penyimpanan pasangan nilai utama REDIS untuk melaksanakan operasi pengiraan, termasuk langkah-langkah berikut: mewujudkan kekunci kaunter, meningkatkan tuduhan, mengurangkan tuduhan, menetapkan semula, dan mendapatkan tuduhan. Kelebihan kaunter Redis termasuk kelajuan cepat, konkurensi tinggi, ketahanan dan kesederhanaan dan kemudahan penggunaan. Ia boleh digunakan dalam senario seperti pengiraan akses pengguna, penjejakan metrik masa nyata, skor permainan dan kedudukan, dan pengiraan pemprosesan pesanan.

Terdapat dua jenis strategi tamat tempoh data REDIS: Penghapusan berkala: Imbasan berkala untuk memadamkan kunci yang telah tamat tempoh, yang boleh ditetapkan melalui parameter-cap-cap-rempah yang telah tamat tempoh dan parameter kelewatan-cap-remove-time-time. Penghapusan Lazy: Periksa kekunci yang telah tamat tempoh hanya apabila kunci dibaca atau ditulis. Mereka boleh ditetapkan melalui parameter lazon-lazy-expire-expire-expire, lazy-lazy-user-del parameter.

Dalam sistem Debian, panggilan sistem Readdir digunakan untuk membaca kandungan direktori. Jika prestasinya tidak baik, cuba strategi pengoptimuman berikut: Memudahkan bilangan fail direktori: Split direktori besar ke dalam pelbagai direktori kecil sebanyak mungkin, mengurangkan bilangan item yang diproses setiap panggilan readdir. Dayakan Caching Kandungan Direktori: Bina mekanisme cache, kemas kini cache secara teratur atau apabila kandungan direktori berubah, dan mengurangkan panggilan kerap ke Readdir. Cafh memori (seperti memcached atau redis) atau cache tempatan (seperti fail atau pangkalan data) boleh dipertimbangkan. Mengamalkan struktur data yang cekap: Sekiranya anda melaksanakan traversal direktori sendiri, pilih struktur data yang lebih cekap (seperti jadual hash dan bukannya carian linear) untuk menyimpan dan mengakses maklumat direktori
