1、lvs集群:
-
lvs:linux virtual server----章文嵩发起的开源项目,阿里。linux的内核层面实现负载均衡的软件。
-
主要作用:将多个后端服务器组成一个高可用,高性能的服务器集群,通过负载均衡的算法将客户端的请求分发到后端的服务器上,来实现高可用和负载均衡。
-
阿里的SLB:server load balance----lvm+keepalive实现的。
2、集群和分布式:
2.1、系统的拓展方式:
-
垂直扩展:向上扩展,增强,性能更强的计算机。瓶颈,计算机本身设备的限制,硬件本身的性能瓶颈。
-
水平扩展向外扩展,增加设备。并行的运行多个服务,依靠网络解决内部通信问题,cluster 集群。
-
集群:为了解决某个特定的问题将计算机组合起来形成的单个系统。
2.2、集群的类型,三种类型:
1、LB:load balance负载均衡,多个主机组成,每个主机只承担一部分的访问请求。
2、HA:high availiablity高可用,在设计系统时,采取一定的措施,确保系统当中某一组件或者部分出现故障,整个系统依然能够正常运行。为了维护系统的可用性,可靠性,容错性。
3、HPC:high-performance computing 高性能 对响应时间,处理能力要求更高。
2.3、系统可靠性指标:
MTBF:Mean time Between Failure
平均无故障时间
MTTR:Mean time Resotration repair
平均故障恢复时间
A=MTBF/(MTBF+MTTR)
0-1
A指标0-1之间,A指标就是系统可用性的度量,0表示系统越不可用,1表示系统越可以用。
A指标要无线接近于1.
99.99%
都是以小时为单位
1年365天=8760小时
90(1-90%)*365=36.5天99 8760**1%=87.6小时
99.9999=31秒
99.99%=======52.6分钟
停机时间:计划内时间,计划内的时间开以忽略不计。但是现在也算在内。
计划外时间,故障时间,从故障发生到故障解决的总时间,尤其是运维,计划外时间是我们必须关注的一个指标。
某某-----当天事必须当天解决----没有解决之间,人是不可用离开的-------解决完之后必须生成报告,备案。
日报,周报,月报,年报。
运维精神:7*24小时待命(及时响应,及时处理,及时总结。)
2.4、lvs适用场景:
-
小集群不需要使用lvs,大集群使用lvs。
-
lvs集群中的术语
-
VS: virtual server:lvs服务的逻辑名称,也就是我们外部访问lvs集群时使用的ip地址和端口。
-
DS: Director Server :lvs集群中的主服务器,也就是调度器(nginx的代理服务器)是集群的核心
-
调度服务器就是用来接收客户端的请求转发到后端的服务器。
-
RS: Real Server:lvs集群中的真实服务器,后端服务器,用来接收DS转发来的请求,并响应结果。
-
CIP:Client ip :客户端的地址,发起请求的客户端地址。
-
VIP:virtual Ip :lvs集群使用的ip地址,对外提供集群访问的虚拟ip地址。
-
DIP:Director ip :调度器在集群中的地址,用于和RS通信。
-
RIP:Real ip :后端服务器在集群当中的ip地址。
2.5、lvs的工作模式:
-
NAT
模式:由调度器响应给客户端 -
DR
模式:直接路由模式,真实服务器直接响应给客户端 -
TUN
:隧道模式----电信公司DNS提供 -
常用的模式:
NAT
和DR
模式
2.5.1、NAT模式
nat模式是常用的lvs的模式之一。
在nat模式下,lvs会将来自客户端的请求报文中的目标ip地址和端口,修改为lvs内部的ip地址和端口,然后把请求转发到后端服务器。
响应结果返回客户端的过程中,响应报文经过lvs的处理,把目标ip和端口修改成客户端的ip地址和端口。
好处
:在于,对于客户端来说,请求的目标地址始终不变,客户端的配置不需要做特殊的修改,只需调度器再对ip和端口进行转换,后端的服务端也不需要更改任何配置。
缺点
:性能损失,请求和响应都需要调度器做地址转换,影响性能,nat模式只要有一个调度器,调度器故障,整个集群就不能正常工作。
地址转换:
内网----外网 转换的源ip地址 snat
外网----内网 转换的目的ip地址 nat
1、客户端发起请求,访问vip地址,到达调度器
2、调度器接收到请求之后,根据负载均衡算法选一个后端服务器。
3、请求的地址,转成可以直接和内部RS通信的IP地址。
4、后端服务器处理请求。
5、目的的地址转换,转换vip地址
6、调度器的vip地址响应给客户端
外网到内网–12.0.0.10-----12.0.0.1------192.168.168.10
内网到外网–192.168.168.0/24-----12.0.0.1-----12.0.0.10----需要地址转换
iptables -t nat -A POSTROUTING -s 192.168.168.0/24 -o ens36 -j SNAT --to 12.0.0.1
2.6、lvs的工具
2.6.1、ipvsadm 工具,用来配置和管理lvs集群的工具。
-
-A 添加虚拟服务器 vip
-
-D 删除虚拟服务器地址
-
-s指定负载均衡的调度算法
-
-a 添加真实服务器
-
-d 删除真实服务器
-
-t 指定vip的地址和端口
-
-r 指定rip的地址和端口
-
-m使用nat模式
-
-g 使用DR模式
-
-i 使用隧道模式
-
-w 设置权重
-
-p 60:连接保持60设置保持时间
-
-l:列表查看
-
-n:数字化展示
-
-m指定模式为nat模式
2.6.2、算法
-
rr默认,轮询
-
加权轮询:wrr
-
最小连接:lr
-
加权最小连接:wlc
2.6.3、操作
ipvsadm -C—#清空原有的策略
ipvsadm -A -t 12.0.0.1:80 -s rr------#指定好的vip的地址和端口
ipvsadm -a -t 12.0.0.1:80 -r 192.168.168.10:80 -m—#先添加vip,虚拟服务器的ip和端口,然后再添加真实服务器
ipvsadm -D -t 192.168.168.50:80----#删除策略
ipvsadm -D -t 192.168.168.50:80
[root@test5 opt]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
ipvsadm -d -r 192.168.168.20:80 -t 12.0.0.1:80----###删除节点服务器
ipvsadm -d -r 192.168.168.20:80 -t 12.0.0.1:80
[root@test5 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.168.10:80 Masq 1 0 0
开启路由转发:
vim /etc/sysctl.conf
net.ipv4.ip_forward=1
[root@test5 opt]# sysctl -p
net.ipv4.ip_forward = 1
3、NAT集群实验
3.1、rr配置
nginx1 :192.168.168.10
nginx2:192.168.168.20
test5:调度器 ens33:192.168.168.50 ens36 :12.0.0.1
test6 客户端12.0.0.10
test5:
安装ipvsadm工具
yum -y install ipvsadm* -y
添加网卡
[root@test5 network-scripts]# cp ifcfg-ens33 ifcfg-ens36
vim ifcfg-ens33
TYPE=Ethernet
DEVICE=ens33
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.168.50
NETMASK=255.255.255.0
#GATEWAY=192.168.168.2
#DNS1=218.2.135.1
#DNS2=221.131.143.69
vim ifcfg-ens36
TYPE=Ethernet
DEVICE=ens36
ONBOOT=yes
BOOTPROTO=static
IPADDR=12.0.0.1
NETMASK=255.255.255.0
#GATEWAY=192.168.168.2
#DNS1=218.2.135.1
#DNS2=221.131.143.69
systemctl restart network
nginx1修改网卡中的网关指向调度器的ip(即网关)
TYPE=Ethernet
DEVICE=ens33
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.168.10
NETMASK=255.255.255.0
GATEWAY=192.168.168.50
DNS1=218.2.135.1
DNS2=221.131.143.69
vim /usr/local/nginx/html/index.html
this is nginx1
nginx2修改网卡中的网关指向调度器的ip(即网关)
TYPE=Ethernet
DEVICE=ens33
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.168.20
NETMASK=255.255.255.0
GATEWAY=192.168.168.50
DNS1=218.2.135.1
DNS2=221.131.143.69
vim /usr/local/nginx/html/index.html
this is nginx2
test5配置:
内网到外网—出去做地址转换
iptables -t nat -A POSTROUTING -s 192.168.168.0/24 -o ens36 -j SNAT --to 12.0.0.1
ipvsadm -C
—#清空原有的策略
ipvsadm -A -t 12.0.0.1:80 -s rr
-----指定好的vip的地址和端口
先添加vip,虚拟服务器的ip和端口,然后再添加真实服务器:
ipvsadm -a -t 12.0.0.1:80 -r 192.168.168.10:80 -m
-a 添加真实服务器
-t 指定vip地址
-r 指定真实服务器的地址和端口
-m指定模式为nat模式
ipvsadm -a -t 12.0.0.1:80 -r 192.168.168.20:80 -m
[root@test5 opt]# ipvsadm -A -t 12.0.0.1:80 -s rr
[root@test5 opt]# ipvsadm -a -t 12.0.0.1:80 -r 192.168.168.10:80 -m
[root@test5 opt]# ipvsadm -a -t 12.0.0.1:80 -r 192.168.168.20:80 -m
[root@test5 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.168.10:80 Masq 1 0 0
-> 192.168.168.20:80 Masq 1 0 0
[root@test5 opt]# ipvsadm-save > /etc/sysconfig/ipvsadm
[root@test5 opt]# systemctl restart ipvsadm
[root@test5 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.168.50:80 rr
-> 192.168.168.10:80 Masq 1 0 0
-> 192.168.168.20:80 Masq 1 0 0
删除策略
ipvsadm -D -t 192.168.168.50:80
[root@test5 opt]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
重新保存
[root@test5 opt]# ipvsadm -A -t 12.0.0.1:80 -s rr
[root@test5 opt]# ipvsadm -a -t 12.0.0.1:80 -r 192.168.168.10:80 -m
[root@test5 opt]# ipvsadm -a -t 12.0.0.1:80 -r 192.168.168.20:80 -m
[root@test5 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.168.10:80 Masq 1 0 0
-> 192.168.168.20:80 Masq 1 0 0
[root@test5 opt]# systemctl restart ipvsadm
[root@test5 opt]# ipvsadm-save > /etc/sysconfig/ipvsadm
[root@test5 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.168.10:80 Masq 1 0 0
-> 192.168.168.20:80 Masq 1 0 0
删除节点服务器
ipvsadm -d -r 192.168.168.20:80 -t 12.0.0.1:80
[root@test5 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.168.10:80 Masq 1 0 0
开启路由转发:
vim /etc/sysctl.conf
net.ipv4.ip_forward=1
[root@test5 opt]# sysctl -p
net.ipv4.ip_forward = 1
简单的全部完成。
test6:
需要改网关和ip地址
vim /etc/sysconfig/network-scripts/ifcfg-ens33 ##更改网关指向路由
TYPE=Ethernet
DEVICE=ens33
ONBOOT=yes
BOOTPROTO=static
IPADDR=12.0.0.10
NETMASK=255.255.255.0
GATEWAY=12.0.0.1
DNS1=218.2.135.1
DNS2=221.131.143.69
外网到内网–12.0.0.10-----12.0.0.1------192.168.168.10
net.ipv4.ip_forward=1,可以进行转发
内网到外网192.168.168.10-----12.0.0.1-------12.0.0.10
做地址转换进行访问
3.2、wrr加权算法
第二个,删除rr算法,
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.168.10:80 Masq 1 0 0
-> 192.168.168.20:80 Masq 1 0 0
[root@test5 opt]# ipvsadm -D -t 12.0.0.1:80
[root@test5 opt]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
添加wrr权重算法
[root@test5 opt]# ipvsadm -A -t 12.0.0.1:80 -s wrr
[root@test5 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
[root@test5 opt]# ipvsadm -a -t 12.0.0.1:80 -r 192.168.168.10:80 -m -w 2
[root@test5 opt]# ipvsadm -a -t 12.0.0.1:80 -r 192.168.168.20:80 -m -w 2
[root@test5 opt]# ipvsadm -d -r 192.168.168.20:80 -t 12.0.0.1:80
[root@test5 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.168.10:80 Masq 2 0 0
[root@test5 opt]# ipvsadm -a -t 12.0.0.1:80 -r 192.168.168.20:80 -m -w 1
[root@test5 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.168.10:80 Masq 2 0 0
-> 192.168.168.20:80 Masq 1 0 0
测试结果
3.3、设置wlc最小连接数加权算法
[root@test5 opt]# ipvsadm -D -t 12.0.0.1:80
[root@test5 opt]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
[root@test5 opt]# ipvsadm -A -t 12.0.0.1:80 -s wlc
[root@test5 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 wlc
[root@test5 opt]# ipvsadm -a -t 12.0.0.1:80 -r 192.168.168.10:80 -m -w 2
[root@test5 opt]# ipvsadm -a -t 12.0.0.1:80 -r 192.168.168.20:80 -m -w 1
[root@test5 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 wlc
-> 192.168.168.10:80 Masq 2 0 0
-> 192.168.168.20:80 Masq 1 0 0
创建vip地址的时候才能指定负载均衡算法,不是在真实服务器上添加算法。
test5做地址转换:
iptables -t nat -vnL
----查看nat地址转换策略表
iptables -t nat -A POSTROUTING -s 192.168.168.0/24 -o ens36 -j SNAT --to 12.0.0.1
ipvsadm -a-t 12.0.0.1:80-r192.168.233.61:80 -m
-a
添加真实服务器
-t
指定vip地址
3.4、增加理解
在探讨外网访问内网与内网访问外网时,是否需要开启转发功能或地址转换,我们首先要明确几个基本概念和它们在网络通信中的作用。
### 外网访问内网,开启转发功能,不需要地址转换
当外网需要访问内网时,通常涉及到的是网络访问控制和路由策略。在某些情况下,如使用VPN(虚拟私人网络)或端口转发等技术,可以实现外网直接访问内网资源,而无需进行地址转换。这是因为VPN等技术可以在不暴露内网实际IP地址的情况下,为外网用户提供一条安全的通道来访问内网资源。同样,端口转发可以将外网对特定端口的访问请求转发到内网中的特定设备或服务上,而无需改变IP地址。
### 内网访问外网,为什么需要地址转换
1. 内网与公网的隔离:
- 内网通常是指被NAT(网络地址转换)隔离起来的私有地址空间,这些地址在Internet上是不可见的,也无法被直接路由。
- 公网则是指全球互联网上分配的全局IP地址空间,任何设备只要具有公网IP地址,就可以被Internet上的其他设备访问。
2. IP地址的稀缺性:
- 由于IPv4地址的稀缺性,不可能为每个内网设备分配一个独立的公网IP地址。因此,需要通过NAT技术将内网设备的私有IP地址转换为公网IP地址,以实现与外部网络的通信。
3. 安全性和隐私性:
- NAT技术还可以在一定程度上提供安全性和隐私保护。通过隐藏内网设备的真实IP地址,可以防止外部网络对内网设备的直接攻击和扫描。
4. 通信的必要性:
- 内网中的设备,如企业内部的服务器或终端用户,有时需要访问外部网络或互联网上的资源。为了实现这种访问,必须进行地址转换,以便将内网设备的私有IP地址转换为公网IP地址,从而通过Internet进行通信。
综上所述,内网访问外网需要地址转换的原因主要是由于内网与公网的隔离、IP地址的稀缺性、安全性需求以及通信的必要性。NAT技术通过在内网出口设备上部署,实现了内网设备私有IP地址到公网IP地址的转换,从而解决了内网设备访问外部网络的问题。