LVS:linux virtual server
四种模式十种调度算法
防火墙
PREROUTING -> INPUT(流向内部)(lvs起作用 强行改变数据流向)
PREROUTING -> FORWARD -> POSTROUTING(转发)
OUTPUT -> POSTROUTING(流向外部)
kernel space
调度,需要给它做高可用HA+LVS
便写调度策略
查看调度策略
查看内核中有那些模块
lvs四种服务模式
1.DR模式:直连模式,速度很快
2.NAT模式:作业
3.TUN隧道模式
4.FULLNAT模式:
VS/DR
跟 VS/TUN 方法相同,负载调度器中只负责调度请求,而服务器直接将响应返回给客户,可以极大地提
高整个集群系统的吞吐量。跟 VS/TUN 相比,这种方法没有 IP 隧道的开销,但调度器和服务器组都必
须在物理上有一个网卡通过不分断的局域网相连,如通过交换机或者高速的 HUB 相连。VIP 地址为调
度器和服务器组共享,调度器配置的 VIP 地址是对外可见的,用于接收虚拟服务的请求报文;所有的服
务器把 VIP 地址配置在各自的 Non-ARP 网络设备上,它对外面是不可见的,只是用于处 理目标地址为
VIP 的网络请求。
模式一:DR直连模式(Direct Routing)
环境:安装ipvsadm (调度器)
ipvsadm是管理集群服务的命令行工具,用于管理LVS的策略规则
server1作为调度
1.搭建yum源,添加必要安装包
vim /etc/yum.repos.d/rhel-source.repo
[rhel-source]
name=Red Hat Enterprise Linux $releasever - $basearch - Source
baseurl=http://172.25.99.250/rhel6.5
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release
[HighAvailability] ##高可用性
name=HighAvailability
baseurl=http://172.25.99.250/rhel6.5/HighAvailability
gpgcheck=0
[LoadBalancer] #负载均衡
name=LoadBalancer
baseurl=http://172.25.99.250/rhel6.5/LoadBalancer
gpgcheck=0
[ResilientStorage] #弹性存储
name=ResilientStorage
baseurl=http://172.25.99.250/rhel6.5/ResilientStorage
gpgcheck=0
[ScalableFileSystem] #可扩展文件系统
name=ScalableFileSystem
baseurl=http://172.25.99.250/rhel6.5/ScalableFileSystem
gpgcheck=0
2.yum install ipvsadm -y
3.ipvsadm -l ##查看调度策略
4.lsmod ##查看内核中有哪些模块
modprobe virtio ##虚拟机安装模块
5.ipvsadm --help ##查看帮助信息
rr 表示确定轮询的模式
-r 指定真实主机
-g直连模式
-A 增加一台虚拟设备
-C 清除之前环境遗留的策略
-a 添加真实服务器的操作
-t tcp服务地址
-s 调度算法(10中调度算法rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq)
-r 对应的真实ip
-g rh(路由)
rr 调度算法:轮询
直连模式:
1.ipvsadm -A -t 172.25.99.100:80 -s rr #添加一台虚拟设备
##-A表示添加虚拟主机,-t表示tcp连接,-s表示负载均衡工作模式为轮询模式
2.ipvsadm -a -t 172.25.99.100:80 -r 172.25.99.2:80 -g #添加后端实际服务器
##-a表示往一条记录中添加真实的服务主机,-g直连模式,-r表示指定真实主机的ip
3.ipvsadm -a -t 172.25.99.100:80 -r 172.25.99.3:80 -g
/etc/init.d/ipvsadm save ##保存策略
ipvsadm -l
4./etc/init.d/httpd start ##打开server2与server3的httpd服务,用于检测
添加VIP
检测1:
真机:curl 172.25.99.100 访问100主机,可在调度器server1中查看到调度记录
server1:ipvsadm -l(解析的) ipvsadm -ln(没有解析)
但是因为调度器与真实主机不能通信,虽然server1确实调度了,但是真实主机server2与server3不能收到指令,所以真机访问没有回应
5.在真实主机server1与server2添加虚拟主机的ip,使调度器可以与其通信
ip addr add 172.25.99.100/32 dev eth0
##32可以让客户无法ping服务器,只允许服务器ping自己,安全性
ip addr add 172.25.99.100/32 dev eth0
检测2:
真机:
curl 172.25.99.100 访问主机,可以查看到具体数据,但是因为server123都有172.25.99.100的ip,所以时随机访问的
可以使用命令arp -an | grep 100查看到访问主机的mac地址,
确认访问的是哪一台主机(arp地址解析协议,将ip解析为mac地址)
arp -d 172.25.99.100
可以清除物理地址缓存缓存,否则每次curl 172.25.99.100访问的都是一台主机
如果访问的是调度器,那么在不清除缓存的情况下,是server2与server3轮询工作的,在调度器中ipvsadm -l可以查看到调度记录
查看各调度两次
若无法轮询 则客户端存储了某个真实服务器的地址
arp -d 172.25.99.100 ##删除存储的真实服务器硬件地址
访问时会访问真实主机(server2/3),会使服务器压力过大。
#编写调度器,使访问虚拟主机ip时只能连接到调度器
方法1:arptables使用防火墙策略来限制用户访问服务器
server2:
yum install arptables_jf -y ##安装arptables
arptables -A IN -d 172.25.99.100 -j DROP
##-A表示添加策略,IN表示在表IN中操作,-d表示destation,-j表示指定的处理方式,DROP 表示拒绝访问不回应,在
arptables -A OUT -s 172.25.14.100 -j mangle --mangle-ip-s 172.25.99.2
##管理输出,以ip172.25.99.2输出
arptables -L
/etc/init.d/arptables_jf save ##保存arptables的更改
server3同server2
检测:
真机:
重复进行下面的操作
arp -d 172.25.99.100 ##清除物理地址缓存
curl 172.25.99.100 ##多次访问虚拟主机,此时可以看到每次访问的都是调度器的轮询工作模式