keepalived

keepalived

基于 LVS / VRRP 技术和协议等的负载均衡 / 健康监测调度器。可以独立使用也可以配合 haproxy / nginx 等共同使用。

keepalived (VIP) + nginx 负载均衡模式

参考 https://www.linuxprobe.com/keepalived-nginx.html

Config

前端(frontend)服务器两台:

虚拟IP (VIP)(两台共用): 192.168.1.4
物理网卡IP分别为:192.168.1.2, 192.168.1.3

两台机器共同组成前端负责整个系统接入层 (endpoint),均安装 nginx + keepalived。后端是实际的 Web / App 服务器(如Tomcat, node.js 服务等)集群。nginx 承担反向代理 + 负载均衡。keepalived 只负责保证两台前端机器任何一台挂掉都不影响整个系统可用性。最终用户使用虚拟IP 192.168.1.4 作为 endpoint 访问系统。

修改两台机器上 keepalived 配置 /etc/keepalived/keepalived.conf,配置基本相同:

# Configuration File for keepalived

global_defs {
   router_id LVS_DEVEL
   vrrp_skip_check_adv_addr
   # vrrp_strict # 注释掉这一行。strict 模式的 vrrp 只允许虚拟IP纯用于"转发"
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

vrrp_instance VI_1 {
    state MASTER # 初始状态。两台机器可以都设为 MASTER。或者也可以把其中一台配置为 BACKUP。
    interface eth1 # 物理网卡 192.168.1.2(3) 的 interface 名
    virtual_router_id 51 # 两台机器上需要设为一样。VRRP 协议里的"VRID", 0-255
    priority 100
    advert_int 1 # in seconds
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.1.4
    }
}

然后在两台机器上均启动 keepalived 即可

/etc/init.d/keepalived start

Test

两台前端服务器的 keepalived 启动后,可以从其它机器 ping 通 192.168.1.4 虚拟地址。

使用 arping 192.168.1.4,会并且只会获得其中一台前端服务器的 ARP 响应;停掉该服务器的 keepalived 服务,再次执行 arping,则会获得另一台服务器的 ARP 响应。

Tips

  • 可以配置 keepalived 监测 nginx 状态,当异常时尝试自动重启 nginx 乃至停止本机的 keepalived 服务(以使其它前端机器接管)。(使用 keepalived 的 vrrp_script 配置语法)
  • 后端机器的健康监测可以用 nginx 来做(max_fails, fail_timeout 等)。

Pros & Cons

这种负载均衡架构优点:整体架构简单,没有单点故障。

主要缺点:两台前端服务器平时只有一台实际工作,资源利用率仅 50%。

对此一种解决方法是在两台前端服务器上都配置两个虚拟 IP 192.168.1.4 和 192.168.1.5,每个虚拟 IP 的 MASTER 设在不同的服务器上。然后通过同时使用两个虚拟 IP 实现了两台前端服务器100%资源利用(并且其中一台故障时也能自动转移流量到另一台)。但这样做需要配合 DNS / CDN 将流量平均分发给两个虚拟 IP。

其它缺点:MASTER 服务器故障时系统恢复可用所需时间较长,一般要达到1-2秒。

How it works

http://www.keepalived.org/doc/software_design.html

Keepalived uses four Linux kernel components:

  1. LVS Framework: Uses the getsockopt and setsockopt calls to get and set options on sockets.
  2. Netfilter Framework: IPVS code that supports NAT and Masquerading.
  3. Netlink Interface: Sets and removes VRRP virtual IPs on network interfaces.
  4. Multicast: VRRP advertisements are sent to the reserved VRRP MULTICAST group (224.0.0.18).

上述的 keepalived + nginx 这种配置模式应该只用到其中的 3,4.


Last update: 2018-03-21 02:08:30 UTC