Rumah  >  Artikel  >  pangkalan data  >  Mari kita bincangkan tentang penyegerakan tuan-hamba dan mod sentinel dalam Redis

Mari kita bincangkan tentang penyegerakan tuan-hamba dan mod sentinel dalam Redis

青灯夜游
青灯夜游ke hadapan
2022-02-08 09:55:533555semak imbas

Artikel ini akan memberi anda pemahaman yang mendalam tentang penyegerakan tuan-hamba dan mod sentinel dalam Redis, dan memperkenalkan cara menghidupkan dan mematikan penyegerakan tuan-hamba serta membina dan memulakan Sentinel semua orang!

Mari kita bincangkan tentang penyegerakan tuan-hamba dan mod sentinel dalam Redis

Penyegerakan tuan-hamba

Penyegerakan tuan-hamba (replikasi tuan-hamba) ialah asas kepada Redis perkhidmatan ketersediaan tinggi dan merupakan juga digunakan dalam operasi berbilang mesin Yang paling asas . [Cadangan berkaitan: Tutorial Video Redis]

Kami memanggil nod yang menyimpan data terutamanya nod induk (master), dan nod replika lain yang menyalin data daripada nod induk dipanggil nod hamba ( slave), seperti yang ditunjukkan dalam rajah di bawah:

Mari kita bincangkan tentang penyegerakan tuan-hamba dan mod sentinel dalam Redis

Dalam Redis, nod induk boleh mempunyai berbilang nod hamba , satu Nod hamba juga boleh menjadi nod induk pelayan lain , seperti yang ditunjukkan dalam rajah di bawah:

Mari kita bincangkan tentang penyegerakan tuan-hamba dan mod sentinel dalam Redis

Kelebihan penyegerakan tuan-hamba

Penyegerakan tuan-hamba mempunyai tiga kelebihan berikut:

  • Prestasi : Dengan penyegerakan induk-hamba, anda bolehMenetapkan tugas pertanyaan kepada pelayan hamba dan menggunakan pelayan induk untuk melaksanakan operasi tulis Ini meningkatkan kecekapan pengendalian dan pengedaran program semua tekanan kepada setiap pelayan;
  • Ketersediaan tinggi: Dengan penyegerakan induk-hamba, apabila nod pelayan utama turun, nod hamba boleh cepat dinaikkan pangkat ke nod induk , menjimatkan masa berharga untuk Redis pemulihan masa henti pelayan;
  • mencegah kehilangan data: Apabila cakera pelayan induk rosak, pelayan hamba lain masih mengekalkan data yang berkaitan Bagi semua data yang hilang.

Dayakan penyegerakan tuan-hamba

Sediakan pelayan hamba semasa operasi

DalamRedis Semasa proses berjalan, kita boleh menggunakan perintah replicaof host port untuk menetapkan diri kita sebagai pelayan hamba 目标 IP.

Jika perkhidmatan induk telah menetapkan kata laluan, anda perlu memasukkan kata laluan pelayan induk pada pelayan hamba dengan menggunakan perintah config set masterauth 主服务密码

Selepas melaksanakan perintah replicaof, data pelayan hamba akan dikosongkan, perkhidmatan induk akan menyegerakkan salinan datanya ke pelayan hamba.

Tetapkan pelayan hamba pada permulaan

Anda boleh menggunakan arahan redis-server --port 6380 --replicaof 127.0.0.1 6379 untuk menetapkan diri anda sebagai pelayan hamba pelayan sasaran.

Penyegerakan data

Penyegerakan data lengkap

Apabila terdapat sambungan pelayan hamba baharu, Untuk memastikan ketekalan berbilang pangkalan data, pelayan induk akan melaksanakan perintah bgsave sekali untuk menjana fail RDB, dan kemudian menghantarnya ke pelayan hamba dalam bentuk Socket , dan pelayan hamba akan menerima RDB Selepas memuatkan fail, muatkan semua data ke dalam program anda sendiri untuk melengkapkan penyegerakan data penuh.

Penyegerakan data separa

Sebelum Redis 2.8 setiap kali pelayan hamba pergi ke luar talian dan kembali dalam talian, pelayan induk akan melakukan penyegerakan data yang lengkap, dan kemudian ini situasi Jika masa luar talian agak singkat, adalah sangat kekok dan tidak menjimatkan untuk menyegerakkan semua data apabila hanya sejumlah kecil data tidak segerak Fungsi ini telah dioptimumkan dalam Redis 2.8. Kaedah pengoptimuman

