雲端架構延遲問題:為什麼AP與DB不能放太遠?

雲端與地端的架構差異認知不足導致的性能陷阱

前言

許多企業在上雲初期,經常基於成本考量或錯誤認知,將應用程式伺服器(AP)與資料庫(DB)部署在不同區域。這種做法在地端環境中影響較小,但在雲端環境中卻會造成嚴重的性能問題。本文透過台北-東京的實際案例,說明距離對雲端架構的致命影響。

核心問題

  • 地端思維:同個機房內不同區域延遲可忽略
  • 雲端現實:跨區域延遲可達數十毫秒
  • 結果:連線建立時間從毫秒級暴增到秒級

1. 地端 vs 雲端的延遲差異

1.1 地端環境的延遲特性

傳統地端機房

同機房不同機櫃:RTT < 1ms
同城市不同機房:RTT < 5ms  
同國家不同城市:RTT < 20ms

地端架構師的經驗

  • AP和DB分別放在不同機櫃:幾乎無延遲影響
  • 災備機房放在不同城市:RTT約10-15ms,可接受
  • 習慣性認為「網路延遲不是問題」

1.2 雲端環境的延遲現實

AWS跨區域延遲

同區域不同AZ:RTT 1-3ms
不同區域 (亞太):RTT 20-100ms
跨大洲區域:RTT 150-300ms

案例:台北AP + 東京DB

  • 地理距離:2,100公里
  • 實測RTT:40-50ms
  • 連線建立時間:300ms

1.3 認知落差的根源

地端思維錯誤

"反正都是網路連線,距離應該沒差多少"
"雲端網路應該比較快才對"  
"成本考量優先,性能可以後續調校"

雲端現實

距離 = 延遲 = 性能殺手
物理定律在雲端同樣適用
網路優化無法打破光速限制

2. RTT概念與影響

2.1 什麼是RTT

RTT (Round Trip Time):資料封包往返時間

台北AP → 東京DB → 台北AP = 1個RTT

實際測量:
$ ping tokyo-rds-endpoint.amazonaws.com
PING tokyo-rds-endpoint: 45.2ms ← 這就是RTT
PING tokyo-rds-endpoint: 48.1ms  
PING tokyo-rds-endpoint: 42.8ms
平均RTT: 45ms

2.2 為什麼RTT這麼重要

每次資料庫互動都需要多次RTT

  • 不是「發送查詢→收到結果」這麼簡單
  • 需要建立連線、認證、查詢、確認等多個步驟
  • 每個步驟都是一次「請求→等待→回應」

地端vs雲端的差異

地端環境 (RTT 1ms):
連線建立 = 6.5 × 1ms = 6.5ms

雲端跨區 (RTT 45ms):  
連線建立 = 6.5 × 45ms = 293ms

3. 連線建立的技術細節

3.1 為什麼需要6.5次RTT?

步驟1:TCP三方交握 (1.5 RTT)

台北AP → 東京DB:「我要連線」          (單向 22ms)
東京DB → 台北AP:「好,我準備好了」      (單向 22ms)
台北AP → 東京DB:「確認連線建立」        (單向 22ms)
小計:1.5 × RTT = 68ms

步驟2:資料庫協定協商 (2 RTT)

台北AP → 東京DB:「我使用PostgreSQL協定」  (45ms往返)
東京DB → 台北AP:「收到,這是我的參數」     (45ms往返)
小計:2 × RTT = 90ms

步驟3:使用者認證 (3 RTT)

東京DB → 台北AP:「請提供認證資訊」        (45ms往返)
台北AP → 東京DB:「這是我的帳號密碼」      (45ms往返)
東京DB → 台北AP:「認證成功,歡迎使用」    (45ms往返)
小計:3 × RTT = 135ms

3.2 時間分解表

