consul部署多節點和consul-template部署

一.consul的介紹

1.1consul是什么?

Consul是HashiCorp公司推出的開源工具,用于實現分布式系統的服務發現與配置。 Consul是分布式的、高可用的、可橫向擴展的。它具備以下特性 :
service discovery:consul通過DNS或者HTTP接口使服務注冊和服務發現變的很容易,一些外部服務,例如saas提供的也可以一樣注冊。
health checking:健康檢測使consul可以快速的告警在集群中的操作。和服務發現的集成,可以防止服務轉發到故障的服務上面。
key/value storage:一個用來存儲動態配置的系統。提供簡單的HTTP接口,可以在任何地方操作。
multi-datacenter:無需復雜的配置,即可支持任意數量的區域。

2.2使用consul服務場景

因為一套微服務架構中有很多個服務需要管理,也就是說會有很多對grpc。如果一一對應的進行管理會很繁瑣所以我們需要有一個管理發現的機制。

二.部署集群

2.1部署環境

服務器服務操作系統
192.168.106.90Docker-ce、Compose 3、Consul、Consul-templatecentos7
192.168.106.91Docker-ce、registratorcentos7

2.2搭建Consul

##上傳解壓到指定文件夾中
[root@server1 ~]# mkdir /root/consul
[root@server1 ~]# cp consul_0.9.2_linux_amd64.zip /root/consul
[root@server1 ~]# cd /root/consul/
[root@server1 consul]# unzip consul_0.9.2_linux_amd64.zip 
Archive:  consul_0.9.2_linux_amd64.zipinflating: consul                  
[root@server1 consul]# ls 
consul  consul_0.9.2_linux_amd64.zip
[root@server1 consul]# mv consul /usr/bin/ #導入系統環境方便系統識別[root@server1 consul]# consul agent \ ##agent代理
-server \  ##提供server功能
-bootstrap \
-ui \ #提供web訪問界面
-data-dir=/var/lib/consul-data \##參數地址
-bind=192.168.106.90 \ ##監聽地址
-client=0.0.0.0 \ ##服務地址
-node=consul-server01 &> /var/log/consul.log & 
##指定本地節點名稱 產生日志混合輸出到 后臺運行
[1] 129523[root@server1 consul]# consul members
Node             Address              Status  Type    Build  Protocol  DC
consul-server01  192.168.106.90:8301  alive   server  0.9.2  2         dc1[root@server1 consul]# consul info | grep leaderleader = trueleader_addr = 192.168.106.90:8300[root@server1 consul]# jobs
[1]+  運行中               consul agent -server -bootstrap -ui -data-dir=/var/lib/consul-data -bind=192.168.106.90 -client=0.0.0.0 -node=consul-server01 &>/var/log/consul.log &

查看集群信息

[root@server1 ~]# consul members
Node             Address              Status  Type    Build  Protocol  DC
consul-server01  192.168.106.90:8301  alive   server  0.9.2  2         dc1[root@server1 ~]# consul info | grep leaderleader = trueleader_addr = 192.168.106.90:8300

通過httpd api 獲取集群信息

[root@server1 ~]# curl 127.0.0.1:8500/v1/status/peers  ##查看集群server成員
[root@server1 ~]# curl 127.0.0.1:8500/v1/status/leader  ##集群Raf leader
[root@server1 ~]# curl 127.0.0.1:8500/v1/catalog/services ##注冊的所有服務
[root@server1 ~]# curl 127.0.0.1:8500/v1/catalog/nginx ##查看nginx服務信息
[root@server1 ~]# curl 127.0.0.1:8500/v1/catalog/nodes  ##集群節點詳細信息

新啟一個服務器

安裝Gliderlabs/Registrator Gliderlabs/Registrator

可檢查容器運行狀態自動注冊,還可注銷docker容器的服務到服務配置中心。

在192.168.106.91節點,執行以下操作:

[root@server1 ~]# docker run -d \
--name=registrator \  ##名稱
--net=host \  ##指定網絡
-v /var/run/docker.sock:/tmp/docker.sock  
--restart=always \
gliderlabs/registrator:latest \
-ip=192.168.106.91 \
consul://192.168.106.90:8500  ##consul服務器ip

