Jason lee

docker

docker-ce 18.09 systemd unit 調整

介紹 Docker 從 18.09 版本之後調整了 systemd unit file 的 ExecStart= 的啟動模式,這造成了如果有使用 /etc/docker/daemon.json 做客制設定會無法啟動,因為啟動模式衝突了 修改方案 1. 建立一個 docker systemd unit file 的 override 檔案 /etc/systemd/system/docker.service.d/override.conf); 2. 在 [service] section 加入這些內容 # This line resets / "removes" the original ExecStart as
1 min read
cockroachdb

setup a secure cockroachdb cluster

因為建立 database 的使用者必須是在 secure cluster 下面能建立,所以我們需要先打造一個 secure cluster 先。 1. 去網路上 download windows binary 下來,因為我們會在 windows 的環境產生金鑰 2. 先在 c:\ 下面建立一個 certs 的資料夾,裡面再建立兩個資料夾,分別為 certs 和 my-safe-directory 3. 建立金鑰,後面的流程都會用到這個產生出來的金鑰來建立憑證 $> cockroach cert create-ca --certs-dir=certs --ca-key=my-safe-directory/ca.key 4. 建立每個節點的憑證 (必須把這個憑證傳送到每個節點上面) $> cockroach cert create-node 127.0.
1 min read
ocr

tesseract ocr 圖像辨識安裝

因為爬網頁的需求,需要取得驗證碼,所以就有了圖像辨識的需求,因為平常都用 windows, 所以以下的安裝以 windows 為範例 安裝 1. 連到 https://github.com/UB-Mannheim/tesseract/wiki 2. 下載 tesseract-ocr-w32-setup-v4.0.0-beta.1.20180608.exe 3. 安裝完後需要把安裝路徑加入到 path 裡面,例如 C:\Program Files (x86)\Tesseract-OCR 4. 添加 TESSDATA_PREFIX 環境變數,內容為 C:\Program Files (x86)\Tesseract-OCR\tessdata 5. 開啟 console,
1 min read
elasticsearch

Elasticsearch Restore

今天手滑不小心把 production 的 index 刪除了,嚇都嚇死了...幸好平時有做備份,今天剛好臨時演練一下,所以有了這一篇文章,因為我指誤刪了一個 index, 但我平常備份是整個 cluster 備份,所以這本是從 cluster 的完整備份檔取一個 index 來做還原。 首先需要把你的 index 先 close,之後再進行還原,當 Elasticsearch 還原好之後,它會自動把 index 打開 POST /index-xxx/_close POST _snapshot/s3_repository/backup-xxx/_restore { "indices": "index-xxx", "ignore_unavailable": true, "include_global_state": true } Reference: https:
1 min read
database

資料庫設計規範

