最新

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

雲端與地端的架構差異認知不足導致的性能陷阱 前言 許多企業在上雲初期,經常基於成本考量或錯誤認知,將應用程式伺服器(AP)與資料庫(DB)部署在不同區域。這種做法在地端環境中影響較小,但在雲端環境中卻會造成嚴重的性能問題。本文透過台北-東京的實際案例,說明距離對雲端架構的致命影響。 核心問題: * 地端思維:同個機房內不同區域延遲可忽略 * 雲端現實:跨區域延遲可達數十毫秒 * 結果:連線建立時間從毫秒級暴增到秒級 1. 地端 vs 雲端的延遲差異 1.1 地端環境的延遲特性 傳統地端機房: 同機房不同機櫃:RTT < 1ms 同城市不同機房:RTT < 5ms 同國家不同城市:RTT < 20ms 地端架構師的經驗: * AP和DB分別放在不同機櫃:幾乎無延遲影響 * 災備機房放在不同城市:RTT約10-15ms,可接受 * 習慣性認為「網路延遲不是問題」

By Albert Yu

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』

By Albert Yu

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名稱並記得

By Albert Yu

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

可能發生的費用 1. 雲地混合的DevOps環境 * AWS CodeCommit * AWS CodePipeline * AWS CodeBuild * AWS ECS * AWS ECS Anywhere 以最小規格測試一個月費用大約$10 2. 雲地混合的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/ 目標架構基礎說明 雲地混合的EC架構 從『雲地混合的DevOps環境』展開單就DevOps是無法產出價值的,

By Albert Yu

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備份用 架構上儘量模擬簡化版的企業環境希望整個環境上面是可以對比實際狀況 最終目標有兩個

By Albert Yu

Ubuntu 修改主機名稱

主機名稱是方面我們判斷連線主機是否正確的一個依據如果主機名稱錯亂可能的後果就是指令下錯位置 所以給予正確的名稱是很重要的 在Ubuntu 14之後的版本都可以透過hostnamectl這個指令來修改名稱 修改指令很簡單 使用下列指令即可 hostnamectl set-hostname 主機名稱 比如我把主機名稱改成 Geafana-Server 但是改完後再介面上是不會馬上生效的需要重新連線才會生效 在生效之前我們可以用這個指令來確認是某有成功設定 hostnamectl status 確認設定完之後重新連線就可以看到新名稱拉

By Albert Yu

擴增 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-

By Albert Yu

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

By Albert Yu

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 建

By Albert Yu

OS

Proxmox VE 建立與加入叢集

建立叢集可以方便同時管理多台Proxmox VE 同時帶來如可共通性的掛載共用File Server等等的的方便 建立方式 在Proxmox VE在一開始的時候一定都是沒有叢集的狀態 如果要建立叢集只需點選建立叢集 叢集名稱就是您這組伺服器的名稱最多15字元,叢集網路是要使用哪個IP做連結的節點,填寫後點選『建立』 建立時間約只需要1-2秒出現『TASK OK』就算是完成了! 叢集第一台主機就完成了 那如果其他台要加入要怎樣加入? 如果有第N台主機要加入我們只需在以加入叢集的資料中心中點選『加入資訊』 點選下方的『複製資訊』 到要加入的主機中點選『加入叢集』 在資訊填入從叢集複製出來的資訊,這時候只需要填入另外一台的root密碼即可點選加入 出現Join request OK, finishing setup locally即完成加入叢集

By Albert Yu

OS

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即可安裝 安裝完畢之後『套用設定』即可正常運行

By Albert Yu

OS

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.

By Albert Yu

OS

Proxmox VE 版本更新與免費授權

Proxmox VE 軟體授權條款,採用的是 GNU AGPL (Affero General Public License) 條款,而 Proxmox VE 本身是 Free Software 自由軟體,也是 Open Source Software 開源軟體。 原廠授權說明 如果您需要更新或者是下載其他APT套件會出現以下問題,這問題主要是因為預設授權是使用Enterprise Repository的更新來源,而您沒有付費取得授權金鑰因此無法更新。 只需要將授權改為No-Subscription Repository 即可順利更新。 以文字編輯器開啟/etc/apt/sources.list並加入 deb http://download.proxmox.com/debian/pve buster pve-no-subscription 再將原本的 Enterprise

By Albert Yu

2020ironman 12th – Modern Web - PHP on AWS 進化論 - 從單主機一路進化到Serverless,以WordPress與 laravel 為例 (中斷)

2020ironman 12th – Modern Web – Day15 – MYSQL 管理上的難題