測試服務發現功能是否正常

新建2個nginx服務容器

新建2個apache服務容器

[root@server1 ~]# docker run -itd -p 83:80 --name test-01 -h test01 nginx
[root@server1 ~]# docker run -itd -p 84:80 --name test-02 -h test02 nginx
[root@server1 ~]# docker run -itd -p 88:80 --name test-03 -h test03 httpd  
[root@server1 ~]# docker run -itd -p 89:80 --name test-04 -h test04 httpd

網頁驗證http和nginx服務是否注冊到 consul

瀏覽器輸入 http://192.168.106.90:8500, “單擊 NODES”,然后單擊“consurl-server01

在這里插入圖片描述

2.3驗證

在容器中關閉一臺nginx服務容器,網頁查看狀態

[root@server1 ~]# docker ps -a 
CONTAINER ID        IMAGE                           COMMAND                  CREATED             STATUS              PORTS                NAMES
2cc76ac54834        httpd                           "httpd-foreground"       5 hours ago         Up 5 hours          0.0.0.0:88->80/tcp   test-03
95b5dc7ab301        httpd                           "httpd-foreground"       5 hours ago         Up 5 hours          0.0.0.0:89->80/tcp   test-04
7cb476ca85f5        gliderlabs/registrator:latest   "/bin/registrator -i…"   5 hours ago         Up 5 hours                               registrator
db10b647c5e6        nginx                           "/docker-entrypoint.…"   5 hours ago         Up 5 hours          0.0.0.0:84->80/tcp   test-02
8f03002bbcda        nginx                           "/docker-entrypoint.…"   5 hours ago         Up 5 hours          0.0.0.0:83->80/tcp   test-01
[root@server1 ~]# docker stop db10b647c5e6
db10b647c5e6

網頁顯示少一臺nginx容器

在這里插入圖片描述

三.consul-template

Consul-template 是一個守護進程,用于實時查詢consul集群信息,并更新文件系統上任意數量的指定模板,生成配置文件。更新完成以后,可以選擇運行shell命令執行更新操作,重新加載Nginx。Consul-Template可以查詢Consul中的服務目錄、Key、Key-values等。

這種強大的抽象功能和查詢語言模板可以是Consul-Template 特別適合動態的創建配置文件。

例如:創建 Apache/Nginx Proxy Balancers、Haproxy Backends

3.1配置nginx模板文件

