Skip to main content

· 3 min read
zaxro

因為在安裝 mysql 到 aws 的 linux ami 上,遇到一些問題,這邊紀錄整個安裝過程!

安裝過程

  1. 官網這頁挑你要的安裝檔並下載,這邊我直接列出我的版本跟指令,注意你這邊選項跟你 centos 之類版本有關!
wget https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm
  1. install the MySQL Yum repository configuration package, and /etc/yum.repos.d/ would show new config of mysql.
rpm -ivh mysql57-community-release-el7-11.noarch.rpm
  1. 從 mysql 的 RPM repo 那邊把 GPG key 拉下來,這會用於之後 package manager 安裝 mysql 驗證所安裝版本的數位簽章是否是官方發行,請執行以下指令
rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022

如果沒有執行會報錯

warning: /var/cache/yum/x86_64/2/mysql57-community/packages/mysql-community-libs-compat-5.7.37-1.el7.x86_64.rpm: Header V4 RSA/SHA256 Signature, key ID 3a79bd29: NOKEY
Retrieving key from file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql


The GPG keys listed for the "MySQL 5.7 Community Server" repository are already installed but they are not correct for this package.
Check that the correct key URLs are configured for this repository.


Failing package is: mysql-community-libs-compat-5.7.37-1.el7.x86_64
GPG Keys are configured as: file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql
  1. 透過 packet manager 安裝 mysql server
yum install mysql-community-server -y
  1. 到這部基本上就完成了,你接著要去查密碼!基本上 5.7 的服務臨時密碼,會在/var/log/mysqld.log
cat /var/log/mysqld.log | grep "temporary password" | awk '{print $NF}'
  1. DONe

要換 data 存放位置到你新建立的 EBS

因為很常會對 mysql 的硬碟做備份,並另外 mount 硬碟給他,所以也要知道如何搬運!

這邊假設我新 mount 一個硬碟在/data 資料夾底下!然後想把資料搬過來

  1. 修改 my.cnf
/etc/my.cnf
[mysqld]
datadir=/data/mysql
socket=/var/lib/mysql/mysql.sock

# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
#skip-grant-tables
  1. 停服務
systemctl stop mysqld
  1. 複製文件過去到/data,rsync -a 表示以遞歸方式同步目錄,保留文件屬性(如權限、時間戳)等,-v 表示顯示詳細的輸出信息。
rsync -av /var/lib/mysql /data
  1. DONe,起服務!
systemctl start mysqld

假如你今天忘記 mysql 密碼(5.7)

  1. vim /etc/my.cnf 加入在最下面skip-grant-tables
  2. systemctl stop mysqld
  3. 登陸 mysql, mysql
  4. 執行以下指令,這邊密碼會是[$Password]
USE mysql;
UPDATE user SET authentication_string = password ('[$Password]') WHERE User = 'root';
flush privileges;
quit
  1. skip-grant-tables拿掉
  2. systemctl restart mysqld

· 24 min read
zaxro

使用 Terraform 首要注意事項

  1. apply 之後看到 destroy 有件數,請立刻停手,並按下中斷,然後去找其他人討論

What is Terraform?

HashiCorp 公司打造的 IaC 工具,使用者透過可閱讀的設定檔以達到版控,重複使用,共享設定,管理本地端(on-premises resources)跟雲端(cloud resources)由低階組件,例如:計算、存儲、網路資源,到高層級組件,例如 DNS record,SAAS 功能等的管理.

基本上,常用的雲服務,他都可以操作,地端機器也可以透過 terraform 管理!他有自己的 config 語言(*tf),透過 tf 檔跟各廠商的 api 做串接,也就是說原本你要創建 instance,要自己去翻 aws 的指令,現在只要知道怎麼設定 tf 檔就好,當 terraform 幫你把東西建立好,會把 response 的資訊寫在一隻 state 檔案!

installation

官網安裝cover 所有用例,以下提供我的 lab 環境的安裝方式,linux centos

sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://rpm.releases.hashicorp.com/RHEL/hashicorp.repo
sudo yum -y install terraform

因為我這邊 lab 都會用 aws,所以要另外設定 IAM 的相關資訊,請人幫你把你的 key 生出來吧

  1. set the AWS_ACCESS_KEY_ID
export AWS_ACCESS_KEY_ID=
  1. set your secret key.
export AWS_SECRET_ACCESS_KEY=

