您的位置:

ipvsadm详解

一、ipvsadm概述

ipvsadm是一个Linux内核中的IP负载均衡工具,它对应的用户控制程序是ipvsadm。

使用ipvsadm可以配置4层负载均衡,并支持多种负载均衡算法,还可以基于策略路由、NAT等技术对请求进行转发。ipvsadm支持TCP和UDP协议,并可扩展到7层负载均衡。

ipvsadm配置文件路径:/etc/sysconfig/ipvsadm

二、ipvsadm命令

1、ipvsadm -L

该命令用于列出所有的虚拟服务和服务器。可以通过“-n”选项来只显示IP地址而不解析为域名,通过“-t”选项来只显示TCP虚拟服务和服务器,通过“-u”选项来只显示UDP虚拟服务和服务器。

ipvsadm -L [-n] [-t] [-u]

2、ipvsadm -A

该命令用于添加虚拟服务或者服务器。需要指定虚拟服务的协议(TCP或UDP)、IP地址和端口,以及在哪些真实服务器中进行转发。

在每台真实服务器上需要先开启IP_forwarding功能。

ipvsadm -A -t|u vip_address:port -s scheduling -p [real_server:porti] -g [real_server_group_name]

3、ipvsadm -R

该命令用于修改虚拟服务或真实服务器的参数配置。

ipvsadm -R [-t|u] vip_address:port -s scheduling -p [real_server:port] -g [real_server_group_name] 

4、ipvsadm -D

该命令用于删除虚拟服务或者真实服务器。

ipvsadm -D [-t|u] vip_address:port [-r real_server:port] [-g real_server_group_name]

5、ipvsadm -C

该命令用于清空所有虚拟服务及服务器。

ipvsadm -C

三、ipvsadm负载均衡算法

1、轮询(RR)

算法描述:轮询算法采用轮询的方式依次将请求分发到不同的服务器上,它是一种简单易理解的算法,每个服务器均匀分配请求。

示例代码:

#添加虚拟服务
ipvsadm -A -t 192.168.1.100:80 -s rr

#添加真实服务器
ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.10:80 -m
ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.11:80 -m
ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.12:80 -m

2、最小连接数(LC)

算法描述:最小连接数算法将请求发送给当前活跃连接数最少的服务器,它的优点是可以进行动态平衡,但在短时间内出现的请求波动时,它可能会将请求分配给当前使用状况较好的服务器,而非负载较低的服务器。

示例代码:

#添加虚拟服务
ipvsadm -A -t 192.168.1.100:80 -s lc

#添加真实服务器
ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.10:80 -m
ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.11:80 -m
ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.12:80 -m

3、源地址哈希(SH)

算法描述:源地址哈希算法根据请求源IP地址,从预先分配的服务器群中选择一台服务器来处理请求。

示例代码:

#添加虚拟服务
ipvsadm -A -t 192.168.1.100:80 -s sh

#添加真实服务器
ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.10:80 -m
ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.11:80 -m
ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.12:80 -m

四、ipvsadm高可用设置

1、LVS + Keepalived

通过LVS + Keepalived的方式可以实现高可用的负载均衡,自动探测故障服务器,并将请求转发到健康的服务器。

示例代码:

#配置实时同步组网
ipvsadm -A -t 192.168.0.100:80 -s rr
ipvsadm -a -t 192.168.0.100:80 -r 192.168.0.101:80 -g w1
ipvsadm -a -t 192.168.0.100:80 -r 192.168.0.102:80 -g w1
ipvsadm -G w1 -p 120 -u 3600 -t 300

#配置keepalived
vrrp_script chk_server {
        script "/usr/local/keepalived/sh/check_server.sh"
        interval 2
}

vrrp_instance VI_1 {
    state MASTER
    interface eth1
    virtual_router_id 51
    priority 101
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.0.100/24 brd 192.168.0.255 dev eth1
    }
    track_script {
        chk_server
    }
}

2、LVS + HAProxy

通过LVS + HAProxy的方式可以实现双重负载均衡,LVS作为前端负责物理层面上的负载均衡,HAProxy作为后端,负责对具体的资源请求进行分发。

示例代码:

#配置LVS
ipvsadm -A -t 192.168.0.100:80 -s rr
ipvsadm -a -t 192.168.0.100:80 -r 192.168.0.101:80 -m
ipvsadm -a -t 192.168.0.100:80 -r 192.168.0.102:80 -m

#配置HAProxy
listen web 192.168.0.100:80
    bind *:80
    mode http
    stats enable
    stats uri /haproxy?stats
    option httplog
    option forwardfor
    balance roundrobin
    server one 192.168.0.101:80 check inter 1000 rise 1 fall 2
    server two 192.168.0.102:80 check inter 1000 rise 1 fall 2

五、ipvsadm其他参数设置

1、nat模式

在nat模式下,请求通过虚拟IP地址发送到LVS机器上,然后再被返回到客户端。

#添加虚拟服务
ipvsadm -A -t 192.168.1.100:80 -s rr -m

#添加真实服务器
ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.10:80 -m
ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.11:80 -m
ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.12:80 -m

2、tunnel模式

在tunnel模式下,LVS通过隧道将请求转发到目标服务器,目标服务器返回数据也通过隧道经过LVS返回。

#添加虚拟服务
ipvsadm -A -t 192.168.1.100:80 -s rr -m --tunnel-id 100

#添加真实服务器
ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.10:80 -m --tunnel-id 100
ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.11:80 -m --tunnel-id 100
ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.12:80 -m --tunnel-id 100

3、DR模式

在DR模式下,LVS完成转发后,请求和响应数据不经过LVS返回,而是直接返回到客户端和服务器之间。

#添加虚拟服务
ipvsadm -A -t 192.168.1.100:80 -s rr --dr

#添加真实服务器
ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.10:80 -g w1 -w 1
ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.11:80 -g w2 -w 1
ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.12:80 -g w3 -w 1
ipvsadm -G w1 -N 1 -l
ipvsadm -G w2 -N 1 -l
ipvsadm -G w3 -N 1 -l

六、小结

ipvsadm是一款功能强大、配置灵活的负载均衡工具,支持多种负载均衡算法和配置模式,通过对负载均衡的控制,可以有效地提高服务的可用性和性能。