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|nq
搭建配置
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 #保存
后端配置(配置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 -p
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
}
}
}
ipvsadm-save -n > /tmp/ipvs-bak #备份之前的配置,如果有需要可以ipvsadm-restore </tmp/ipvs-bak
ipvsadm -C #清除已有规则
service keepalived start
ipvsadm -ln #会发现已经生成新的规则
后端配置(配置vip、抑制arp)同上
应用场景
高并发的web 服务器负载均衡
mysql 集群读取的负载均衡