LVS linux virtual server
lvs 工作在传输层,针对监听的端口把客户端请求转发给后端的服务器
实现负载均衡的是ipvs 模块,现已集成在linux 内核中,linux 中实际模块名字为 ip_vs
ipvs 的管理
通过 lvsadm 对ipvs 管理
keepalived 也可以通过配置文件配置进行管理ipvs
redhat 管理工具也可以
实现负载均衡的四种模式
DR (不能转换端口,用户请求是啥端口后端就是啥端口)
请求过程:负载更改用户的VIP的mac 地址为后端服务器的,后端服务器在lo 网卡绑定vip ,当arp 请求过来局域网内的后端抑制其lo 上的vip 的arp 解析响应。最后请求直接从后端以VIP:CIP 形式返回给客户
特点: 1、负载与后端服务必须在同一个局域网内
2、后端服务器必须有外围IP这样才能直接给客户端回包
3、单台负载可以对接后端服务器数量:100
4、DR模式效率很高,配置相对麻烦点。因此访问量特别高的情况可以考虑haproxy/nginx替代,一般在并发1万以内都可以使用ha/ngx 或者lvs的nat 模式。
NAT
客户端请求包过来后(cip:vip),lvs 把目标IP变换成RIP ,这样cip:rip 数据包到了后端,后端返回数据给lvs,lvs再把源地址IP变换成vip ,这样数据包vip:cip 返回给了客户端
条件:由于要进行NAT转发,所以负载服务器必须开启内核转发功能 net.ipv4.ip_forward = 1,还有iptables 里面的forward 功能开启
单台负载可以对接后端服务器数量:10~20
TUN 加密隧道模式,不常用
FULLNAT 专门为淘宝架构定制开发的
调度算法
轮询调度(Round-Robin Scheduling) 加权轮询调度(Weighted Round-Robin Scheduling) 最小连接调度(Least-Connection Scheduling) 加权最小连接调度(Weighted Least-Connection Scheduling) 基于局部性的最少链接(Locality-Based Least Connections Scheduling) 复 制 的 基 于 局 部 性 最 少 链 接 ( Locality-Based Least Connections ithReplication Scheduling) 目标地址散列调度(Destination Hashing Scheduling) 源地址散列调度(Source Hashing Scheduling) 最短预期延时调度(Shortest Expected Delay Scheduling) 不 排 队 调 度 ( Never Queue Scheduling )对应: wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nqView Code
搭建配置
1、ipvsadm 命令方式配置
负载均衡端配置
yum -y install ipvsadm 安装管理模块 lsmod | grep ip_vs 查看ipvs模块是否加载 ipvsadm 执行命令加载模块 ln -s /usr/src/kernels/$(uname -r) /usr/src/linux (cenos6.x 上需要执行,7.x 不执行) ifconfig eth0:0 vip/24 up 手动配置一个vip ,先不用keepalived 生成VIP ipvsadm-save 保存当前lvs 规则,方便后期用ipvsadm-restore 恢复。(不可直接先用ipvsadm -C) ipvsadm -C 清除所有规则 ipvsadm --set 30 5 60 #设置tcp tcpfin udp 连接超时的时间 ipvsadm -A -t 1.1.1.1:80 -s wrr -p 20 #-s 轮询算法 -p 会话保持,不设置默认300s。#此保持时间是指同一客户端访问后端01后过了20s后再访问负载才会轮询到02 ipvsadm -Ln ipvsadm -a -t 1.1.1.1:80 -r 1.1.1.2:80 -g -w 1 #-t tcp-service -r real-ip -g 即DR模式 -w weight 权重 ipvsadm-save -n #保存View Code
后端配置(配置vip、抑制arp)
ip addr add vip/32 dev lo lable lo:0 #在lo上配置vip注意子网掩码32位,设置成32位就是为了让此IP不能与其他IP通讯,只是为了有一个VIP地址不是为了通讯的 ifconfig lo:0 192.168.231.200/32 up #也可以用此命令替代上面命令 ip addr del ip/32 dev lo #可以删除添加错误的地址 cat >>/etc/sysctl.conf<<EOF #抑制arp net.ipv4.conf.lo.arp_ignore = 1 net.ipv4.conf.lo.arp_announce = 2 net.ipv4.conf.all.arp_ignore = 1 net.ipv4.conf.all.arp_announce = 2 EOF sysctl -pView Code
2、通过keepalived 管理配置搭建lvs,同时实现负载均衡和高可用
负载均衡端配置
yum -y install keepalived
vi keepalived.conf
global_defs { # notification_email { # } # smtp_connect_timeout 30 router_id LVS_DEVEL-1 #全网段唯一 } vrrp_instance VI_1 { state MASTER #配置LVS是主机主 interface eth0 #配置LVS的vip绑定的网卡 virtual_router_id 51 #实例组内各个实例标识 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.20.50 #VIP 地址 } } #管理配置lvs 的配置 virtual_server 192.168.20.50 80 { #监听的IP及端口 delay_loop 6 b_algo wrr lb_kind DR #使用LVS DR模式 nat_mask 255.255.255.0 persistence_timeout 0 protocol TCP real_server 192.168.20.1 80 { #后端真实服务的IP 1 weight 1 #配置加权轮询的权重 TCP_CHECK { connect_timeout 10 nb_get_retry 3 delay_before_retry 3 connect_port 80 } } real_server 192.168.20.2 80 { #后端真实服务的IP 1 weight 2 TCP_CHECK { connect_timeout 10 nb_get_retry 3 delay_before_retry 3 connect_port 80 } } }View Code
ipvsadm-save -n > /tmp/ipvs-bak #备份之前的配置,如果有需要可以ipvsadm-restore </tmp/ipvs-bak
ipvsadm -C #清除已有规则
service keepalived start
ipvsadm -ln #会发现已经生成新的规则
后端配置(配置vip、抑制arp)同上
应用场景
高并发的web 服务器负载均衡
mysql 集群读取的负载均衡