本篇是 G. T. Wang 部落格在維持網站正常服務的情況下,升級 Linode VPS 主機空間的紀錄。

由於 G. T. Wang 部落格文章數不斷成長,又放了非常多的照片,最近我租用的 Linode VPS 主機硬碟空間快要不夠了,硬碟使用量到達 95%,其實原本應該是去年就要處理的事情,因為實在太忙了,所以一直拖到現在,眼下再不處理伺服器就會有問題了。


硬碟使用量

我目前租用的 Linode VPS 是一個月 $10 元美金的方案,剛開始租用的時候,這個方案的 VPS 記憶體只有 1GB,而硬碟容量是 24GB,後來 Linode 的 VPS 方案免費升級之後,一個月 $10 元美金的方案記憶體變為 2GB,硬碟空間增加為 30GB,而舊的 VPS 也可以進行升級,這樣雖然可以解決我的 VPS 硬碟空間不夠的問題,不過升級的過程大約需要 24 分鐘,這段時間伺服器要處於關機的狀態。

Linode 管理介面

我的規劃是先把舊的 VPS 複製一份,並且設定好 DNS,在 VPS 升級期間就使用舊的 VPS 副本提供網頁服務,等待 VPS 升級完成後,再把 DNS 切換回來。

MySQL/MariaDB 資料庫備份

由於我的規劃是使用既有的 VPS 直接升級,而 VPS 的副本只是在升級期間暫時頂替正式的網頁伺服器而已,再加上我的 WordPress 網站的性質並沒有很大量的訪客留言,在升級的期間也不會有太多的資料庫變動(可能只有幾則垃圾留言而已),所以我在這裡不考慮太多的 MySQL/MariaDB 資料庫備份與同步問題,只要讓網頁文章正常顯示即可,訪客留言我就不管了。

事實上標準的作法是要將資料庫以 mysqldump 匯出至硬碟,然後在 VPS 的副本中匯入,或是使用 MySQL 的 FLUSH 指令將資料寫入硬後,再進行檔案的複製,在轉移的過程還要關閉資料庫的寫入功能,關於 MySQL/MariaDB 資料庫的標準備份方法,請參考 MySQL 說明手冊MariaDB 說明手冊

複製 Linode VPS 副本

Linode 中有提供 Backup/Restore 與 Clone 兩種備份與複製 VPS 的功能,兩種方式各有優缺點。

Clone 屬於比較低階的 block 層級複製,可以處理各種奇奇怪怪的硬碟配置(例如磁碟加密),但是需要關機後才能執行。

Backup/Restore 屬於比較高階的檔案層級備份,只能適用於一般的 ext3 或 ext4 檔案系統(ext4 會備份成 ext3),而且 ACL 與延伸屬性(extended attributes)也無法備份,可於開機狀態下執行。

因為我的要求是網站不斷線,所以選擇 Backup/Restore 的方式是比較簡單的,一般的 WordPress 網站通常都可以使用 Backup 與 Restore 的方式來複製 VPS,這種方式可以在不關機的狀態下複製整個系統的檔案,當然缺點就是那些正在寫入的檔案內容會有不一致的問題,複製出來的資料會有些小差異,不過我只是要暫時頂替正式的伺服器用的,因此這個小問題可以忽略。

Step 1
首先使用 Backup 的功能製作一份 snapshot。

建立 Snapshot 備份檔

如果 WordPress 網站內容在這一天內變動不大,可以直接使用 Daily Backup 的備份檔,這樣就不需要等待 snapshot 製作的過程。
Step 2
製作好 snapshot 備份檔之後,使用 Restore 的功能,建立另外一台新的 VPS。

Restore VPS

Step 3
如果沒有閒置的 VPS,就要新增一個,點選「Add a Linode」新增 VPS。

新增 Linode VPS

Step 4
選擇適合的 VPS 方案,通常選擇跟原來一樣的方案即可。

選擇 Linode VPS 方案

Step 5
選擇 Linode 機房,這裡也是選擇跟原來一樣的機房即可。

選擇 Linode 機房