· 7 min read
zaxro

判斷邏輯

網路服務會發生問題狀況有很多,以下會用樹狀圖去做個判斷邏輯,當然這是建立在我目前遇到過的各種各樣情況上,同時也會加上判斷中會使用的方法!

HTTP status 介紹

  • 1xx - 資訊性狀態碼(Informational Status Codes):表示請求已收到,並且伺服器仍在處理中.
  • 2xx - 成功狀態碼(Success Status Codes):表示請求成功被伺服器接受和處理.
  • 3xx - 重新導向狀態碼(Redirection Status Codes):表示需要進行進一步的操作以完成請求.
  • 4xx - 用戶端錯誤 : 常見有 400 請求無效,server 無法理解,404 資源不存在
  • 5xx(Server Error Status Codes)- 伺服器在處理請求時發生錯誤.

4xx 判斷過程及工具

出現 4xx 不一定全是 client 問題,因為這與你 server 端 code 可能有關係,可能今天問題是 RD 的靜態資源放錯路徑,前端拿不到,也有可能是客戶端編碼跟 API 串接方式錯誤等等.

在排查此類問題,客戶端提供的報錯節圖,url,跟網路速度都是重要判斷依據.如果明確知道問題原因,那可以直接跳階段測試,不知道原因的話建議可以以下判斷:

  1. 靜態資源未拿到: 請客戶端檢查網路環境,提供網路速度,ping 跟 traceroute 結果,是否有清 cache,server 端確認是否有此資源,跟有無 purge.
  2. 編碼問題: 這要看 server log,並請開發人員溝通.

順序問題,4xx 的問題可以從 client 端開始查到 server 端.

5xx 判斷過程跟工具

主要跟 code,hardware, app's condition,internet 都有關係,且可能彼此混雜,就 RD 覺得是 IT 設定 waf,IT 覺得是RD的程式問題. 也因此,建立判斷的過程很重要.

  1. hardware 問題,基本上有裝監控項可以看到性能就沒問題

  2. internet 問題,這邊就很複雜了,如果基本的 server 端互相 telnet 都有過,那接下來就要乖乖重投檢查了,這邊先不考慮 ICP 或雲服務商掛掉,這兩個掛掉應該很多網站都會掛,那剩下就是排查 waf.排查 waf 工具有以下

    • /etc/hosts: 綁定 DNS
    • web server 端的 curl.

排查流程

網路發出的流程會是:client請求 -> CDN -> web server轉導-> 後端程式處理

所以排查順序也可以是由外到內,client 端開始查,但通常都是並行的,就是 client 端那邊查網路連線品質,server 端也同時看服務情況跟 log.

  • 情境一: 客戶反應說他的 request 被攔截了,原因是 xxx cors.

    檢查流程:

    1. 先去 CDN 看是否被 WAF 阻擋.
    2. web server 看是否有設定 WAF 或者有設定跨域設定,及其阻擋紀錄.
    3. 後端程式規範的跨域跟安全套件.
  • 情境二: 客戶反應說他的 request 被攔截了,原因是 xxx header 的 sameorigin problem.

    檢查流程:

    1. 先去 CDN 看是否被 WAF 阻擋,如無,就綁定/etc/hosts 不走 CDN 直接到 web server ip 做測試
    2. web server 檢查是否有限定 header.
    3. 從 web server 那邊直接 curl 目標 server ip:port,ex.以下指令示範
curl -v http://10.0.0.1:92

去看請求後端時是否就有強迫帶該 header,如有就代表程式端有帶套件去加 header

  1. code 端可能用的套件,例如 js 的helmet套件.

在測試流程中發現限制,也不代表你一定要開放,例如,iframe 的內嵌就會牽涉到點擊劫持,跨站腳本攻擊(Cross-Site Scripting, XSS),內容竊取,會限制就會有他的原因.

非 4xx 或 5xx

這個判斷基本上就是看 F12 報錯項目了,看完之後的判斷,也是依據 4xx 或 5xx 類別去判斷.

小結

基本上,排查流程一定要有個順序,由外到內或內到外(看習慣),客戶端到 server 中間的所有事情都要一個一個查,剛開始可能因為經驗不足,到一半就會放棄了,像我就是XD,但隨著時間增加,看得問題也變多了,就要去紀錄不足之處,以及中間固定要做的事情!

