Lindungi Data Anda Menggunakan Cadangan CockRoach

Diterbitkan: 2019-07-24

Saat perusahaan mulai berkembang, ia akan mulai mengumpulkan data dengan kecepatan yang jauh lebih cepat. Sangat penting untuk merencanakan keadaan darurat dengan prosedur pencadangan dan pemulihan yang tepat untuk data ini.

Bayangkan betapa malapetakanya semua data pengguna Anda dihapus tanpa rencana bagaimana mengembalikannya ke kondisi yang bisa diterapkan.

Hari ini saya akan memandu Anda melalui rencana pencadangan dan pemulihan sederhana menggunakan beberapa teknologi yang kami gunakan di sini di Justuno. CockRoachDB, Google Cloud Storage, dan Golang a Google membuat bahasa pemrograman.

Jika Anda belum pernah mendengar tentang CockRoachDB tetapi telah bekerja dengan sistem database lain seperti Postgres atau MySQL, Anda akan merasa seperti di rumah sendiri. CockRoach memiliki manfaat tambahan sebagai sistem terdistribusi menurut GitHub itu “dibangun di atas penyimpanan nilai kunci yang transaksional dan sangat konsisten. Ini menskalakan secara horizontal, bertahan dari kegagalan disk, mesin, rak, dan bahkan pusat data dengan gangguan latensi minimal dan tidak ada intervensi manual dan mendukung transaksi ACID yang sangat konsisten.”

Jika Anda ingin mengikuti, lanjutkan dan buka panduan pemasangan CockRoach dan siapkan dengan uji coba 30 hari gratis edisi Enterprise secara lokal. Selain itu, Anda harus mendaftar ke akun Google Cloud Storage dan menginstal Golang di sistem Anda.

Setelah Anda siap, buka konsol GCS Anda dan mulai dengan membuat proyek.

CockRoach Buat Proyek

Setelah itu, Anda akan melihat layar yang mengatakan buat ember, klik opsi itu.

CockRoach Buat Bucket

Anda harus memilih nama unik, wilayah, lokasi, dan memilih izin tingkat objek dan tingkat ember yang ditetapkan. Jika berhasil, Anda akan melihat gambar yang mirip dengan saya di bawah ini. Sekali lagi pengaturan Anda akan berbeda tergantung pada kasus penggunaan Anda tetapi untuk mengikuti, menggunakan default tidak masalah.

Pengaturan Proyek CockRoach

Selanjutnya, Anda harus mengatasi beberapa pengaturan konfigurasi basis data yang akan memungkinkan cadangan CockRoach untuk diunggah ke penyimpanan cloud Google Anda secara langsung. Jika Anda tidak tertarik memanfaatkan GCS. CockRoach juga mendukung, Amazon, Azure, Http, dan URL file cadangan NFS/Lokal. Info lebih lanjut dapat ditemukan di sini.

Buka menu yang terletak di sisi kiri layar Anda dan pilih API & Layanan dan opsi Kredensial. Anda sekarang akan melihat layar yang mengatakan Buat Kredensial. Untuk tujuan ini, kami tertarik pada kunci akun layanan.

Kredensial CockRoach

Pada layar berikutnya, Anda akan memilih akun Layanan Baru; buat nama akun layanan; pilih tipe peran dan pastikan Anda memilih JSON sebagai tipe kunci. Untuk tutorial khusus ini, saya akan memilih Project dan Owner. Dalam lingkungan produksi, Anda akan menginginkan peran yang lebih membatasi.

Tangkapan Layar CockRoach

Setelah selesai, unduhan otomatis akan dimulai dengan konten JSON Anda, yang akan terlihat seperti gambar di bawah.

CockRoach JSON

Selanjutnya, menggunakan alat pilihan Anda terhubung ke instance kecoa Anda, saya lebih suka SQLPro untuk Postgres. Anda dapat terhubung ke instance Cockroach Anda menggunakan sebagian besar driver Psql. Jika Anda ingin terhubung melalui terminal Anda jika menjalankan instance lokal, Anda dapat menjalankan:

=> sql kecoa –tidak aman –host=localhost

Hal pertama yang ingin Anda lakukan adalah memperbarui cloudstorage.gs.default.key Anda dengan konten file JSON Anda.

Konten JSON CockRoach

Periksa pengaturan saat ini terlebih dahulu, seperti pada gambar di atas:

TAMPILKAN PENGATURAN CLUSTER cloudstorage.gs.default.key;

Selanjutnya, saya mengatur gs.default.key ke konten file JSON saya:

SET CLUSTER SETTING cloudtorage.gs.default.key = 'Isi Json'

