Saat ini saya memiliki server redis hidup yang berjalan pada instance cloud dan saya ingin memigrasi server redis ini ke instance cloud baru dan menggunakan instance itu sebagai server redis baru saya. Jika itu MySQL, saya akan mengekspor DB dari server lama dan mengimpornya ke server baru. Bagaimana saya harus melakukan ini dengan redis?
PS: Saya tidak ingin membuat replikasi. Saya ingin sepenuhnya memigrasi server redis ke instance baru.
Jawaban:
Menyimpan snapshot dari database ke dump.rdb dengan menjalankan
BGSAVE
atauSAVE
dari baris perintah. Ini akan membuat file bernama dump.rdb di folder yang sama dengan server redis Anda. Lihat daftar semua perintah server .Salin dump.rdb ini ke server redis lain yang ingin Anda migrasikan. Ketika redis dimulai, ia mencari file ini untuk menginisialisasi database.
sumber
appendonly = yes
), aturno
sebelum memulai server Redis - jika tidak, ia tidak akan memuat kumpulan data baru. Setelah kumpulan data dimuat ke dalam memori, hidupkan kembali, baik di memori (config set appendonly yes
) dan di file konfigurasi./etc/redis/redis.conf
, dan Anda dapat mencari melalui itu untuk menemukan di mana Anda.rdb
file:cat /etc/redis/redis.conf | grep "rdb"
. Dalam kasus saya ini/var/lib/redis
redis-cli config get dir
akan memberi Anda direktori di mana.rdb
disimpan.Pertama, buat dump di server A.
Ini memastikan
dump.rdb
benar-benar mutakhir, dan menunjukkan kepada kami di mana ia disimpan (/var/lib/redis/dump.rdb
dalam hal ini).dump.rdb
juga secara berkala ditulis ke disk secara otomatis.Selanjutnya, salin ke server B:
Hentikan server Redis di B, salin dump.rdb (memastikan izin sama seperti sebelumnya), lalu mulai.
Versi Redis pada B harus lebih besar atau sama dengan versi A, atau Anda mungkin mengalami masalah kompatibilitas .
sumber
CONFIG GET dir
, yang dikembalikan"/usr/local/var/db/redis"
Jika Anda memiliki konektivitas antara server, lebih baik untuk mengatur replikasi (yang sepele, tidak seperti dengan SQL) dengan contoh baru sebagai slave node - maka Anda dapat mengganti node baru untuk dikuasai dengan satu perintah dan melakukan perpindahan dengan nol downtime.
sumber
Dimungkinkan juga untuk memigrasi data menggunakan perintah SLAVEOF:
Pastikan Anda telah menerima kunci dengan
KEYS *
. Anda bisa menguji contoh baru dengan cara lain juga, dan ketika Anda selesai hanya mengubah replikasi:sumber
Saat ini Anda juga dapat menggunakan MIGRATE, tersedia sejak 2.6.
Saya harus menggunakan ini karena saya hanya ingin memindahkan data dalam satu database dan tidak semuanya. Dua instance Redis hidup pada dua mesin yang berbeda.
Jika Anda tidak dapat terhubung langsung ke Redis-2 dari Redis-1, gunakan ssh port binding:
Sebuah skrip kecil untuk mengulang semua kunci menggunakan tombol dan MIGRATE setiap tombol. Ini Perl, tapi mudah-mudahan Anda mendapatkan ide:
Lihat http://redis.io/commands/migrate untuk info lebih lanjut.
sumber
Untuk memeriksa di mana dump.rdb harus ditempatkan ketika mengimpor data redis,
mulai klien
dan
kemudian
Di sini / Pengguna / Admin adalah lokasi dump.rdb yang dibaca dari server dan karenanya ini adalah file yang harus diganti.
sumber
Anda juga dapat menggunakan rdd
itu dapat membuang & mengembalikan server redis yang sedang berjalan dan memungkinkan kunci filter / match / rename dump
sumber
Elemen kunci dari migrasi tanpa downtime adalah:
CONFIG SET slave-read-only no
)Pendeknya:
Selain itu redis memiliki opsi yang memungkinkan untuk menonaktifkan redis sumber untuk menerima penulisan tepat setelah melepaskan target:
min-slaves-to-write
min-slaves-max-lag
Topik ini dibahas oleh
Penjelasan yang sangat bagus dari tim RedisLabs https://redislabs.com/blog/real-time-synchronization-tool-for-redis-migration
Dan bahkan alat interaktif mereka untuk bermigrasi: https://github.com/RedisLabs/redis-migrate
sumber
Saya juga ingin melakukan hal yang sama: memigrasikan db dari instance redis mandiri ke instance redis lainnya (redis sentinel).
Karena data tidak kritis (data sesi), saya akan mencoba https://github.com/yaauie/redis-copy mencoba.
sumber
Cara sederhana yang saya temukan untuk mengekspor / mencadangkan data Redis (membuat file dump) adalah memulai server melalui baris perintah dengan flag slaveof dan membuat replika langsung sebagai berikut (dengan asumsi sumber Redis adalah 1.2.3.4 pada port 6379):
sumber
Saya baru saja menerbitkan utilitas antarmuka baris perintah ke npm dan github yang memungkinkan Anda untuk menyalin kunci yang cocok dengan pola yang diberikan (datar *) dari satu basis data Redis ke yang lain.
Anda dapat menemukan utilitas di sini:
https://www.npmjs.com/package/redis-utils-cli
sumber
redis-dump akhirnya bekerja untukku. Dokumentasinya memberikan contoh cara membuang basis data Redis dan memasukkan data ke yang lain.
sumber