階段 RTT次數 地端時間 (1ms RTT) 雲端時間 (45ms RTT) 差異倍數
TCP握手 1.5 1.5ms 68ms 45倍
協定協商 2.0 2ms 90ms 45倍
使用者認證 3.0 3ms 135ms 45倍
總計 6.5 6.5ms 293ms 45倍

4. 實際業務影響

4.1 性能衝擊

無連線池情況

每次查詢 = 連線建立 + 查詢執行 + 連線關閉
         = 300ms + 5ms + 22ms  
         = 327ms

地端同樣操作 = 1ms + 5ms + 0.5ms = 6.5ms

性能下降 = 327ms ÷ 6.5ms = 50倍

吞吐量影響

地端環境:1000ms ÷ 6.5ms ≈ 154 QPS
雲端跨區:1000ms ÷ 327ms ≈ 3 QPS

吞吐量下降 98%

4.2 用戶體驗災難

電商網站範例

商品頁面載入:
- 查詢商品資訊 (327ms)
- 查詢庫存狀態 (327ms)  
- 查詢價格資訊 (327ms)
- 查詢用戶評價 (327ms)

總響應時間:1.3秒 vs 地端的26ms
用戶跳出率暴增

4.3 常見的錯誤決策

成本導向的錯誤思維

「東京DB比較便宜,台北AP可以連過去」
「反正都是AWS內網,應該很快」
「先這樣部署,有問題再調整」

忽略的隱性成本

- 開發團隊調校時間
- 用戶體驗下降損失  
- 架構重新設計成本
- 業務影響和聲譽損失

5. 為什麼很多人踩這個坑?

5.1 地端經驗的誤導

地端架構師常見想法

✗ 「我以前跨城市部署都沒問題」
✗ 「雲端網路應該比實體線路更快」  
✗ 「AWS內部網路延遲應該很低」
✗ 「可以靠調校解決延遲問題」

現實情況

✓ 雲端跨區域 ≠ 地端跨機房
✓ 物理距離決定延遲下限
✓ 協定層級延遲無法消除
✓ 光速就是物理極限

5.2 雲端知識的不足

技術認知盲點

  • 不了解雲端區域的實際地理分布
  • 不理解RTT對應用程式的放大效應
  • 高估了網路優化的能力
  • 低估了協定握手的時間成本

決策流程問題

  • 架構設計時只考慮功能需求
  • 成本分析忽略性能影響
  • 缺乏跨區域部署的性能測試
  • 沒有建立延遲監控和告警

6. 光速的物理限制

6.1 無法突破的物理定律

光纖中的光速

真空光速:300,000 km/s
光纖光速:約200,000 km/s (折射率影響)

台北到東京的理論極限

直線距離:2,100km
理論最小單向時間:2,100km ÷ 200,000km/s = 10.5ms
理論最小RTT:21ms

實際RTT:45ms (包含路由和設備延遲)

6.2 技術無法改變的事實

任何優化都無法突破

  • CDN無法加速資料庫連線
  • 更快的CPU無法減少傳播延遲
  • 更大的頻寬無法縮短距離
  • 任何協定優化都受限於物理RTT

7. 正確的雲端架構思維

7.1 距離敏感性認知

高延遲敏感

  • OLTP資料庫操作
  • 即時交易系統
  • 互動式用戶界面
  • 頻繁的API呼叫

相對延遲容忍

  • 批次資料處理
  • 報表生成
  • 資料同步作業
  • 備份和歸檔

7.2 架構設計原則

核心原則

1. 高頻互動組件必須就近部署
2. AP與DB應在同一區域
3. 跨區域只用於災備和副本
4. 延遲測試應在設計階段進行

決策框架

RTT < 5ms:可忽略延遲影響
RTT 5-20ms:需要評估業務影響  
RTT > 20ms:高風險,需要特殊設計
RTT > 50ms:不建議直接連線

8. 結論

8.1 核心教訓

