LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统。
本项目在1998年5月由章文嵩博士成立,是中国国内最早出现的自由软件项目之一
可伸缩网络服务的几种结构,它们都需要一个前端的负载调度器(或者多个进行主从备份)。
我们先分析实现虚拟网络服务的主要技术,指出IP负载均衡技术是在负载调度器的实现技术中效率最高的。
在已有的IP负载均衡技术中,主要有通过网络地址转换(Network Address Translation)将一组服务器构成一个高性能的、高可用的虚拟服务器,
我们称之为VS/NAT技术(Virtual Server via Network Address Translation)。在分析VS/NAT的缺点和网络服务的非对称性的基础上,
我们提出了通过IP隧道实现虚拟服务器的方法VS/TUN(Virtual Server via IP Tunneling),和通过直接路由实现
虚拟服务器的方法VS/DR(Virtual Server via Direct Routing),它们可以极大地提高系统的伸缩性。
VS/NAT、VS/TUN和VS/DR技术是LVS集群中实现的三种IP负载均衡技术。
-------------------------
LBC 负载均衡群集
HA 高可用群集
HPC 高性能运算群集
1、结构
负载调度器:分配用户请求,提供服务器池内的主机健康状态检查
服务器池:真正处理用户请求的多台主机组成的集群。
共享存储:通过网络提供数据给服务器池中的节点主机
2、工作模式
NAT:地址转换
TUN:隧道模式
DR:路由模式
3、调度算法:
轮询
加权轮询
最少连接
加权最少连接
加权:分配用户请求之前,检测目标主机的性能是否达到瓶颈。
实验环境:
两台Web-Server,一台负载调度器(Director),一台NFS共享服务器(可在web节点实现)
网络配置:
VIP(Virtual IP):192.168.66.1/24
web-node1:192.168.66.145/24
web-node2:192.168.66.146/24
NFS-Server:192.168.66.150/24
公网IP:172.31.26.16/24
搭建VS/NAT步骤:
1、配置内网主机 -- (所有内网机都指向网关)
a、配置共享存储服务器
vim /etc/exports
/share192.168.66.0/24(ro,sync) --哪个网段ip可以访问该共享(只读,实时同步)
servie rpcbind restart
service nfs restart
showmount192.168.66.100 -- 查看共享
b、配置服务器池节点主机
cd /var/www/html
mount -t nfs 共享存储IP:共享目录 /var/www/html
service httpd start
第二台手动创建首页文件进行测试
2、配置负载调度器
查询内核是否支持
modprobe ip_vs
cat /proc/net/ip_vs
安装ipvsadm软件
rpm -ivh ipvsadm
查看版本
ipvsadm -v
开启IPv4路由转发
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
sysctl -p
配置防火墙
iptables -t nat -A POSTROUTING -o 外网接口名 -s 内网网段 -j SNAT --to-source 外网IP地址
ipvsadm -A -t 外网IP:80 -s rr -- -A代表添加负载调度器;-s代表使用的算法;rr代表轮询
ipvsadm -a -t 外网IP:80 -r 网站节点1:80 -m -- -m代表NAT模式
ipvsadm -a -t 外网IP:80 -r 网站节点2:80 -m
查看所配置的信息
ipvsadm -Ln
保存并设置自启
service ipvsadm save
chkconfig ipvsadm on
3、测试
访问负载调度器的外网卡IP,重复刷新可看到效果。
搭建VS/DR步骤:
1、负载调度器配置:
service NetworkManager stop
配置虚拟IP:
cd /etc/sysconfig/network-scripts/
cp ifcfg-eth0 ifcfg-eth0:0
vim ifcfg-eth0:0
DEVICE=eth0:0
IPADDR=虚拟IP
ifup eth0:0
配置内核参数,使其不发广播包,以免造成ip冲突
vim /etc/sysctl.conf
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.eth0.send_redirects = 0
sysctl -p
modprobe ip_vs
cat /proc/net/ip_vs
安装并配置ipvsadm
rpm -ivh ipvsadm
ipvsadm -v
ipvsadm -A -t 虚拟IP:80 -s rr -- -A代表添加负载调度器;-s代表使用的算法;rr代表轮询
ipvsadm -a -t 虚拟IP:80 -r 网站节点1:80 -g -- -g代表DB模式
ipvsadm -a -t 虚拟IP:80 -r 网站节点2:80 -g
ipvsadm -Ln
service ipvsadm save
chkconfig ipvsadm on
2、网站服务器1配置:
service NetworkManager stop
拷贝并配置虚拟IP
cd /etc/sysconfig/network-scripts/
cp ifcfg-loifcfg-lo:0
DEVICE=lo:0
IPADDR=虚拟IP
NETMASK=255.255.255.255
修改内核参数,防止ip冲突
vim /etc/sysctl.conf
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
sysctl -p
指一条路由,代表所有要访问该虚拟ip的主机都通过lo:0网卡访问
route add -host 虚拟IP dev lo:0
mount -t nfs 共享存储:共享目录 /var/www/html
service httpd start
3、网站节点2配置:
service NetworkManager stop
拷贝并配置虚拟IP
cd /etc/sysconfig/network-scripts/
cp ifcfg-lo ifcfg-lo:0
DEVICE=lo:0
IPADDR=虚拟IP
NETMASK=255.255.255.255
修改内核参数,防止ip冲突
vim /etc/sysctl.conf
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
sysctl -p
指一条路由,代表所有要访问该虚拟ip的主机都通过lo:0网卡访问
route add -host 虚拟IP dev lo:0
vim /var/www/html/index.html
"hello world"
service httpd start
4、共享存储配置:
共享存储
vim/etc/exports
/share内网网段(ro,sync)
servie rpcbind restart
service nfs restart