当前位置: 首页 > 工具软件 > IP resolver > 使用案例 >

【龙叔运维问题排查记录】nginx-resolver解决动态域名解析

虞展
2023-12-01

    公司微服务系统都实现了双活环境(A机房和B机房),早期的时候有一次A机房环境异常,需要将流量全部切到B机房,于是将网关A机房环境的F5 disable掉,这样通过网关的调用都会走B环境的F5调用B环境的系统实例,但是切换之后发现还是有少量的请求走到了A环境的F5,且都是Nginx调用过来的

    后面监察发现nginx的配置的网关的代理的写法有问题,因为nginx里面有对网关做代理,但是都是nginx启动的时候域名解析一次,也就是说不重启的化,nginx解析的网关域名永远都是一个,所以即使网关disable掉了A环境的F5,还是会有请求过去

    这个时候就需要进行动态的域名解析,也就是用resolver,让nginx每隔一段时间重新对网关域名进行解析,这样才能真正实现双活时候的环境切换。

举例一个系统

敏感的信息我都用【】代替

原本的写法如下

location ^~/lcloud-xxx-yyy/ [

   proxy_set_header  Host $http_host;

   proxy_set_header  X-Real-IP Sremote_addr,

   proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;

   prow-pass  http://【网关域名】;

}

调整之后的写法

location ^~/lcloud-xxx-yyy/ [
   resolver_timeout 9s; 
   resolver 【dns_ip1】 【dns_ip2】 valid=20s; 

   set Sapi "【网关域名】";

   proxy_set_header  Host $http_host;

   proxy_set_header  X-Real-IP Sremote_addr,

   proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;

   prow-pass  http://Sapi;

}

resolver参数解读

resolver_timeout 9s;用于指定dns解析的超时时间。

resolver address ... [valid=time] [ipv6=on|off]; 可以配置多个dns服务,nginx会采用轮询的方式去访问dns服务,nginx会缓存dns对域名解析的结果,缓存的时间由valid指定,ipv6用于显示开启或者关闭ipv6。

 类似资料: