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