Jadual Kandungan
1. Mula-mula fikirkan soalan, mengapa redis memerlukan penyelesaian teragih apabila prestasinya begitu tinggi?
2. Konfigurasi replikasi-induk-hamba
1 Mula-mula, replika-replika menyertai kluster
4. Memahami id replikasi
5. Soalan Lazim tentang Replikasi Master-Slave
6. Ringkasan replikasi tuan-hamba
7. Arahan replikasi
Rumah pangkalan data Redis Analisis ringkas tentang prinsip replikasi tuan-hamba kluster dalam Redis

Analisis ringkas tentang prinsip replikasi tuan-hamba kluster dalam Redis

Jan 24, 2022 am 10:22 AM
redis

Artikel ini akan memberi anda pemahaman yang mendalam tentang prinsip replikasi tuan-hamba gugusan Redis. Saya harap ia akan membantu anda!

Analisis ringkas tentang prinsip replikasi tuan-hamba kluster dalam Redis

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. Analisis ringkas tentang prinsip replikasi tuan-hamba kluster dalam Redis2. Atau nyatakan

apabila memulakan program pelayan-semula Atau log masuk ke klien dan laksanakan arahan berikut

./redis-server --replicaof masterip masterport
Salin selepas log masuk
Ambil perhatian bahawa ini. kaedah ialah Pengubahsuaian semasa operasi boleh mencapai failover

Nota: Nod hamba juga boleh menjadi nod induk nod lain, membentuk hubungan replikasi lata. Tetapi nod lain juga menyegerakkan data daripada nod induk peringkat atas.
slaveof masterip masterport
Salin selepas log masuk

Selepas mengkonfigurasi gugusan, semak status gugusan melalui replikasi maklumat

Gunakan arahan peranan untuk menyemak maklumat peranan nod dalam kelompokAnalisis ringkas tentang prinsip replikasi tuan-hamba kluster dalam Redis

Perhatikan bahawa nod hamba adalah baca sahaja. Ralat akan dilaporkan semasa menulis arahan. Analisis ringkas tentang prinsip replikasi tuan-hamba kluster dalam Redis

Bagaimana hamba keluar dari kelompok Anda boleh melaksanakan perintah berikut: Analisis ringkas tentang prinsip replikasi tuan-hamba kluster dalam Redis

3 proses

slaveof no one
Salin selepas log masuk

1 Mula-mula, replika-replika menyertai kluster

2 sama ada ia mahu bermula dari nod induk secara kerap melalui pemasa Segerakkan data Analisis ringkas tentang prinsip replikasi tuan-hamba kluster dalam Redis

Perihalan kod sumber: Analisis ringkas tentang prinsip replikasi tuan-hamba kluster dalam Redis

3 proses - menyokong salinan tanpa cakera atau salinan berterusan rdb

//每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&#39;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 &#39;mf_master_offset&#39; 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&#39;t worry about socket errors, it&#39;s just a ping. */
            }
        }
    }
    ...
}
Salin selepas log masuk

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. Analisis ringkas tentang prinsip replikasi tuan-hamba kluster dalam RedisNod induk mempunyai dua atribut berikut, id replikasi (contoh tanda) dan offset (tanda strim ditulis pada nod hamba)

Jika tidak mencukupi dalam tunggakan penimbal nod induk, atau jika replika merujuk rekod sejarah (ID replikasi) yang tidak diketahui lagi, penyegerakan semula penuh berlaku

Penerangan sumber:
Replication ID, offset
Salin selepas log masuk

Semasa replikasi , proses peralihan keadaan hamba.

    //没有在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);
        }
    }
Salin selepas log masuk

4. Dalam peringkat penyebaran arahan, selepas penyegerakan penuh dilakukan, tuan dan hamba akan menyebarkan arahan untuk mencapai konsistensi data. Analisis ringkas tentang prinsip replikasi tuan-hamba kluster dalam Redis

Analisis ringkas tentang prinsip replikasi tuan-hamba kluster dalam Redis

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!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

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

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Tutorial Java
1664
14
Tutorial PHP
1268
29
Tutorial C#
1242
24
Cara Membina Mod Kluster Redis Cara Membina Mod Kluster Redis Apr 10, 2025 pm 10:15 PM

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 membersihkan data redis Cara membersihkan data redis Apr 10, 2025 pm 10:06 PM

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.

Cara Membaca Gilir Redis Cara Membaca Gilir Redis Apr 10, 2025 pm 10:12 PM

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.

Cara Mengkonfigurasi Masa Pelaksanaan Skrip Lua di Centos Redis Cara Mengkonfigurasi Masa Pelaksanaan Skrip Lua di Centos Redis Apr 14, 2025 pm 02:12 PM

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)

Cara menggunakan baris arahan redis Cara menggunakan baris arahan redis Apr 10, 2025 pm 10:18 PM

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.

Cara Melaksanakan Kaunter Redis Cara Melaksanakan Kaunter Redis Apr 10, 2025 pm 10:21 PM

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.

Cara Menetapkan Dasar Tamat Redis Cara Menetapkan Dasar Tamat Redis Apr 10, 2025 pm 10:03 PM

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.

Cara Mengoptimumkan Prestasi Debian Readdir Cara Mengoptimumkan Prestasi Debian Readdir Apr 13, 2025 am 08:48 AM

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

See all articles