consul

[文章目录]
  1. 搭建 Consul server mode
  2. 搭建 Consul client mode
    1. 模擬 Linux node 環境,進行 Member join 與 Health Checks
      1. 啟用 Consul agent client mode

今日首搭 Consul 服務環境,以下簡單扼要做紀錄
環境說明:

  • Consul server mode: Ubuntu 18.04 192.168.42.12
  • Consul client mode: Vagrant CentOS 7 192.168.42.199

搭建 Consul server mode

在 Docker 環境中,建立 Docker-composer file

1
2
3
4
5
6
7
8
9
10
11
12
version: '3'
services:
Consul:
image: "consul"
ports:
- "8300-8302:8300-8302"
- "8500:8500"
- "8600:8600"
- "8301-8302:8301-8302/udp"
- "8600:8600/udp"
volumes:
- /etc/consul.d:/consul/config

設定配置檔案 server.json

1
2
3
4
5
6
7
8
9
{
"datacenter": "Office-Lab",
"data_dir": "/consul/data",
"bootstrap_expect": 1,
"log_level": "INFO",
"node_name": "Afu-Lab2",
"server": true,
"bind_addr": "0.0.0.0"
}

啟動 consul 服務

1
$ sudo docker-compose -f consul-docker-compose.yml up -d

查看 Consul Web 介面 http://server-ip:8500

啟動 server mode 遇到問題,記錄如下:

  • server agent log 顯示:
    [ERR] agent: failed to sync remote state: No cluster leader
    • 原因:這是環境中第一台 Consul server node,需要藉由 -bootstrap-expect=1 作為初始引導方式。
  • server agent log 顯示:
    Client Addr: [127.0.0.1] (HTTP: 8500, HTTPS: -1, gRPC: -1, DNS: 8600)
    Cluster Addr: 192.168.42.12 (LAN: 8301, WAN: 8302)
    • 原因:agent 預設服務綁定於 localhost 介面上,故需要運用參數 -client=0.0.0.0 進行調整。
  • server agent log 顯示:
    [ERR] memberlist: Failed push/pull merge: Member 'C7-java' part of wrong datacenter 'dc1' from=192.168.42.199:49356
    • 原因:這顯示 Member 'C7-java' 啟動時,採用預設參數 datacenter 'dc1' ,只需在 member 端啟用時新增參數 -datacenter=office-lab 即可。

備註:
如果不選擇 Docker 啟用 Consul server 服務,可以試試指令啟用,方式如下
啟用 Consul agent server

1
sudo consul agent -server -bootstrap-expect=1 -node=Afu-Lab2 -enable-local-script-checks=true -config-dir=/etc/consul.d -data-dir=/tmp/consul -bind=0.0.0.0 -client=0.0.0.0


搭建 Consul client mode

在 CentOS 7 環境下,下載官方 Binary file
解壓縮後,移至 /usr/bin 目錄下

1
2
3
wget https://releases.hashicorp.com/consul/1.4.0/consul_1.4.0_linux_amd64.zip
unzip consul_1.4.0_linux_amd64.zip
sudo mv consul /usr/bin/

驗證執行

1
2
3
$ consul -v
Consul v1.4.0
Protocol 2 spoken by default, understands 2 to 3 (agent will automatically use protocol >2 when speaking to compatible agents)

參考網址:
https://www.consul.io/docs/install/index.html#precompiled-binaries

模擬 Linux node 環境,進行 Member join 與 Health Checks

準備設定檔案

ssh.json
官網說明

1
2
3
4
5
6
7
8
9
10
// 定義 SSH TCP check
{
"check": {
"id": "ssh",
"name": "SSH TCP on port 22",
"tcp": "localhost:22",
"interval": "10s",
"timeout": "1s"
}
}

啟用 Consul agent 官方教學網址

啟用 Consul agent client mode

啟用指令:

1
2
3
4
consul agent -client=0.0.0.0 -node=C7-java \
-join=192.168.42.12 -bind=192.168.42.199 \
-enable-local-script-checks=true -data-dir=/tmp/consul \
-config-dir=/etc/consul.d -datacenter=office-lab

啟用後,會有三個新 Listen port:8301、8500、8600

在查看一次 Consul Web 介面 http://server-ip:8500,即可發現 Nodes、Health Checks 的變化。

  • Client agent log 顯示:
    Multiple private IPv4 addresses found. Please configure one with 'bind' and/or 'advertise'.
    • 原因:這是因為 node 網路具備兩個以上的網路IP,故必須配置其中一個網卡 IP。

備註:
以上相關配置參數,可參考官網說明