日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Nginx >内容正文

Nginx

etcd nginx 容器_Etcd+Confd实现Nginx配置文件自动管理

發布時間:2024/7/23 Nginx 85 豆豆
生活随笔 收集整理的這篇文章主要介紹了 etcd nginx 容器_Etcd+Confd实现Nginx配置文件自动管理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、需求

我們使用Nginx做七層負載均衡,后端是Tomcat。項目采用灰度發布方式,每次項目升級,都要手動先從Nginx下摘掉一組,然后再升級這組,當項目快速迭代時,手動做這些操作顯然會增加部署時間,于是就想通過腳本實現自動化管理Nginx配置文件。

當時考慮自己寫Shell腳本對Nginx配置文件操作,需要用到sed流編輯器,sed本身沒有條件判斷語句,并不能靈活判斷配置文件中要添加/刪除位置,因此會增加配置錯誤風險。

在查資料無意間發現confd能自動管理配置文件,通過模板渲染生成配置文件,避免了配置錯誤風險,覺得挺好,就實驗了下,于是就有了本章博文。

二、架構圖

三、涉及軟件

etcd:分布式KV存儲系統,一般用于共享配置和服務注冊與發現。是CoreOS公司發起的一個開源項目。 ETCD存儲格式類似于文件系統,以根"/"開始下面一級級目錄,最后一個是Key,一個key對應一個Value。

etcd集群:使用Raft協議保證每個節點數據一致,由多個節點對外提供服務。這里只用單臺。

confd:管理本地應用配置文件,使用etcd或consul存儲的數據渲染模板,還支持redis、zookeeper等。

confd有一個watch功能,通過HTTP API定期監測對應的etcd中目錄變化,獲取最新的Value,然后渲染模板,更新配置文件。

四、部署

環境說明:CentOS7,IP 192.168.1.99 # 為了試驗服務都安裝這臺上。

4.1 下載軟件包

4.2?安裝Nginx并啟動#?yum?install?-y?gcc?gcc-c++?make?openssl-devel?pcre-devel

#?useradd?nginx?-s/sbin/nologin

#?wget?http://nginx.org/download/nginx-1.10.3.tar.gz

#?tar?zxvf?nginx-1.10.3.tar.gz

#?cd?nginx-1.10.3

#?./configure--prefix=/usr/local/nginx?--user=nginx?--group=nginx?--with-http_ssl_module--with-http_gzip_static_module?--with-http_realip_module--with-http_stub_status_module

#?make?&&?make?install

獨立出來虛擬主機:

#?mkdir?/usr/local/nginx/conf/vhost

#?vi?/usr/local/nginx/conf/nginx.conf?#?在http{}段中末尾添加包含虛擬主機配置文件