Sekarang kita telah melalui pengaturan dan konfigurasi, saatnya untuk masuk ke hal-hal yang menyenangkan, kode yang sebenarnya.

Mulailah dengan membuat proyek Go; Saya telah menamai manajer cadangan saya. Selanjutnya, buat file main.go di direktori root Anda sebuah direktori manager dan file bernama crdb.go di direktori manager Anda. Direktori manajer akan menyimpan inti logika aplikasi, dan struktur file Anda akan terlihat mirip dengan milik saya.

Direktori Manajer CockRoach

Selanjutnya, kita perlu menginstal beberapa paket, buka terminal Anda, dan arahkan ke root proyek Anda. Jalankan yang berikut ini:

buka "github.com/lib/pq"

pergi mendapatkan "database/sql"

buka github.com/lib/pq

buka "cloud.google.com/go/storage"

dapatkan "github.com/snabb/isoweek"

Setelah menginstal ini, kami akan menyiapkan beberapa konstanta di bagian atas file kami untuk membuat koneksi Database kami. Konstanta ini akan menjadi host, port, user, password, dan dbname.

Konstanta CockRoach

Di dalam main kita akan menggunakan konstanta yang baru saja kita siapkan untuk membangun string koneksi psql dan mencoba membuat koneksi ke database kita. Jika terjadi kesalahan, kami panik.

Koneksi psql CockRoach

File Anda akan terlihat mirip dengan milik saya tetapi dengan konstanta yang cocok dengan pengaturan Anda. Lanjutkan dan jalankan aplikasi Anda dengan menjalankan yang berikut di terminal Anda:

“jalankan main.go”

Jika tidak ada kesalahan yang terjadi, Anda memiliki koneksi yang baik.

Menjalankan Aplikasi CockRoach

Tinggalkan main.go sejenak dan buka file crdb.go yang kita buat sebelumnya. Salin apa yang Anda lihat pada gambar di bawah ini sebelum kita membahas apa yang terjadi.

CockRoach crdb.go

Pertama, nyatakan nama paket dan bagian atas file:

Manajer paket

Mulailah dengan membuat antarmuka bernama CrdbManager. Jika Anda tidak terbiasa dengan antarmuka, mereka memungkinkan Anda untuk menentukan perilaku yang diperlukan. Dalam hal ini, kami fokus untuk mencadangkan data kami, melakukan pencadangan tambahan, dan melakukan pemulihan.

CockRoach CrdbManager

Selanjutnya, buat: crdbManagerStruct{}

Struktur crdb CockRoach

Anda dapat memikirkan struct seperti objek dalam bahasa lain. Biasanya, Anda akan membuat kelas kemudian secara eksplisit menyatakan bahwa kelas akan mengimplementasikan antarmuka yang dibuat. Tapi di Go Anda menerapkan metode dengan sintaks di bawah ini dan Go akan menyimpulkan struct Anda bertipe antarmuka.

Sintaks Struktur CockRoach

Sebelum kita mulai dengan kode cadangan, ada beberapa kebiasaan ketika berhadapan dengan Kecoa yang perlu diingat. Cockroach menyediakan dua bentuk backup: Full dan Incremental. Cadangan lengkap sederhana dan mengharuskan Anda untuk memberikan nama basis data dan lokasi penyimpanan cloud google Anda.

Contoh: CADANGAN DATABASE bank KE 'gs://acme-co-backup/database-bank-2017-03-27-weekly' SETELAH WAKTU SISTEM '-10s';

Pencadangan tambahan bisa sedikit lebih rumit karena memerlukan daftar semua cadangan lengkap dan tambahan sebelumnya. Pertama, Anda harus mendeklarasikan di mana cadangan Anda akan disimpan, lalu daftar semua cadangan sebelumnya mulai dari cadangan lengkap Anda, lalu inkremental berikutnya

EX: CADANGAN DATABASE bank KE 'gs://acme-co-backup/db/bank/2017-03-29-nightly' SEPERTI WAKTU SISTEM '-10s' TAMBAHAN DARI 'gs://acme-co-backup/ database-bank-2017-03-27-weekly', 'gs://acme-co-backup/database-bank-2017-03-28-nightly';

Dengan demikian, terserah Anda untuk membuat skema penyimpanan yang memungkinkan Anda membuat Perintah di atas secara dinamis. Untuk contoh ini, kita akan membuat skema yang mengambil backup harian dan backup pertama dalam seminggu adalah full backup dan menggunakan skema penamaan tahun-bulan-hari. Misalnya, cadangan pertama kami akan diberi nama: 2019-7-8-full, dan hari berikutnya adalah 2019-7-9-nightly. Semua cadangan untuk minggu ini akan disimpan di bawah direktori direktori mingguan yang diakhiri dengan "mingguan" di bawah nama basis data itu. Sebagai contoh:

