lvs
核心内容
- 负载均衡选项项目
- 负载均衡 lvs工作模式
- 部署后通过wireshark抓包
负载均衡项目 选择
star法则:表达故障/项目
- s situation 场景/在什么情况下?
- t task/target 目标/你要完成什么?
- a action 动作/你是怎么做的?
- r result 结果/最终结果如何?
使用:例子1 今天中午吃点啥?
- s 又到了中午饭时间,不知道和谁 不知道吃什么?
- t 吃饱
- a 抓阄 选择1个
- r 吃这个纸 吃饱了
使用:实际案例 故障案例:磁盘空间不足故障
- s 在外面创建文件/添加用户失败了,提示no space left on device 磁盘空间不足
- t 解决恢复磁盘空间
- a
- df -h; du -sh 一层一层排查
- df -i; 找出系统中比较大的目录(大于1MB)或者find / -type f | xargs dirname | uniq -c | sort -rn | head
- lsof | grep delete # catalina.out 文件没了(硬连接数0 入口没了),进程调用数
- 排查到某个文件或目录 确认后再删除
- r 解决故障
lsof | grep oldboy.txt
\rm -f /root/oldboy.txt
lsof | grep oldboy.txt
ls /root/oldboy.txt # 没有那个文件或目录,保存
lsof | grep delete # 硬连接数为0(没有入口) 进程调用数不为零的文件
Inode block | inode | block |
---|---|---|
文件 | 文件属性信息 block位置 | 文件的内容(数据) |
目录 | 目录属性信息 block位置 | 文件名 |
负载均衡选择项目 | |
---|---|
s | 公司演变用户量越来越多,选择负债均衡搭建多台web服务器,对比与选择负载均衡 |
T | 选择1款 适合负载均衡 |
A | 1.找出市面上常见负债均衡:硬件F5 A10开源软件:lvs,nginx,haproxy 2.对比 3.根据公司实际需求选择 |
R | 根据当前访问量,选择nginx负债均衡,nginx proxy缓存 |
场景负载均衡对比 | 优势 | 缺点 |
---|---|---|
硬件:F5 | 性能好 技术支持 | 价格昂贵 购买2台1对 |
lvs | 工作四层效率极其高对数据做的转发 负债均衡 | 部署 维护(运维成本较高) |
nginx | 使用简单 支持4层和7层 反向代理 缓存 | 处理数据代理模式 替用户去查找 找到后发送给用户 并发较大(1w以上)卡 |
haproxy | 相对复杂 支持4层和7层反向代理 | 处理数据代理模式 替用户去查找 找到后发送给用户 并发较大(1w以上 比nginx多)卡 |
- 4层负载均衡 传输层 负载均衡最多认识到端口
- 7层负载均衡 应用层 url uri 转发 http https
lvs预备姿势-arp
-
DNS 域名解析 域名-->ip
-
arp协议 地址解析协议 IP--->mac地址 3层协议工作在2层
- ip(网络层 3层)
- mac(2层)
-
arp解析过程
- 1.发出广播请求ip对应的mac地址
- 2.发出响应单播告诉对方我的mac地址
- 0.7缓存1份mac地址(arp协议)
-
arp病毒
lvs
- Sersync /jumpserver
- Linux virtual server linux虚拟服务器 负载均衡
- lvs放到linux内核中 内核模块ip_vs
- 通过ipvsadm(管理命令)或keepalived(keepalived for lvs)控制管理 ip_vs内核模块
lvs工作模式
- dr direct routing 直接路由模式
- nat
- tun 隧道
- full nat 完全nat模式
预备姿势
CIP | client ip | 客户端ip地址 |
VIP | 虚拟ip | |
DIP | director | 负载均衡ip |
RS服务器 | real server | 真实服务器 处理用户请求 |
RIP | real server ip |
lvs-nat模式
lvs-dr模式
-
特点
- lvs dr模式中lvs只负责转发 并修改用户请求的目标mac地址 dmact
- lvs dr模式中响应和处理是后端rs服务器处理处理直接响应给用户
- lvs vip公网ip rs服务器也要有公网ip
- lvs dr支持更高并发(几万 几十万) nginx(1w)
- lvs和后端rs服务器必须要在同一个局域网
- 用户请求过来的端口无法修改的,用户的请求是什么端口 后端rs服务器就要开端口
-
lvs nat模式特点
- lvs与rs服务器可以不在同一局域网
- nat模式 流量出入都要经过lvs 效率 性能不高
- 端口也可以不同
lvs-dr 模式
环境准备
主机 | 服务 | ip |
---|---|---|
lb01 | lvs | 10.0.0.5 |
vip | vip | 10.0.0.3 |
lb02 | 10.0.0.6 | |
web01 | nginx | 10.0.0.7 |
web02 | nginx | 10.0.0.8 |
# web01 web02配置
>>> cat /etc/nginx/nginx.conf
work_processes 1;
events {
worker_connections 1024;
}
http{
server {
server_name www.oldboy.com;
listen 80;
root /usr/share/nginx/html;
}
}
>>> echo `hostname` > /usr/share/nginx/html/oldboy.html
>>> pkill nginx
>>> systemctl restart nginx
>>> curl 10.0.0.7/oldboy.html # web01
>>> curl 10.0.0.8/oldboy.html # web02
# lb01 lb02关闭已经安装的nginx keepalived
>>> systemctl stop keepalived nginx
>>> systemctl disable keepalived nginx
# lb01 lb02
yum install -y ipvsadm
配置
# lb01手动添加vip 后面是由keepalived生产
ip addr add 10.0.0.3/24 dev eth0 label eth0:0
ipvsadm -C # clear清除 # iptables -F flush
ipvsadm --set 30 5 60 # 设置tcp超时时间
# 添加命令
ipvsadm -A -t 10.0.0.3:80 -s wrr -p 20 # -A相当于nginx中的upsteam创建连接池 -t表示规则vip:端口 -s轮询算法 wrr加权轮询 -p会话保持时间默认300秒
ipvsadm -a -t 10.0.0.3:80 -r 10.0.0.7:80 -h -w 1 # -a添加rsa服务器 -r 指定rs服务器的ip和端口 相当于nginx的upsream中的server
ipvsadm -a -t 10.0.0.3:80 -r 10.0.0.8:80 -g -w 1 # -g --gatewaying -t tcp -w 权重
# 查看
ipvsadm -ln
ipvsadm -ln --stats # 具体流量信息
## web01 web02 webxxx
### lo网卡绑定vip
cat >/etc/sysconfig/network-scripts/ifcfg-lo:1<<EOF
DEVICE=lo:1
IPADDR=10.0.0.3
NETMASK=255.255.255.255
ONBOOT=yes
NAME=loopback
EOF
>>> systemctl restart netwoek
# 抑制arp解析
cat >>/etc/sysctl.conf<<EOF
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
EOF
>>> sysctl -p
# 注意:
不要在lvs本地进行测试 curl会失败
lvs 负载均衡高并发 用户与访问量巨大的时候 接近于1:1 平时测试的时候 刷新很久 一直是1台机器
一般刷新1次 等到 1-2分钟 在刷新
lvs规则 备份与恢复
- 后面我们通过keepalived管理lvs
- ipvsadm-save -n >/root/ipvsadm.conf
- ipvsadm-restore < /root/ipvsadm.conf
lvs与keepalived配合
- Keepalived for lvs
- 配置文件分为几个部分
# GLOBAL CONFIGURATION 全局配置部分
route_iud 每个keepalived软件 独一无二 id
# VRRPD CONFIGURATION 配置vip vrrp实例部分
# LVS CONFIGURATION 配置管理lvs
# 先清除重启
systemctl restart network
# 主配置
# GLOBAL CONFIGURATION 全局定义部分
global_defs {
router_id lb01 # keepadlived身份 id 每个keepalived 不同
}
# VRRPD CONFIGURATION vrrp实例部分 虚拟路由冗余协议
## vrrp
vrrp_instance oldboy { # 实例名称 在同1对主备之间 要一致
state MASTER # MASTER BACKUP
interface eth0 # 指定网卡 公网网卡
virtual_router_id 62 # 虚拟路由id 同1对 主备之间要一致
priority 100 # 优先级 主>备 相差50
advert_int 1 # interval 间隔 心跳间隔 秒 每个1秒检查
autherntication { # 认证 方式
auth_type PASS # 简单认证
auth_pass 1234 # 在同1对主备之间一致
}
virtual_ipaddress { # vip
10.0.0.3/24 dev eth0 label eth0:0
# ip addr add 10.0.0.3/24 dev eth0 label eth0:0
}
}
# 从配置
# GLOBAL CONFIGURATION 全局定义部分
global_defs {
router_id lb02 # keepadlived身份 id 每个keepalived 不同
}
# VRRPD CONFIGURATION vrrp实例部分 虚拟路由冗余协议
## vrrp
vrrp_instance oldboy { # 实例名称 在同1对主备之间 要一致
state BACKUP # MASTER BACKUP
interface eth0 # 指定网卡 公网网卡
virtual_router_id 62 # 虚拟路由id 同1对 主备之间要一致
priority 50 # 优先级 主>备 相差50
advert_int 1 # interval 间隔 心跳间隔 秒 每个1秒检查
autherntication { # 认证 方式
auth_type PASS # 简单认证
auth_pass 1234 # 在同1对主备之间一致
}
virtual_ipaddress { # vip
10.0.0.3/24 dev eth0 label eth0:0
# ip addr add 10.0.0.3/24 dev eth0 label eth0:0
}
}
# LVS CONFIGURATION 管理lvs
## invsadm 通过命令
## keepalived通过配置文件控制lvs
# ipvsadm -A -t 10.0.0.3:80 -s wrr -p 20
virtual_server 10.0.0.3:80 { # 创建组 池塘
delay_loop 6
lb_algo wrr # 轮询算法 lv least conn 最小连接数
lb_kind DR # lvs DR模式
nat_mask 255.255.255.0 # vip对应的子网掩码
persistence_timeout 50 # 会话保持时间 -p
protocol TCP # 协议 -t
# ipvsadm -a -t 10.0.0.3:80 -r 10.0.0.7:80 -g -w 1
real_server 10.0.0.7:80 { # rs服务器的配置
weight 1 # 权重
TCP_CHECK { # -t TCP_CHECK 检查 传输层 tcp/udp端口
connect_timeout 8
nb_get_retry 3 # number of get retry 重试的次数
delay_before_retry 3 # 每次检查之前 等待3秒
connect_port 80 # 检查端口
}
}
real_server 10.0.0.8:80 {
weight 1
TCP_CHECK {
connect_timeout 8
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}