Redis 2.8 ialah apabila perkhidmatan hamba pergi ke luar talian, pelayan induk akan menyimpan arahan tulis luar talian dalam baris gilir dengan saiz tertentu. keluar perintah pelaksanaan , apabila pelayan hamba ditulis semula dan kembali dalam talian, perkhidmatan induk akan menentukan sama ada arahan semasa tempoh luar talian masih dalam baris gilir, ia akan menghantar data dalam baris gilir secara langsung ke pelayan hamba , dengan itu mengelakkan pembaziran sumber untuk penyegerakan lengkap.

Saiz baris gilir lalai untuk menyimpan arahan luar talian ialah 1MB Pengguna boleh mengubah suai item konfigurasi saiz baris gilir repl-backlog-size dengan sendirinya.

Penyegerakan data tanpa cakera

Semasa sambungan induk-hamba pertama, fail RDB akan dijana dahulu, dan kemudian fail RDB akan dihantar ke pelayan, jika pelayan utama bukan SSD, operasi I/O sistem adalah sangat tinggi.

Redis 2.8.18 Menambah fungsi salin tanpa cakera yang baharu Fungsi salin tanpa cakera tidak akan mencipta fail RDB secara setempat, tetapi akan menghasilkan proses anak, dan kemudian proses anak akan terus menyalin fail 🎜 > fail ditulis kepada pelayan hamba, supaya pelayan induk boleh melengkapkan penyegerakan data dengan pelayan hamba tanpa membuat fail Socket. RDBRDBUntuk menggunakan fungsi bebas salinan, hanya tetapkan nilai item konfigurasi

kepada

Nilai konfigurasi lalainya ialah repl-diskless-sync. yesno

Soal peranan pelayanGunakan perintah

untuk menanyakan maklumat peranan tuan-hamba pelayan semasa.

role

Matikan penyegerakan tuan-hamba Anda boleh menggunakan perintah

untuk menghentikan replikasi daripada pelayan hamba.

replicaof no oneSelepas melaksanakan perintah

, anda akan menukar daripada pelayan kepada pelayan induk.

replicaof no onePenukaran jenis pelayan tidak akan menjejaskan data dan data pelayan ini akan dikekalkan.

Nota

Isu konsistensi data

Apabila pelayan hamba telah selesai dan perkhidmatan induk Selepas data disegerakkan, arahan baharu akan dihantar ke pelayan hamba dalam cara yang tidak segerak Semasa proses ini, penyegerakan induk-hamba akan mempunyai ketidakkonsistenan data jangka pendek Jika pelayan induk turun sebelum penyegerakan tak segerak ini berlaku. data akan menjadi Tidak konsisten.

Hamba baca sahaja

Secara lalai, induk dalam mod replikasi boleh melaksanakan kedua-dua operasi tulis dan baca, manakala hamba hanya boleh Melakukan operasi baca.

Anda boleh melaksanakan perintah

pada pelayan hamba untuk membolehkan pelayan hamba menulis mod, tetapi anda perlu memberi perhatian kepada perkara berikut:

config set replica-read-only no

Data yang ditulis pada pelayan hamba tidak akan disegerakkan ke pelayan induk;
  • Apabila nilai kunci adalah sama, data pada pelayan induk boleh menimpa pelayan hamba; penyegerakan, data pelayan hamba akan dikosongkan.
  • Perubahan dalam arahan salin

Arahan salin yang digunakan sebelum ini ialah , dan selepas

arahan salin ditukar kepada

, dalam versi yang lebih tinggi (Redis 5.0) kita harus cuba menggunakan slaveof, kerana perintah Redis 5.0 mungkin akan ditinggalkan pada bila-bila masa. replicaofRedis 5 Mod Sentinelreplicaofslaveof

Mod replikasi induk-hamba, yang merupakan asas kepada

operasi berbilang mesin, tetapi mod ini sendiri mengalami masalah maut apabila nod induk ranap , campur tangan manual diperlukan untuk memulihkan penggunaan biasa

.

Kami memerlukan alat automatik - Redis (Mod Sentinel) untuk menukar proses manual kepada automatik, supaya Redis mempunyai keupayaan pemulihan bencana automatik (

).

Redis SentinelRedisSentinel adalah setara dengan melaksanakan tugas pemantauan pada pelayan tuan dan hamba. Sebaik sahaja didapati bahawa pelayan induk tidak berfungsi, peraturan yang sepadan akan diaktifkan dengan cepat untuk menaik taraf pelayan hamba kepada pelayan induk tanpa campur tangan manual, menjadikannya lebih stabil dan lebih pantasfailover. Unit peruntukan minimum

