LVS是什么?
LVS是LinuxVirtualServer的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统。本项目在1998年5月由章文嵩博士成立,是中国国内最早出现的自由软件项目之一。章文嵩博士目前工作于阿里集团,主要从事集群技术、操作系统、对象存储与数据库的研究。
LVS的负载调度算法
1、轮询
将收到的访问请求按照顺序轮流分配给群集中的各节点(真实服务器)均等地对待每一台服务器,而不管服务器实际的连接数和系统负载
2、加权轮询
根据调度器设置的权重值来分发请求,权重值高的节点优先获得任务,分配的请求数越多
保证性能强的服务器承担更多的访问流量
3、最少连接(Least Connections)
根据真实服务器已建立的连接数进行分配,将收到的访问请求优先分配给连接数最少的节点
4、加权最少连接(Weighted Least Connections)
在服务器节点的性能差异较大时,可以为真实服务器自动调整权重
性能较高的节点将承担更大比例的活动连接负载
负载均衡群集工作模式
- 地址转换
- IP隧道
- 直接路由
NAT模式地址转换
1、Network Address Translation,简称NAT模式类似于防火墙的私有网络结构,负载调度器作为所有服务器节点的网关,即作为客户机的访问入口,也是各节点回应客户机的访问出口
2、服务器节点使用私有IP地址,与负载调度器位于同一个物理网络,安全性要优于其他两种方式
TUN模式
IP隧道
1、IP Tunnel,简称TUN模式
采用开放式的网络结构,负载调度器仅作为客户机的访问入口,各节点通过各自的lnternet连接直接回应客户机,而不再经过负载调度器
2、服务器节点分散在互联网中的不同位置,具有独立的公网IP地址,通过专用IP隧道与负载调度器相互通信
DR模式直接路由
1、Direct Routing,简称DR模式
2、采用半开放式的网络结构,与TUN模式的结构类似,但各节点并不是分散在各地,而是与调度器位于同一个物理网络
3、负载调度器与各节点服务器通过本地网络连接,不需要建立专用的IP隧道
LVS-NAT部署步骤
1.加载ip_vs模块,安装ipvsadm工具
2.开启路由转发
3.新建LVS虚拟服务器并添加节点服务器
4.配置节点服务器
- 建立测试网站
- 挂载NFS共享存储
- 建立测试网页·
5、.保存规则并测试
实验环境准备
5台虚拟机,1台LVS负载调度器、1台客户机、2台web服务器、1台nfs共享服务器
LVS负载调度器
俩张网卡
主机名 :server1
IP地址1:20.0.0.10/24(内网地址)
IP地址2:192.168.1.62/24(外网)
web1服务器
主机名 :server2
IP地址:20.0.0.20/24
web3服务器
主机名 :server3
IP地址:20.0.0.30/24
nfs共享服务器
主机名 :server4
IP地址:20.0.0.40/24
客户机
俩张网卡
主机名 :server5
IP地址1:20.0.0.50/24
IP地址2:192.168.1.3/24
LVS负载调度器设置
[root@server1 ~]# modprobe ip_vs
[root@server1 ~]# rpm -ivh /mnt/Packages/ipvsadm-1.27-7.el7.x86_64.rpm
[root@server1 ~]# vim /etc/sysctl.conf
net.ipv4.ip_forward = 1 #增加
[root@server1 ~]# sysctl -p
[root@server1 ~]# vim nat.sh
#!/bin/bash
echo "1" > /proc/sys/net/ipv4/ip_forward
ipvsadm -C
ipvsadm -A -t 192.168.1.62:80 -s rr
ipvsadm -a -t 192.168.1.62:80 -r 20.0.0.20:80 -m
ipvsadm -a -t 192.168.1.62:80 -r 20.0.0.30:80 -m
ipvsadm -Ln
[root@server1 ~]# sh nat.sh
[root@server1 ~]#systemctl stop firewalld
[root@server1 ~]# setenforce 0
配置web服务器
web1
[root@server2 ~]# yum -y install httpd
[root@server2 ~]# mount 20.0.0.40:/opt/web1 /var/www/html/
[root@server2 ~]# systemctl start httpd.service
[root@server2 ~]#systemctl stop firewalld
[root@server2 ~]# setenforce 0
web2
[root@server3 ~]# yum -y install httpd
root@server3 ~]# mount 20.0.0.40:/opt/web2 /var/www/html/
[root@server3 ~]# systemctl start httpd.service
[root@server3~]#systemctl stop firewalld
[root@server3 ~]# setenforce 0
nfs共享服务器
[root@server4 ~]# mkdir /opt/web1 /opt/web2
[root@server4 ~]# echo "<h1>This is web2</h1>" >/opt/web2/index.html
[root@server4 ~]# yum -y install rpcbind nfs-utils
[root@server4 ~]# vim /etc/exports
/opt/web1 20.0.0.20(ro)
/opt/web2 20.0.0.30(ro)
[root@server4 ~]# systemctl restart nfs
[root@server4 ~]# systemctl restart rpcbind
[root@server4 ~]#systemctl stop firewalld
[root@server4 ~]# setenforce 0