整理一下過去設計資料庫的一下經驗 基礎規範 1. 資料庫依照環境命名,例如資料庫的名稱叫做 abc,那在 DEV 環境下我們就叫做 abc_dev, 在 UAT 環境下我們就叫做 abc_uat,在 prod 的環境下就叫做 abc_prod 2. 資料庫裡面的命名 (database, table, column) 都用小寫 (snake_case), 例如: user_id 3. 禁止使用 NULL,不要花時間而外去處理 NULL,每一個 column 都需要有預設值 4. 必須使用UTF8字符集 5. 資料庫裡面的時間必須是用 UTC 時間,由程式來針對使用者想要的時區做轉換並顯示 6. 表必須有主鍵 (primary
2 min read
nginx

X-Forwarded-For 和 X-Real-Ip 的差異

最近因為抓 client 的IP遇到一些問題,又從重新回來研究這兩個東西,才發現我之前針對 X-Real-Ip 的理解是錯誤的 XD,所以只好寫一下這篇筆記一下。 我們先假設一個場景: 使用者(1.1.1.1) --> CDN (2.2.2.2) --> API Gateway (3.3.3.3) --> Service (4.4.4.4) 這時候我們在 API Gateway 這個地方做接收這兩個值,他應該分別為 X-Forwarded-For: 1.1.1.1, 2.2.2.2 (他會把IP 一層一層的傳下去)
1 min read
docker swarm

回復 docker swarm

如果遇到一些問題需要用原本某台 manager 裡面的資料來重建 docker swarm cluster的話,可以在 manager 節點上輸入 docker swarm init --force-new-cluster ,這如果資料不再這個節點上面將會遺失掉,所以建議找有 service 跑在上面的節點,這樣有些重要的資訊才會被同步過去。如果發現某個 manager node 的節點的 status 是 down 的話,建議可以先把該 node 移除再從新 re-join 看看
linux

關閉 linux swap 空間

nux 會使用硬盤的一部分做為SWAP分區,用來進行進程調度--進程是正在運行的程序--把當前不用的進程調成『等待(standby)『,甚至『睡眠(sleep)』,一旦要用,再調成『活動(active)』,睡眠的進程就躺到SWAP分區睡大覺,把內存空出來讓給『活動』的進程。如果內存夠大,應當告訴 linux 不必太多的使用 SWAP 分區, 可以通過修改 swappiness 的數值。swappiness=0的時候表示最大限度使用物理內存,然後才是 swap空間,swappiness=100的時候表示積極的使用swap分區,並且把內存上的數據及時的搬運到swap空間裡面。 * 關閉 swap 語法 (但電腦重開後會失效) swapoff -a * 如果要永久取消 swap,可以修改 /etc/fstab 文件,註釋掉 SWAP 的自動掛載,使用free -m確認swap已經關閉 * 最後調整
1 min read
docker

Docker Engine Max Open files

最近在觀察到不知道什麼原因,在 Centos7 安裝 docker engine,Docker Engine 的 Max Open files 最多只有 65536,當在高併發的環境下,這個數值是遠遠不夠的,所以這邊手動調整一下設定。 1. 首先,如何觀察當前 docker engine 的 max open files 數值是多少? 獲取 docker engine 的 PID systemctl status docker 查詢 root$ cat /proc/${pid}/limits Limit Soft Limit Hard Limit Units Max cpu time
1 min read
docker

connect to Docker Swarm cluster via remote api

因為當你安裝好 docker 的時候,預設是不會開始 remote api 服務的,只能本機連線,所以第一步必須開起遠端連線的功能,同時為了安全性,需要使用憑證。 * 建立 ca 憑證 $> openssl genrsa -aes256 -out ca-key.pem 4096 $> openssl req -new -x509 -days 365 -key ca-key.pem -sha256 -out ca.pem * 建立 server 憑證 建立 server 憑證, 需要用 server 的 dns 和 server ip (記得把 $host 換成你的)
1 min read
docker

Docker Storage Driver設定為OverlayFS

這邊將設定為 overlay2,請先確認您目前用的版本是 Centos 7.4 之後,Kernel 版本為 3.10.0-693.2.2.el7.x86_64 備註:修改完之後, container 和 image 都會被清掉喔 1. 停止 docker systemctl stop docker 2. 修改 daemon.json 在 /etc/docker/daemon.json 增加這兩個屬性 (如果沒有這個檔案請新增) { "storage-driver": "overlay2", "storage-opts": [ "overlay2.override_kernel_check=true" ] } 3. 重啟
linux

Socket accept - 「Too many open files」

什麼是 "too many open files" 錯誤,這是因為 linux 有限制每個用戶、每個系統可以開啟資源的數量,socket 連線和 file 都算是資源的一種 用 centos7 (Systemd) 必須要修改 /etc/systemd/system.conf 和 /etc/systemd/user.conf (只用在 GUI 介面登入有效),另外非 GUI 介面 ( terminal ) 需要再修改 /etc/security/limit.conf 1. 首先怎麼查詢 open file 目前的上限 (這是以 user 為單位, 如果一個用戶開啟多個 process 都是共用這一個數據)
2 min read
docker swarm

如何建立 Docker Swarm cluster

以下環境測試於 windows 10 pro , docker 1.13, docker-machine 0.9 1.因為在 windows 下面, docker 是透過 hyperv 運行 linux, 所以我們必須先建立 hyperv 的 virtual-swtich, 這裡我們取名為 "LabNAT" 2.先建立三個 nodes,manager1為 cluster 的 leader docker-machine create -d hyperv --hyperv-virtual-switch "LabNAT" manager1 docker-machine create -d hyperv --hyperv-virtual-switch "LabNAT" worker1 docker-machine create -d hyperv
1 min read