地端思維在雲端行不通

  • 雲端的「近」和「遠」差異巨大
  • 區域選擇是架構設計的關鍵決策
  • 成本優化不應犧牲基本性能

300ms連線時間的真相

  • 這是協定標準和物理定律的必然結果
  • 45ms RTT × 6.5次握手 = 293ms
  • 任何技術手段都無法根本性改善

8.2 實務建議

架構設計時

  1. 優先考慮AP與DB的部署距離
  2. 進行跨區域性能測試
  3. 建立延遲監控機制
  4. 準備回滾和遷移計劃

避免常見錯誤

  • 不要用地端經驗指導雲端架構
  • 不要低估距離對性能的影響
  • 不要期望透過調校解決根本問題
  • 不要忽視用戶體驗的重要性

8.3 最終要點

雲端架構的成功關鍵不在於技術複雜度,而在於理解和尊重物理定律。當我們把AP放在台北、DB放在東京時,我們實際上是在與光速作對—這場戰爭我們註定會敗。

記住:在雲端世界中,距離不僅僅是數字,它是性能的敵人。

常用指令-ubuntu

Ubuntu更新

apt update && apt upgrade -y && apt autoremove -y && apt clean

修改主機名稱

hostnamectl set-hostname 名稱

檢查是否修改成功

hostnamectl status

2021ironman 13th – DevOps – Day04 – Amazon ECS Anywhere 基礎說明與建置(下)

先前將主機已經註冊上去了
那接下來就是進到『Task Definitions』開始來建立服務
點選『Create new Task Definition』

因為我們是要建立ECS Anywhere
點選『EXTERNAL』再來 Next Step

Task definition name 輸入服務名稱,我這邊只是先建立一個apache測試環境所以名稱直接用『apache』
Network mode 記得保持預設

輸入這個Task所需的記憶體及CPU數量
記憶體單位是M
CPU1024是代表1 vCPU

建立容器『Add container』

Container name 輸入名稱
Image 這邊看要抓取的 Image 位置及版本,我這個寫法因為沒有URL 所以會直接跟docker Hub拉
Port mappings 這個數值很重要 是外部要跟Container要對應的Port,看您包的Container是需要哪個Port就使用那個Port

點選『Create』進行建立

Task建立完成

Task 只是服務的樣態或者說是模組
建立完Task 就可以利用它來建立Service
進到Service分頁 並點選『Create』

Launch type 選擇 ECS anywhere 用的 EXTERNAL
Task Definition 選擇 Task並選擇版本
Service name 填寫這個服務的名稱

Number of tasks 因為目前只有註冊一台 所以選1

再來就點選『Next step』到下一分頁

這邊測試環境可以直接跳過直接點選『Next step』

只有一台暫時不需要擴展所以『Next step』

最後確認並點選『Create Service』建立服務

服務建立成功

回到Local主機上確認該主機IP

網頁測試

也可以在Local使用Docker指令確認運行狀態

2021ironman 13th – DevOps – Day03 – Amazon ECS Anywhere 基礎說明與建置(上)

這系列主要就是講Amazon ECS Anywhere 所以先來看看陽春版怎麼建立出來

基礎運行元件-將外部主機註冊到AWS的必要服務

要將主機註冊到ECS上會有幾個服務一定是必須且一定要使用到的

SSM Agent
協助將主機註冊到AWS
並且可協助部屬其他所需要的Agent或其他所需的軟體
雖然他不是運行中的必要條件但是他是一個部署及更版的重要環節
如果他停止了有很大的可能會出現服務障礙
同時也可以透過SSM自動化修補OS中的漏洞及更新

Amazon ECS container Agent
Amazon ECS 容器代理可讓容器執行個體連線到您的叢集

Docker
Docker運行的核心軟體

基礎運行元件-支持的作業系統與聯網條件

基本上地端主機只要符合OS且可連網基本上都沒問題的

建置流程

進去AWS ECS

進入到Clustes 並點寫 Create Cluster 開始建立