http?{

includevhost/*.conf;

}

#?/usr/local/nginx/sbin/nginx??#?啟動Nginx

4.3 安裝etcd并啟動#?tar?zxvf?etcd-v3.1.4-linux-amd64.tar.gz

#?mv?etcd?etcdctl?/usr/bin/??#?etcd提供封裝好的包,直接使用即可

#?nohup?etcd--data-dir?/var/lib/data.etcd?--listen-client-urls?http://192.168.1.99:2379--advertise-client-urls?http://192.168.1.99:2379?&>/var/log/etcd.log?&

4.4 安裝confd

confd也是一個封裝好的包,直接使用即可。#?mv?confd-0.11.0-linux-amd64?/usr/bin/confd

key規劃:

keyvalue

/nginx/www/server_name域名

/nginx/www/upstream/server01節點01

/nginx/www/upstream/server02節點02

/nginx/www/upstream/server03節點03

創建配置目錄#?mkdir?-p?/etc/confd/{conf.d,templates}

conf.d????#?資源模板,下面文件必須以toml后綴

templates?#?配置文件模板,下面文件必須以tmpl后綴

創建資源模板#?vi?/etc/confd/conf.d/app01.conf.toml

[template]

src?=?"app01.conf.tmpl"????#?默認在/etc/confd/templates目錄下

dest?=?"/usr/local/nginx/conf/vhost/app01.conf"??#?要更新的配置文件

keys?=?[

"/nginx",????????????#?監測的key

]

reload_cmd?="/usr/local/nginx/sbin/nginx?-s?reload"???#?最后執行的命令

創建Nginx配置文件模板#?vi?/etc/confd/templates/app01.conf.tmpl

upstream?www.{{getv?"/nginx/www/server_name"}}?{

{{range?getvs?"/nginx/www/upstream/*"}}

server?``.``;

`end`

}

server?{

server_name??www.{{getv?"/nginx/www/server_name"}};

location?/?{

proxy_pass???????http://www.{{getv??"/nginx/www/server_name"}};

proxy_redirect?off;

proxy_set_header?Host?$host;

proxy_set_header?X-Real-IP?$remote_addr;

proxy_set_header?X-Forwarded-For?$proxy_add_x_forwarded_for;

}

}

博客地址:http://lizhenliang.blog.51cto.com

QQ群:323779636(Shell/Python運維開發群)

五、測試

使用etcdctl客戶端操作etcd,常用的幾個選項如下:USAGE:

etcdctl?[global?options]?command?[command?options]?[arguments...]

COMMANDS:

ls??????????retrieve?a?directory

get?????????retrieve?the?value?of?a?key

set?????????set?the?value?of?a?key

rm??????????remove?a?key?or?a?directory

GLOBAL?OPTIONS:

--peers,?-C?????a?comma-delimited?list?of?machine?addresses?in?the?cluster?(default:?"http://127.0.0.1:2379,http://127.0.0.1:2379")

5.1 向etcd添加k/v#?etcdctl?-C?http://192.168.1.99:2379?set?domain.com

domain.com

#?etcdctl?-C?http://192.168.1.99:2379?set?/nginx/www/upstream/server01?"192.168.1.10:80"

192.168.1.10:80

#?etcdctl?-C?http://192.168.1.99:2379?set?/nginx/www/upstream/server02?"192.168.1.11:80"

192.168.1.11:80

5.2 啟動confd監測etcd中的keys

當你啟動后,confd就會從etcd獲取key的值并填充到Nginx配置文件模板,并更新到/usr/local/nginx/conf/vhost/app01.conf,并nginx reload。

5.3 近一步測試

向etcd中/nginx/www/upstream/再添加一個節點:

OK!這樣就實現了自動管理Nginx配置文件,無感知加入后端節點。

六、etcd Rest API使用curl?-X?PUT?http://192.168.1.99:2379/v2/keys/test/a_key?-d?value="789"??#?增改key

curl?-X?DELETE?http://192.168.1.99:2379/v2/keys/test/a_key?????#?刪除key

curl?http://192.168.1.99:2379/v2/keys/test/a_key?????????????????#?查詢key的值

curl?-X?PUT?http://192.168.1.99:2379/v2/keys/dir?-d?dir=true???#?創建目錄

curl?http://192.168.1.99:2379/v2/keys?????????????#?查看所有keys

curl?-X?PUT?http://192.168.1.99:2379/v2/keys/ttlvar?-d?value="ttl_value"?-d?ttl=10?#?創建過期時間的key,單位秒

curl?http://192.168.1.99:2379/version?????????????#?查看etcd版本

curl?http://192.168.1.99:2379/v2/members????????????#?列出所有集群成員

curl?http://192.168.1.99:2379/v2/stats/leader?????????#?查看leader

curl?http://192.168.1.99:2379/v2/stats/self???????????#?節點自身信息

curl?http://192.168.1.99:2379/v2/stats/store??????????#?查看集群運行狀態

七、總結

總體來說,etcd+confd要比自己寫腳本管理Nginx配置文件更方便!當然,增加一套組件也會增加一點運維成本。

當初始化一臺Web節點,可以增加一步操作去把自己信息注冊到etcd,從而實現自動加入節點。

如果應用在生產環境,有些功能需要更加完善些,比如向etcd添加數據用Rest API或者用Python封裝接口,confd寫一個后臺進程腳本運行等。

如果線上已經有redis或者zookeeper的話,那么就可以直接作為k/v存儲信息,而不需要再搭建一套etcd集群!

由于keys的每次更新confd都會Nginx reload,在高并發訪問量會有一點影響,比較好的解決方案就是寫lua去動態加載Nginx參數。但應付中小規模還是可以的!

由此看來,confd不但局限管理Nginx配置文件,對于其他應用軟件也是可以的,比如Haproxy,LVS等。

confd使用文檔:

資源模板其他參數:

總結

以上是生活随笔為你收集整理的etcd nginx 容器_Etcd+Confd实现Nginx配置文件自动管理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。