如果排查一遍還是找不到問題,就要去想你過程可能漏掉哪些細項,哪些測試是可以做但你還沒做或不知道怎麼做的!

· 6 min read
zaxro

以下內文會提供的資訊:

  • cloudwatch and cloudtrail 是什麼
  • 什麼時候會用到 cloudwatch and cloudtrail?
  • 基本建立 cloudwatch 監控 ec2 CPU

cloudwatch

CloudWatch 提供了即時的監控功能,可以監視 AWS 資源的狀態和性能指標,例如 CPU 使用率、網路流量和存儲使用量等。此外,CloudWatch 還可以設定警報,當資源的指標達到預先設定的閾值時,它可以發送通知。CloudWatch 還提供了日誌記錄的功能,以收集、監視和分析應用程式和資源的日誌。

什麼時候會用到 cloudwatch

一般公司會使用 Zabbix,Prometheus,這類工具做到即時監控資源功能,而日誌分析部分,可以用的工具也很多,例如 ELK

  • 那為啥要使用 cloudwatch?

個人以為考量的點是建制以上服務的時間成本,當你這台在 AWS 機器可能只會開個一段時間,且網路不通到監控機台或者公司剛成立監控還沒做,以上這些情況會讓你考慮用到 cloudwatch, 一般要長期監控的伺服器還是會用 Zabbix,Prometheus 等

· 7 min read
zaxro

basic introduction

S3(simple storage service)負責檔案儲存跟管理,你可以當他是個 NAS,只是不用管理作業系統,跟監控他的機器狀況. 相比於 EBS(Elastic Block Store)需要跟 EC2 一起使用,S3 只需要做到資料管理部分!

儲存形式

  • standard storage:默認儲存類型,提供高持久性、高可用性和低延遲的存儲,適合各種使用案例
  • intelligent-tiering:根據數據的訪問模式自動將數據分類到適合的儲存層級,以實現成本效益和性能優化
  • Glacier:適用於需要長期保存的數據,但對訪問速度要求不高
  • Standard-IA:IA 適用於不常存取但需要在必要時進行快速存取的資料,非常適合長期儲存、備份和做為災難復原檔案的資料
  • one Zone IA: IA 適用於不常存取但需要在必要時進行快速存取的資料。它會將資料存放到單一 AZ 中,而且成本較 S3 標準 – IA 減少 20%。
  • Glacier-deep-Archieve:這是一種封存儲存類別,可提供最低成本的儲存和毫秒級擷取。針對不需要立即存取但需要靈活且免費擷取大型資料集的封存資料,例如備份或災難復原使用案例,資料擷取時間為 12-48 小時。
  • S3 Glacier Instant Retrieval:封存儲存類別,可為很少存取且需要在幾毫秒內擷取的長期資料提供最低成本的儲存。當您的資料每季度存取一次時,請使用 S3 Glacier Instant Retrieval

簡單整理,S3 選擇一般使用就用 standard,如果可能是幾小時拿一次用 IA 系列,不擔心東西資源掛掉就放在 one-zone 省錢,如果是長期封存資料就考慮用 Glacier 系列.

S3 vs VPC

因為 S3 都是在 VPC 外建立,存取 S3 有兩種方式

  • 從網際網路存取 S3(透過 url 拿東西,這邊就不介紹)
  • 從 VPC 當中伺服器存取 S3 檔案

從 VPC 當中伺服器存取 S3 檔案

透過建立 IAM role,並將適當的 IAM policy 賦給該 IAM Role,並經該 role 指派給 ec2,就可以讓 EC2 透過暫時性的安全憑證向 S3 或其他 AWS 資源做請求!

EC2 透過 VPC endpoint 連結 S3

官網 ,主要優勢在於可以使用 VPC Endpoint 將 EC2 實例連接到 S3 資源,使其可以在 VPC 內部訪問 S3 而無需通過 Internet。這樣可以提高安全性並降低流量的出口。

如何設定 role 給 ec2

  • 打開 IAM 控制台並選擇「角色」。
  • 點擊「創建角色」。
  • 在選擇您的使用案例下,選擇「EC2」。
  • 在「權限」頁面上,選擇您希望為 EC2 實例提供的權限,或創建自定義的 IAM 策略來指定您需要的權限。
  • 在「標籤」頁面上,根據需要添加標籤,然後點擊「下一步」。
  • 在「回顧」頁面上,為角色指定一個名稱,並選擇「創建角色」。 現在,您已經創建了一個 IAM 角色,接下來您需要將該角色附加到 EC2 實例上:

