GCP 的 http(s)负载均衡有如下两个特点:
1.Global 的负载均衡,通过anycast把同一个 IP 地址通过 BGP 发布到其他运营商,可以实现全球多个 region 的负载均衡,并把用户流量最快的引流入 Google 的网络
2.http(s)负载均衡是 proxy 模式的负载均衡,tcp 的信息都在负载均衡上终结,再发送到后端的真实服务器。由于 TCP 的终结都是在 Google B2 网络的 GFE 上,这样可以最快的相应客户,提升用户的体验
同时这样也带来的问题是,一些统计数据在后端的真实服务器上不能获得。这样在 Google HTTP(S)的负载均衡上配置 user-defined header,可以把相关的数据传送到后端服务器,具体实现方法如下。
一 创建负载均衡
通过 GCP 的 console 或命令行创建 HTTP(S)负载均衡:

这里就不再描述创建过程。
二 在负载均衡中添加 User-Defined Header
在创建好的负载均衡中点击编辑:

选择 backend configuration 并选择编辑:

在编辑界面中,选择 Advaned Configuratioins:

添加相关的 User-defined Header:

具体 Header 的内容可以查看文档
三 在真实服务器中查看 User-Defined Header 信息
1 tcpdum 抓包分析
在 VM 中进行抓包:
同时在客户端进行 curl 的页面抓取:
将文件下载到本地,通过 Wireshark 打开:

可以看到刚刚定义的包头都在 HTTP 请求中,其中:
1.X-City:Shanghai
2.X-RTT:27ms,这个是客户端到 Google HTTP 负载均衡的 RTT 时间
3.X-Region:CN
4.X-Sub:CN31,表示纬度为北纬31度的城市
5.X-lat:31.230390,121.473702, 为上海市人民广场的经纬度,代表上海市

2 修改日志配置,在日志中体现
修改 httpd 的配置文件,更改日志配置:
修改如下内容:
重启 httpd 服务:
查看日志:

可以看到在 http 负载均衡中定义的 Header 信息都显示到 log 中了。
同时在客户端进行抓包,可以看到,客户端端 http 请求和服务器端返回,均没有这些自定义的 http header,说明这些字段是 Google HTTP 负载均衡添加入的。


四 总结
Google Cloud 的 HTTP 负载均衡可以通过添加用户自定义 Header 的方式,把用户关心的一些字段添加到 HTTP 包头中,发送到后端 HTTP 服务器,通过这些数据,可以实现用户的各种数据的统计。
文章版权归作者所有,未经许可不得转载
文章信息
相关推荐
