1. 程式人生 > >docker上搭建consul集群全流程

docker上搭建consul集群全流程

宿主機 register ipad oca dns 健康 bootstrap 內容 所有

1. 在docker上安裝consul(默認安裝最新版本)

docker pull consul

2. 啟動第一個consul服務:consul1

docker run --name consul1 -d -p 8500:8500 -p 8300:8300 -p 8301:8301 -p 8302:8302 -p 8600:8600 consul:1.2.2 agent -server -bootstrap-expect 2 -ui -bind=0.0.0.0 -client=0.0.0.0

8500 http 端口,用於 http 接口和 web ui
8300 server rpc 端口,同一數據中心 consul server 之間通過該端口通信
8301 serf lan 端口,同一數據中心 consul client 通過該端口通信
8302 serf wan 端口,不同數據中心 consul server 通過該端口通信
8600 dns 端口,用於服務發現
-bbostrap-expect 2: 集群至少兩臺服務器,才能選舉集群leader
-ui:運行 web 控制臺
-bind: 監聽網口,0.0.0.0 表示所有網口,如果不指定默認未127.0.0.1,則無法和容器通信
-client : 限制某些網口可以訪問

3. 獲取 consul server1 的 ip 地址

docker inspect --format {{ .NetworkSettings.IPAddress }} consul1

輸出是:172.17.0.2

4. 啟動第二個consul服務:consul2, 並加入consul1(使用join命令)

docker run --name consul3 -d -p 8501:8500 consul agent -server -ui -bind=0.0.0.0 -client=0.0.0.0 -join 172.17.0.2

5. 啟動第三個consul服務:consul3,並加入consul1

docker run --name consul3 -d -p 8502
:8500 consul agent -server -ui -bind=0.0.0.0 -client=0.0.0.0 -join 172.17.0.2

6. 目前我啟動了5個consul服務,然後stop掉了兩個,詳情如下圖所示:

技術分享圖片

7. 宿主機瀏覽器訪問:http://localhost:8500 或者 http://localhost:8501 或者 http://localhost:8502

(由於我一開始啟動了5個consul服務,然後stop掉了兩個,所以我的控制臺如下所示)

技術分享圖片

8. 任意stop掉其中一個consul,只要剩余consul數目大於等於兩個,宿主機就能正常訪問對應的鏈接;

9. 創建test.json文件,以腳本形式註冊服務到consul:

test.json文件內容如下:

{
    "ID": "test-service1",
    "Name": "test-service1",
    "Tags": [
        "test",
        "v1"
    ],
    "Address": "127.0.0.1",
    "Port": 8000,
    "Meta": {
        "X-TAG": "testtag"
    },
    "EnableTagOverride": false,
    "Check": {
        "DeregisterCriticalServiceAfter": "90m",
        "HTTP": "http://zhihu.com",
        "Interval": "10s"
    }
}

通過 http 接口註冊服務(端口可以是8500. 8501, 8502等能夠正常訪問consul的就行):

curl -X PUT --data @test.json http://localhost:8500/v1/agent/service/register

控制臺如下所示:

技術分享圖片

10. 宿主機瀏覽器訪問以下鏈接可以看到所有通過健康檢查的可用test-server1服務列表

(任意正常啟動consul的端口皆可):

http://localhost:8501/v1/health/service/test-server1?passing

輸出json格式的內容,如下所示:

技術分享圖片

其它應用程序可以通過這種方式輪詢獲取服務列表,這就是微服務能夠動態知道其依賴微服務可用列表的原理。

11. 解綁定:

curl -i -X PUT http://127.0.0.1:8501/v1/agent/service/deregister/test-server1

12. 集群方式需要至少啟動兩個consul server,本機調試web應用時,為了方便可以用 -dev 參數方式僅啟動一個consul server

docker run --name consul0 -d -p 8500:8500 -p 8300:8300 -p 8301:8301 -p 8302:8302 -p 8600:8600 consul:1.2.2 agent -dev -bind=0.0.0.0 -client=0.0.0.0

docker上搭建consul集群全流程