打開 EC2 控制台並選擇您的實例:

  • Actions ->Security ->modify iam role
  • 選擇您創建的 IAM 角色,然後點擊「保存」。
  • 基本上,等 s3 bucket 創建好以後就大功告成拉,實務上可以把開機要執行的腳本,透過拉取 s3 資源並使用!

S3 設定

主要有三關會設定,這邊先不討論設定 CORS 那些設定

  1. 公開存取設定: 這個其實是單純防呆設定,預設是完全禁止公開,所以通常是網頁資源就需要打開,單純給EC 2 拿東西可以不用公開
  2. ACL of S3: 對各類使用者給予 List or Write or Read 等權限,不過預設是會有 bucket owner enforced 屬性,讓對 bucket 的存取單純由 Bucket policy 規範
  3. Bucket Policy: 這個就是類似 IAM policy 制定規則方式,透過 EPCAR 去規範資源存取.

建立 bucket

  1. 登入 AWS 管理控制台,並打開 S3 服務。

  2. 在 S3 控制台的首頁上,點擊「創建存儲桶」。

  3. 在「名稱和區域設置」頁面上,為存儲桶指定一個唯一的名稱。請注意,存儲桶的名稱在全球範圍內必須是唯一的,且符合命名規則。您還可以選擇存儲桶所在的區域,在「設置選項」部分,您可以選擇適當的選項,如版本控制、加密和存儲桶日誌等。根據您的需求選擇相應的設置。

  4. 在「權限設置」部分,您可以為存儲桶指定存取權限。根據需求,可以選擇公共存取設置、存取控制清單(ACL)或存取策略。主要理解為啥會有三個要設定,存取策略是啥~

  5. 確認您的設置並點擊「創建存儲桶」。如果要改存檔類型,要點到指定文件-> actions -> Edit storage class ->看到一堆類型囉!

· 4 min read
zaxro

SRE

使用過的 IaC 工具

使用過的域名、證書管理工具

基本上這邊就看個人回答,工具部分有 certbot 可以做定期 renew 憑證!

DevOps

雲端平台理解

  • IAM:

  • VPC:

  • peering connection

  • cloudwatch

  • cloudtrail

請問心目中理想 pipeline!

理想的 CI/CD pipeline 應該具有自動化、快速、可靠且能快速反饋.

  • 自動化:基本上滿直觀得,跑 CI/CD 就是希望減少手動,所以盡量要讓所有過程自動
  • 快速部分:各家 CI 會有不同配置,主要是透過檢視流程,讓沒有相依性的 jobs 可以平行處理,並適當使用 cache,減小使用的 image size 等等.
  • 可靠: pipline 流程設計要有一致性,部署的環境跟資料源穩定
  • 快速反饋: 將過程成功或失敗,透過 webhook 或其他方式發送到通訊平台

ps: pipline 過程

  • code management: 程式碼依規定建立分支,tag,commit 放入版本控制系統,
  • Build: 將檔案進行編譯
  • 自動測試:包含單元測試,整合測試,確定新開發的 function 功能不會破壞既有功能
  • (optional)建 image 並推到 registry: 這適用於用 container 部署的項目
  • 部署到測試環境: 環境可能有很多個,如果用 ec2 之類是用 ssh 做部署(可以配合 ansible 腳本),如果是 image 就有需要並執行的過程!
  • 驗證: 對於新開發功能進行驗證,確認功能正常,符合需求
  • 部署到 production
  • 監控:這牽涉到硬體跟服務的日誌監控跟分析
  • Rollback: ㄧ旦發現要能進行 rollback

如何提升系統穩定性(ex 證券業),降低伺服器意外故障風險?

雲端部分,的確是會遇到某個 AZ 機器突然掛掉的問題,畢竟他對機器保障的 down time 本來就不是 100%,如果是用 VM 之類起服務,可以在將服務部署在同一 Region 的各 AZ 中,即使一個 VM 掛了,其他的也可以提供服務! 地端機器也是同樣概念!

運維