[root@server1 consul]# cd
[root@server1 ~]# cd /root/consul/
[root@server1 consul]# vim nginx.ctmplupstream http_backend {     ##基于四層轉發{{range service "nginx"}}   ##遍歷nginx服務server{{.Address}}:{{.Port}}; ##地址 端口{{end}}  ##結束符
}
server {listen 83;server_name localhost 192.168.106.90;access_log /var/log/nginx/tat-access.log;index inde.html index.php;location / {proxy_set_header HOST $host; proxy_set_header X-Real-IP $remote_addr; ##真實地址proxy_set_header Client-IP $remote_addr; ##客戶端地址proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; ##支持轉發proxy_pass http://http_backend;##調用地址池}
}

3.2編譯安裝nginx

[root@server1 consul]# yum -y install gcc- gcc-c++ pcre-devel zlib-devel  ##依賴環境
##上傳文件 解壓到opt目錄下
[root@server1 ~]# tar zxvf nginx-1.6.0.tar.gz -C /opt/
##安裝
[root@server1 ~]# cd /opt/nginx-1.6.0/
[root@server1 nginx-1.6.0]# ./configure --prefix=/usr/local/nginx
[root@server1 nginx-1.6.0]# make && make install
##更改配置文件
[root@server1 nginx-1.6.0]# vim /usr/local/nginx/conf/nginx.conf
http {include       mime.types;include       vhost/*.conf; ##添加這一行,子配置文件default_type  application/octet-stream;
[root@server1 nginx-1.6.0]# cd /usr/local/nginx/conf/  
[root@server1 conf]# mkdir vhost  ##新建虛擬主機文件
[root@server1 conf]# mkdir /var/log/nginx ##新建日志文件目錄
[root@server1 conf]# cd vhost 

3.3配置并啟動 template

##上傳consul-template_0.19.3_linux_amd64.zip到/root 解壓到/usr/bin/供系統識別
[root@server1 vhost]# cd
[root@server1 ~]# unzip consul-template_0.19.3_linux_amd64.zip
[root@server1 ~]# mv consul-template /usr/bin/
[root@server1 ~]# consul-template -consul-addr 192.168.106.90:8500 -template "/root/consul/nginx.ctmpl:/usr/local/nginx/conf/vhost/tat.conf:/usr/local/nginx/sbin/nginx -s reload" --log-level=info  ##指定地址 指定template到子配置文件vhost虛擬主機中 重載

驗證:停止和重新開啟一個容器

測試服務發現及配置更新功能

##節點端
[root@server1 ~]# docker start 40cd85d93795
40cd85d93795
[root@server1 ~]# docker stop 40cd85d93795
40cd85d93795
##consul服務端
2020/12/01 10:43:47.919942 [INFO] (runner) initiating run
2020/12/01 10:43:47.920786 [INFO] (runner) rendered "/root/consul/nginx.ctmpl" => "/usr/local/nginx/conf/vhost/tat.conf"
2020/12/01 10:43:47.920808 [INFO] (runner) executing command "/usr/local/nginx/sbin/nginx -s reload" from "/root/consul/nginx.ctmpl" => "/usr/local/nginx/conf/vhost/tat.conf"
2020/12/01 10:43:47.920846 [INFO] (child) spawning: /usr/local/nginx/sbin/nginx -s reload
2020/12/01 10:43:58.353307 [INFO] (runner) initiating run
2020/12/01 10:43:58.354554 [INFO] (runner) rendered "/root/consul/nginx.ctmpl" => "/usr/local/nginx/conf/vhost/tat.conf"
2020/12/01 10:43:58.354588 [INFO] (runner) executing command "/usr/local/nginx/sbin/nginx -s reload" from "/root/consul/nginx.ctmpl" => "/usr/local/nginx/conf/vhost/tat.conf"
2020/12/01 10:43:58.354639 [INFO] (child) spawning: /usr/local/nginx/sbin/nginx -s reload

查看虛擬vhost配置

[root@server1 vhost]# cat /usr/local/nginx/conf/vhost/tat.conf 
upstream http_backend {server 192.168.106.91:83;server 192.168.106.91:84;}
server {listen 83;server_name localhost 192.168.106.90;access_log /var/log/nginx/tat-access.log;index inde.html index.php;location / {proxy_set_header HOST $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header Client-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_pass http://http_backend;}
}

查看日志

[root@server1 ~]# docker logs -f test-01
[root@server1 ~]# docker logs -f test-02
[root@server1 ~]# docker logs -f test-05

四.consul多節點

提前安裝好docker

在192.168.106.90 把consul文件傳到192.168.106.100的/usr/local/bin

[root@server1 bin]# scp /usr/bin/consul root@192.168.106.100:/usr/local/bin/

配置多節點

[root@server1 ~]# consul agent -server \
-bootstrap \
-ui \
-data-dir=/var/lib/consul-data \
-bind=192.168.106.100 \
-client=0.0.0.0 \
-node=consul-server02 \ 節點名稱##
-enable-script-checks=true \ ##設置檢查服務為可用
-datacenter=dc1 \ ##數據中心名稱
-join 192.168.106.90 &> /var/log/consul.log & ##加入到已有的集群中

查看集群節點狀態

[root@server1 ~]# curl 127.0.0.1:8500/v1/catalog/nodes
[{"ID":"ea5109c6-e3c9-b310-5fd5-500f5ee08347","Node":"consul-server01","Address":"192.168.106.90","Datacenter":"dc1","TaggedAddresses":null,"Meta":null,"CreateIndex":6,"ModifyIndex":6},{"ID":"d24113ce-f452-93cf-ef9d-1b79b46c4553","Node":"consul-server02","Address":"192.168.106.100","Datacenter":"dc1","TaggedAddresses":{"lan":"192.168.106.100","wan":"192.168.106.100"},"Meta":{},"CreateIndex":5,"ModifyIndex":7}]

edAddresses":null,“Meta”:null,“CreateIndex”:6,“ModifyIndex”:6},{“ID”:“d24113ce-f452-93cf-ef9d-1b79b46c4553”,“Node”:“consul-server02”,“Address”:“192.168.106.100”,“Datacenter”:“dc1”,“TaggedAddresses”:{“lan”:“192.168.106.100”,“wan”:“192.168.106.100”},“Meta”:{},“CreateIndex”:5,“ModifyIndex”:7}]



---------------------
作者:Rikkatang
來源:CSDN
原文:https://blog.csdn.net/rikkatang/article/details/110449434
版權聲明:本文為作者原創文章,轉載請附上博文鏈接!
內容解析By:CSDN,CNBLOG博客文章一鍵轉載插件

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:
http://www.pswp.cn/news/284219.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/284219.shtml
英文地址,請注明出處:http://en.pswp.cn/news/284219.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

基于ABP實現DDD

什么是DDD呢?領域驅動設計[DDD]是一種針對復雜需求的軟件開發方法。將軟件實現與不斷發展的模型聯系起來,專注于核心領域邏輯,而不是基礎設施細節。DDD適用于復雜領域和大規模應用,而不是簡單的CRUD應用。它有助于建立一個靈活、模…

二、通過工廠方法來配置bean

調用靜態工廠方法創建 Bean是將對象創建的過程封裝到靜態方法中. 當客戶端需要對象時, 只需要簡單地調用靜態方法, 而不同關心創建對象的細節. 要聲明通過靜態方法創建的 Bean, 需要在 Bean 的 class 屬性里指定擁有該工廠的方法的類, 同時在 factory-method 屬性里指定工廠方法…

【GlobalMapper精品教程】019:基于DSM提取離散隨機點的高程信息

本文講解在globalmapper中,基于DSM提取離散隨機點的高程信息,配套數據為data019.rar。 文章目錄 1. 離散點創建2. 提取離散點高程信息3. 高程標注1. 離散點創建 本文在ArcGIS中,根據給定的范圍,隨機生成離散點,如下圖: 拓展閱讀: ArcGIS根據范圍創建隨機點教程:【ArcG…

shell腳本注意點

2019獨角獸企業重金招聘Python工程師標準>>> 直接命令行寫腳本的時候,可以用 ; 分割,或 也可以直接回車,然后在繼續寫腳本在使用 方括號[ ] 的時候,里面空格兩邊都必須要有空格,比如 [ $a -gt 3 ] 在方括號…

C語言編程規范--------2 注釋

2.1 注釋的原則 注釋的目的是解釋代碼的目的、功能和采用的方法,提供代碼以外的信息,幫助讀者理解代碼,防止沒必要的重復注釋信息。 示例:如下注釋意義不大。 /* if receive_flag is TRUE */ if (receive_flag) 而如下的注釋則給出…

備戰金九銀十:RabbitMQ有5種工作模式(6)

RabbitMQ是實現了高級消息隊列協議(AMQP)的開源消息代理軟件(亦稱面向消息的中間件)。RabbitMQ服務器是用Erlang語言編寫的,而集群和故障轉移是構建在開放電信平臺框架上的。所有主要的編程語言均有與代理接口通訊的客…

【GlobalMapper精品教程】020:Lidar點云數據分類(自動分類、手動分類)案例詳解

航測點云通常跟DSM一致,即包含植被、房屋等信息,必須進行點云分類、過濾,才能生成準確的高程點、等高線和DEM等地形數據。本文以案例的形式詳細講解globalmapper23中點云工具及使用方法。 文章目錄 1. 點云分類2. 創建地面高程格網3. 地形繪制4. 格網轉點云5. 點云抽稀6. 點…

社交網絡圖中結點的“重要性“計算(Dijkstra + SPFA + Floyd + 模板)

題目鏈接: 無 題目大意: 求一個點到其他所有點的最短距離和,保證圖連通。 解題過程: 剛開始用 Floyd 水過的,后來用換了幾種方法,不錯的模板題,Floyd 的時候,要用 vector 存邊&#…

web布局固定寬度+變化寬度實現思路

前言 頁面當中常規布局我想大家都會的&#xff0c;但有些布局是常規布局中實現不了的&#xff0c;比如變寬和固寬結合的&#xff0c;需要實現(300px)&#xff0b;(100%&#xff0d;300px)的兩列布局。以下樣式代碼前提均為盒模型為border-sizing 的前提下。 html部分 <div c…

CSS3 nth 偽類選擇器

考察下面的 HTML 代碼片段&#xff1a; <div><section>section 1</section><section>section 2</section><ul><li>item 1</li><li><ul><li>sub item 1</li><li>sub item 2</li><li>…

RedisCluster的安裝、部署、擴容和 Java客戶端調用

Redis下載 官網地址&#xff1a;http://redis.io/ 中文官網地址&#xff1a;http://www.redis.cn/ 下載地址&#xff1a;http://download.redis.io/releases/ 安裝 # &#xff08;三臺&#xff09;安裝 C 語言需要的 GCC 環境 yum install -y gcc-c yum install -y wget # 下…

【CloudCompare教程】001:CloudCompare中文版下載與安裝圖文教程

CloudCompare是一款功能強大的點云后處理軟件,本文講解CloudCompare中文版下載與安裝方法。 文章目錄 一、CloudCompare下載地址二、CloudCompare安裝教程三、CloudCompare中文設置一、CloudCompare下載地址 官方下載地址:http://www.danielgm.net/cc/release/ 二、CloudComp…

ML.NET相關資源整理

在人工智能領域&#xff0c;無論是機器學習&#xff0c;還是深度學習等&#xff0c;Python編程語言都是絕對的主流&#xff0c;盡管底層都是C實現的&#xff0c;似乎人工智能和C#/F#編程語言沒什么關系。在人工智能的工程實現&#xff0c;通常都是將Python訓練好的人工智能模型…

帶參數的宏替換

帶參數的宏替換因各種需求疊加&#xff0c;替換規則很怪異&#xff1a; 1、首先將實參替換形參&#xff0c;并展開宏 2、如果1步展開后&#xff0c;有#或者##&#xff0c;那么停止替換。 3、如果1步展開后&#xff0c;沒有#或者##&#xff0c;且參數也是宏&#xff0c;那么繼續…

JAVA學習日志(7-1-繼承)

為什么80%的碼農都做不了架構師&#xff1f;>>> 繼承 1.提高代碼復用性 2.讓類與類之間產生關系&#xff0c;有了這個關系才有了多態的特性 **不要為了獲取其他類的功能&#xff0c;簡化代碼而繼承&#xff0c; 必須是類與類之間有所屬關系才可以繼承&#xff0c;所…

BZOJ 1370: [Baltic2003]Gang團伙 [并查集 拆點 | 種類并查集WA]

題意&#xff1a; 朋友的朋友是朋友&#xff0c;敵人的敵人是朋友&#xff1b;朋友形成團伙&#xff0c;求最多有多少團伙 種類并查集WA了一節課&#xff0c;原因是&#xff0c;只有那兩種關系才成立&#xff0c;諸如朋友的敵人是朋友之類的都不成立&#xff01; 所以拆點做吧 …

常見Lidar點云數據處理及可視化軟件匯總

常見的點云處理及可視化軟件有&#xff1a; CloudCompare、Globalmapper、Pix4d、ArcGIS&#xff08;Pro&#xff09;、Lidar 360、PCL等等。 文章目錄1. CloudCompare2. Globalmapper3. Pix4d4. ArcGIS&#xff08;Pro&#xff09;5. Lidar 3606. PCL1. CloudCompare CloudCo…

Spring 自帶工具類匯總

斷言 斷言是一個邏輯判斷&#xff0c;用于檢查不應該發生的情況 Assert 關鍵字在 JDK1.4 中引入&#xff0c;可通過 JVM 參數-enableassertions開啟 SpringBoot 中提供了 Assert 斷言工具類&#xff0c;通常用于數據合法性檢查 // 要求參數 object 必須為非空&#xff08;Not…

解決new Thread().Start導致高并發CPU 100%的問題

背景之前接手一個項目的時候&#xff0c;發現到處是new Thread(()>{ //do something }).Start();這么做的目的&#xff0c;無非是為了減少頁面等待時間提高用戶體驗&#xff0c;把一些浪費時間的操作放到新線程中在后臺運行。問題但是這樣帶來的問題是大量的創建線程&#x…