2019-7-8-weekly/dbName/2019-7-8-full dan lokasi malam

akan menjadi

2019-7-8-weekly/dbName/2019-7-9-nightly.

Sekarang buat direktori baru di root proyek kami bernama util dan buat file bernama util.go; struktur direktori Anda akan terlihat seperti milik saya di bawah ini.

Struktur Direktori CockRoach

File util.go kami akan berisi pembantu yang akan menghasilkan nilai mingguan, malam, dan penuh kami secara otomatis. Util.go Anda akan terlihat seperti tangkapan layar di bawah ini.

CockRoach util.go

Mari kembali ke file crdb.go kita. Kita perlu menambahkan beberapa impor, sesuaikan kode Anda agar menyerupai gambar di bawah ini.

Penyesuaian kode crdb CockRoach

Saya telah memperbarui tanda tangan antarmuka CrdManager sekarang kecuali instance DB dan nama database. Saya juga membuat vars mingguan, mingguanPenuh, dan malam dengan memanggil metode util yang kami buat sebelumnya ditambah const yang akan menyimpan nama cadangan Google cloud kami.

Pembaruan CockRoach CrdbManager

Sekarang kita dapat melanjutkan ke metode pencadangan.

Metode Cadangan CockRoach

Metode pencadangan kami akan mengambil nilai instance db dan database yang kami cadangkan sebagai parameter. Kemudian kita akan menghasilkan lokasi penyimpanan untuk cadangan seperti yang dibahas sebelumnya. Ingat, direktori mingguan mengambil nama awal minggu, semua berikutnya penuh dan inkremental disimpan di bawah direktori itu selama seminggu. Lokasi gsStorage yang Anda buat akan terlihat seperti berikut:

gs://test-crdb-backup/2019-7-8-weekly/testdb/2019-7-8-full

Buat kueri lengkap untuk menjalankan, menjalankannya, dan panik jika kueri gagal. Perhatikan bahwa kueri diakhiri dengan:

`'SEBAGAI WAKTU SISTEM '-10S';`

Cockroach merekomendasikan untuk memulai pencadangan dari 10 detik yang lalu. Sekarang kita dapat beralih ke metode pencadangan tambahan.

Cadangan Tambahan CockRoach

Pencadangan inkremental dimulai dengan membuat lokasi penyimpanan inkremental gcs, seperti yang baru saja kita lakukan. Kali ini setelah membuat kueri, kita memerlukan daftar cadangan sebelumnya untuk menghasilkan kueri lengkap. Ini dilakukan dengan memanggil metode listDir dan diperiksa terakhir.

Setelah memeriksa daftar cadangan, Anda akan menyelesaikan kueri hasil dan menjalankannya. Jika gagal panik, dan akhirnya, kueri Anda akan terlihat seperti di bawah ini:

CADANGAN DATABASE bank KE 'gs://test-crdb-backup/2019-7-8-weekly/testdb/2019-7-10-nightly' SEPERTI

WAKTU SISTEM '-10s' TAMBAHAN DARI 'gs://test-crdb-backup/2019-7-8-weekly/testdb/2019-7-8-full',

'gs://test-crdb-backup/2019-7-8-weekly/testdb/2019-7-9-nightly;

Metode pemulihan berikutnya.

Metode Pemulihan CockRoach

Restore mirip dengan incremental backup. Kami akan membuat kueri, lalu memanggil daftar direktori dan menambahkan daftar basis data ke kueri asli kami. Setelah itu, jalankan kueri dan panik jika kueri kami gagal.

Ingat untuk penambahan dan pemulihan, urutan daftar cadangan Anda penting. Mulailah dengan pencadangan lengkap Anda, lalu pencadangan Inkremental berikutnya, dan kemudian pencadangan inkremental berikutnya. Jika Anda tidak memesannya dengan benar, pemulihan dan pencadangan tambahan akan gagal. Jika Anda ingin informasi lebih lanjut tentang mengembalikan fungsi klik di sini.

Sekarang kita beralih ke metode List listDir kita.

Metode Daftar CockRoach

Hal pertama yang akan Anda perhatikan adalah listDir tidak dikapitalisasi karena metode huruf kecil bersifat pribadi di Go. Karena listDir adalah pembantu dalam metode Antarmuka kami, metode tidak perlu dipublikasikan.

