A. slb配置详解
我们一起来快速认识一下,负载均衡——SLB。负载均衡SLB是将访问流量根据转发策略分发到后端多台云服务器(ECS实例)的流量分发控制服务。包含两种含义:一是通过流量分发,扩展应用系统的服务能力;二是消除单点故障,提高应用系统的可用性。
应用场景
我们具体来看一看它的使用场景。
第一个使用场景的是用于高访问量的业务。
当你的应用访问量非常大,单台的服务器已经无法承载这个访问量的时候,就可以使用负载均衡,将流量分发到不同的服务器上去。
第二个场景是横向扩张系统。
当你已经使用了负载均衡,在业务有波动时可以在后端非常方便的添加和减少ECS来调整自己应用的服务能力。
第三个应用场景是消除单点故障。
当我们在使用负载均衡时,后端有多台ECS在同时工作的。一旦其中一台ECS上的应用发生了故障,那么负载均衡会通过一个健康检查的机制来及时的发现这个故障,并且能屏蔽对这台ECS的流量转发,然后将用户的请求转发到另一台正常工作的ECS实例上。
同城的容灾
阿里云负载均衡可以实现同地域多可用区之间同地域容灾,当主可用区出现故障是,可以在短时间内切换到另一备用可用区,以恢复服务能力。同时,主可用区恢复访问时,它会自动切换到主可用区。
跨地域容灾
跨地域容灾通过云解析做智能DNS,将域名解析到不同地域的负载均衡实例地址下,以实现全局负载均衡,当某个地域出现不可用时,暂停对应解析即可实现所有用户访问不受影响。
配置负载均衡
下面我们来演示一下负载均衡该如何去配置。
首先要做好准备工作,我们需要开通一台负载均衡实例和与负载均衡同一个地域的两台ECS服务器。
创建好以后,我们就可以在负载均衡的控制台看到这样一台实例了。
接下来,我们要给这个负载均衡创建一个监听。“监听”可以简单的理解为对应后端服务器里面的一个应用,比如一个网站我们来点击监听,然后点击添加监听。
假设我们的后端服务器里面有一个http的网站前端协议端口,我们可以将前后端协议端口TCP都写成80,然后根据自己的需要来选择调度算法,其实就是流量的转发方式。
下一步是健康检查,我们可以选择TCP方式。
健康检查端口会默认的和后端服务器的端口保持一致,直接确认就好了。现在,一个监听就配置好了。
接下来要去规定这台负载均衡的后端服务器是哪些。点击后端服务器,然后点击未添加服务器,将我们刚才创建的两台服务器勾选,然后批量添加就可以了。
这里有一个权重需要大家注意一下,这里的权重就是一个比例的概念,如果两台服务器写的都是100,流量将会以1:1的方式被转发到后端的两台服务器上。
B. 关于阿里云SLB(负载均衡)配置HTTPS证书一些记录
因为业务背景问题,目前应用后端的接口和前端服务是放置在不同的服务器上,而前端页面现在说需要加上https,但是我们的前端页面目前请求应用后端的接口的时候使用的还是http,所以导致了,请求http的接口时候出现了异常!
如图示:
解决的办法就是,我们的也给需要给我们的应用接口加上对应的https支持!
之前已经给对应的接口的域名买好了对应的证书!
问题描述:
因为忘了,我们的应用接口的域名是指向了阿里云SLB上的服务器,所以一开始的时候是在后端进行配置相关的SSL,可是配置来配置还是无法生效!
请求的时候会说超时:
首先后端的集群的应用服务器NGINX的配置是:
后知后觉才记得,域名的指向的是负载服务器的IP,我们需要在负载层服务器那里进行配置。
于是乎打开了阿里云的负载均衡,查看一下对应的一些配置信息,
所以尝试了添加对应的新的监听处理!
添加基本配置:
配置对应的监控检查:
然后再配置对应的转发策略:
结果:
第I一次添加的时候,我开启了对应 <使用虚拟服务组>
导致下面的问题的提示(理论上其实应该是没影响的,暂且没继续尝试):
并且访问对应的后端接口返回的是502:
因为对于http还是没有什么问题,所以排除了后端问题的可能性!
后来删除继续重新添加:
但是还是出现异常信息,
后来查阅各种资料,在阿里云的官方文档上有对应的排错步骤:
参考资料信息:
https://help.aliyun.com/knowledge_detail/55201.html?spm=a2c4g.11186623.6.714.K0jKZY
https://help.aliyun.com/knowledge_detail/55207.html?spm=a2c4g.11186623.6.721.FWDfvM
排查步骤
PS:
检查负载均衡状态,是否有后端ECS健康检查失败的情况,如果有健康检查失败,解决健康检查失败问题。
后来觉得应该有可能是原因是健康检查检查引起的问题异常:
,因为默认他应该是会在对应的server下的一个默认的路径去检查服务的情况,由于我没指定对应的检查URL地址,所有在转到80的时候就异常了!!
后来直接的关闭健康检查!就可以了!!
C. 负载均衡进阶:SLB常见问题解决方法
摘要: 在由云栖社区和阿里云网络团队联合主办的2017阿里云网络技术在线高峰论坛上,阿里云技术专家添毅分享了网络产品部根据客户和阿里云运维的反馈提炼出的几大最主要和最常见的在使用SLB产品中发生的问题,并为大家介绍了针对这些常见问题的相应处理方法。
摘要: 在由云栖社区和阿里云网络团队联合主办的2017阿里云网络技术在线高峰论坛上,阿里云技术专家添毅分享了网络产品部根据客户和阿里云运维的反馈提炼出的几大最主要和最常见的在使用SLB产品中发生的问题,并为大家介绍了针对这些常见问题的相应处理方法。想知道如何借助SLB构建高可用系统以及健康检查是如何实现的,本文不容错过!
本文内容根据演讲嘉宾分享视频以及PPT整理而成。
本次的分享将会主要围绕以下5个部分
基本概念回顾
如何构建高可用系统
选择性能共享型还是性能保障型实例
为什么健康检查异常
为什么负载不均衡
一、基本概念回顾
SLB是什么
SLB是阿里云推出的一款云负载均衡服务,其主要针对于多台云服务器进行流量分发,能够将业务流量分发到由多台云服务器所组成的后端服务器池上去,以此来提升系统的处理能力。负载均衡所解决的问题主要包括两点:第一点,SLB能够消除系统的单点故障,这是因为SLB的后面是由多台云服务器组成的服务器池,那么当其中某一台服务器出现故障的时候并不会影响整个系统的可服务性。第二点,由于后端的云服务器能够横向地进行扩展,所以也具有为海量业务提供服务的能力。那么,为什么要使用云上的负载均衡呢?这是因为云上负载均衡主要有这样的几个特点:高可靠、高性能、低成本、安全性、易用性。
SLB基本组件
阿里云的SLB主要包括了三个基本组件,这里也进行简单地介绍。第一个基本组件就是实例,每个实例都唯一地标识了云负载均衡器,并且每个实例都对应一个VIP,VIP唯一地标识了负载均衡实例,也是负载均衡对外提供服务的地址。第二个组件是监听,监听是由VIP+端口号来唯一标识的,一个监听中包含用户定制的负载均衡策略和转发规则。最后一个基本组件就是后端挂载的服务器,也就是云服务器ECS,负责处理真正的业务请求。
二、如何构建高可用系统
多层次的高可用
如下图所示,阿里云的负载均衡是从四个层面上去构建高可用的。从底层往上层看,分别是应用级别的高可用、集群级别的高可用、可用区级别(AZ)的高可用以及地域级别(Region)的高可用。
应用级别的高可用主要是通过针对SLB后端的ECS实例的健康检查来实现的。当SLB发现后端不健康的或者不能正常工作的ECS的时候,会将这些不健康的ECS从SLB的转发路径中剔除掉,保证业务流量能够转发到正常的工作服务器当中。集群级别的高可用主要是通过集群中LVS机器间的session同步来保障任何一个用户的业务会话都能够在所有的LVS机器上是相互同步的,当其中某一台LVS出现故障时,可以由其他的LVS来接替出现故障的机器的工作。同时,由于会话保持的存在,用户的业务是不会发生中断的。对于可用区级别的高可用和地域级别的高可用,在本文的后面会进行更加详细的介绍。
细说可用区级别容灾
这里详细地介绍一下可用区级别的容灾。可用区级别容灾的设计初衷是在当一个可用区出现重大灾情的时候,比如整个可用区的机房发生了掉电、光缆出现了中断、整个可用区机房中所有的物理机都无法正常工作的时候,也就是整个可用区都宕掉了的情况下,能够由备可用区来继续提供服务,这就是可用区级别容灾的设计初衷。可用区级别的容灾并不是说某一个可用区中的某一个实例或者是某几个实例出现了故障就会发生可用区的切换,实例自动从可用区A切换到可用区B,这是一个比较常见的误区。而针对于这样的误区,阿里云也建议用户在构建可用区级别的高可用的时候采取以下两个步骤:
首先,建议用户在SLB实例的后端尽可能地去挂载多个可用区的ECS实例。SLB能够支持跨可用区地挂载ECS云服务器,这样可以避免某个可用区的ECS都出现故障的情况下,还有其他可用区的ECS能够接替工作,虽然跨可用区挂在ECS会存在大约2毫秒左右的延迟,但是却能够大大地提升服务的可用性。
第二步就是针对于一些特别重要的业务,建议在不同的可用区分别地去购买SLB的实例。比如在可用区A和可用区B各自购买一个SLB实例,在此基础之上再使用全球负载均衡GSLB来进行实例间的调度。
跨地域容灾的实现
跨地域容灾这一部分与上面介绍的可用区级别容灾的第二步非常相似,也是借助于GSLB产品实现的,GSLB即 智能DNS实现了针对于后端的健康检查、路由调度的优化功能,能够实现在地域之间的负载均衡实例的调度。关于这部分的更详细的内容请参考:全球负载均衡跨地域容灾解决方案(https://promotion.aliyun.com/ntms/act/globalslb.html)。
三、选择性能共享型还是性能保障型实例
共享型vs保障型-WHY保障型
在如今这个共享经济的时代,像滴滴打车这样的模式是非常火的。但是即便是有了滴滴打车,但是还有人会去买车,这是因为会出现如下两个大家可能曾经都碰到过的场景:
早晚高峰叫不到车?雨雪天气路边冻成狗?还大幅提价?
假期想远离尘嚣,找个僻静旷野放空自我,叫个滴滴?也许有去,但保证无回!
所以说共享和保障都是客户的需求。出于对于类似需求的考虑,阿里云的负载均衡也推出了性能保障型实例。以前所推出的SLB共享型实例是因为性能指标没有办法实现隔离,因为所有的共享型实例都处于同一个大共享资源池中,所以在高峰期的时候就会出现资源的争抢,这样就无法满足对于性能具有刚性需求的大客户的诉求。除此之外,还有一些体量特别大的超级用户,他们对于性能的要求会是非常高的,但是由于共享型实例无法做到性能隔离,也支持不了大颗粒度的性能指标,所以也无法完成这样的工作。因此,阿里云推出了性能保障型的负载均衡实例。
超强性能
保障型实例的性能规格如上图所示,其并发连接数最大可以达到500万,每秒的新建链接数(CPS)可以达到50万,针对于七层负载均衡系统的QPS可以达到10万。除此之外,性能保障型实例还具有以下的特点:
超强HTTPS性能。 性能保障型实例针对于七层系统,特别是HTTPS的业务进行了优化,实现了高性能硬加解卡,并且能够实现使HTTPS的业务单实例可达10万QPS。
超大并发连接数。 性能保障型实例的单实例的并发连接数可达500万,所以其可承载物联网场景的下海量连接,可以支撑共享自行车、智能手表等存在特别大量长连接的场景。
共享型实例平滑升级。 原有的共享型实例可以平滑升级至性能保障型实例,而无需更换VIP。
完善的业务监控系统。 在推出性能保障型实例之后,因为每个实例都有相应的性能规格和性能指标,所以阿里云也为用户提供了完整的业务指标监控系统,并支持电话、短信、钉钉企业群等方式的告警。
性能规格
上图所展现的是阿里云SLB性能保障型实例的规格参数。图中的最后两行规格7、8默认在控制台上是无法购买的,目前只针对企业级用户,而且需通过客户经理申请后,通过白名单开放。
如何选择规格
对于保障型实例而言,主要有如下几个性能指标:
最大连接数:一个实例可承载的最大连接数。
新建连接数:CPS表示一个实例每秒可以新建的链接数。
每秒查询数:QPS表示一个实例7层的像HTTP或者HTTPS系统的吞吐量。
通常一个4层SLB的性能好坏由最大连接数和新建连接数来衡量,它们表示了一个SLB系统的并发能力和处理突发连接的能力。通常一个7层SLB的性能好坏主要由QPS决定,QPS表示了一个7层系统的吞吐量。这里需要注意的是QPS是7层独有概念。虽然每个规格都定义了三个性能指标,但是这并不代表这三个性能指标在任何一个性能场景下或者任何一个时刻都能够同时达到最大值,这里存在一个性能指标的短木板原则。比如在某一个应用系统中,QPS已经达到指标上限,但最大连接数还远远没有达到上限,这时不论怎样加大客户端数量,最大连接数都会因为QPS达到上限,而无法达到最大值。
对于规格的选择而言,需要通过之前提到的业务监控系统来获取相关指标。如果用户十分了解自己业务的相关指标,也就是对于高峰期的并发连接数会达到多少以及QPS会达到多少都有非常清晰的了解,也可以直接在控制台上选购。但是如果用户并不清楚自己的相关业务指标,可以在初期选购按量付费的较高规格的实例,并且在一个业务周期内监控流量的峰值,在峰值确定好之后再通过变配的方式改变到比较合适的实例规格。目前性能保障型实例还处于公测阶段,所以现在还没有对于实例收取规格费用,也就是说在这个阶段无论用户选择最小规格还是最大规格,实际上都只需要花费IP配置费和带宽费就可以了,这样也比较便于用户去熟悉和使用阿里云的性能保障型实例。
监控和告警
前面也有所提及,在负载均衡的控制台上面能够直接地显示出相应的一些性能指标,但是在这里只能够实现对于性能指标的监控,却无法进行告警。如果用户需要进行监控告警,可以在阿里云所提供的云监控控制台进行操作。云监控平台可以监控阿里云中的所有产品并且实现业务告警的定制,并且可以选择包括短信邮件、电话、企业钉钉群等方式进行业务的实时告警。
四、为什么健康检查异常
健康检查机制
接下来分享在负载均衡的日常使用中出现的问题,特别是很多用户都存在疑问的健康检查部分的问题。
阿里云的负载均衡一共可以支持四种协议,四层的负载均衡系统主要包括了TCP、HTTP以及UDP协议,而七层的系统则包括了HTTP和HTTPS,而由于目前HTTP和HTTPS都是使用的普通的HTTP方式,所以其实也可以归结为三类协议。对于TCP而言,健康检查的过程是通过发送ACK这种TCP的探测报文去探测端口是否仍然存活;对于HTTP而言,则主要使用的是HEAD的请求方式来检查目标的页面是否正常;UDP部分则主要借鉴了SMP协议的原理。
健康检查部分主要会涉及到几个指标,这些指标需要用户在控制台上进行设置,上图中给出了一些默认的建议值,比如响应的超时时间,也就是在每一次进行健康检查的时候,如果超过一定时间健康检查还没有回应就认为这次的健康检查是失败的;还有健康检查间隔,也就是两次健康检查之间通常需要间隔2秒钟;而所谓的不健康阀值和健康阀值就是在网络环境中往往会由于网络的抖动以及其他的因素导致偶尔的一次健康检查失败了,但是这时候并不能认为服务是真的失败了,所以需要设置一个阀值,比如3次就指的是当3次健康检查都失败的时候才会认为后端的服务是存在问题的,然后将其从转发路径中摘除掉。同样的,当服务从不健康变为健康的时候,也需要进行连续的几次探测,当确定处于稳定的健康状态之后再将其加入到SLB的后端中去。
为啥会失败(TCP)
TCP的健康检查也经常会出现一些失败的情况,这里也为大家提供了简单的故障排查顺序供参考。当出现健康检查失败的时候,首先可以检查一下后端的服务器是否已经启动。如果后端服务器的负载是比较高的,也可能会因为没有CPU时间去处理健检查的回应,这样就有可能导致健康检查失败。除此之外,因为对于阿里云的负载均衡而言,健康检查使用的都是私网地址实现的,所以如果根本没有监听到私网地址或者私网地址本身存在故障也会导致健康检查的失败。还有服务器上可能存在防火墙,将监听端口屏蔽掉了,导致健康检查并未通过。此外还可能存在一些配置方面的问题,比如提供服务的端口和做健康检查的端口不一致也可能存在健康检查失败。
针对于TCP的健康检查而言,很多用户会经常看到自己的后端服务器上日志上面有很多10或者16这些网段的访问,并且访问流量还比较大,这是因为之前所提到的健康检查具有一定的间隔时间,比如2秒或者3秒一次。这时候一些用户可能就会认为健康检查会影响服务器的性能,占了很多的服务器的连接数。其实可以从上图中左侧的报文交互情况看到,当SLB对于云服务器发起健康检查的时候首先会发一个SYN的请求,如果服务器端口是存活的,那么它会回应一个ACK,这个时候SLB端就会紧接着发送RST报文。也就是说实际上连接是并没有建立的,所以也不会占用后端服务器的连接数的资源,并且对于性能的影响也是极为有限的。
为啥会失败(HTTP)
HTTP常见的健康检查失败原因大概会有这样的三点:最常见的情况就是有些用户把服务器的HEAD请求方式禁掉了,因为默认在使用浏览器或者手机等请求一个页面的时候使用的都是GET方式,有时候可能需要上传数据则会使用POST方式,虽然很多服务器都支持HEAD请求方式,但是有些服务器可能会处于安全或者其他复杂因素的考虑将HEAD请求禁掉。所以在这里建议客户将服务器的HEAD请求方式打开,因为阿里云负载均衡七层健康检查方案就是使用的HEAD方案。另外一种常见情况就是页面访问本身上就存在问题,这样的情况下健康检查也是无法通过的。最后一种常见情况就是期望结果配置错误,针对于七层的健康检查是通过使用HEAD请求方式去请求页面,页面返回码可能会是200、300或者400以及500等,用户可以在健康检查的配置中设定预期的正常情况下的返回码值,当健康检查返回码值与预期值不一致就会判定健康检查是失败的。
为啥会失败(UDP)
这里介绍一下UDP健康检查的原理。首先,健康检查通过SLB向后端发送UDP报文探测来获取状态信息。SLB会周期性地给后端ECS发送UDP报文,如果UDP端口的业务处于正常情况,则没有任何回应。而当服务出现问题,比如指定的UDP服务端口处于不可达的情况或者无服务的状态的时候,会回复ICMP的不可达报文。这里也会存在一个问题就是如果后端服务器已经变成了网络中的孤岛,比如出现了整个服务器的掉电、关机情况这样完全不能工作的状态,这时候的ICMP不可达报文是永远不可能收到的,因为后端的服务器无法收到SLB发来的UDP探测报文,那么在这种情况下,可能会出现误认为后端健康的情况,但是实际上这个服务可能已经宕掉了。为了应对这种情况,健康检查还提供用户自定义UDP应答报文来实现精确的UDP健康检查,也就是由用户自定义指定一个字符串,当后端的云服务器收到UDP健康检查的探测的时候,也回应指定的字符串,之后SLB对于这个字符串进行对比和校验,如果匹配成功则认为服务一定是健康的,这样就可以实现非常精确的健康检查。
而UDP的健康检查失败也有很多原因,比如在协议栈里面有可能会有ICMP限速保护。当频率达到一定速率的时候,ICMP会被协议栈限制,后端无法回应ICMP不可达报文,进而导致SLB收不到ICMP的报文,出现健康检查的失败情况。所以这部分是需要注意的,如果可能尽量将速率限制放大一些。
其他问题
健康检查时好时坏的可能原因如下:
HTTP类型健康检查目标URI响应慢。比如本身是动态页面,会涉及到大量的计算才能够渲染完成并返回到前端,这样肯定就会导致健康检查响应比较慢。如果服务器负载过高同样也会出现这样的问题。
未全部放开对SLB健康检查源地址的限制导致分布式健康检查失败。因为阿里云的服务器都是分布式的部署,健康检查也会是分布式的探测,LVS等机器在后端有不同的源去针对某一个云服务器进行探测的,所以如果没有将这些源地址都放开,实际上也会影响健康检查的效率,因为对于这么多机器而言,只要有一台机器检测到是正常的那么就是正常的。
还可能出现直接访问正常,但是健康检查失败的情况。造成这样情况的可能原因如下:
防火墙限制。
目的端口不一致。
检查方法不同,可能使用浏览器看页面是没问题的,但是健康检查却不行,这就是因为刚才所提到的HEAD方法没有开启。或者七层的健康检查配置了URL按照域名转发,但是在浏览器上直接访问则是使用域名去做的,而健康检查是使用IP地址做的,这样也可能出现转发和预期结果的不同。
检查频率不同,ICMP限速。
五、为什么负载不均衡
调度算法与会话保持
首先介绍一下负载均衡的调度算法。阿里云的负载均衡支持三种算法,第一种算法是单纯的轮询(RR),也就是将业务的请求依次地分发到后端的服务器。第二种算法是加权轮询(WRR),也就是在处理调度的时候会根据针对于每一台后端服务器设置权重来进行转发。这里之所以设置权重是因为后端服务器的处理能力可能是不同的,如果使用相同的权重进行轮询可能就会把后端处理能力比较弱的服务器挤爆,所以需要针对于服务器的处理能力设置一些权重。第三种算法是针对于加权最小连接数的轮询(WLC),也就是除了根据每台后端服务器设定的权重值来进行轮询,同时还考虑后端服务器的实际负载,也就是连接数。当权重值相同时,当前连接数越小的后端服务器被轮询到的次数也越高,这样就能够保证负载尽量地均衡。如果不考虑这一点就会造成某些服务器连接数已经很高了但是流量依然还往上面分发,而另外一些服务器却一直处于空闲状态。
会话保持指的是来自同一用户请求始终保持分发到同一台后端的云服务器上。对于同一用户而言,使用的是四层的负载均衡和使用七层的负载均衡在理解上是不一样的。如果是四层负载均衡,则会使用源IP地址标识同一用户,所以如果在可能会有很多办公电脑的大型企业中,这些电脑在企业内部是通过局域网的IP进行通信的,在访问公网的时候都是通过NAT网关处理的,所以在走到Internet的时候,源地址通常会是一个或者很有限的几个。在这种情况下,如果是四层的负载均衡就会把里面所有的请求都视为来自同一个用户的,这种情况下如果开启了会话保持,就会发生问题。而七层的负载均衡是根据用户浏览器中的Cookie来进行唯一识别的,对于刚才的案例在大型企业里面因为内网访问公网的源地址都是一样的,导致没有办法识别到底是不是同一个用户,此时建议使用七层的负载均衡方案解决,因为Cookie是每个浏览器都唯一的。会话的保持时间是可以在控制台上配置的,四层的负载均衡方案最大可达1小时,而七层的方案最大可达24小时。
为何不均衡
最后分享一下不均衡的常见情况。有时候会需要新加一个服务器进来,这时候往往到新加进来的服务器上的连接会很少,这是因为可能会存在以下原因:
存在会话保持的情况下,会话保持会让请求停留在原有的服务器上,这样到新加进来的服务器上的连接自然会少一些。
权重设置不一致,如果在权重的设置上存在区别,而新加进来的服务器的权重如果很低,连接也过不去。
应用属于长连接类型,因为需要在TCP上复用,如果客户端不主动断开连接,后续所有的请求都会继续复用当前服务器上的连接,只有新建连接才有可能到新的服务器上。
而有时候在业务量或者新建连接较少时,也会出现负载不均衡的问题。这是因为每个Core都是独立的调度单元,因此可能存在将某个Client的多条业务经过不同core的调度后全部转发到一台ECS上的情况,同时由于业务量较少,因此出现了不均衡。建议使用轮询算法解决,在RR轮询算法中加入了扰乱因子,可以更加有效的打散SLB到后端的转发路径。
原文链接
D. 阿里云slb+nginx配置curl无法获取url问题小记
最近在做服务器迁移, 之前是直接使用阿里云的slb. 随着业务的发展以及稳定性要求, 决定对服务器进行升级, 同时对业务进行拆分, 经过多种考虑最后使用slb+nginx路由方案.
前端使用slb的tcp监听, 开启会话保持. ecs上配置nginx进行二次转发.
浏览器访问一切正常, 也没有用户报任何使用问题.
就这样无风无雨的过了一天, 第二天业务人员报微信支付数据异常, 转账成功, 转账标识显示失败.
开发人员开始进行排查, 发现服务器可以正常接收微信回调, 不过服务器间调用出现异常.
后台日志显示: java.net.ConnectException: Connection timed out
我开始查看nginx日志, 发现没有找到请求日志, 怀疑是nginx问题, 使用curl请求ecs, 返回值正常, 使用curl请求外网域名, curl无反馈, 看来问题出现在阿里云的slb上面.
去网上搜了搜, 还真有人遇到同样的问题, 只是标题是不是很一致.
解决方案是将slb的tcp监听改为http监听.
以下为阿里云给出的理由:
https://help.aliyun.com/document_detail/27680.html?spm=5176.doc27671.6.240.6lfhRY
注意: 当负载均衡从4层更换到7层之后, 虽然开启了获取真实ip, 程序获取真实ip还需要做一些特别的设置, 阿里云官方文档有详细描述: 负载均衡 7 层 HTTP 模式获取来访客户端真实 IP 的方法(IIS/Apache/Nginx/Tomcat)
附参考网址: 阿里云SLB负载均衡https协议的一点小问题
E. slb配置里的公网slb和内网slb有什么区别
内网 目前阿里云的服务器内网间是千兆共享的带宽,没有特殊限制。由于是共享网络,因此无法保证带宽速度是不变的。 如果您需要两台同地域的 ECS 实例传输数据,一般建议使用内网连接。同时,RDS、SLB、以及 OSS 相关的内网速度也都是千兆共享的环境。这些产品间也都可以使用内网相互连接使用。 目前只要是相同地域下,SLB 、RDS 、OSS 同 ECS 之间 都是可以直接内网互通连接使用的。 对于内网中的 ECS 实例: 只有同一账号、同一地域的实例,默认才会内网互通。 同一账号、同一区域、不同可用区之间内网也互通,即使内网IP地址不是同一网段,也可以正常内网连接。 如果是不同账号间、相同地域下,可以通过安全组实现内网互通,详情请参见 安全组应用案例。 实例的内网 IP 地址不能进行修改、更换。 实例的内网、外网不支持VIP(虚拟IP)配置。 内网 DNS 地址 经常遇到客户修改了服务器DNS配置,再想改回默认却忘记了地址。下面是阿里云线上个地域内网DNS地址,供参数设置使用: 华北 1: 10.202.72.116 10.202.72.118 华东 1: 10.143.22.116 10.143.22.118 华东 2: 100.100.2.136 100.100.2.138 香港: 10.143.22.116 10.143.22.118 美西: 10.143.22.116 10.143.22.118 华北 2: 10.202.72.116 10.202.72.118 华南 1: 100.100.2.138 100.100.2.136 亚太 100.100.2.136 100.100.2.138
F. clickhouse SLB 服务搭建
目前我们公司后台使用clickhouse,来做数据的离线分析;配置为四台集群(shard)
通过springboot+clickhouse-jdbc完成服务与clickhouse jdbc的连接;使用的是clickhouse官方,BalancedClickhouseDataSource(urls,properties),做到四台服务之间的负载均衡;网上很多资料都表示
这个包虽然可以做到一定程度的负载均衡,但是无法做到故障转移;按照大家的推荐,我本地是nginx搭建clickhouse-jdbc 负载均衡的服务
安装nginx ,参考地址: http://nginx.org/en/linux_packages.html
虽然BalancedClickhouseDataSource在一定程度上能做到负载均衡;如果不能做到故障转移,会很大程度上失去负载均衡的好处;本文通过实践,完成了clickhouse jdbc slb 的服务器搭建,为更好的使用clickhouse提供了帮助