ialah seorang tuan dan seorang hamba.

Redis Sentinel

Mari kita bincangkan tentang penyegerakan tuan-hamba dan mod sentinel dalam Redis

Redis Sentinel membina

Gunakan arahan untuk memulakan , Fail

mesti disediakan semasa memulakannya Fail konfigurasi ini mesti mengandungi maklumat nod induk pemantauan:

./src/redis-sentinel sentinel.confSentinel di mana: sentinel.conf

sentinel monitor master-name ip port quorum

mewakili pemantauan Beri. nama nod induk;

  • mewakili IP nod induk; pengesahan nod induk Bilangan master-names di luar talian Jika
  • ditetapkan kepada 1, ini bermakna selagi terdapat satu
  • untuk menilai bahawa ia di luar talian, anda boleh mengesahkan bahawa ia benar-benar luar talian. . ip
  • Jika pelayan induk port mempunyai kata laluan,
  • mesti mengandungi yang berikut:
  • quorumSentinelquorumSentinelMulakan gugusan Sentinel

Redis Kami bukan sahaja akan memulakan satu sentinel.conf dalam persekitaran pengeluaran, kerana jika kami memulakan satu

, jika malangnya turun, ia tidak akan dapat menyediakan perkhidmatan pemulihan bencana automatik, yang tidak selaras dengan tujuan ketersediaan tinggi kami, jadi kami akan memulakan berbilang
sentinel monitor mymaster 127.0.0.1 6379 1
sentinel auth-pass mymaster pwd654321
pada mesin fizikal yang berbeza untuk membentuk kluster

untuk memastikan ketersediaan perkhidmatan yang tinggi.

Kaedah memulakan kluster Sentinel adalah sama seperti kaedah memulakan pelayan tunggal di atas. Kita hanya perlu memantau berbilang Sentinel ke satu nod pelayan utama, dan kemudian berbilang Sentinel akan menemui satu sama lain secara automatik Dan membentuk gugusan Sentinel.

Mari kita bincangkan tentang penyegerakan tuan-hamba dan mod sentinel dalam Redis

Secara amnya, bilangan gugusan Sentinel ialah nombor ganjil yang lebih besar daripada 1 dan parameter quorum ditetapkan kepada separuh tambah 1, contohnya, 5 ditetapkan kepada 3, 7 Hanya tetapkan kepada 4.

Dua konsep: luar talian subjektif dan luar talian objektif.

Apabila terdapat Sentinel dalam kelompok Sentinel yang menganggap pelayan induk telah berada di luar talian, ia akan menandakan pelayan induk sebagai luar talian secara subjektif (Subjectively Down, SDOWN), dan kemudian bertanya kelompok Adakah Sentinellain dalam pelayan juga menganggap bahawa pelayan berada di luar talian Apabila bilangan Sentinel yang bersetuju bahawa pelayan utama berada di luar talian mencapai nombor yang ditentukan oleh parameter quorum, Sentinel akan? tandai pelayan utama yang sepadan Ambil sasaran di luar talian (Objectively down,ODOWN) dan mula gagal mengatasinya.

Peraturan pilihan raya perkhidmatan induk

Tetapan keutamaan pemilihan nod induk baharu

redis.conf replica-priority pilihan untuk menetapkan keutamaan berkempen untuk nod induk baharunya ialah 100, dan nilai maksimumnya juga 100. Semakin kecil nilainya, semakin tinggi beratnya.

Peraturan pemilihan nod induk baharu

Pemilihan nod induk baharu akan mengecualikan nod hamba yang tidak memenuhi syarat, dan kemudian nod hamba yang selebihnya akan dipilih mengikut keutamaan.

Nod hamba dengan syarat berikut akan dikecualikan:

  • Kecualikan semua pelayan hamba luar talian yang disyaki yang berada di luar talian dan tidak bertindak balas terhadap pengesanan degupan jantung untuk masa yang lama;

  • Kecualikan semua pelayan hamba yang telah lama tidak berkomunikasi dengan pelayan induk dan mempunyai status data yang sudah lapuk; dengan keutamaan (

    ) 0 pelayan.
  • replica-priorityPerintah pemilihan nod hamba yang layak:

Nod hamba yang mempunyai keutamaan tertinggi ialah nod induk baharu;

    Jika keutamaan adalah sama, offset replikasi akan ditentukan, dan nod hamba dengan ofset terbesar akan menang; , pilih
  • Yang mempunyai ID terkecil dijana secara rawak pada masa jalan dan merupakan pelayan induk baharu.

  • Nod induk lama kembali dalam talian

  • Jika nod induk lama yang terdahulu kembali dalam talian, ia akan dijalankan dalam pelayan induk-hamba mod sebagai nod hamba.

    Redis

  • Cara Sentinels berfungsi

Pertama, setiap

akan menghantar mesej kepada pelayan induk yang diketahui pada kekerapan 1 kali sesaat . Hantar arahan PING daripada pelayan dan contoh

yang lain.

Jika masa balasan terakhir yang sah kepada perintah melebihi nilai yang dikonfigurasikan oleh (lalai 30s), maka kejadian ini akan ditandakan sebagai secara subjektif di luar talian oleh .

Jika pelayan induk ditandakan sebagai subjektif luar talian, maka semua

nod yang memantau pelayan induk mesti mengesahkan bahawa pelayan induk sememangnya telah memasuki keadaan luar talian subjektif pada kekerapan 1 kali sesaat. SentinelSentinelJika bilangan yang mencukupi (

nilai konfigurasi)

bersetuju dengan penghakiman ini dalam julat masa yang ditentukan, maka pelayan induk ditandakan sebagai luar talian secara objektif. Pada masa ini, semua PING akan memilih nod induk baharu secara automatik mengikut rundingan peraturan. down-after-millisecondsSentinelNota: Balasan

yang sah boleh menjadi:

atau Sentinel. Jika nilai pulangan bukan tiga balasan di atas, atau tiada balasan kepada perintah

dalam masa yang ditentukan, maka

menganggap balasan yang dikembalikan oleh pelayan adalah tidak sah (quorum). SentinelSentinel

Operasi arahan SentinelPING PONG、-LOADING-MASTERDOWNPINGSentinelSentinel boleh memantau berbilang nod induk dan bukannya satu pelayan sahajanon-valid. Jika anda ingin memantau berbilang nod induk, anda hanya perlu menetapkan berbilang

dalam fail konfigurasi Kami menggunakan

untuk membezakan nod induk yang berbeza. Soal maklumat semua pelayan induk yang dipantau

sentinel monitor master-name ip port quorummaster-nameSoal maklumat nod induk tertentu

sentinel mastersLihat IP dan port nod induk

sentinel master master-nameSoal hamba Maklumat nod

atau

sentinel get-master-addr-by-name master-name

Tanya maklumat Sentinel lain dalam kelompok Sentinel

检查可用 Sentinel 的数量

sentinel ckquorum master-name

强制故障转移

sentinel failover master-name

在线修改配置信息

Redis 2.8.4 之前如果需要修改 Sentinel 的配置文件,需要重启 Sentinel

Redis 2.8.4 之后,我们可以在线修改配置文件了。

增加监视主节点

sentinel monitor mymaster IP Port Quorum 命令。

移除主节点的监视

使用 sentinel remove master-name 命令。

修改 quorum 参数

使用 sentinel set master-name quorum n 命令。

quorum 参数用来表示确认主节点下线的 Sentinel 数量,如果 quorum 设置为 1 表示只要有一台 Sentinel 确认主观下线后,这个主节点就客观(真正地)下线了。

以上所有对配置文件的修改,都会自动被刷新到物理配置文件 sentinel.conf

代码实战

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisSentinelPool;
import utils.Config;

import java.util.HashSet;
import java.util.Set;

public class SentinelExample {
    // master name
    private static String _MASTER_NAME = "mymaster";

    public static void main(String[] args) {
        // Sentinel 配置信息
        Set<String> set = new HashSet<>();
        // 连接信息 ip:port
        set.add("127.0.0.1:26379");
        // 创建 Sentinel 连接池
        JedisSentinelPool jedisSentinel = new JedisSentinelPool(_MASTER_NAME,
                set, Config.REDIS_AUTH);
        // 获取 Redis 客户端
        Jedis jedis = jedisSentinel.getResource();
        // 设置元素
        String setRes = jedis.set("key", "Hello, redis.");
        System.out.println(setRes);
        // 获取元素
        System.out.println(jedis.get("key"));
    }
}

更多编程相关知识,请访问:编程入门!!

Atas ialah kandungan terperinci Mari kita bincangkan tentang penyegerakan tuan-hamba dan mod sentinel dalam Redis. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:juejin.cn. Jika ada pelanggaran, sila hubungi admin@php.cn Padam