選擇Networking only 並點選 Next step
這邊要注意Networking only才有支援ECS Anywhere

填寫Clustes名稱並記得勾選
Cloudwatch Container Insights 這樣在可以監控到每個container的運行狀況
點選 Create

Clustes建立完成

進入Clustes 並點選ECS Instances

點選Register external instances 開始註冊外部的主機

因為註冊是產生金鑰所以下面兩個數字可能要注意一下
Activation key duration (in days) 代表的是這個註冊可以註冊的時效
Number of instances 代表的是這把金鑰能註冊的台數,超過台數就直接失效
選擇之後就Next step繼續

這時候就可以看到註冊用的程式碼,可以進行複製

我的環境是PVE他沒有限制任何底層,就算是實體機也是可以

進到主機主準備貼指令
我這邊是用ubuntu 20.04
注意這邊需要root權限才能執行
建議Sudo到root

執行之後如果成功就會出現以下畫面

這時候回到ECS就可以看到您的機器
ECS Instance欄位中 如果是 mi- 開頭就是外部機器

機器註冊好了再來明天就是看要怎樣把container送進去了

2021ironman 13th – DevOps – Day02 – 可能發生的費用、目標架構說明

可能發生的費用

  1. 雲地混合的DevOps環境
  • AWS CodeCommit
  • AWS CodePipeline
  • AWS CodeBuild
  • AWS ECS
  • AWS ECS Anywhere

以最小規格測試一個月費用大約$10

  1. 雲地混合的EC架構

除了第一的費用之外

  • AWS VPN
  • AWS Application Load Balancer
  • AWS Cloudfront

AWS VPN會使用AWS的PaaS服務所以整體費用除原先DevOps費用之外會額外加上$65

費用上基本都可以在AWS的個服務上看到服務的計費方式

這邊有點比較特別的是目前
AWS ECS Anywhere 有提供六個月的三台非AWS機器註冊是免費的
所以如果要測試混合架構的話現在是個好時機
https://aws.amazon.com/tw/ecs/anywhere/pricing/

目標架構基礎說明

  1. 雲地混合的DevOps環境
    主要目的是要建立一個完整的DevOps流程,只需要Push程式碼就可以自動化產出Container,同時將這個Container自動化的部署至雲地兩個Container的運行環境之中。

  2. 雲地混合的EC架構
    從『雲地混合的DevOps環境』展開單就DevOps是無法產出價值的,最少需要是一個可行的三層式架構,在這個架構之下能成功運行才算是一個成功的架構。

2021ironman 13th – DevOps – Day01 – 前言與Lab架構說明

前言

今年不搞自虐(之前都搞跟近期專案結合度比較低的主題)

結合最近一直在研究的Amazon ECS Anywhere 並且讓他結合地端、GCP、Azure

看Amazon ECS Anywhere的混合雲能做到哪個程度並且在電商、DevOps、IOT當中能碰出什麼樣的火花

直接拿我家的LAB環境加上AWS、Azure、GCP、Linode帳號來進行實作

身為資訊人如果不能在家中把真實的情境蓋出來那就不算真的熱愛資訊產業

PS:老婆交代別再給我去參加鐵人賽~我還是來了,希望寫完之前他都不要發現。

Lab架構說明

Lab設備列表

  • MikriTik 的 CCR 1009-7G-1C-1S+ 作為Gateway
  • HP A5120 Series switch JE074A 24Port 作為Switch
  • E3-1230V2 + 32G的主機兩台安裝Proxmox VE作為一堆虛擬機的載體
  • Synology DS1621+ 作為SAN Server與NFS備份用

架構上儘量模擬簡化版的企業環境希望整個環境上面是可以對比實際狀況

最終目標有兩個

  1. 雲地混合的DevOps環境

  1. 雲地混合的EC架構

再來就開始搞環境動手蓋摟~

Ubuntu 修改主機名稱

