linux virtual server
章文嵩发起的开源项目。linux内核层面实现负载均衡的软件。
**主要作用:**将多个后端服务器组成一个高可用,高性能的服务器集群,通过负载均衡的算法将客户端的请求分发到后端服务器上,来实现高可用和负载均衡。
阿里的SLB
server loab balance lvs+keepalive实现的。
集群和分布式
系统的拓展方式:
垂直拓展:
向上拓展,增强,性能更高的计算机。瓶颈,计算机本身设备的限制,硬件本身的性能瓶颈。
水平拓展:
向外拓展,增加设备。并行的运行多个服务,依靠网络解决内部通讯的问题,cluster集群。
集群:
为了解决某个特定的问题将计算机组合起来形成单个系统。
集群的类型
LB:load balance 负载均衡集群,多个主机组成,每个主机承担一部分的访问请求
HA:high availiablity高可用,在设计系统时采取一定的措施确保系统当中某一组件或者部分出现了故障,整个系统依然能够正常运行。为了维护系统的可用性,可靠性,容错性。
HPC:high-preformance computing 高性能 对相应的时间,处理能力要求更高。
系统可靠性指标
MTBF:Mean time Between Failure 平均无故障时间
MTTR:Mean Time Resotration repair 平均故障修复时间
A=MTBF/(MTBF+MTTRR)
A指标要在0-1之间,A指标就是系统可用性的度量,0表示系统越不可用,1表示系统越可用。
A指标无线接近于1
90%-95%不合格
98%-99%合格
都是以小时为单位:
1年365天=8760小时
停机时间
计划内时间:计划内的时间可以忽略不计,但是现在也算在内。
计划外时间:故障时间,从故障发生到故障解决的总时间,尤其是运维,计划外时间是我们必须关注的一个指标。
hpc------当天必须解决---------没解决之前人不可离开----------解决完之后必须生成报告,备案。
日报 周报 月报 年报
运维精神:7*24小时待命(出了问题及时响应、及时处理、及时总结)
lvs适用场景
小集群不需要lvs,大集群使用lvs。
lvs集群中的术语:
VS vittual server lvs服务的逻辑名称,也是我们外部访问lvs集群使用ip地址和端口
DS Director server lvs集群中的主服务器,也是调度器(nginx的代理服务器)是集群的核心
调度器就是用来接收客户端的请求转发到后端的服务器。
RS Real server lvs集群中真实服务器,后端服务器,用来接收DS转发来的请求并且响应结果。
CIP Client IP 客户端的地址,也就是发起请求的客户端的地址
VIP Virtual IP lvs集群使用的ip地址,是对外提供集群访问的虚拟ip地址。
DIPDirector ip 调度器在集群当中的地址,用于和RS通信
RIP REAL ip 后端服务器在集群当中的ip地址
lvs的工作方式
NAT 模式由调度器响应给客户端
DR 模块 直接路由模式 真实服务器直接响应给客户端
TUN 隧道模式
常用的模式:NAT和DR
NAT模式
nat 模式是常用的lvs模式之一。
在nat模式下lvs会将来自客户端的请求报文中的目标ip地址和端口修改为lvs内部的ip地址和端口。然后把请求转发到后端服务器。
响应结果返回客户端的过程中报文也要经过lvs的处理。把目标ip和端口修改成客户端的ip和端口。
好处在于,对于客户端来说,请求目标地址始终不变,客户端配置不需要做特殊修改,只是调度器在对IP地址和端口进行转换,后端的服务器也不需要更改任何配置。
缺点:性能能损失,请求和响应都需要调度器做地址转换影响性能
nat模式只能有一个调度器,调度器故障,整个集群就不能正常工作。
地址转换
内网-----外网 转换的源ip
外网-------内网 转换的目的ip
Iws的工具
ipvsadm工具,用来配置和管理Ivs集群的工具。
-A 添加虛拟服务器 vp
-D 删除虚拟服务器地址
-s 指定负载均衡的调度算法
算法: r 默认,轮询
加权轮询: wrr
最小连接:lc
加权最小连接: wIc
-a 添加真实服务器
-d 删除真实服务器
-t 指定vip的地址和端口
-r 指定rip的地址和端口
-m 使用nat模式
-g 使用DR模式
-i 使用隧道模式
-w 设置权重
-p 设置连接保持时间
-l 列表查看
-n 数字化展示
[root@test-41 network-scripts]# vim ifcfg-ens33
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.65.41
NETMASK=255.255.255.0
#GATEWAY=192.168.65.2
#DNS1=218.2.135.1
[root@test-41 network-scripts]# vim ifcfg-ens36
DEVICE=ens36
ONBOOT=yes
IPADDR=12.0.0.1
NETMASK=255.255.255.0
#GATEWAY=192.168.65.2
#DNS1=218.2.135.1
[root@test1 conf]# curl 192.168.65.10
This is nginx1
[root@nginx2 conf]# curl 192.168.65.20
This is nginx2
[root@test-41 network-scripts]# iptables -t nat -A POSTROUTING -s 192.168.65.0/24 -o ens36 -j SNAT --to 12.0.0.1
pkts bytes target prot opt in out source destination
0 0 SNAT all -- * ens36 192.168.65.0/24 0.0.0.0/0 to:12.0.0.1
指定好vip的地址和端口
[root@test-41 opt]# ipvsadm -A -t 12.0.0.1:80 -s rr
先添加vip虚拟服务器的ip和端口,再添加真实服务器
[root@test-41 opt]# ipvsadm -a -t 12.0.0.1:80 -r 192.168.65.10:80 -m
[root@test-41 opt]# ipvsadm -a -t 12.0.0.1:80 -r 192.168.65.20:80 -m
[root@test-41 opt]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 12.0.0.1:80 rr #vip地址轮询
-> 192.168.65.10:80 Masq 1 0 0 #指向后端真实服务器
-> 192.168.65.20:80 Masq 1 0 0 #指向后端真实服务器
[root@test-41 opt]# ipvsadm-save >/etc/sysconfig/ipvsadm #配置好保存到
[root@test-41 opt]# systemctl restart ipvsadm #重启查看策略变不变
[root@test-41 opt]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.65.41:80 rr #发生变化删除
-> 192.168.65.10:80 Masq 1 0 0
-> 192.168.65.20:80 Masq 1 0 0
再重新添加策略
[root@test-41 opt]# ipvsadm -A -t 12.0.0.1:80 -s rr
[root@test-41 opt]# ipvsadm -a -t 12.0.0.1:80 -r 192.168.65.10:80 -m
[root@test-41 opt]# ipvsadm -a -t 12.0.0.1:80 -r 192.168.65.20:80 -m
[root@test-41 opt]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 12.0.0.1:80 rr
-> 192.168.65.10:80 Masq 1 0 0
-> 192.168.65.20:80 Masq 1 0 0
[root@test-41 opt]# vim /etc/sysctl.conf
net.ipv4.ip_forward=1
[root@test-41 opt]# sysctl -p
net.ipv4.ip_forward = 1
[root@test-41 opt]# curl 12.0.0.1
This is nginx2
[root@test-41 opt]# curl 12.0.0.1
This is nginx1
[root@test-41 opt]# curl 12.0.0.1
This is nginx2
[root@test1 conf]# tail -f /usr/local/nginx/logs/access.log
12.0.0.20 - - [09/Jul/2024:15:14:48 +0800] "GET / HTTP/1.1" 200 15 "-" "curl/7.29.0"
12.0.0.20 - - [09/Jul/2024:15:14:49 +0800] "GET / HTTP/1.1" 200 15 "-" "curl/7.29.0"
12.0.0.20 - - [09/Jul/2024:15:14:50 +0800] "GET / HTTP/1.1" 200 15 "-" "curl/7.29.0"
只能删除不能修改
[root@test-41 opt]# ipvsadm -D -t 12.0.0.1:80
[root@test-41 opt]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
[root@test-41 opt]# ipvsadm -A -t 12.0.0.1:80 -s wrr #加权轮询
[root@test-41 opt]# ipvsadm -a -r 192.168.65.20:80 -t 12.0.0.1:80 -m -w2
[root@test-41 opt]# ipvsadm -a -r 192.168.65.10:80 -t 12.0.0.1:80 -m -w2
[root@test-41 opt]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 12.0.0.1:80 wrr
-> 192.168.65.10:80 Masq 2 0 0
-> 192.168.65.20:80 Masq 2 0 0
删除节点服务器(真实地址在前vip地址在后
[root@test-41 opt]# ipvsadm -d -r 192.168.65.20:80 -t 12.0.0.1:80
添加节点服务器(vip地址在前真实地址在后
[root@test-41 opt]# ipvsadm -a -t 12.0.0.1:80 -r 192.168.65.20:80