帶你演示Prometheus擴展Cortex的水平擴展以及高可用複製

這章,咱們主要講一下 Prometheus 的擴展 Cortex 的安裝過程,以及Cortex的水平擴展。這些內容官網均可以找到。docker

環境準備

  • GO 的語言環境,配置好 GOMODULE
  • 從 Github 上將 Cortex 的源程序克隆下來,Github克隆很慢,能夠先導入 Gitee,再從 Gitee 上克隆;

開始編譯

Cortex 的安裝

咱們進入到 Cortex 的文件目錄,執行指令:shell

go build ./cmd/cortex

開始執行:api

./cortex -config.file=./docs/configuration/single-process-config.yaml

通常狀況下不會出問題,有問題應該是 Linux 缺乏了相關程序,自行下載便可。執行完就行了瀏覽器

Promethus

這個咱們直接解壓 .tar.gz 文件包,進入 prometheus 目錄,修改 prometheus.yml , 增長配置:網絡

remote_write:
  - url: http://localhost:9009/api/prom/push

配置文件是 yml 格式的,請遵照相關規則。測試

驗證

./prometheus

如今咱們須要經過 Grafana 來進行數據的讀取。ui

docker run --rm -d --name=grafana -p 3000:3000 grafana/grafana

如今咱們就在 Grafana 裏面去作GUI 就行了。url

水平擴展

水平擴展的實現,咱們也是依賴於 Dockerspa

# 構建鏡像,這一步基本成不了 
make ./cmd/cortex/.uptodate

上面的景象咱們構建不出來,咱們就下載鏡像:code

docker pull cortexproject/cortex
# 建立 cortex 的網絡
docker network create cortex
# 單個節點Consul實例,用於協調Cortex集羣
docker run -d --name=consul --network=cortex -e CONSUL_BIND_INTERFACE=eth0 consul
docker run -d --name=cortex1 --network=cortex \
    -v $(pwd)/docs/configuration/single-process-config.yaml:/etc/single-process-config.yaml \
    -p 9001:9009 \
    cortexproject/cortex:master-1f600cb1 \
    -config.file=/etc/single-process-config.yaml \
    -ring.store=consul \
    -consul.hostname=consul:8500
docker run -d --name=cortex2 --network=cortex \
    -v $(pwd)/docs/configuration/single-process-config.yaml:/etc/single-process-config.yaml \
    -p 9002:9009 \
    cortexproject/cortex:master-1f600cb1 \
    -config.file=/etc/single-process-config.yaml \
    -ring.store=consul \
    -consul.hostname=consul:8500

咱們的驗證方式是:
在瀏覽器中輸入: http://{ip}:9001/ring , 或者是 9002 端口
正常狀況下看到的會是這兩個:

而後,咱們如今將 Prometheus 接入到其中的一個實例: 好比 9001

remote_write
  - url: http://localhost:9001/api/prom/push

再用到 Grafana 驗證的時候,這時候的 Cortex 地址就是Docker 的容器地址: http://172.18.0.3:9009/api/prom

清理,後續須要在從新設置

docker rm -f cortex1 cortex2 consul grafana

docker network remove cortex

高可用

這裏主要針對的是 當 Integers 出現單個的宕機狀態時,當前宕機的 integer 須要將本身的 sample 複製到其餘的 integer .

docker network create cortex

docker run -d --name=consul --network=cortex -e CONSUL_BIND_INTERFACE=eth0 consul

docker run -d --name=grafana --network=cortex -p 3000:3000 grafana/grafana

咱們開始建立咱們的實例:

docker run -d --name=cortex1 --network=cortex \
    -v $(pwd)/docs/configuration/single-process-config.yaml:/etc/single-process-config.yaml \
    -p 9001:9009 \
    cortexproject/cortex:master-1f600cb1 \
    -config.file=/etc/single-process-config.yaml \
    -ring.store=consul \
    -consul.hostname=consul:8500 \
    -distributor.replication-factor=3


docker run -d --name=cortex2 --network=cortex \
    -v $(pwd)/docs/configuration/single-process-config.yaml:/etc/single-process-config.yaml \
    -p 9002:9009 \
    cortexproject/cortex:master-1f600cb1 \
    -config.file=/etc/single-process-config.yaml \
    -ring.store=consul \
    -consul.hostname=consul:8500 \
    -distributor.replication-factor=3

docker run -d --name=cortex3 --network=cortex \
    -v $(pwd)/docs/configuration/single-process-config.yaml:/etc/single-process-config.yaml \
    -p 9003:9009 \
    cortexproject/cortex:master-1f600cb1 \
    -config.file=/etc/single-process-config.yaml \
    -ring.store=consul \
    -consul.hostname=consul:8500 \
    -distributor.replication-factor=3

如今咱們寫入到 cortex1 中,測試 cortex3 是否會存在數據:

咱們能夠看到,每一個 cortex 節點都寫入了數據,可是咱們的數據只寫入了 cortex1 , 這就是 cortex 之間的複製。

如今咱們要 cortex2 掛掉,看看什麼效果:

能夠看到的是,cortex2 掛了,可是 其餘兩個都仍是正常的狀態,這就是 Cortex 裏面的高可用。

相關文章
相關標籤/搜索