Berbagi teknologi

[redis instalasi k8s] instalasi k8s versi redis yang berdiri sendiri untuk mencapai kinerja tinggi dan ketersediaan tinggi

2024-07-11

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

Perkenalan

Artikel ini akan didasarkan pada pembuatan instance redis mode mandiri [semu] di lingkungan k8s. Karena kinerja IO penyimpanan bersama relatif rendah, penyimpanan bersama digunakan untuk cadangan data, dan data redis disimpan dalam bentuk jalur host. Hal ini membantu meningkatkan kinerja io redis bentuk redis master-slave untuk mengimplementasikan redis yang berdiri sendiri dan sangat tersedia.

1. Deskripsi kondisi dan lingkungan:

K8s versi k8s-1.29.4, lingkungan dibangun di ruang komputer telekomunikasi, dengan total enam node. Setiap node memiliki disk SSD non-sistem yang dipasang ke jalur /data/. Ada penyimpanan bersama NAS, yang menggunakan Alibaba Cloud NAS dan menggunakan jalur khusus dengan bandwidth jalur khusus 500Mb.

2. Deskripsi persyaratan:

  • Bangun instance redis: berdiri sendiri atau master-slave.
  • Ketersediaan tinggi: Sekalipun node k8s mati, penggunaannya tidak akan terpengaruh untuk waktu yang lama.
  • Performa tinggi: Diperlukan iO tinggi. Penyimpanan bersama atau penyimpanan terdistribusi ceph digunakan, dan membaca dan menulis iO akan sangat didiskon.
  • Keamanan data: Setelah terjadi peralihan, data harus selengkap mungkin
  • Instalasi sederhana, manajemen dan pemeliharaan mudah

3. Prinsip dan petunjuk pelaksanaan

1. Atur redis dalam mode master-slave. Pembacaan dan penulisan data master redis ada di disk SSD lokal, dan data redis budak ada di penyimpanan nas eksternal bersama.
2. Kemudian buat konfigurasi statefulset, tempatkan dua container, satu container sebagai redis utama, mount ke hostpath, buat direktori dengan nama host, dan simpan file rdb. Wadah lain berfungsi sebagai redis budak, dan jalur nas dipasang untuk membuat direktori dengan nama host dan menyimpan file rdb.
3. Sesuaikan penyimpanan parameter persistensi data dari redis dan sesuaikan waktu pengunduhan data ke parameter yang lebih kecil untuk memastikan bahwa data yang diperbarui disimpan dalam file rdb sesegera mungkin.
4. Setiap kali pod dijadwalkan atau dimulai ulang, salin file rdb yang disimpan di nas ke jalur host dan mulai redis.

Catatan: Hal ini dilakukan untuk memungkinkan redis master mencapai pemrosesan data bisnis berkinerja tinggi, dan redis budak bertanggung jawab atas persistensi data. Mungkin ada masalah berikut: 1. Ketika IO data baca dan tulis master terlalu tinggi , redis slave dipasang nas. Waktu pengunduhan data akan lebih lama.

4. Langkah-langkah detail

4.1. Buat file konfigurasi configmap

Konfigurasi berisi tiga file: file konfigurasi master redis, file konfigurasi redis budak, dan skrip sederhana yang melakukan operasi berbeda berdasarkan peran eksekusi.
redis-master:conf adalah file konfigurasi redis utama. Memori dikonfigurasikan ke 256M, port konfigurasinya adalah 6379, kata sandi konfigurasinya adalah redis#123, dan jalur penyimpanannya adalah /data/redis.
redis.conf: Dari file konfigurasi redis, konfigurasikan memori ke 256M, konfigurasikan port ke 6380, konfigurasikan kata sandi: redis#123, jalur penyimpanan adalah /data/redis-2, dan konfigurasikan data yang akan disinkronkan dari port 6379, dan sesuaikan waktu penyimpanan menjadi Jika ada 10 perubahan data dalam waktu 60 detik, penyimpanan akan dilakukan.
run.sh: Fungsi utamanya adalah untuk menentukan peran dan membuat direktori berdasarkan nama host, lalu menyambungkan secara lembut ke direktori penyimpanan. Langkah ini terutama untuk menyimpan data redis setiap layanan di direktorinya sendiri. Saat membuat redis baru, tidak akan menyebabkan konflik direktori pada node.

apiVersion: v1
kind: ConfigMap
metadata:
  name: defaultapp-redis-standalone-config
  namespace: default
  labels:
    appname: default-app
    app: defaultapp-redis-standalone-config
data:
  redis-master.conf: |
    port 6379
    maxmemory 256mb
    requirepass redis#123
    dir /data/redis
  redis.conf: |
    port 6380
    maxmemory 256mb
    requirepass redis#123
    save 3600 1 300 5 60 10
    dir /data/redis-2
    replicaof 127.0.0.1 6379
    masterauth redis#123
  run.sh: |
    #!/bin/sh
    role=$1
    hname=$(hostname)
    if [ $role == "master" ];then
        echo "run redis master"
        ls /etc/redis/ -l
        [ -d /home/redis/$hname ] || mkdir -p /home/redis/$hname
        [ -d /data ] || mkdir /data
        ln -s /home/redis/$hname /data/redis
        if [ -f /home/redis-2/$hname/dump.rdb ];then
                cp -vf /home/redis-2/$hname/dump.rdb /data/redis/
        else
                echo "[info] no bak dump.rdb"
        fi
        redis-server /etc/redis/redis-master.conf
    else
        echo "run redis slave"
        ls /etc/redis/ -l
        [ -d /home/redis-2/$hname ] || mkdir -p /home/redis-2/$hname
        [ -d /data ] || mkdir /data
        ln -s /home/redis-2/$hname /data/redis-2
        redis-server /etc/redis/redis.conf
    fi