1. 作用
- CA型的服務發現註冊中間件,支持http及dns協議,通過raft(server間)及gossip(client間)協議保證一致性。
- 支持kv存儲,可以作爲簡易的配置中心。
- 通過consul-template,支持服務、kv變更觸發通知。
- 支持健康檢查,支持將consul的運行監控(telemetry)發送到 statsd或statsite。
2. 基本概念
- consul中agent有兩種角色,server與client。
- client負責到server的高效通信,相對爲無狀態的。 唯一在後臺運行的時client端執行了LAN gossip pool,只消耗極少的資源和網絡帶寬。
- server負責包括選舉領導節點,維護cluster的狀態,對所有的查詢做出響應,跨數據中心的通信等等
- 數據流一般爲:app -> client -> server -> other-client ->app
- server集羣,建議3個及以上節點,建議每個用到client的服務器都部署一個consul-client
3-1. 部署前提
- 基於consul的0.8.3版的配置
- 假設有3臺server,192.168.1.2/3/4
- 將telemetry信息發送到statsd,statsd後面我們使用的是graphite。
3. Server端
3.1 目錄規劃
類型 | 路徑 |
---|---|
consul安裝目錄 | /usr/local/consul/{version}/ |
server-data目錄 | /data/consul/{version}/server/data |
server-conf目錄 | /data/consul/{version}/server/conf |
server-sh目錄 | /data/consul/{version}/server/sh |
server-pid目錄 | /data/consul/{version}/server/log |
consul_version=0.8.3
mkdir -p /usr/local/consul/${consul_version}/
# server端
mkdir -p /data/consul/${consul_version}/server/data
mkdir -p /data/consul/${consul_version}/server/log
# 其餘目錄後續會添加
3.2 安裝腳本
cd /usr/local/consul/${consul_version}/
wget https://releases.hashicorp.com/consul/0.8.3/consul_0.8.3_linux_amd64.zip
unzip consul_0.8.3_linux_amd64.zip
rm -rf consul_0.8.3_linux_amd64.zip
3.3 配置信息
配置信息放在:/data/consul/0.8.3/server/conf/bootstart_server.conf
{
"server": true,
"data_dir": "/data/consul/0.8.3/server/data",
"datacenter": "datacenter-name",
"node_name": "server-node-name",
"log_level": "warn",
"bootstrap_expect": 3,
"performance": {
"raft_multiplier": 4
},
"telemetry": {
"statsd_address": "192.168.1.2:8125"
},
"retry_join": ["192.168.1.3","192.168.1.4"]
}
說明:1)每個節點需要修改node_name;2)需要根據環境配置raft_multiplier值,該值越大,實時性越高,對網絡要求也越高;3)根據實際情況修改數據中心名稱,建議不同環境,不同部門,使用不同的數據中心;4)修改statsd_address和retry_join地址
3.4 啓動腳本
生成start-server.sh文件,放在【/data/consul/0.8.3/server/sh】,添加可執行文件
/usr/local/consul/0.8.3/consul agent -config-dir=/data/consul/0.8.3/server/conf -pid-file=/data/consul/0.8.3/server/pid >/data/consul/0.8.3/server/log/run_`date '+%Y-%m-%d_%H_%M_%S.log'` 2>&1 &
##3.5 常用腳本
# 前提服務器上只有一個consul實例
# leave
/usr/local/consul/0.8.3/consul leave
# stop
kill -2 `pgrep -f consul`
# force-stop
kill -9 `pgrep -f consul`
# telemetry
kill -USR1 `pgrep -f consul`
# reload
kill -1 `pgrep -f consul`
# info
/usr/local/consul/0.8.3/consul info
# members
/usr/local/consul/0.8.3/consul members
# tail-f-log
tail -f /data/consul/0.8.3/*/log/`ls -t /data/consul/0.8.3/*/log/ | head -n 1`
# join
/usr/local/consul/0.8.3/consul join 加入的IP地址
4. Client端
4.1 目錄規劃
類型 | 路徑 |
---|---|
client-data目錄 | /data/consul/{version}/client/data |
client-conf目錄 | /data/consul/{version}/client/data |
client-pid目錄 | /data/consul/{version}/client |
client-sh目錄 | /data/consul/{version}/client/sh |
client-log目錄 | /data/consul/{version}/client/log |
consul_version=0.8.3
mkdir -p /usr/local/consul/${consul_version}/
# client端
mkdir -p /data/consul/${consul_version}/client/data
mkdir -p /data/consul/${consul_version}/client/log
# 其餘目錄後續會添加
4.2 安裝腳本
cd /usr/local/consul/${consul_version}/
wget https://releases.hashicorp.com/consul/0.8.3/consul_0.8.3_linux_amd64.zip
unzip consul_0.8.3_linux_amd64.zip
rm -rf consul_0.8.3_linux_amd64.zip
4.3 配置信息
配置信息放在:data/consul/{version}/client/conf/bootstrap_client.conf
{
"server": false,
"data_dir": "/data/consul/0.8.3/client/data",
"datacenter": "datacenter-name",
"node_name": "client-node-name",
"log_level": "warn",
"client_addr": "0.0.0.0",
"ui": true,
"telemetry": {
"statsd_address": "192.168.1.2:8125"
},
"retry_join": ["192.168.1.2","192.168.1.3","192.168.1.4"]
}
說明:1)每個節點需要修改node_name;2)根據實際情況修改數據中心名稱,建議不同環境,不同部門,使用不同的數據中心;3)修改statsd_address和retry_join地址
4.4 啓動腳本
生成start-client.sh文件,放在【/data/consul/0.8.3/client/sh】,添加可執行文件
/usr/local/consul/0.8.3/consul agent -config-dir=/data/consul/0.8.3/client/conf -pid-file=/data/consul/0.8.3/client/pid >/data/consul/0.8.3/client/log/run_`date '+%Y-%m-%d_%H_%M_%S.log'` 2>&1 &
4.5 常用腳本
# 前提服務器上只有一個consul實例
# leave
/usr/local/consul/0.8.3/consul leave
# stop
kill -2 `pgrep -f consul`
# force-stop
kill -9 `pgrep -f consul`
# telemetry
kill -USR1 `pgrep -f consul`
# reload
kill -1 `pgrep -f consul`
# info
/usr/local/consul/0.8.3/consul info
# members
/usr/local/consul/0.8.3/consul members
# tail-f-log
tail -f /data/consul/0.8.3/*/log/`ls -t /data/consul/0.8.3/*/log/ | head -n 1`
# join
/usr/local/consul/0.8.3/consul join 加入的IP地址