基本上,他就是全包所有東東(除了開發),著重維護底層,或許會碰到部署,所以基本上要有以下觀念

  • 監控系統建立跟操作: 一般硬體,process 監控,port 監控,常用資源:Zabbix,Grafana,Prometheus
  • 日誌系統: 日誌系統收集跟傳輸資訊:filebeat,日誌系統分析:ELK,Graylog.
  • 資料庫管理: 設計,管理和維護資料庫,包括備份和恢復,性能優化,安全管理等。
  • 網路管理: 維護和管理網絡設備,如交換機,路由器和防火牆。包括設置網絡拓撲,網絡設置和配置,網絡性能優化和維護,包含雲端跟地端.
  • 安全性管理: 確保系統和數據得到妥善保護,防止未經授權的訪問和數據洩漏,包含防毒安裝.
  • 軟體管理: 軟體部署,跟版本管理等
  • 資料備份和災難恢復: 確保所有資料都能夠備份和恢復,並建立計畫並測試.

· 6 min read
zaxro

yaml and json

Yaml 跟 Json 都是用於日常進行資料處理,Json 相信大家很熟了,前後端資料溝通最常用到的就是 Json,因為他跟 python 的 dict 格式超像,所以熟悉 json 也很快,差別在前者是 python 物件,後者是有固定格式且方便機器解析的純文字的數據交換格式,規則是名稱寫在雙引號內,值可以是字符串、數字、對象、數組、布爾值或 null。

json基本範例
{
"name": "John",
"age": 30,
"city": "New York",
"hobbies": ["reading", "music", "sports"],
"isMarried": false,
"spouse": null
}

Yaml 相對於 Json 來說,對我個人而言,在表達複雜資料結構上,例如多層次的陣列,更好了解一些,主要使用縮排和簡潔的語法來表示結構和層次.

基本語法重點:

  • 有---開頭,通常就是 yml 格式,但沒強制要加
  • 使用縮排表示層級
  • 使用空格做縮排,,建議使用 2 或 4 個空格,不建議用 tab
  • 字符串不用加引號,在可能產生歧義時,需加單引號 or 雙引號.(單引號包圍字符串時,會將特殊符號保留。雙引號包圍字符串時,反斜線需要額外進行轉義。)
## 以下key3等於key4,注意使用單引號跟雙引號差別
- key3: '\.php$'
- key4: "\\.php$"
  • 支持多種數據類型,包括字典、列表、布爾值、整數、浮點數等。
  • 用# 註解

關於歧義這點,近一步說明: 使用 ":" 字符時,可能會被解析成 key-value 的形式,需要加引號來避免歧義。 字符串包含 "-" 字符時,可能被解析成列表中的項目,需要加引號來避免歧義。 字符串包含 "#" 字符時,可能被解析成注釋,需要加引號來避免歧義。

# 不用引號
key: value

# 需要加引號避免歧義
key: "value:with:colon"

# 需要加引號避免歧義
key: "value-with-dash"

# 不用引號(但是為了避免麻煩,遇到#都習慣加引號吧)
key: "#no-comments"

# 需要加引號避免歧義
key: "# comments"

yaml 數據結構

yml 支持多種數據類型,包括字典、列表、布爾值、整數、浮點數等.

這邊建議可以安裝 yq 把 yml 解析成 json,方便習慣用 json 得人了解 yml.

pip3 install yq

接下來會了解字典、列表、Boolean、整數、浮點數如何表達,以下的 yml 用法跟出現的 json 是相同意思的!

字典

以下二者相等

yaml dict
name: Helloworld;
json dict
{
"name": "junmajinlong"
}

列表

yaml list
---
- lang1: Shell
- lang2: JS
- lang3: Python

json list
[{ mylang: "Shell" }, { mylang2: "JS" }, { mylang3: "Python" }];

boolean

yaml boolean
is_published: true;
is_featured: false;
json boolean
{
"is_active": true,
"is_admin": false
}

yml 的 dict 跟 list 混合表達

這個格式在 docker 跟 ansible 之類很常見,其實他是這樣滴!

yaml dict and list
---
# 值是純list,有三個-,所以有三個元素.
languages:
- Shell
- JS
- Python

# 值是dict in list,因為只有一個-,代表只有一個元素,該元素type為dict.
services:
- name: nginx
status: running
json dict and list
{
"languages": [
"Shell",
"JS",
"Python"
]
}
{
"services": [
{
"name": "nginx",
"status": "running"
}
]
}

到這邊,基本上對 yml 就有一定熟悉度,在寫 config 時,腦袋也跟著跑出 json 的檔案範例.