Pertama, kita akan mulai dengan membuat objek bucket yang akan kita gunakan untuk mengkueri objek penyimpanan kita. Selanjutnya, buat kueri yang menunjuk ke cadangan mingguan kami untuk instans database tertentu. Dari sana, buat sepotong Dirs. Setelah itu, jalankan pemeriksaan untuk memastikan bahwa cadangan lengkap adalah yang pertama terdaftar di irisan kami dan jika tidak, balikkan irisan.

Saya melihat beberapa perilaku aneh saat mendaftar Dir di penyimpanan cloud Google. Terkadang panggilan akan mengembalikan daftar dalam urutan menaik kemudian turun. Pastikan Anda meluangkan waktu dengan metode ini, dengan fokus pada pengecekan ulang daftar pengembalian direktori Anda dalam urutan yang benar.

Pendekatan lain bisa dengan mengubah skema penamaan Anda dan menambahkan cap waktu sebagai bagian dari nama dir. Dalam situasi itu, Anda kemudian dapat mengulangi daftar direktori Anda dan memastikan file Anda diurutkan dengan benar berdasarkan waktu naik. Metode listDir akan sangat bergantung pada desain penyimpanan skema Anda. Sekali lagi, jika listDir Anda tidak diurutkan dengan benar, pemulihan dan pencadangan tambahan Anda akan gagal!

Mari kita lihat file main.go untuk terakhir kalinya.

CockRoach main.go file

Pastikan untuk memperbarui daftar impor Anda dan semua konstanta Anda diisi dengan benar. Di bawah const tambahkan kode berikut.

CockRoach main.go file menambahkan kode

Pertama, buat pengelompokan vars untuk argumen baris perintah yang mendikte logika aplikasi kita. Satu tanda perintah adalah “operasi”, dengan opsi nilai pencadangan, pemulihan, atau inkremental. Yang lainnya adalah database untuk nama dan tabel database Anda jika memanggil operasi pemulihan. Logika koneksi db kami tetap sama, dan di bawahnya kami membuat instance dbManager kami untuk mengurai argumen baris perintah yang kami berikan ke aplikasi. Kemudian jalankan pemulihan cadangan atau inkremental tergantung pada operasi yang dipanggil. Jika Anda tidak memiliki pengalaman dengan flag baris perintah, Anda dapat menemukan info lebih lanjut di sini. Saat Anda menjalankan aplikasi, perintah Anda akan terlihat seperti berikut:

jalankan main.go -operation=backup -database=dbName

Pikiran terakhir

Ini bukan aplikasi siap produksi. Ini hanya demo untuk menjalankan proses berpikir Anda dan idealnya menghemat waktu Anda dengan konfigurasi. Sepanjang aplikasi ini, ketika kami menemukan segala bentuk kesalahan, kami hanya memanggil panik, yang memaksa aplikasi untuk keluar. Di lingkungan produksi, Anda ingin menangani ini secara berbeda, menambahkan beberapa bentuk log atau jenis logika pemberitahuan seperti email atau acara SMS untuk memberi tahu Anda status pekerjaan.

Aplikasi ini mengasumsikan bahwa Anda secara manual meneruskan setiap nama database ke dalam aplikasi Anda. Meskipun ini dapat dilakukan dengan menulis skrip yang melewati nilai-nilai ini dan kemudian menyiapkan tugas cron untuk menjalankan skrip, ada pendekatan yang lebih baik. Saran saya adalah menulis kode yang mengeksekusi cadangan setiap database di instance Cockroach Anda dengan memanggil "tampilkan database" yang mengulangi hasil pengembalian dan memanggil metode cadangan Anda. Jangan lupa bahwa Anda dapat mengatur tugas cron untuk menjalankan aplikasi Go Anda setiap malam.

Terakhir, penting untuk dicatat bahwa saat menjalankan pemulihan di atas meja, Cockroach menganggap tabel Anda tidak ada. Jika Anda mencoba menjalankan pemulihan di atas meja dan tabel itu ada, Anda akan menerima kesalahan. Ingatlah urutan menjalankan pemulihan pada tabel dengan pembatasan kunci asing. Jika Anda mencoba memulihkan tabel yang memiliki batasan kunci asing, tetapi tabel Anda yang lain tidak ada, Anda akan mengalami masalah.

Anda dapat menjalankan pemulihan dengan menambahkan:

`Dengan Skip_missing_foreign_keys'

Ini akan menghilangkan batasan kunci asing, tetapi pastikan untuk menambahkan kembali batasan kunci asing sesudahnya.

Semoga posting ini menjelaskan cara mencadangkan dan memulihkan data perusahaan Anda jika terjadi keadaan darurat. Memastikan Anda siap dan siap akan membantu meminimalkan dampak dan membuat Anda kembali aktif dan berjalan dengan cepat.