主機名稱是方面我們判斷連線主機是否正確的一個依據如果主機名稱錯亂可能的後果就是指令下錯位置

所以給予正確的名稱是很重要的

在Ubuntu 14之後的版本都可以透過hostnamectl這個指令來修改名稱

修改指令很簡單

使用下列指令即可

hostnamectl set-hostname 主機名稱

比如我把主機名稱改成 Geafana-Server

但是改完後再介面上是不會馬上生效的需要重新連線才會生效

在生效之前我們可以用這個指令來確認是某有成功設定

hostnamectl status

確認設定完之後重新連線就可以看到新名稱拉

擴增 Ubuntu 20.04 上 root lvm volume

主機才剛裝好就發生的空間不足的狀況?

APT更新就出現 E: You don't have enough free space in /var/cache/apt/archives/. ?

使用df -h指令觀察硬碟居然是滿的而且只有3.9G

察看之後發現如果是採用預設磁碟分割

再安裝的過程當中只會使用到4G的空間

安裝好開機之後需要再另外進行擴展

指令

使用 lvresize -A n -l +100%FREE 將根目錄擴展到100%的空間

lvresize -A n -l +100%FREE /dev/mapper/ubuntu--vg-ubuntu--lv

使用resize2fs擴展分割區

resize2fs /dev/mapper/ubuntu--vg-ubuntu--lv 

指令結果如下圖

再使用df來確認空間是否分割正確

這樣硬碟空間就正常且100%的使用了

如果未來還有需要擴增空間也可以使用該方式!

MYSQL設定Root帳號密碼與初始權限(Ubuntu 20.04)

Ubuntu 安裝完Mysql的時候預設是沒有root密碼以及相關設定的

這時候就需要先用mysql_secure_installation這個指令來對本機的MySQL進行初始化設定

輸入指令

root@zabbix-server:/home/albertyu# mysql_secure_installation

是否為Root用戶設定密碼並且選擇難度 基本上都是輸入Y

Securing the MySQL server deployment.

Connecting to MySQL using a blank password.

VALIDATE PASSWORD COMPONENT can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD component?

Press y|Y for Yes, any other key for No: Y

選擇密碼難度,這邊基本上都建議是最高強度,輸入2

There are three levels of password validation policy:

LOW    Length >= 8
MEDIUM Length >= 8, numeric, mixed case, and special characters
STRONG Length >= 8, numeric, mixed case, special characters and dictionary                  file

Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 2

輸入密碼

Please set the password for root here.

New password: 

Re-enter new password: 

系統判斷戲碼強度並且確認是否使用該密碼最強為100,如果強度到80分以上就輸入Y

Estimated strength of the password: 100 
Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : Y

預設安裝好了之後會有匿名用戶是否刪除,建議刪除所以輸入Y

By default, a MySQL installation has an anonymous user,
allowing anyone to log into MySQL without having to have
a user account created for them. This is intended only for
testing, and to make the installation go a bit smoother.
You should remove them before moving into a production
environment.

Remove anonymous users? (Press y|Y for Yes, any other key for No) : Y
Success.

是否禁止遠端登入,如果禁止就只能本機登入,無特殊用途建議輸入Y,如果有外部連入需求任意鍵跳過

Normally, root should only be allowed to connect from
'localhost'. This ensures that someone cannot guess at
the root password from the network.

Disallow root login remotely? (Press y|Y for Yes, any other key for No) : 

 ... skipping.

是否刪除測試資料庫,建議輸入Y把多餘不需要的都刪除

By default, MySQL comes with a database named 'test' that
anyone can access. This is also intended only for testing,
and should be removed before moving into a production
environment.

Remove test database and access to it? (Press y|Y for Yes, any other key for No) : Y
 - Dropping test database...
Success.

 - Removing privileges on test database...
Success.

設定最後一個步驟重新載入權限表,輸入Y 重新載入