· 11 min read
zaxro

基本上我學新的工具都會先做幾件事情

  1. 中文 google 搜尋看有哪些資源
  2. 乖乖把官網教學文章看過一遍,以及官網的一些重要的基礎文章看完

基本上都會先看官網文件,如果官網怎麼看都不懂,會用中文的教學文件輔助,還好,terraform 的教學文件很不錯~ 當基本資料學完之後,以我的資質一定還是很不熟,所以接著會做幾件事情

  1. 寫篇文件把基本型態,跟常用方式整理一下(像這篇)
  2. 參考別人的實戰教學
  3. 實作

這邊,每件都很重要,把你懂的事情記錄下來有很多好處

  • 你未來遇到事情可以複習
  • 如果以前觀念錯誤可以改正
  • 要找人討論事情或求教,他可以透過文章先了解你的程度

參考別人實戰經驗可以減少自己踩坑機率!

最後,學東西就是要實作,不實作或導入,那有學跟沒學一樣!

IaC 常見管理項目

一個網路服務的提供,中間會經過許多關卡,這邊大致整理以下:

  1. 軟體開發或者更新
  2. 測試環境部署並測試
  3. 正式環境上線
  4. 監控環境

看幾來步驟很少,但實際上細節很多,而且隨著公司技術程度越高,這些過程會被切得越複雜.

軟體開發或者更新的過程,會被切割成,依據 github flow(每家邏輯不同)對各需求,建立不同分支,RD 的 code 推上來之後,要確保品質會經過測試階段,最後合 code,接下來就是把 code 部署到測試環境部署並測試,測試沒問題就會部署到正式環境.

code 的穩定性那段由 CI 管理,部署過程是 CD,而部署有許多方法,但討論 CD 如何做需要從根本『環境』開使談起,要怎麼選擇你的運算資源這個問題很常見,aws 官方提供的講解如以下

· 21 min read
zaxro

這邊放學習經驗,未來工作中如果發現有其他做法,或者發現觀念有錯,都會滾動式修改,請多多見諒~

what is ansible

ansible 是組態管理工具 Configuration management Tool ,含有自動化工具,配置系統、部署軟件和編排更高級的 IT 任務,例如持續部署或零停機滾動更新.

使用 OpenSSH 去管理機器.支援 Kerberos、LDAP 和其他集中式身份驗證管理系統.

Ansible 是 Python 陣營的組態管理工具,不用幫每台機器 (instance) 預載 agent ,只要有 SSH 和 Python 就可以執行.

官網的資訊很多,對於初學者來說,最重要的是Getting started with Ansible以及其底下到小章節,這邊主要是講基礎觀念!

Ansible concepts

tip

基本上,RD 的習慣會是需要的工具先上網找輪子,找不到的自己寫,IT 人員的習慣就是找輪子,並透過輪子寫好的的設定檔去管理任何事情,所以要習慣查官網資料才行,也要了解一隻程式總共有哪些設定檔,及設定檔可能出現的位置!

環境名詞定義

基本環境需要要有以下幾點

  • 控制節點 (Control node):Ansible 控制主機端,安裝有 Ansible 的系統。您可以在控制節點上執行 Ansible 指令,例如 ansible 或 ansible-inventory,主要透過 openssh 到 Managed node.

  • 被管理節點 (Managed node):Ansible 客戶端,由 Ansible 控制主機端所控制的遠端系統或主機,透過 Control node 以 SSH 方式近來這台機器。

文檔名詞定義

  • 庫存清單 (Inventory):一個按邏輯分類的被管理節點列表。您在控制節點上建立庫存清單,以便描述主機部署情況給 Ansible,舉例來說,你的一個服務可能由多台機器組成,Inventory 方便你一次操作這群機器們.

  • Playbooks: 一個 playbook 可以由一到多個 plays 組成,將管理節點(主機)對應至任務。Playbooks 包含變數、角色和任務的有序列表,

    • Plays: Plays 是 Ansible 執行的主要上下文,這個 playbook 物件將被管理的節點(主機)對應至任務。Play 包含變數、角色和任務的有序列表,可以重複執行。

    • Roles: Roles 是一種有限的可重複使用的 Ansible 工具,可以給多個 playbook 重複用

    • Tasks: 會套用於被管理主機的"操作"。

  • Handlers: Handler 是 Task 的一種特殊形式,只有在先前的 Task 發出"changed"狀態的通知時才會執行。

  • Modules: Ansible 提供的 function

  • Plugins: 插件是擴展 Ansible 核心功能的代碼片段,它們可以控制如何連接到受管節點(連接插件),操作數據(過濾插件)甚至控制控制台中顯示的內容(回調插件)

  • Collections:一種以 Playbook、角色、模組和插件等形式分發 Ansible 內容的格式。您可以通過 Ansible Galaxy 安裝和使用集合。

  • AAP: Ansible 自動化平台的簡稱。這是一種包含企業級功能的產品,並整合了 Ansible 生態系統中的許多工具:ansible-core、awx、galaxyNG 等等。

