![Screen Shot 2016-06-11 at 6.58.22 PM]()
監控 Service 是否存活也是
DevOps 重要的一環,此篇來紀錄在
Docker 內偵測
MySQL 或
Postgres 是否已經啟動。在 Docker 自動測試內,其中一步就是建立 Database 環境,底下為測試步驟:
測試步驟
- 啟動 Database 服務
- 執行 Database Migration
- 關閉 Database 服務
但是在 Docker 啟動 Database 服務後,如果直接執行 Migration,會遇到 Database 尚未啟動,所以造成 Database Migration 失敗,這也是本篇要教大家如何偵測 MySQL 或 Postgres 是否啟動。
啟動 Database 服務
在 Docker 要啟動 Database 服務相當容易,底下分別為 MySQL 及 Postgres 啟動步驟
# Postgres
$ docker run --name some-postgres \
-d postgres:latest
# MySQL
$ docker run --name some-mysql \
-d -e MYSQL_ROOT_PASSWORD=1234 \
mysql:latest
偵測 Database 服務
透過
Docker exec 指令偵測 MySQL 及 Postgres 是否啟動,Postgres 透過
pg_isready
指令,Mysql 則是使用
mysqladmin
# Postgres
$ docker exec some-postgres pg_isready -h 127.0.0.1
127.0.0.1:5432 - accepting connections
# MySQL
$ docker exec some-mysql mysqladmin -uroot -p123 ping
mysqld is alive
# 或者是直接執行單一 SQL 語法
$ docker exec some-mysql mysql -uroot -p123 \
-e "SHOW Databases;"
在 Docker 內如果是用
mysqladmin ping
的方式,我發現會抓不到
$?
錯誤代碼,所以還是建議用後者方式,透過執行單一 SQL 方式,在
HAProxy 搭配
Percona XtraDB Cluster 也是透過後者來偵測,詳情可以參考之前寫的『
Percona XtraDB Cluster 搭配 HAProxy』。知道如何偵測後,就要寫 While 迴圈每一秒持續偵測。
while ! pg_isready -h postgres; do
output "Database service is unavailable - sleeping"
sleep 1
done
完成上述偵測步驟,就可以正常執行 Databse Migration