体系结构用于保持活动的无失败请求

我有一个3 CentOs服务器的本地集群,我已经在每个服务器上安装Keepalived,然后我运行一些基准testing像这样的ab:
ab -c 1000 -n 100000 -r host

然后,在基准testing中间,closures主服务器,Keepalived将浮动IP的所有者更改为备份服务器之一,但是这个过程需要一点时间,因此我有一些失败的请求。 我的问题是如何最大限度地减less这种宕机? 而且有没有devise一些没有停机的集群,同时取下一个节点呢?

这是我的keepalivedconfiguration:

 ! Configuration File for keepalived global_defs { notification_email { user@localhost } notification_email_from root@localhost smtp_server 127.0.0.1 smtp_connect_timeout 30 router_id LVS_DEVEL } vrrp_script health_check { script "curl host" interval 2 # check every 2 seconds fall 2 # require 2 failures for KO rise 2 # require 2 successes for OK } vrrp_instance VI_1 { state BACKUP interface enp0s3 virtual_router_id 51 priority 100 advert_int 1 authentication { auth_type PASS auth_pass password } virtual_ipaddress { <host ip> } track_script { health_check } } 

这是我的基准的结果:

 Concurrency Level: 1000 Time taken for tests: 25.502 seconds Complete requests: 100000 Failed requests: 7618 (Connect: 0, Receive: 2539, Length: 2539, Exceptions: 2540) Write errors: 0 Total transferred: 13644540 bytes HTML transferred: 2241603 bytes Requests per second: 3921.28 [#/sec] (mean) Time per request: 255.019 [ms] (mean) Time per request: 0.255 [ms] (mean, across all concurrent requests) Transfer rate: 522.50 [Kbytes/sec] received 

这表明几乎需要2秒来更改虚拟IP的所有者和处理请求。 我可以做些什么来最大限度地减less这个时间,如果可能的话,最好是没有停机时间。

基本上,即使在硬件负载平衡器中也很难避免停机时间,所以需要时间来检测主机是否closures并迁移VIP地址。

您可以通过调整keepalived心跳频率(advert_int秒)来最小化停机时间

当BACKUP服务器没有从MASTER接收到“advert_int”选项定义的周期3x的VRRP广告时,触发从MASTER到BACKUP的故障切换。

尝试设置较低的advert_int(<1),注意不要由于networking超时而触发故障转移。

您可以在应用层中设置会话持久性/复制,以便用户不会受到故障转移的影响。