· 5 min read
zaxro

purpose of each folder

  • /(根目錄):Linux 文件系統的起點,所有的目錄和文件都是以根目錄作為參照點。
  • /bin:包含一些常用的系統二進位執行檔(executable),如 ls、cp 等等。
  • /boot:系統啟動時使用的核心檔案和啟動載入器(bootloader)。
  • /dev:包含一些裝置檔案(device files),如硬盤、鍵盤、滑鼠等等。
  • /etc:系統全局的配置文件目錄,包含系統和應用程序的配置文件。
  • /home:用戶的家目錄,即每個用戶的個人資料目錄。
  • /lib:庫文件目錄,包含系統和應用程序所需的庫文件。
  • /mnt:用戶暫時掛載的文件系統目錄,通常用於掛載外部儲存設備,如 USB 隨身碟、CD-ROM 等等。
  • /opt:存放可選的應用程序目錄,通常包含第三方應用程序和軟件。
  • /proc:虛擬文件系統目錄,允許操作系統內核和進程的運行狀態。
  • /root:root 用戶的家目錄。
  • /run:系統啟動後,某些程序運行時使用的暫存目錄,包括 PID 文件、掛載點等等。
  • /sbin:包含一些系統管理用途的二進位執行檔,僅限 root 用戶使用。
  • /srv:存放網路服務(如 FTP、HTTP)的數據目錄。
  • /sys:系統文件系統,包含系統硬件和設備的信息。
  • /tmp:用於存放臨時文件的目錄,一般文件都會在系統重新啟動後自動清除。
  • /usr:用於存放共享的、只讀的和不經常變動的文件,包括程序和庫文件等等。
  • /var:存放經常變動的文件,包括日誌文件、緩存和臨時文件,某些應用程序和服務的數據庫以及其他各種程式運行時產生的數據文件等。

Basic concepts

單純看上面的各資料夾用處一定還是會覺得很陌生,以下用常見例子幫助了解

  1. 用 yum 安裝 mysql 之後,請問他的數據位置會在哪個資料夾? 設定檔會在哪? 其他?
  • 數據文件會放在/var/lib 底下,以 mariadb 為例,到/var/lib/mysql 底下會看到各數據庫的數據(每個 database 一個 folder)還有 crash recovery 時用於儲存 metadata 的 log 檔案等,這是因為/var 規劃是放數據文件跟日誌文件
  • 設定檔在/etc 底下,依據系統,centos 可能在/etc/my.cnf 或/etc/mysql/my.cnf,不過基本上都會在/etc,因為/etc 規劃放系統或應用程序的 config 的,注意 my.cnf 會用!includedir /etc/my.cnf.d 去進一步包設定檔,需要 cnf 為結尾.
  • pid 文件一般位于 /var/run/mysqld/mysqld.pid 或 /var/lib/mysql/{hostname}.pid
  • 日誌會在/var/log/mysql 底下.
  • 共用文件在 /usr/share/mysql/ 中存放的是 MySQL 的一些共用文件,其中包括:
    1. 公用的語言文件和字符集文件。
    2. 公用的系統表空間文件。
    3. 公用的插件庫文件。
    4. 公用的文檔和示例文件。
  1. docker 數據文件跟設定檔?
  • 數據文件會在/var/lib/docker 底下,依照 container ID 放置(另外用 bind mount 掛的不算,複習一下 bind mount 建立指令docker run -d --name my_container \ -v /path/on/host:/path/in/container \my_image)
  • 設定檔在/etc/docker 底下,預設只有一隻 key.json,也可以加入其他設定,例如/etc/docker/daemon.json 可以對 log 格式的 size 跟輪詢做設定.