方便與管理 傳統上管理MYSQL都是開發的工作 而phpmyadmin則是cpanel中的工具 在迷你網站上cpanel已是必備工具 而在拆分mysql後所需面對的就是如何去連過去 phpmyadmin 設定方式 首先要先瞭解到如果要客制化設定的話需產生config.inc.php,並且設定該檔案 該檔案範例檔案為 config.sample.inc.php 這是在您下載phpmyadmin就有的檔案 首先將config.sample.inc.php複製並重新命名成config.inc.php 然後打開config.inc.php尋找下列原始碼 如果只是需要單台主機連線就把 $cfg[\'Servers\'][$i][\'host\'] = \'localhost\'; 中的localhost改成遠端主機的IP或URL 如果是在單一個phpmyadmin中要控制多個主機則複製下列黃框中的文字 進一步往下貼上 貼上之後就會顯示如 這時就可以用您的帳號密碼進行登入

By Albert Yu

2020ironman 12th – Modern Web - PHP on AWS 進化論 - 從單主機一路進化到Serverless,以WordPress與 laravel 為例 (中斷)

2020ironman 12th – Modern Web – Day14 – AWS MYSQL 的選擇與評估

幾種建置方式 通常我們的建置會有幾種作法 * VM自建 * PAAS服務 * Container VM VM的作法其實就是AWS EC2 說實在的不是很建議因為備份還原等等機制都要自己做 我還有遇過客戶做了mariadb cluster結果只要讀寫超過一個瓶頸無論超過幾台就自動解散組不回去的狀況 但是勝在便宜可控制性高 這邊唯一要注意的是讀寫的部分是受到AWS EC2中的EBS所控制 PAAS服務 PAAS服務的MYSQL在AWS中通常指的是RDS MYSQL 這是指AWS利用EC2幫你做好的服務 你無法碰到底層但是AWS的調教功力絕對比你我都好 但是一樣會受到AWS EC2中的EBS所控制 另外還有一種資料庫是AWS特色服務 Amazon Aurora 他是一種大型storage架構出來的的資料庫 由下圖可一窺架構之一二 他的特色是已經做完讀寫分離且讀的部分已經透過proxy幫你做好分配 且讀取資源可做到自動擴展 讀五台不夠就開十台來跟你拼了 同時他每台再不考慮SQL效能之下都可以有200K/800K的奇特表現 算是雲端界的讀寫效能

By Albert Yu

2020ironman 12th – Modern Web - PHP on AWS 進化論 - 從單主機一路進化到Serverless,以WordPress與 laravel 為例 (中斷)

2020ironman 12th – Modern Web – Day13 – EC2第一個拆分的東西MYSQL

為何要先拆MYSQL? 其實很多東西都要分拆 而不是只有MYSQL 其實只要是程式碼之外的的東西都是需要分拆的對象 但是在整體結構當中通常資料庫都是第一分拆的 原因無他 在標準三層式架構中Web、AP、DB 本身就因該是獨立的且是做到HA的架構 且合理的三層式架構比起單台主機的架構相對多了彈性與擴展性 注意事項 拆分資料庫最重要的事情很多但是有幾件事情由其重要 1. 是否有停機時間,如果你匯出匯入時出現了新訂單?這時候該怎麼處理。最簡單的就是停機 2. 程式碼中的連線設定檔掌握了,我看過有公司一個PHP自建的ERP光連線一個資料庫就有10幾處設定檔,上去是一場災難 3. 資料庫不在本機狀況之下該如何管理? 先想好這幾點可以讓您搬遷的路途上少點灣路 最初與最後的拆分目標 可能會如同這張圖或者是接近 這是兩年多前協助客戶進行的專案了 你會發現有很多的拆分點 但是無論如何資料庫都是首先要務

By Albert Yu

2020ironman 12th – Modern Web - PHP on AWS 進化論 - 從單主機一路進化到Serverless,以WordPress與 laravel 為例 (中斷)

2020ironman 12th – Modern Web – Day12 – AWS Security Group

Security Group概念 安全群組會做為您執行個體的虛擬防火牆,控制傳入及傳出流量。當您在 VPC 中啟動執行個體時,您可以為執行個體指派最多五個安全群組。安全群組會在執行個體層級執行,而非子網路層級。因此,在您 VPC 中子網路內的每個執行個體都可指派給一組不同的安全群組。 原廠說明文件 <--連結--> Security Group基礎特性 * 您可以為每個 VPC 建立的安全群組數、每個安全群組可新增的規則數,以及您可以與網路界面建立關聯的安全群組數都具有配額。如需更多詳細資訊,請參閱 Amazon VPC 配額。 * 您可以指定允許規則,但無法指定拒絕規則。 * 您可以為傳入和傳出規則分別指定規則。 * 當您建立安全群組時,它沒有傳入規則。因此,直到您將傳入規則新增到安全群組之前,來自其他主機的流量都無法傳入您的執行個體。 * 根據預設,安全群組會包含允許所有傳出流量的規則。您可以移除規則並新增只允許特定傳出流量的傳出規則。若您的安全群組沒有傳出規則,將不會允許來自您執行個體的傳出流量。 * 安全群組是具狀態 — 的,若您從執行個體傳送請求,該請求

By Albert Yu

2020ironman 12th – Modern Web - PHP on AWS 進化論 - 從單主機一路進化到Serverless,以WordPress與 laravel 為例 (中斷)

2020ironman 12th – Modern Web – Day11 – AWS VPC 網路設計

何謂 VPC (官方說法) Amazon Virtual Private Cloud (Amazon VPC) 允許您在 AWS 雲端佈建一個在邏輯上隔離的部分,並在自己定義的虛擬網路中啟動 AWS 資源。您可以完全掌控虛擬聯網環境,包括選擇自己的 IP 地址範圍、建立子網路,以及配置路由表和網路閘道。您可以在 VPC 中同時使用 IPv4 與 IPv6 來安全且輕鬆地存取資源和應用程式。 您可以輕鬆自訂 Amazon VPC 的網路配置。例如,您可以為可存取網際網路的 Web 伺服器建立一個公開子網路。您還可以將後端系統 (如資料庫或應用程式伺服器) 放置在無法存取網際網路的專用子網路中。您可以利用安全群組和網路存取控制清單等多種安全層,對各個子網路中 Amazon EC2 執行個體的存取進行控制 原廠說明文件 <--連結--> 使用方式 其實我們可以把VPC想向專屬於我們機房中的專屬網路

By Albert Yu