Reloading the privilege tables will ensure that all changes
made so far will take effect immediately.

Reload privilege tables now? (Press y|Y for Yes, any other key for No) : Y
Success.

All done! 

設定完成!

Proxmox VE 初始化硬碟分割區與配置ZFS儲存區(Raidz)

在一台新的Proxmox VE安裝好之後通常都會新增儲存區或者是現有儲存區新增硬碟

如果是全新的硬碟即可馬上使用

但是很多時候會是以使用過的硬碟

我的環境上有四顆硬碟都是利用原先其他系統的多餘硬碟整理出來的

其中/dev/sda是系統,其他三科是要作為資料碟使用

如果直接來建立ZFS會發現並沒有硬碟可以選擇,這代表著硬碟已經有分割資訊

初始化分割區

我們要把所有的分割區清除

我有三顆硬碟 /dev/sdb /dev/sdc /dev/sdd

清除指令以 fdisk 硬碟代號 來進行清除

進入後先以 p 確認硬碟分割資訊

在以 d 指令分割區進行刪除,這邊如果刪除到最後一個分割區是直接以d即可進行刪除

最後再以w指令進行儲存

重覆進行三顆硬碟的清除之後即可看見使用方式為無

這時候就可以開始進行ZFS的建立

ZFS的建立

RAIDZ 是一種軟體Raid的建立方式 她方式如同Raid 5或者是Raid 6,RAIDZ後面的數字代表最大容錯數字如 RAIDZ1一顆 RAIDZ 2兩顆

Proxmox VE在建立ZFS的作法上幾乎都是建議使用RAIDZ1

建立流程直接進到ZFS點選『建立:ZFS』

輸入名稱、選擇Raid等級、勾選硬碟 即可點選『建立』

建立過程大約幾需要幾秒的時間即可完成ZFS+Raidz的建置組合

詳細內容

這樣就完成儲存區的建立了

但是要注意一件事情您的伺服器檢視是否有出現剛剛的名稱呢

沒有對吧!

如果是在有建立叢集的狀況之下還需要額外做一件事情

到資料中心中將新增的儲存區加進去

在下拉選單當中選擇ZFS

ID通常我習慣使用跟ZFS Pool同樣名稱

ZFS Pool則選擇上方所建立的那個

這邊要注意的是節點的問題,千萬別選所有因為你可能是多台主機,在節點上選擇ZFS Pool所在的主機

看到紅圈內已經正常顯示了,這樣這個儲存空間就可以正常使用了

Proxmox VE 儲存出現『無法建立ZFS』或『無法GPT初始化硬碟』的錯誤

『無法建立ZFS』的錯誤

# /sbin/zpool create -o ashift=12 RaidZ raidz /dev/disk/by-id/ata-INTEL_SSDSC2BW240A4_CVDA5096026H2403GN /dev/disk/by-id/ata-INTEL_SSDSC2CT240A3_CVMP22910059240DGN /dev/disk/by-id/ata-SanDisk_SSD_PLUS_240GB_2053JH463812
invalid vdev specification
use '-f' to override the following errors:
/dev/disk/by-id/ata-INTEL_SSDSC2BW240A4_CVDA5096026H2403GN contains a corrupt primary EFI label.
/dev/disk/by-id/ata-INTEL_SSDSC2CT240A3_CVMP22910059240DGN contains a corrupt primary EFI label.
TASK ERROR: command '/sbin/zpool create -o 'ashift=12' RaidZ raidz /dev/disk/by-id/ata-INTEL_SSDSC2BW240A4_CVDA5096026H2403GN /dev/disk/by-id/ata-INTEL_SSDSC2CT240A3_CVMP22910059240DGN /dev/disk/by-id/ata-SanDisk_SSD_PLUS_240GB_2053JH463812' failed: exit code 1

『GPT初始化硬碟』的錯誤

Caution: invalid main GPT header, but valid backup; regenerating main header
from backup!