Step 6
接著就可以看到新增的 VPS 主機了,這裡有新主機的 IP 位址可以先記下來,等一下會用到。

新 VPS 主機

Step 7
回到 Restore 的畫面,選擇新的 VPS 主機,進行回復工作。

Restore VPS

Step 8
接著要等待檔案複製到新的 VPS 主機,需要的時間跟 VPS 的大小有關,我的 VPS 大概等了十幾分鐘。

等待 VPS 複製檔案

Step 9
檔案複製完成之後,點選「Boot」開機。

VPS 開機

Step 10
我發現 Restore 之後的新 VPS 會自動設定好 IP 位址(/etc/network/interfaces),所以開機之後可以立即上線使用。

按照舊 VPS 的方式登入主機,所有的操作方式都相同,只是 IP 位址換成新的。

ssh seal@172.104.63.103

檢查一下系統,若都正常的話,就可以開始轉移 DNS 的設定了。

轉移 DNS 設定

接下來就可以將網站的網址指向新的 VPS 伺服器了。

Step 1
先更改 hosts 設定檔,在本機測試一下新 VPS 的網站是否正常。

172.104.63.103  blog.gtwang.org

確認新的 VPS 主機可以正常服務之後,即可繼續轉移 DNS。

Step 2
修改網站的 DNS 記錄,將其指向新的 VPS 伺服器。

CloudFlare DNS 設定

這個部份會因為自己所使用的 DNS 代管主機不同而有差異。

Step 3
等待 DNS 完全生效,通常是幾分鐘到幾天不等,要看自己的 DNS TTL 設定。我們可以用 dig 來檢查各大主要的 DNS 查詢的結果:

# Hinet DNS
dig @168.95.192.1 blog.gtwang.org
dig @168.95.192.1 blog.gtwang.org
# Google DNS
dig @8.8.8.8 blog.gtwang.org
dig @8.8.4.4 blog.gtwang.org

等 DNS 完全生效之後,再繼續 Linode VPS 的升級動作。

Linode VPS 升級

Step 1
在舊的 VPS 頁面中,點選「Enter the Upgrade Queue NOW」,進行 Linode VPS 的升級。

Linode VPS 升級

Step 2
等待 VPS 進行升級。

等待 Linode VPS 升級

Step 2
VPS 會自動進入升級佇列。

等待 Linode VPS 升級

Step 4
Linode VPS 的升級都是自動的,不需要太多人工處理,只需要等待即可。

Linode VPS 升級

Step 5
升級完成後,會有多的硬碟空間可以使用。在調整磁碟分割區之前,要先讓 VPS 關機,然後再點選磁碟分割區的「Edit」進行調整。

Linode VPS 關機

Step 6
輸入磁碟分割區的大小,通常就是輸入最大值,把多的空間全部用完,然後點選「Save Changes」儲存。

調整磁碟分割區

Step 7
完成後確認一下磁碟是否有充分使用,接著就可以開機繼續使用了。

Linode VPS 升級完成

Step 8
登入 VPS 主機,確認升級完成後的系統是否都正常,硬碟在變更大小之後,Linux 系統上也不需要特別作設定,直接就可以使用了,而記憶體也從原本的 1GB 增加為 2GB。

硬碟與記憶體使用量

如果都沒有什麼問題,則再將網站的 DNS 改回來,這樣正式網站就可以繼續上線服務了。

Step 9
最後查看主機的 uptime 記錄,用這樣的升級方式,uptime 可以維持在 100%,網站完全不會斷線,非常不錯。

Uptime 記錄

Step 10
在 VPS 升級完成之後,建議等待一段時間再把 VPS 的副本刪除,要等多就就要看 DNS 的 TTL 設定,像我的 TTL 設定是 5 分鐘,大概要等十幾分鐘之後,才不會有連線跑到舊的主機上。

刪除 Linode VPS

刪除 Linode VPS 副本時要看清楚,不要刪錯了。

刪除 Linode VPS

這樣就大功告成了。

更多 Linode 相關的教學,可以參考本站 Linode 相關的文章

參考資料:Linode 論壇Linode Backup 服務說明