本文共 3571 字,大约阅读时间需要 11 分钟。
文章的开始,我们要先弄懂一下几个问题
1. 为什么要使用lvs?
随着互联网的发展使多媒体网络服务器面对的访问量快速增加,服务器需要具备提供大量并发访问的能力,因此对于大负载的服务器来讲,CPU,I/O处理能力很快会成为瓶颈。由于单台服务器的性能总是有限的,简单地提高硬件性能并不能真正解决这个问题。为此,必须采用多服务器和负载均衡技术才能满足大量并发访问的需求。linux虚拟服务器使用负载均衡技术将多台服务器组成一个虚拟服务器。它为适应快速增长的网络访问量提供了一个负载能力易于扩展,而价格低廉的解决方案。
2.什么是lvs?
LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统。本项目 在1998年5月由博士成立,是中国国内最早出现的自由软件项目之一。
3.lvs工作原理
VS: Virtual Server ,负责调度
RS: Real Server ,负责真正提供服务
VS 根据请求报文的目标IP 和目标协议及端口将其调度转发至某RS ,根据调度算法来挑选RS
4.lvs集群的类型
lvs-nat :修改请求报文的目标IP, 多目标IP 的DNAT
lvs-dr :操纵封装新的MAC 地址
lvs-tun :在原请求IP 报文之外新加一个IP 首部
lvs-fullnat :修改请求报文的源和目标IP
今天就先讲一下lvs-nat模式
工作原理
Virtual Server via NAT(VS-NAT):用地址翻译实现虚拟服务器地址转换器有能被外界访问到的合法IP地址,它修改来自专有网络的流出包的地址外界看起来包是来自地址转换器本身,当外界包送到转换器时,它能判断出应该将包送到内部网的哪个节点优点是节省IP 地址,能对内部进行伪装;缺点是效率低,因为返回给请求方的流量经过转换器
LVS负载均衡NAT工作流程
(1). 当用户请求到达Director Server,此时请求的数据报文会先到内核空间的PREROUTING链。 此时报文的源IP为CIP,目标IP为VIPlvs用到的软件为ipvsadm
程序包:ipvsadm
Unit File: ipvsadm.service
主程序:/usr/sbin/ipvsadm
规则保存工具:/usr/sbin/ipvsadm-save
规则重载工具:/usr/sbin/ipvsadm-restore
配置文件:/etc/sysconfig/ipvsadm-config
ipvsadm 命令
集群服务的RS 管理:增、删、改
格式:
ipvsadm -A|E -t|u|f service-address [-sscheduler] [-p [timeout]][-M netmask][--pepersistence_engine] [-bsched-flags]
ipvsadm -A ——add-service 在内核的虚拟服务器表中添加一条新的虚拟服务器记录。
ipvsadm -E ——edit-service 编辑内核虚拟服务器表中的一条虚拟服务器记录
ipvsadm -D -t|u|f service-address 删除
ipvsadm –C 清空
ipvsadm –R 重载
ipvsadm -S [-n] 保存
增、改:ipvsadm-A|E -t|u|f service-address [-s scheduler] [-p [timeout]]
删除:ipvsadm -D -t|u|f service-address
service-address: :
-t|u|f: :
-t: TCP 协议的端口,VIP:TCP_PORT
-u: UDP 协议的端口,VIP:UDP_PORT
-f :firewall MARK ,标记,一个数字
[-s scheduler] :指定集群的调度算法,默认为wlc
增、改:ipvsadm -a|e-t|u|f service-address -rserver-address [-g|i|m] [-w weight]
删:ipvsadm -d -t|u|fservice-address -r server-address
server-address:
rip[:port] 如省略port ,不作端口映射
选项:
lvs 类型:
-g: gateway, dr 类型,默认
-i: ipip, tun 类型
-m: masquerade, nat 类型
-w weight :权重
清空定义的所有内容:ipvsadm –C
清空计数器:ipvsadm -Z[-t|u|f serv ice-address]
查看:ipvsadm -L|l[options]
--numeric, -n :以数字形式输出地址和端口号
--exact :扩展信息,精确值
--connection ,-c :当前IPVS 连接输出
--stats :统计信息
--rate :输出速率信息
ipvs 规则: /proc/net/ip_vs
ipvs 连接:/proc/net/ip_vs_conn
保存及重载规则
保存:建议保存至/etc/sysconfig/ipvsadm
ipvsadm-save > /PATH/TO/IPVSADM_FILE
ipvsadm -S > /PATH/TO/IPVSADM_FILE
systemctl stop ipvsadm.service
重载:
ipvsadm-restore </PATH/FROM/IPVSADM_FILE
ipvsadm -R < /PATH/FROM/IPVSADM_FILE
systemctl restart ipvsadm.service
设计要点:
(1) RIP 与DIP 在同一IP 网络, RIP 的网关要指向DIP
(2) 支持端口映射
(3) Director 要打开核心转发功能
实验
实验之前要先检查lnmp是否已经成功,若出现错误页面,查看端口80 3306 9000,php-fpm mariadb nginx是否开启
准备工作:三台虚拟机一台lvs-server 两台lnmp(仅主机模式):lnmp01,lnmp02,关掉selinux和防火墙。
1.lvs-server:yum install ipvsadm
添加一条新的虚拟服务器记录 ipvsadm -A -t 172.17.136.172:80 -s wrr
添加真实服务器lnmp01 lnmp02记录:
ipvsadm -a -t 172.17.136.172:80 -r 192.168.136.174:80 -m -w 1
ipvsadm -a -t 172.17.136.172:80 -r 192.168.136.174:80 -m -w 1
vim /etc/sysctl.conf
net.ipv4.ip_forward=1
lnmp01
添加指向DIP的网关:route add default gw 192.168.136.172
lnmp02
添加指向DIP的网关: route add default gw 192.168.136.172
Lnmp01
测试:写两个网页
Cd /data/web/
Vim index.html
Hello world
Lnmp02
Vim index.html
Good morning
通过访问一个IP地址可以访问两个页面,这个测试说明可以通过lvs将并发访问量分发到两个real-server上从而实现负载均衡。
转载地址:http://uenlx.baihongyu.com/