Caution! After loading partitions, the CRC doesn't check out!
Warning! Main partition table CRC mismatch! Loaded backup partition table
instead of main partition table!

Warning! One or more CRCs don't match. You should repair the disk!

Invalid partition data!
TASK ERROR: command '/sbin/sgdisk /dev/sdb -U R' failed: exit code 2

這錯誤通常出現在這顆硬碟拿去給Windows格式化的錯誤

再處理過程的當中通常查詢到最後是因為『GPT: damaged』

修復方式使用內建的gdisk即可

進入到命令介面輸入 gdisk 硬碟代號

這時候就可以看到『GPT: damaged』的錯誤訊息

再來就是按著下圖輸入的指令將GPT重建即可

Proxmox VE 建立與加入叢集

建立叢集可以方便同時管理多台Proxmox VE

同時帶來如可共通性的掛載共用File Server等等的的方便

建立方式

在Proxmox VE在一開始的時候一定都是沒有叢集的狀態

如果要建立叢集只需點選建立叢集

叢集名稱就是您這組伺服器的名稱最多15字元,叢集網路是要使用哪個IP做連結的節點,填寫後點選『建立』

建立時間約只需要1-2秒出現『TASK OK』就算是完成了!

叢集第一台主機就完成了

那如果其他台要加入要怎樣加入?

如果有第N台主機要加入我們只需在以加入叢集的資料中心中點選『加入資訊』

點選下方的『複製資訊』

到要加入的主機中點選『加入叢集』

在資訊填入從叢集複製出來的資訊,這時候只需要填入另外一台的root密碼即可點選加入

出現Join request OK, finishing setup locally即完成加入叢集

Proxmox VE 網路設定儲存時出現『you need ifupdown2 to reload network configuration (500)』錯誤

Proxmox VE 修改網路是非常常見的一個設定

但是在新Proxmox VE 安裝好之時常常會出現無法儲存網路設定的狀況但是種開機時又會正常生效

發生的流程當我們修改好網路之後再下圖標記的位置當中會需要我們去套用設定

當我們套用設定時就會出現確認視窗

但是我再確認的時候就會跳出這個錯誤代碼you need ifupdown2 to reload network configuration (500)

這是由於新安裝的系統當中需要ifupdown2才能配合Proxmox VE進行設定套用

但是系統預設是沒有裝的

如果要安裝只要進到指令畫面

輸入apt-get install ifupdown2 -y即可安裝

安裝完畢之後『套用設定』即可正常運行

Proxmox VE 解決登入出現『目前沒有技術支持合約』

在安裝好Proxmox VE 之後除了更新要修改成免費授權進行更新之外,每次從Web登入之後會出現『目前沒有技術支持合約』這是因為系統會檢查您是否有買Enterprise合約。

這不影響功能但是每次登入看到都會相對煩躁

要關閉的話有兩種方式

  1. 讓他不要檢查是否有買Enterprise合約
  2. 不要讓他跳出視窗

方法1:讓他不要檢查是否有買Enterprise合約

修改檔案/usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js

打開之後尋找

if (res === null || res === undefined || !res || res
    .data.status.toLowerCase() !== 'active') {

將此段修改為

if (false) {

修改完之後重啟服務

systemctl restart pveproxy

再來登入時就不會出現該視窗了

方法2:不要讓他跳出視窗

不要讓它顯示相對簡單

再方法1同一檔案中尋找到

 Ext.Msg.show({

這邊要注意的是他的位置是在方法1的指令碼下方這個

將它修改為

 Ext.Msg.noshow({

修改完之後重啟服務

systemctl restart pveproxy

比較方法一二的方式來說並無優劣之分,但就方式來說建議使用第二種讓他暫時停止顯示,在未來要回復設定也是比較快的。


這個改法可能會因為在更新的時候還原該設定,所以如果出現就再回去修改一次就好!