QUIC实战(二) AWS 搭建nginx(http3.0) + upsync + consul(server-client模式) 集群
前面的博客介紹了怎么編譯支持http3的nginx,并添加了upsync模塊。為了在生產(chǎn)環(huán)境驗證QUIC,我在aws搭建了一個Nginx + upsync + consul的集群 ,支持動態(tài)負(fù)載均衡。
consul介紹
consul是HashiCorp公司(曾經(jīng)開發(fā)過vgrant) 推出的一款開源工具, 基于go語言開發(fā), 輕量級, 用于實現(xiàn)分布式系統(tǒng)的服務(wù)發(fā)現(xiàn)與配置。
consul內(nèi)置有KV存儲, 服務(wù)注冊/發(fā)現(xiàn), 健康檢查, HTTP+DNS API, Web UI等多種功能。
官網(wǎng): https://www.consul.io/
架構(gòu)說明:
Consul Client: 只維護(hù)自身的狀態(tài), 并將HTTP和DNS接口請求轉(zhuǎn)發(fā)給服務(wù)端。
搭建方案 :
consul server 存儲tomcat服務(wù)器的信息
consul client 端負(fù)責(zé)對服務(wù)器進(jìn)行健康檢查并同步到server
nginx間隔時間動態(tài)獲取最新的consul server配置信息, 這樣nginx 就可以實現(xiàn)動態(tài)負(fù)載均衡了。
AWS部署流程
我是使用的AWS來部署的實例,這里也簡單記錄下vpc和實例的構(gòu)建過程
一.VPC,子網(wǎng),網(wǎng)關(guān),路由表創(chuàng)建
二.創(chuàng)建實例
創(chuàng)建安全組
1) 堡壘機 開放22端口的SSH訪問
2) nginx-quic的安全組
3) tomcat集群的安全組
4) consul-server的安全組
創(chuàng)建堡壘機實例,并分配彈性IP (quic-subnet1上)
分別創(chuàng)建quic-nginx-upsync-1,quic-nginx-upsync-2,quic-tomcat-1,consul-server1,consul-server2的實例
創(chuàng)建網(wǎng)絡(luò)負(fù)載均衡器和目標(biāo)群組(因為使用的quic,所以負(fù)載均衡器協(xié)議是TCP_UDP)
注意:由于AWS申請了5個彈性IP之后,再申請分配就會提示到達(dá)上限,需要將之前的彈性IP先取消關(guān)聯(lián),分配給新的實例
consul 集群部署
consul server : 172.33.36.48, 172.33.63.50 (這里我只部署了兩臺,實際是3server + 4 client)
consul client (和tomcat在一臺機子上) : 172.33.35.141
分別在consul server 172.33.36.48, 172.33.63.50 上編寫配置文件
{"server": true,"ui": true,"data_dir": "/opt/consul_dir/data","datacenter": "dc1","node_name": "server1","log_level": "info","bind_addr": "172.33.36.48","client_addr": "172.33.36.48","retry_join": ["172.33.36.48","172.33.63.50"] } {"server": true,"ui": true,"data_dir": "/opt/consul_dir/data","datacenter": "dc1","node_name": "server2","log_level": "info","bind_addr": "172.33.63.50","client_addr": "172.33.63.50","retry_join": ["172.33.36.48","172.33.63.50"] }在consul client 172.33.35.141上編寫配置文件 , 搭建其他client的時候只要把配置文件上的bind_addr, client_addr 修改為對應(yīng)IP即可
{"server": false,"ui": true,"data_dir": "/opt/consul_dir/data","datacenter": "dc1","node_name": "client1","log_level": "info","bind_addr": "172.33.35.141","client_addr": "172.33.35.141","retry_join": ["172.33.36.48","172.33.63.50"],"service": {"id": "1","name": "quic","address": "172.33.35.141","port": 8080,"check": {"id": "quic","name": "HTTPAPI on port 8080","http": "http://172.33.35.141:8080/quic/api/checkHealth","interval": "10s","timeout": "1s"}} }為了方便啟動,編寫了兩個shell腳本
## consul server的啟動腳本 #!/bin/sh cd /opt nohup ./consul agent -bootstrap-expect=1 -config-dir=/opt/consul_dir/server.json >> /opt/logs/consul.log 2>&1 &## consul client的啟動腳本#!/bin/sh cd /opt nohup ./consul agent -config-dir=/opt/consul_dir/client.json >> /opt/logs/consul.log 2>&1 &通過端口映射,可以看到consul的三個節(jié)點都正常啟動了,也選舉出了leader
添加nginx upstream服務(wù)信息到consul
我們可以使用linux命令方式發(fā)送put請求:
curl -X PUT http://172.33.36.48:8500/v1/kv/upstreams/quic/172.33.35.141:8080
請求發(fā)送成功后就可以在consul web 界面看到對應(yīng)的服務(wù)器信息了
部署Nginx
前面一篇博客已經(jīng)在自己的服務(wù)器上成功安裝了nginx(添加了quiche和upsync模塊)。只要把安裝目錄/opt/server下的nginx打包部署到aws實例的相應(yīng)目錄下就可以了
最后只需要修改下nginx的配置文件就可以了
在nginx.conf里通過include引入如下配置文件,這樣我們只需要修改conf.d里的配置文件就可以了,這樣就可以避免修改原來的配置文件
quic.conf
upstream myserver {server 127.0.0.1:11111;#超時是6m 間隔是500mupsync 172.33.36.48:8500/v1/kv/upstreams/quic upsync_timeout=6m upsync_interval=500ms upsync_type=consul strong_dependency=off;upsync 172.33.63.50:8500/v1/kv/upstreams/quic upsync_timeout=6m upsync_interval=500ms upsync_type=consul strong_dependency=off;#從consul拉取的上游服務(wù)器后持久化的位置upsync_dump_path /opt/data/consul/server.conf; }server {# Enable QUIC and HTTP/3.listen 443 quic reuseport;# Enable HTTP/2 (optional).listen 443 ssl http2;ssl_certificate /opt/ssl/fullchain.pem;ssl_certificate_key /opt/ssl/privkey.pem;# Enable all TLS versions (TLSv1.3 is required for QUIC).ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;# Add Alt-Svc header to negotiate HTTP/3.add_header alt-svc 'h3-29=":443"; ma=86400';location /quic {proxy_pass http://myserver;} }然后通過sbin/nginx -c conf/nginx.conf 命令啟動nginx就可以了
綁定域名到對應(yīng)的負(fù)載均衡器
最后只要將域名綁定到對應(yīng)的負(fù)載均衡器上,我們就可以通過域名訪問到對應(yīng)的api了
請求url成功
quic協(xié)議的驗證在上一篇博客里已經(jīng)寫過了,需要的可以參照該博客
QUIC實戰(zhàn)(一) 通過Quiche部署支持HTTP3 的NGINX
部署過程遇到的問題 :
一開始我的bind_addr和client_addr都寫的127.0.0.1,結(jié)果出現(xiàn)了如下報錯信息。需要將bind_addr的ip改成consul server與其他節(jié)點交互的內(nèi)網(wǎng)ip
參考資料:
consul配置參數(shù)大全、詳解、總結(jié)
Consul集群搭建 2Server+ 3Client
總結(jié)
以上是生活随笔為你收集整理的QUIC实战(二) AWS 搭建nginx(http3.0) + upsync + consul(server-client模式) 集群的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: QUIC实战(一) 通过Quiche部署
- 下一篇: QUIC实战(三) letsencryp