−25%

Windows รายปี ถึง 31 ต.ค. ดูแพ็กเกจ

EQVPS

วิธีสำรองข้อมูล VPS ด้วย restic (เข้ารหัส เก็บนอกเซิร์ฟเวอร์)

สำรองข้อมูล VPS แบบเข้ารหัสและตัดข้อมูลซ้ำด้วย restic: คลังบนที่เก็บที่รองรับ S3 หรือเซิร์ฟเวอร์อื่น ตัวตั้งเวลา systemd การเก็บรักษา และการทดสอบกู้คืน

ทุกคนมีข้อมูลสำรอง จนกระทั่งลองกู้คืนดู โฟลเดอร์กลับว่างเปล่า cron job ตายไปตั้งแต่เดือนมีนาคม หรือไฟล์สำรองอยู่บนดิสก์ลูกเดียวกับที่เพิ่งพัง restic แก้ปัญหาเหล่านี้ได้เกือบทั้งหมด: เข้ารหัสที่ฝั่งคุณ เก็บข้อมูลแต่ละชิ้นแค่ครั้งเดียว และทำให้การกู้ไฟล์เดียวง่ายพอๆ กับการสำรองทั้งเซิร์ฟเวอร์

นี่คือการตั้งค่าที่เราไว้ใจได้จริง บน Ubuntu หรือ Debian

1. ติดตั้ง restic

apt update && apt install -y restic
restic self-update

แพ็กเกจของดิสโทรมักตามหลัง self-update จะดึงรุ่นปัจจุบันมาให้

2. เลือกที่ตั้งคลัง

คลังต้องไม่อยู่บนเซิร์ฟเวอร์ที่คุณกำลังปกป้อง ตัวเลือกยอดนิยมสองแบบ:

3. เก็บข้อมูลรับรอง

เก็บทุกอย่างไว้ในไฟล์เดียวที่มีแค่ root อ่านได้ เพื่อให้ตัวตั้งเวลาและ shell ของคุณใช้การตั้งค่าเดียวกัน:

cat > /root/.restic-env <<'EOF'
export RESTIC_REPOSITORY="s3:https://s3.example.com/my-bucket/web1"
export RESTIC_PASSWORD_FILE="/root/.restic-pass"
export AWS_ACCESS_KEY_ID="your-key-id"
export AWS_SECRET_ACCESS_KEY="your-secret"
EOF
openssl rand -base64 32 > /root/.restic-pass
chmod 600 /root/.restic-env /root/.restic-pass

ตอนนี้คัดลอกเนื้อหาของ /root/.restic-pass ไปเก็บในโปรแกรมจัดการรหัสผ่าน ถ้าไม่มีมัน ข้อมูลสำรองจะถอดรหัสไม่ได้ — ทั้งคุณและใครก็ตาม

4. เริ่มต้นคลังและสำรองครั้งแรก

source /root/.restic-env
restic init
restic backup /etc /home /root /srv /var/www \
  --exclude-caches --exclude '/root/.cache'
restic snapshots

ปรับพาธให้ตรงกับที่ที่ข้อมูลของคุณอยู่จริง volume ของ Docker อยู่ใน /var/lib/docker/volumes ส่วนข้อมูลแอปมักอยู่ใน /srv หรือ /opt

5. ฐานข้อมูล: dump ก่อน แล้วค่อยสำรอง

อย่าสำรองไฟล์ดิบของฐานข้อมูลที่กำลังทำงาน ให้ dump ก่อนสำรองทันที:

mkdir -p /var/backups/db
sudo -u postgres pg_dump -Fc mydb > /var/backups/db/mydb.dump

เพิ่ม /var/backups/db เข้าไปในพาธสำรอง คู่มือ PostgreSQL ของเรามีรายละเอียดเรื่อง dump เพิ่มเติม

6. ตั้งเวลาด้วย systemd

ตรงนี้ตัวตั้งเวลาดีกว่า cron: มันบันทึกลง journal และรันตามหลังได้ถ้าเซิร์ฟเวอร์ปิดอยู่ตอนถึงเวลา

# /etc/systemd/system/restic-backup.service
[Unit]
Description=restic backup

[Service]
Type=oneshot
ExecStart=/bin/bash -c 'source /root/.restic-env && restic backup /etc /home /root /srv /var/www /var/backups/db --exclude-caches && restic forget --keep-daily 7 --keep-weekly 4 --keep-monthly 6 --prune'
# /etc/systemd/system/restic-backup.timer
[Unit]
Description=Daily restic backup

[Timer]
OnCalendar=*-*-* 03:30:00
Persistent=true

[Install]
WantedBy=timers.target
systemctl daemon-reload
systemctl enable --now restic-backup.timer
systemctl list-timers restic-backup.timer

