作者介绍:简历上没有一个精通的运维工程师。请点击上方的蓝色《运维小路》关注我,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。
我们上一大章介绍了Kubernetes的知识,本章节我们进入中间件的讲解,这里会包含很多不同的类型组件,中间件的第一个大类我这里定义的是Web服务器。由于目前使用最广泛的Web服务器是Nginx,所以我们这里的讲解主要以Nginx服务器为主。
在实际的业务环境中,为了验证新功能等操作,需要引入一定的流量进行测试。但是手工模拟流量很难模拟真实的生产环境。所以就衍生出来一个需求就是把生产流量引入测试环境,他就是我们今天要讲的流量镜像功能。
把流量从生产引入到测试环境以后,就可以根据自己的对测试工作进行进一步细分,可做流量压测,蓝绿发布等操作。但是需要注意,这个会增加Nginx的负载压力。
下面就是我们使用Nginx的mirror功能来实现流量镜像功能。
# 定义主后端和镜像后端的服务
upstream primary_backend {
server 192.168.31.121:8080;
keepalive 16; # 保持长连接提升性能
}
upstream mirror_backend {
server 192.168.31.121:9090; #镜像服务器
keepalive 16;
}
# 配置HTTP服务
server {
listen 80;
server_name 192.168.31.120;
#镜像请求使用单独的日志
log_format mirror_log '$time_iso8601 [Mirror] "$request" '
'Sent to: $upstream_addr Status: $status';
access_log /var/log/nginx/mirror.log mirror_log;
# 配置流量镜像规则(镜像所有请求)
location / {
# 镜像配置
mirror /mirror; # 镜像请求发送到内部location
mirror_request_body on; # 复制请求体(支持POST/PUT)
mirror_rate_limit 1000r/s; # 限制镜像请求速率(按需调整)
# 主请求代理配置
proxy_pass http://primary_backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_send_timeout 10s;
proxy_read_timeout 10s;
}
# 镜像请求的内部处理(不可外部访问)
location = /mirror {
internal; # 关键!禁止直接访问此路径
# 代理到镜像服务
proxy_pass http://mirror_backend$request_uri;
# 传递必要请求头
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# 安全过滤(移除敏感头)
proxy_set_header Authorization "";
proxy_set_header Cookie "";
# 快速失败策略(避免镜像服务拖累主服务)
proxy_connect_timeout 2s;
proxy_send_timeout 5s;
proxy_read_timeout 5s;
proxy_next_upstream error timeout invalid_header;
}
}
这样配置以后,我们请求192.168.31.120,则请求会同时转发到后端服务器(正常响应反馈请求)的同时也会转发到我们镜像测试服务(只负责发请求,不管后续),而且由于我分别记录了日志,则两个方向都会记录日志。
运维小路
一个不会开发的运维!一个要学开发的运维!一个学不会开发的运维!欢迎大家骚扰的运维!
关注微信公众号《运维小路》获取更多内容。