Consul Nginx實現自動擴容平台

2021-09-14 05:00:14 字數 3658 閱讀 2017

幾個月沒有更新部落格了,已經長草了,特意來除草。之前基於nginx反向**使用的是:nginx + confd + etcd的儲存方式,最近發現部門dba同事使用consul + redis + 哨兵實現的主從自動選舉切換,不影響業務的方式,還有看到有些公司分享的consul + mha的方式,覺得不錯,於是研究了下consul,本案例是基於consul + consul-template + nginx + flask + mysql構成的。既然consul這麼傳神,我們先來看看consul是什麼:

consul是hashicorp公司(曾經開發過vgrant) 推出的一款開源工具, 基於go語言開發, 輕量級, 用於實現分布式系統的服務發現與配置。 與其他類似產品相比, 提供更「一站式」的解決方案。 consul內建有kv儲存, 服務註冊/發現, 健康檢查, http+dns api, web ui等多種功能。官網: 其他同類服務發現與配置的主流開源產品有:zookeeper和etcd。
consul的優勢:

支援多資料中心, 內外網的服務採用不同的埠進行監聽。 多資料中心集群可以避免單資料中心的單點故障, zookeeper和 etcd 均不提供多資料中心功能的支援

支援健康檢查. etcd 不提供此功能.

支援 http 和 dns 協議介面. zookeeper 的整合較為複雜,etcd 只支援 http 協議. 有dns功能, 支援rest api

官方提供web管理介面, etcd 無此功能.

部署簡單, 運維友好, go二進位制檔案解壓即用。批量部署方便

consul和其他服務發現工具的對比表:

image.png

主要架構:

image.png

架構說明:

consul cluster由部署和執行了consul agent的節點組成。 在cluster中有兩種角色:server和 client。

server和client的角色和consul cluster上執行的應用服務無關, 是基於consul層面的一種角色劃分.

consul 支援多資料中心, 多個資料中心要求每個資料中心都要安裝一組consul cluster,多個資料中心間基於gossip protocol協議來通訊, 使用raft演算法實現一致性

基礎介紹到這裡,下面直接進入我們主題,環境介紹(生產環境建議構建consul server的集群):

consul:192.168.113.174

nginx:192.168.113.174

反向**伺服器:

192.168.113.175:8080

192.168.113.176:8080

1、consul 與consul-template安裝:

2、啟動一下consul server:

[root@master ~]# consul agent -server -bootstrap-expect 1 -data-dir /tmp/consul -bind 0.0.0.0 -client 0.0.0.0 -ui

image.png

3、下面我們準備一下consul模板,然後再註冊服務。

4、觀察一下nginx的配置資訊,首先我們確認下配置檔案自目錄下沒有資訊:

[root@master conf.d]# pwd

/etc/nginx/conf.d

[root@master conf.d]# ls

5、啟動模板檔案:

[root@master ~]# consul-template -consul 127.0.0.1:8500 -template item.consul.ctmpl:default.conf:"/usr/sbin/nginx -s reload"

##根據註冊資訊與模板生成乙個default.conf的檔案,具體語法可以檢視相關模板文件:

[root@master ~]# consul-template -consul 127.0.0.1:8500 -template item.consul.ctmpl:/etc/nginx/conf.d/default.conf:"/usr/sbin/nginx -s reload"

6、往裡面註冊服務資訊:

[root@master conf.d]# curl -x put -d』}』

[root@master conf.d]# curl -x put -d』}』

7、web介面我們檢視一下是否已經註冊了服務:

image.png

8、看一下配置檔案是否已經生成:

upstream tomcat

}server

}9、到這一步似乎已經完成了,不過像這種東西能不能平台話呢,看一下我構建的平台新增虛擬主機部分:

image.png

image.png

image.png

12、看一下web ui我們會發現已經新增了乙個網域名稱:

image.png

13、再看一下nginx的配置檔案:

image.png

總結:到此乙個簡單的運維管理平台已經構建完成了,那麼其實我們還能夠在擴充套件,比如做lvs,haproxy都是可以的,當然基於docker的也有相關的註冊發現機制,我們可以隨意發揮,要構建乙個漂亮的nginx管理平台,監控必不可少,有時間我們加上影象再展示。

Thinkphp實現自動驗證和自動完成

thinkphp的自動驗證和自動完成都是根所表單提交的內容來的,對部分資料進行規則驗證和處理後插入到資料庫。1 自動驗證格式 array array 驗證欄位1,驗證規則,錯誤提示,驗證條件,附加規則,驗證時間 array 驗證欄位2,驗證規則,錯誤提示,驗證條件,附加規則,驗證時間 驗證條件 se...

實現自動WiFi連線

1,想實現連線到指定的wifi網路嗎?其實這個不是很難,可這個一直困擾了我很長時間,今天終於找到了原因,因為,我之前的配置就是錯誤的,所以,導致無法連線到指定的無線網路。2,實現方法 wificonfiguration config new wificonfiguration config.allo...

jsp實現自動登入

一 什麼是使用者自動登入?如果使用者經常訪問我們的 假如每天都訪問一次,或者好幾次,那麼使用者每次都重複這些登入操作就會感到相當厭煩。通過一些簡單的技術手段,我們可以讓 記住 那些在曾經登入過的使用者。當該使用者下次再來訪問的時候,可以識別該使用者,並為其自動完成登入過程。二 基本思路 作為 的編寫...