天天看點

game module 停止運作_詳解流量複制解決方案--NGINX的ngx_http_mirror_module子產品實作概述01ngx_http_mirror_module子產品02mirror子產品配置03流量複制--實驗測試

概述

因為我們的接口環境是在winserver上,而gor又剛好沒對應版本(網上很多辦法都試過了...哪位朋友測試過可以的話指點下),是以用了nginx的ngx_http_mirror_module子產品來實作需求。

01

ngx_http_mirror_module子產品

nginx官網公布了nginx1.13.4最新的ngx_http_mirror_module子產品,利用mirror子產品,業務可以将線上實時通路流量拷貝至其他環境,基于這些流量可以做版本釋出前的預先驗證,進行流量放大後的壓測等等。

02

mirror子產品配置

mirror子產品配置分為兩部分,源位址和鏡像位址配置,配置位置可以為nginx配置檔案的http, server, location上下文,配置示例為:

mirror子產品配置說明#originallocation / {       #location /指定了源uri為/  root html;  index index.html index.htm;  mirror /mirror;       #lmirror /mirror指定鏡像uri為/mirror mirror /mirror;       #lmirror /mirror指定鏡像uri為/mirror  mirror_request_body on;   # 指定是否鏡像請求body部分,請求自動緩存;}#mirrorlocation /mirror {  internal;internal  #指定此location隻能被“内部的”請求調用,外部的調用請求會傳回”Not found” (404)  proxy_set_header X-Original-URI $request_uri;  proxy_set_header Host baidu-nginx-b.com; #proxy_set_header 設定鏡像流量的頭部  proxy_pass http://192.168.1.100$request_uri; #proxy_pass 指定将鏡像資料發送給test server的位址}location /mirror2 {  internal;internal  #指定此location隻能被“内部的”請求調用,外部的調用請求會傳回”Not found” (404)  proxy_set_header X-Original-URI $request_uri;  proxy_set_header Host baidu-nginx-b.com; #proxy_set_header 設定鏡像流量的頭部  proxy_pass http://192.168.1.100$request_uri; #proxy_pass 指定将鏡像資料發送給test server的位址}
           

1、original配置

  • location /指定了源uri為/
  • mirror /mirror指定鏡像uri為/mirror
  • mirror_request_body off | on 指定是否鏡像請求body部分,此選項與proxy_request_buffering、fastcgi_request_buffering、scgi_request_buffering和 uwsgi_request_buffering沖突,一旦開啟mirror_request_body為on,則請求自動緩存;
  • proxy_pass 指定上遊server的位址

2、mirror配置

  • internal 指定此location隻能被“内部的”請求調用,外部的調用請求會傳回”Not found” (404)
  • proxy_pass 指定上遊server的位址
  • proxy_set_header 設定鏡像流量的頭部

03

流量複制--實驗測試

1、下載下傳nginx,解壓縮,運作cmd,使用指令進行操作,不要直接輕按兩下nginx.exe,不要直接輕按兩下nginx.exe,不要直接輕按兩下nginx.exe

一定要在dos視窗啟動,不要直接輕按兩下nginx.exe,這樣會導緻修改配置後重新開機、停止nginx無效,需要手動關閉任務管理器内的所有nginx程序,再啟動才可以。

2、啟動nginx服務,啟動時會一閃而過是正常的

start nginx
           

3、檢視任務程序是否存在,dos或打開任務管理器都行

tasklist /fi "imagename eq nginx.exe"
           
game module 停止運作_詳解流量複制解決方案--NGINX的ngx_http_mirror_module子產品實作概述01ngx_http_mirror_module子產品02mirror子產品配置03流量複制--實驗測試

4、如果程式沒啟動就直接start nginx啟動,如果已經啟動了就使用以下指令重新加載配置檔案并重新開機

nginx -s reload
           

之後就打開浏覽器通路剛才的域名及端口http://localhost:80,出現歡迎頁就說明部署成功了

game module 停止運作_詳解流量複制解決方案--NGINX的ngx_http_mirror_module子產品實作概述01ngx_http_mirror_module子產品02mirror子產品配置03流量複制--實驗測試

5、啟動web服務

這裡偷個懶,用之前gor的一些半成品模拟兩個server

d:goreplaygor file-server :8000gor file-server :8001
           

6、配置NGINX

upstream zs { server 127.0.0.1:8000; } upstream cs { server 127.0.0.1:8001; } server { listen 80; server_name localhost; #charset koi8-r; #access_log logs/host.access.log main; location /{ #access_log D:ginxaccess.log accesslog; mirror /mirror; mirror_request_body on; proxy_pass http://zs; } # 鏡像站點配置 location /mirror { internal; # 内部配置 proxy_pass http://cs$request_uri; proxy_pass_request_body on; # Indicates whether the original request body is passed to the proxied server. default value is on proxy_set_header X-Original-URI $request_uri;  } }}
           

7、通路位址:http://localhost/goreplay-1.0.0/

game module 停止運作_詳解流量複制解決方案--NGINX的ngx_http_mirror_module子產品實作概述01ngx_http_mirror_module子產品02mirror子產品配置03流量複制--實驗測試
game module 停止運作_詳解流量複制解決方案--NGINX的ngx_http_mirror_module子產品實作概述01ngx_http_mirror_module子產品02mirror子產品配置03流量複制--實驗測試

可以看到兩邊都有對應的請求。

這個辦法也是一個解決方案,對線上壓力也比較小,不過使用者通路生産伺服器請求被nginx複制發送給測試伺服器時,mirror不會輸出http傳回内容,這裡就需要另外配置了。

另外一點就是不會儲存流量下來,無法做到随時随地重放,隻能說折中吧,還得繼續研究。

後面會分享更多devops和DBA方面的内容,感興趣的朋友可以關注一下~

game module 停止運作_詳解流量複制解決方案--NGINX的ngx_http_mirror_module子產品實作概述01ngx_http_mirror_module子產品02mirror子產品配置03流量複制--實驗測試