This commit is contained in:
parent
7fed4dbcdd
commit
8de8f51a0b
145
content/Merancang-backup.md
Normal file
145
content/Merancang-backup.md
Normal file
@ -0,0 +1,145 @@
|
|||||||
|
---
|
||||||
|
title: Merancang backup
|
||||||
|
tags:
|
||||||
|
- evergreen
|
||||||
|
---
|
||||||
|
|
||||||
|
Saya menggunakan strategi backup ["3-2-1"](http://archive.rizaldy.edgy.direct/archive/1709984547.499227/singlefile.html) yang mana cukup populer digunakan di industri. Maksud dari strategi tersebut adalah, memiliki:
|
||||||
|
|
||||||
|
- 3 salinan data
|
||||||
|
- 2 salinan berada di lokal (on-site) namun di media berbeda
|
||||||
|
- 1 salinan berada diluar (off-site)
|
||||||
|
|
||||||
|
Media yang saya gunakan adalah:
|
||||||
|
|
||||||
|
- 2 HDD melalui RAID 1 (mirror) untuk salinan on-site
|
||||||
|
- 1 SSD eksternal untuk salinan off-site
|
||||||
|
|
||||||
|
Untuk RAID 1 mungkin dapat dipertanyakan karena RAID bukanlah backup[^1], dan saya tidak menggunakan fitur "Snapshot Replication" untuk memiliki salinan yang tahan akan error di volume tersebut. That's fine for now (and *in* this circumstances) i guess.
|
||||||
|
|
||||||
|
Pertanyaan umum terkait "backup" adalah:
|
||||||
|
|
||||||
|
- Apa yang harus di backup?
|
||||||
|
- Kapan harus melakukan backup?
|
||||||
|
|
||||||
|
Dan disini kita akan bahas.
|
||||||
|
|
||||||
|
## Aturan backup
|
||||||
|
|
||||||
|
Setiap salinan yang bersifat sensitif, harus disimpan dalam bentuk ter-enkripsi. Untuk on-site backup, menggunakan enkripsi at-rest dan off-site menggunakan enkripsi end-to-end. Enkripsi terkait salinan yang bersifat sensitif ini hanya berlaku di off-site.
|
||||||
|
|
||||||
|
Untuk enkripsi at-rest saya menggunakan Linux Unified Key Setup (LUKS) dan untuk enkripsi end-to-end saya menggunakan [Restic](https://restic.net/). Alasan menggunakan pendekatan ini adalah:
|
||||||
|
|
||||||
|
1. Untuk menghindari penggunaan enkripsi di level volume untuk off-site media
|
||||||
|
2. Jika sekiranya tidak ada yang tau *encryption key* dari ketiga media tersebut, setidaknya masih ada data yang bisa diakses yang mungkin bermanfaat selain untuk diri saya sendiri
|
||||||
|
|
||||||
|
Bagaimanapun menggunakan enkripsi at-rest adalah standar untuk menghindari kasus pencurian data jika media (seperti HDD) "dikeluarkan" dari tempat yang seharusnya. Bedanya dengan end-to-end adalah enkripsi terjadi sebelum data tersebut dipindahkan, yang gampangnya, seperti enkripsi terjadi saat pengguna mengirim pesan ke tujuan, namun hanya si tujuan yang dapat "membaca" pesan nya.
|
||||||
|
|
||||||
|
## Retention policy
|
||||||
|
|
||||||
|
Untuk setiap salinan yang disimpan dalam bentuk ter-enkripsi umumnya salinan tersebut berumur 1 bulan. Dengan fitur deduplication nya Restic, jumlah snapshot tidak menjadi "multiplier" terhadap jumlah kapasitas yang digunakan, yang membuat penyimpanan menjadi lebih efektif.
|
||||||
|
|
||||||
|
## Cara backup
|
||||||
|
|
||||||
|
- On-site backup terjadi dibelakang layar oleh DSM nya Synology.
|
||||||
|
- Off-site backup terjadi melalui scheduler yang menjalankan program `restic(1)` dari program USB copy.
|
||||||
|
- SSD eksternal selalu terhubung ke NAS kecuali saat saya sedang berpergian lama.
|
||||||
|
|
||||||
|
## Barang pribadi
|
||||||
|
|
||||||
|
Untuk saat ini saya belum berencana melakukan backup untuk level perangkat (Macbooks, iPads, iPhones, dkk) karena belum memiliki alasan khusus. Gampangnya, tidak ada barang "berharga" yang disimpan di perangkat tersebut selain konfigurasi/preferensi perangkat, dan jumlah aplikasi yang saya gunakan pun tidak sebanyak itu sehingga bisa saya lacak [[/uses | disini]].
|
||||||
|
|
||||||
|
### Yang di backup
|
||||||
|
|
||||||
|
Ini adalah barang-barang pribadi seperti media, dokumen, dan lain-lain. Mungkin aset-aset digital yang digunakan untuk keperluan/kepentingan pribadi. Untuk hal ini saya memiliki kategori khusus:
|
||||||
|
|
||||||
|
1. Aset yang hanya boleh diakses oleh saya pribadi
|
||||||
|
2. Aset yang boleh diakses oleh siapapun yang memiliki akses
|
||||||
|
|
||||||
|
Untuk poin pertama, salinan disimpan dalam bentuk ter-enkripsi (E2E) di off-site. Poin pertama ini mungkin barang-barang yang penting untuk saya namun "nice to know" untuk yang lain :)
|
||||||
|
|
||||||
|
### Waktu backup
|
||||||
|
|
||||||
|
Untuk on-site backup, ini terjadi secara instan. Seperti multimedia, dokumen, dan sumber kode. Untuk backup ke media lain (off-site), ini terjadi daily dan automated.
|
||||||
|
|
||||||
|
## Database
|
||||||
|
|
||||||
|
Saya hanya menggunakan [PostgreSQL](https://www.postgresql.org/) di [[Homelab]] saya, dan backup menggunakan [pgbackrest](https://archive.rizaldy.club/archive/1708443787.515213/singlefile.html).
|
||||||
|
|
||||||
|
### Yang di backup
|
||||||
|
|
||||||
|
Semua konten databases, users, extensions.
|
||||||
|
|
||||||
|
### Waktu backup
|
||||||
|
|
||||||
|
Saya melakukan "full backup" dan "differential backup" untuk efisiensi tanpa harus mengorbankan efektivitas. Full backup terjadi setiap 1 minggu dan differential backup terjadi setiap hari. Waktunya adalah di pagi hari di zona waktu Asia/Jakarta (UTC+7).
|
||||||
|
|
||||||
|
Target backup nya adalah ke [MinIO](https://min.io) yang berada di mesin mac-mini, dan di replikasi ke MinIO yang berada di mesin nas01. Technically untuk ini salinannya berjumlah 4 karena berada di 2 HDD (1 mesin yang sama) dan 2 SSD (2 mesin berbeda).
|
||||||
|
|
||||||
|
Retention policy khusus untuk ini adalah "keep 3 full backup" beserta differential backup nya. Yang berarti, rentang waktu untuk snapshots nya adalah 3 minggu. Yang berarti, ada 1\*7\*3 total backup yang disimpan.
|
||||||
|
|
||||||
|
## MinIO
|
||||||
|
|
||||||
|
Ada 2 instance MinIO yang berjalan di [[Homelab]] saya: untuk cold storage (nas01) dan warm storage (mac-mini).
|
||||||
|
|
||||||
|
### Yang di backup
|
||||||
|
|
||||||
|
Ini bergantung dengan *bucket* yang ada. Sejauh ini kegunaannya adalah:
|
||||||
|
|
||||||
|
- Menyimpan cache
|
||||||
|
- Menyimpan media yang sering diakses
|
||||||
|
- Menyimpan media yang jarang diakses
|
||||||
|
|
||||||
|
Untuk media yang sering diakses seperti berkas-berkas multimedia, saya melakukan "tiering" yang gampangnya, metadata objek (objek adalah konsep "file" di MinIO) disimpan di MinIO utama (mac-mini) namun kontennya disimpan di replika (nas01). Didepan MinIO selalu ada "caching proxy" jadi pendekatan ini efektif sekaligus efisien digunakan khususnya bila cache di proxy tersebut expired.
|
||||||
|
|
||||||
|
Untuk media yang jarang diakses seperti berkas backup, saya melakukan "replication" di level bucket.
|
||||||
|
|
||||||
|
Untuk cache yang disimpan di bucket MinIO, saya tidak melakukan backup, karena, it's a cache anyway.
|
||||||
|
|
||||||
|
### Waktu backup
|
||||||
|
|
||||||
|
Besar kemungkinan "just-in-time" untuk on-site backup dan daily untuk off-site dari [[NAS]] ke SSD eksternal.
|
||||||
|
|
||||||
|
## Git repository
|
||||||
|
|
||||||
|
Saya menggunakan Gitea dan menyimpan konten repository di [[NAS]] yang diakses melalui NFS, jadi strategi backup 3-2-1 berlaku disini. Cache berada di Redis, dan belum memiliki alasan mengapa harus mem-backup Redis.
|
||||||
|
|
||||||
|
### Yang dibackup
|
||||||
|
|
||||||
|
Git repository, media, LFS.
|
||||||
|
|
||||||
|
### Waktu backup
|
||||||
|
|
||||||
|
Besar kemungkinan "just-in-time" untuk on-site dan daily untuk off-site. Sumber kode tidak termasuk ke bagian "sensitif" saya dalam konteks privasi btw, jadi backup tidak disimpan dalam bentuk end-to-end encrypted.
|
||||||
|
|
||||||
|
Dan saya hanya menulis program Open Source anyway :)
|
||||||
|
|
||||||
|
## Game
|
||||||
|
|
||||||
|
Saya belum memiliki pengetahuan untuk "best practices" dalam backup game khususnya bila bergantung ke Steam.
|
||||||
|
|
||||||
|
## Berkas konfigurasi
|
||||||
|
|
||||||
|
Saya berencana untuk menggunakan *tools* yang menggunakan MinIO sebagai "backend" penyimpanan nya.
|
||||||
|
|
||||||
|
### Yang dibackup
|
||||||
|
|
||||||
|
Untuk saat ini: .yml, .ini, .conf, dkk. Mungkin akan mempertimbangkan menggunakan etcd nanti.
|
||||||
|
|
||||||
|
### Waktu backup
|
||||||
|
|
||||||
|
Jika ingat (LOL). Ini adalah berkas/data yang tidak setiap hari berubah, so, yeah.
|
||||||
|
|
||||||
|
Beberapa bergantung dengan "dotfiles" dan pada akhirnya disimpan di Git repository.
|
||||||
|
|
||||||
|
> [!info] Catatan Tambahan
|
||||||
|
>
|
||||||
|
> Pertimbangkan untuk menggunakan NFS, misal seperti ini:
|
||||||
|
>
|
||||||
|
> - /dom/nama-vmx/app
|
||||||
|
> - /dom/nama-vmy/app
|
||||||
|
> - /dom/nama-vmz/app
|
||||||
|
>
|
||||||
|
> Sehingga berkas konfigurasi dapat di backup menggunakan pendekatan 3-2-1 dan tidak perlu ribet mengatur MinIO.
|
||||||
|
|
||||||
|
[^1]: Jika terjadi aksi yang tidak diharapkan (seperti delete) maka salinan di kedua media tersebut sama-sama terhapus
|
@ -18,9 +18,10 @@ Nama domain ini sebelumnya melayani [blog pribadi](https://s3.rizaldy.club/0x0/C
|
|||||||
Jika kamu senang ber-eksplorasi ataupun memiliki jiwa petualang, silahkan berkeliling dan cari tempat favoritmu. Menekan tombol `cmd+k` (atau `ctrl+k` untuk Windows)
|
Jika kamu senang ber-eksplorasi ataupun memiliki jiwa petualang, silahkan berkeliling dan cari tempat favoritmu. Menekan tombol `cmd+k` (atau `ctrl+k` untuk Windows)
|
||||||
di _keyboard_ mungkin akan sedikit membantu petualanganmu.
|
di _keyboard_ mungkin akan sedikit membantu petualanganmu.
|
||||||
|
|
||||||
Jika kamu sedang terburu-buru, atau tidak senang merasa tersesat, silahkan mulai [dari sini](/tags/). Atau, kunjungi halaman favorit saya:
|
Jika kamu sedang terburu-buru, atau tidak senang merasa tersesat, silahkan mulai [[tags | dari sini]]. Atau, kunjungi halaman favorit saya:
|
||||||
|
|
||||||
- [[Homelab]]
|
- [[Homelab]]
|
||||||
|
- [[Merancang backup]]
|
||||||
- [[Last Forever]]
|
- [[Last Forever]]
|
||||||
- [[NAS | Membangun Network-attached Storage (NAS)]]
|
- [[NAS | Membangun Network-attached Storage (NAS)]]
|
||||||
- [[self-hosting | Self-hosting]]
|
- [[self-hosting | Self-hosting]]
|
||||||
|
Loading…
Reference in New Issue
Block a user