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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

QUIC实战(二) AWS 搭建nginx(http3.0) + upsync + consul(server-client模式) 集群

發(fā)布時間:2024/4/11 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 QUIC实战(二) AWS 搭建nginx(http3.0) + upsync + consul(server-client模式) 集群 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

前面的博客介紹了怎么編譯支持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 集群由Consul Agent的節(jié)點組成, 在集群中有兩種角色: Server和 Client 。
  • Server和Client只是Consul的兩種角色,二者之間并沒有什么區(qū)別,只是人為的角色劃分。
  • Consul Server : 用于維護(hù)Consul 集群的狀態(tài)信息, 實現(xiàn)數(shù)據(jù)一致性。 多個server之中會基于Raft協(xié)議選舉出一個leader。 多個Server節(jié)點上的Consul數(shù)據(jù)信息保持強一致性。 在局域網(wǎng)內(nèi)與本地客戶端通訊,通過廣域網(wǎng)與其他數(shù)據(jù)中心通訊。
    Consul Client: 只維護(hù)自身的狀態(tài), 并將HTTP和DNS接口請求轉(zhuǎn)發(fā)給服務(wù)端。
  • Consul 支持多數(shù)據(jù)中心, 多個數(shù)據(jù)中心要求每個數(shù)據(jù)中心都要安裝一組Consul集群,多個數(shù)據(jù)中心間基于gossip protocol協(xié)議來通訊
  • 搭建方案 :

    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)建VPC ,選擇IPv4 CIDR
  • 創(chuàng)建四個子網(wǎng) 兩個公有子網(wǎng)和兩個私有子網(wǎng)(分別處于不同的可用區(qū)域–為了DR): quic-subnet1,quic-subnet2,quic-internal1,quic-internal2
  • 創(chuàng)建互聯(lián)網(wǎng)網(wǎng)關(guān)并關(guān)聯(lián)到對應(yīng)的VPC; 在主路由表里添加互聯(lián)網(wǎng)網(wǎng)關(guān)的路由,然后關(guān)聯(lián)主路由表到對應(yīng)的公有子網(wǎng)
  • 創(chuàng)建彈性ip后并創(chuàng)建對應(yīng)的NAT網(wǎng)關(guān)(在quic-subnet1上),創(chuàng)建路由表(路由target為nat)并關(guān)聯(lián)到私有子網(wǎ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

    wget https://releases.hashicorp.com/consul/1.7.5/consul_1.7.5_linux_amd64.zip ## sudo -i 切換到root用戶下 unzip consul_0.7.5_linux_amd64.zip

    分別在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里的配置文件就可以了,這樣就可以避免修改原來的配置文件

    server {listen 80;# nginx服務(wù)器的ip地址server_name 172.33.17.51;location / {root html;index index.html index.htm;}}include /opt/server/nginx/conf/conf.d/*.conf; # another virtual host using mix of IP-, name-, and port-based configuration

    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)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。