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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

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

前面的博客介紹了怎么編譯支持http3的nginx,并添加了upsync模塊。為了在生產環境驗證QUIC,我在aws搭建了一個Nginx + upsync + consul的集群 ,支持動態負載均衡。

consul介紹

consul是HashiCorp公司(曾經開發過vgrant) 推出的一款開源工具, 基于go語言開發, 輕量級, 用于實現分布式系統的服務發現與配置。
consul內置有KV存儲, 服務注冊/發現, 健康檢查, HTTP+DNS API, Web UI等多種功能。
官網: https://www.consul.io/

架構說明:

  • Consul 集群由Consul Agent的節點組成, 在集群中有兩種角色: Server和 Client 。
  • Server和Client只是Consul的兩種角色,二者之間并沒有什么區別,只是人為的角色劃分。
  • Consul Server : 用于維護Consul 集群的狀態信息, 實現數據一致性。 多個server之中會基于Raft協議選舉出一個leader。 多個Server節點上的Consul數據信息保持強一致性。 在局域網內與本地客戶端通訊,通過廣域網與其他數據中心通訊。
    Consul Client: 只維護自身的狀態, 并將HTTP和DNS接口請求轉發給服務端。
  • Consul 支持多數據中心, 多個數據中心要求每個數據中心都要安裝一組Consul集群,多個數據中心間基于gossip protocol協議來通訊
  • 搭建方案 :

    consul server 存儲tomcat服務器的信息
    consul client 端負責對服務器進行健康檢查并同步到server
    nginx間隔時間動態獲取最新的consul server配置信息, 這樣nginx 就可以實現動態負載均衡了。

    AWS部署流程

    我是使用的AWS來部署的實例,這里也簡單記錄下vpc和實例的構建過程

    一.VPC,子網,網關,路由表創建

  • 創建VPC ,選擇IPv4 CIDR
  • 創建四個子網 兩個公有子網和兩個私有子網(分別處于不同的可用區域–為了DR): quic-subnet1,quic-subnet2,quic-internal1,quic-internal2
  • 創建互聯網網關并關聯到對應的VPC; 在主路由表里添加互聯網網關的路由,然后關聯主路由表到對應的公有子網
  • 創建彈性ip后并創建對應的NAT網關(在quic-subnet1上),創建路由表(路由target為nat)并關聯到私有子網
  • 二.創建實例

  • 創建安全組
    1) 堡壘機 開放22端口的SSH訪問
    2) nginx-quic的安全組
    3) tomcat集群的安全組
    4) consul-server的安全組

  • 創建堡壘機實例,并分配彈性IP (quic-subnet1上)

  • 分別創建quic-nginx-upsync-1,quic-nginx-upsync-2,quic-tomcat-1,consul-server1,consul-server2的實例

  • 創建網絡負載均衡器和目標群組(因為使用的quic,所以負載均衡器協議是TCP_UDP)

  • 注意:由于AWS申請了5個彈性IP之后,再申請分配就會提示到達上限,需要將之前的彈性IP先取消關聯,分配給新的實例

    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 修改為對應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的三個節點都正常啟動了,也選舉出了leader


    添加nginx upstream服務信息到consul

    我們可以使用linux命令方式發送put請求:
    curl -X PUT http://172.33.36.48:8500/v1/kv/upstreams/quic/172.33.35.141:8080

    請求發送成功后就可以在consul web 界面看到對應的服務器信息了

    部署Nginx

    前面一篇博客已經在自己的服務器上成功安裝了nginx(添加了quiche和upsync模塊)。只要把安裝目錄/opt/server下的nginx打包部署到aws實例的相應目錄下就可以了

    最后只需要修改下nginx的配置文件就可以了
    在nginx.conf里通過include引入如下配置文件,這樣我們只需要修改conf.d里的配置文件就可以了,這樣就可以避免修改原來的配置文件

    server {listen 80;# nginx服務器的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拉取的上游服務器后持久化的位置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就可以了

    綁定域名到對應的負載均衡器

    最后只要將域名綁定到對應的負載均衡器上,我們就可以通過域名訪問到對應的api了

    請求url成功

    quic協議的驗證在上一篇博客里已經寫過了,需要的可以參照該博客
    QUIC實戰(一) 通過Quiche部署支持HTTP3 的NGINX

    部署過程遇到的問題 :

    一開始我的bind_addr和client_addr都寫的127.0.0.1,結果出現了如下報錯信息。需要將bind_addr的ip改成consul server與其他節點交互的內網ip

    參考資料:

    consul配置參數大全、詳解、總結

    Consul集群搭建 2Server+ 3Client

    總結

    以上是生活随笔為你收集整理的QUIC实战(二) AWS 搭建nginx(http3.0) + upsync + consul(server-client模式) 集群的全部內容,希望文章能夠幫你解決所遇到的問題。

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