Keepalived 实现 IPVS 的高可用性

1、IPVS 相关配置

1.1、虚拟服务器配置结构

每一个虚拟服务器即一个IPVS集群

可以通过下面语法实现

virtual_server IP port {
    ...
    real_server {
        ...
    }
    real_server {
        ...
    }
    …
}

1.2、Virtual Server (虚拟服务器)的定义格式

virtual_server IP port        # 定义虚拟主机IP地址及其端口
virtual_server fwmark int     # ipvs的防火墙打标,实现基于防火墙的负载均衡集群
virtual_server group string   # 使用虚拟服务器组

1.3、虚拟服务器组

将多个虚拟服务器定义成一个组,统一对外服务,如:http和https定义成一个虚拟服务器组

#参考文档:/usr/share/doc/keepalived/keepalived.conf.virtual_server_group
virtual_server_group <STRING> {
    # Virtual IP Address and Port
    <IPADDR> <PORT>
    <IPADDR> <PORT>
    ...
    # <IPADDR RANGE> has the form
    # XXX.YYY.ZZZ.WWW-VVV eg 192.168.200.1-10
    # range includes both .1 and .10 address
    <IPADDR RANGE> <PORT># VIP range VPORT
    <IPADDR RANGE> <PORT>
    ...
    # Firewall Mark (fwmark)
    fwmark <INTEGER>
    fwmark <INTEGER>
    ...
}

1.4、虚拟服务器配置

virtual_server IP port {    #VIP和PORT
    delay_loop <INT>                   #检查后端服务器的时间间隔
    lb_algo rr|wrr|lc|wlc|lblc|sh|dh   #定义调度方法
    lb_kind NAT|DR|TUN                 #集群的类型,注意要大写
    persistence_timeout <INT>          #持久连接时长
    protocol TCP|UDP|SCTP              #指定服务协议,一般为TCP
    sorry_server <IPADDR> <PORT>       #所有RS故障时,备用服务器地址
    real_server <IPADDR> <PORT> {      #RS的IP和PORT
        weight <INT>                   #RS权重
        notify_up <STRING>|<QUOTED-STRING>      #RS上线通知脚本
        notify_down <STRING>|<QUOTED-STRING>    #RS下线通知脚本
        HTTP_GET|SSL_GET|TCP_CHECK|SMTP_CHECK|MISC_CHECK { ... } #定义当前主机健康状态检测方法
    }
}
#注意:括号必须分行写,两个括号写在同一行,如: }} 会出错

1.5、应用层监测

应用层检测:HTTP_GET|SSL_GET

HTTP_GET|SSL_GET {
    url {
        path <URL_PATH>       #定义要监控的URL
        status_code <INT>     #判断上述检测机制为健康状态的响应码,一般为 200
    }
    connect_timeout <INTEGER> #客户端请求的超时时长, 相当于haproxy的timeout server
    no_get_retry <INT>        #重试次数
    delay_before_retry <INT>  #重试之前的延迟时长
    connect_ip <IP ADDRESS>   #向当前RS哪个IP地址发起健康状态检测请求
    connect_port <PORT>       #向当前RS的哪个PORT发起健康状态检测请求
    bindto <IP ADDRESS>       #向当前RS发出健康状态检测请求时使用的源地址
    bind_port <PORT>          #向当前RS发出健康状态检测请求时使用的源端口
}
# 范例
virtual_server 192.168.1.65 80 {
    delay_loop 3
    lb_algo rr
    lb_kind DR
    protocol TCP
    sorry_server 127.0.0.1 80
    real_server 192.168.1.51 80 {
        weight 1
        HTTP_GET {
            url {
                path /monitor.html
                status_code 200
             }
            connect_timeout 1
            nb_get_retry 3
            delay_before_retry 1
        }
    }
    real_server 192.168.1.51 80 {
    weight 1
        HTTP_GET {
            url {
                path /
                status_code 200
            }
            connect_timeout 1
            nb_get_retry 3
            delay_before_retry 1
        }
    }
}

1.6、TCP监测

传输层检测:TCP_CHECK

TCP_CHECK {
     connect_ip <IP ADDRESS>   #向当前RS的哪个IP地址发起健康状态检测请求
     connect_port <PORT>       #向当前RS的哪个PORT发起健康状态检测请求
     bindto <IP ADDRESS>       #发出健康状态检测请求时使用的源地址
     bind_port <PORT>          #发出健康状态检测请求时使用的源端口
     connect_timeout <INTEGER> #客户端请求的超时时长, 等于haproxy的timeout server
}
# 范例
virtual_server 192.168.1.65 80 {
    delay_loop 6
    lb_algo wrr
    lb_kind DR
    #persistence_timeout 120   #会话保持时间
    protocol TCP
    sorry_server 127.0.0.1 80
    real_server 192.168.1.51 80 {
        weight 1
        TCP_CHECK {
            connect_timeout 5
            nb_get_retry 3
            delay_before_retry 3
            connect_port 80
        }
    }
    real_server 192.168.1.51 80 {
        weight 1
        TCP_CHECK {
            connect_timeout 5
            nb_get_retry 3
            delay_before_retry 3
            connect_port 80
        }
    }
}

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享