forget --prune เก็บ snapshot รายวัน 7 ชุด รายสัปดาห์ 4 ชุด และรายเดือน 6 ชุด แล้วลบที่เหลือ ถ้าคุณมีขั้นตอน dump ฐานข้อมูล ให้ใส่ไว้ในบรรทัด ExecStartPre=

7. กู้คืนอะไรสักอย่างจริงๆ

ขั้นนี้คือสิ่งที่เปลี่ยนคำว่า "เรามีข้อมูลสำรอง" ให้เป็นความจริง ดึงโฟลเดอร์หนึ่งกลับมาไว้ในโฟลเดอร์ชั่วคราวแล้วเปิดดู:

source /root/.restic-env
restic restore latest --target /tmp/restore-test --include /etc/nginx
ls -la /tmp/restore-test/etc/nginx
restic check

ทำหนึ่งครั้งตอนนี้ แล้วทำซ้ำทุกไม่กี่เดือน restic check ตรวจโครงสร้างของคลัง ส่วนการกู้คืนพิสูจน์ว่าข้อมูลอยู่ตรงนั้นจริง

restic กับ Managed Backups

สองอย่างนี้ไม่ได้แข่งกัน Managed Backups สร้างจุดกู้คืนของทั้งเซิร์ฟเวอร์ทุกวัน ซึ่งคุณย้อนกลับได้จากแดชบอร์ด — ทางแก้เร็วหลังอัปเดตพัง ราคา $2 ต่อเดือนและได้ฟรีกับแพ็กเกจรายปีทุกแบบ restic ให้สำเนาระดับไฟล์นอกเซิร์ฟเวอร์ บนที่เก็บที่คุณควบคุมเอง ซึ่งสำคัญเมื่อปัญหาคือไฟล์ที่ถูกลบเมื่อวันอังคารที่แล้ว หรือเมื่อคุณอยากได้สำเนาที่อยู่นอกโครงสร้างพื้นฐานของเราโดยสิ้นเชิง

ถ้าคุณเก็บข้อมูลอ่อนไหว ให้ใช้ร่วมกับการเข้ารหัสทั้งดิสก์ หรือดูกรณีใช้งานที่เก็บข้อมูลแบบเข้ารหัส เพื่อรันปลายทางสำรองของคุณเอง แพ็กเกจ Micro เพียงพอสำหรับเซิร์ฟเวอร์เล็กส่วนใหญ่พร้อมงานสำรองข้อมูลของมัน

คำถามที่พบบ่อย

ถ้าลืมรหัสผ่าน restic จะเป็นอย่างไร?

ข้อมูลสำรองหายไปตลอดกาล restic เข้ารหัสทุกอย่างที่ฝั่งไคลเอนต์และไม่มีกุญแจกู้คืน เก็บรหัสผ่านไว้ในโปรแกรมจัดการรหัสผ่าน ไม่ใช่แค่บนเซิร์ฟเวอร์ที่คุณสำรอง

คลังควรอยู่ที่ไหน?

ที่ไหนก็ได้ยกเว้นตัวเซิร์ฟเวอร์เอง: ที่เก็บอ็อบเจกต์ที่รองรับ S3, VPS อีกเครื่องผ่าน SFTP หรือเครื่องที่บ้าน ข้อมูลสำรองบนดิสก์เดียวกันจะพังไปพร้อมดิสก์นั้น

สำรองฐานข้อมูลด้วย restic อย่างไร?

dump ก่อนแล้วสำรองไฟล์ dump — PostgreSQL ใช้ 'pg_dump -Fc', MySQL ใช้ 'mysqldump --single-transaction' การคัดลอกไฟล์ของฐานข้อมูลที่กำลังทำงานอาจได้ข้อมูลสำรองที่เปิดไม่ขึ้น

ข้อมูลสำรองใช้พื้นที่เท่าไร?

น้อยกว่าที่คิด restic แบ่งไฟล์เป็นชิ้นและเก็บแต่ละชิ้นครั้งเดียว snapshot รายวันของเซิร์ฟเวอร์ที่เปลี่ยนน้อยจึงเพิ่มแค่ข้อมูลที่เปลี่ยนไป

ยังต้องใช้ Managed Backups อยู่ไหม?

ทั้งสองแก้ปัญหาต่างกัน Managed Backups ให้จุดกู้คืนรายวันของทั้งเซิร์ฟเวอร์ที่คุณย้อนกลับได้จากแดชบอร์ด restic ให้สำเนาระดับไฟล์ที่อยู่นอกเซิร์ฟเวอร์และคุณควบคุมเอง หลายคนใช้ทั้งคู่

ความคิดเห็น

ยังไม่มีความคิดเห็น เป็นคนแรกสิ

แสดงความคิดเห็น

ความคิดเห็นจะถูกตรวจสอบก่อนแสดง