第一天 集群的介绍和lvs-nat集群与lvs-dr集群
集群为什么出现:为了解决大并发
纵向拓展:改变硬件环境(局限性大,可行不实际)
横向拓展:构建集群(利用负载均衡器,如LVS)
osi(应表会传网数物)7层
集群的分类
1:负载均衡集群(LB F5(如lvs))
2:高可用集群(HA)
3:高性能集群(HPC)
集群宗旨:可伸缩性,可靠性:可管理性
集群分类:
硬件集群:F5
软件集群:LVS(工作在osi第四层,传输层与应用层之间) Nginx(工作在osi第七层)
LVS三层结构
1层:director或balabcer负责调度器/分发器(作用:接受用户请求,转发给后台真时服务器改变ip地址=vip 并发量大,有可能成为集群瓶颈)
2层:服务器池 (Server Pool)
3层:共享存储(Shared Storage)
LVS-NAT 集群
什么是集群:集群是一组相互独立的、通过高速网络互联的计算机,它们构成了一个组,并以单一系统的模式加以管理。(Cluster 就是一组计算机,它们作为一个整体向用户提供一组网络资源。这些单个的计算机系统就是集群的节点 node)。
LVS:Linux Virtual Server 的简写,意即 Linux 虚拟服务器,是一个虚拟的服务器集群系统此项目在 1998 年 5 月由章文嵩博士成立,是中国国内最早出现的自由软件项目之一。
集群宗旨: 可伸缩性(Scalability);可靠性(Reliability);可管理性(Manageability)
集群分类
负载均衡集群: Load Balance 集群,简称 LB,当一台服务器无法满足需求的时候,两台或多台服务器同时为客户端提供服务,以分担需求,提供轮询工作查询 LB F5
高可用集群:High Availability 集群,简称 HA,比如一台服务器出现故障的时候,但是不影响客户端体验,另外一台服务器担当这台服务器的工作! CorosyncHeartbeat keepalived nginx apache haproxy
高性能集群:High Perfermance Computing 集群,简称 HPC,一台计算机是 4路,那么 100 台计算机同时来辅助计算处理,就是 400 颗 CPU! Hadoop
硬件集群和软件集群
硬件:F5 负载均衡器 https://f5.com/
软件:LVS (工作在 OSI 第四层,传输层) Nginx(工作在 OSI 第七层,应用层)LVS: 英文官方网站:http://www.linuxvirtualserver.org/中文官方网站:http://zh.linuxvirtualserver.org/ http://www.linuxvs.org/zh/
LVS 集群的三层结构
1:负载调度器/分发器 (load balancer)
他是整个集群对外的前端机,负责将客户的请求发送到一组服务器上执行,而客户认为服务是来自一个 IP 地址上的,我们称这个 IP 为虚拟 IP,Virtual IP=VIP。接收用户请求,转发给后端真实服务器,修改目标地址,balancer有可能成整个集群的瓶颈
2:服务器池 (Server Pool)
也就是下图中的 RealServer Group,是一组真正执行客户请求的服务器,执行程序可以是一组 WEB,FTP,MAIL 和 DNS 等等。
3:共享存储(Shared Storage)
它是为服务器池提供的一个共享存储区,这样很容易使得服务器拥有相同的内容,提供相同的服务!
瓶颈:Direcotor有可能成为我们系统瓶颈
DNS View
冗余:整个系统2份 GSLB,SLB Service Load Balancing
CDN
客户端
分发器
Server Pool
共享存储
RR方式查询
LVS 包转发方式
LVS 有三种转发方式:NAT(网络地址映射)、 IP Tunneling(IP 隧道)、 DirectRouting(直路由)。不同的转发模式决定了不同的 Cluster 的网络结构,FULLNAT
NAT:NAT 方式支持任何造作系统,以及私有网络,并且只需要一个公网 IP 即可!缺点是整个系统的性能受到限制,因为执行 NAT 的过程每一次都需要重写包,有一定的延迟。另外,大部分应用有 80%的数据是从服务器流向客户端,也就是用户的请求非常
短,而服务器的回应非常大,对负载均衡器形成非常大的压力,成为新的瓶颈!大致数据上:真实服务器的数目在 10 台和 20 台之间时,负载调度器将成为整个集群系统的瓶颈!
LVS-NAT 工作原理
原理:就是把客户端发来的数据包的 IP 头的目的地址,在负载均衡器上换成其中一台 RS 的 IP 地址,并发至此 RS 来处理,RS 处理完成后把数据交给经过负载均衡器,负载均衡器再把数据包的原 IP 地址改为自己的 IP,将目的地址改为客户端 IP 地址即可。
期间,无论是进来的流量,还是出去的流量,都必须经过负载均衡器。优点:集群中的物理服务器可以使用任何支持 TCP/IP 操作系统,只有负载均衡器需要一个合法的 IP 地址。缺点:扩展性有限。当服务器节点增长过多时,负载均衡器将成为整个系统的瓶颈,
因为所有的请求包和应答包的流向都经过负载均衡器。当服务器节点过多时,大量的数据包都交汇在负载均衡器那,速度就会变慢!
图解 LVS-NAT 工作原理-数据包流动过程文字描述:客户端访问服务器,访问请求
到达调度器,调度器通过网络地址转换,调度器重写请求报文的目标地址,根据预设的
调度算法,将请求分派给后端的 Real Server;Real Server 的相应包通过调度器时,报
文的源地址被重写,再返回给客户,完成整个负载调度过程。
步骤一,客户端访问 VIP1 的网站
发送的请求包是源地址是自己的 IP 地址 CIP,目标地址直接访问的是 Director 的 VIP,
请求显示某一个页面,是不去直接访问 RealServer 里面的 IP 地址(RealServer 的 IP
地址是私有的 IP 地址,需要经过 NAT 的方式将内部 IP 地址转化之后的 VIP 才能在公
网上运作)
步骤二:客户端访问调度器时,调度器通过网络地址转换,调度器重写请求报文的目标
地址,根据预设的调度算法,将请求分派给后端的真实服务器;
步骤三:真实服务器的响应报文通过调度器时,报文的源地址被重写,再返回给客户,
完成整个负载调度过程。
1: srcIP: CIP dstIP: VIP
2: srcIP:CIP dstIP: RIP
3: srcIP: RIP dstIP: CIP
4: srcIP:VIP dstIP:CIP
用 VMware 搭建 LVS NAT 模式
实验前期准备:
1、准备 3 台虚拟机,物理机充当客户端
2、 iptables -F , 清除规则 /etc/init.d/iptables save 保存
3、编辑/etc/selinux/config,关 SELinux(需要重启生效)
真实环境的实验拓扑
目前实验环境拓扑
配置分发器
配置网路环境,xuegod63 配置成分发器,根据拓扑,需要 2 张网卡(关机状态增加一
张),需要打开路由转发功能
eth0 192.168.1.63 模式:br0 模拟公网
eth1 192.168.2.63 模式:vmnet4 模拟内网
[root@XueGod63 ~]# vim /etc/sysctl.conf //打开路由转发
功能
#将
……
net.ipv4.ip_forward = 0
……
#改为
net.ipv4.ip_forward = 1
[root@XueGod63 ~]# sysctl -p // 加 载 配 置 , 是 指
sysctl.conf 里面的配置生效
[root@XueGod63 ~]# rpm -ivh /media/Packages/ipvsadm-1.26-
2.el6.x86_64.rpm //安装 LVS 管理工具
配置 Director 规则
[root@XueGod63 ~]# ipvsadm -A -t 192.168.1.63:80 -s rr //rr 表示轮询,
round-robin
-A,表示添加; -t,表示 TCP 的服务,后面书写格式为 VIP:Port; -s
设置调度算法
[root@XueGod63 ~]# ipvsadm -a -t 192.168.1.63:80 -r 192.168.2.62 -m
//添加一条 RealServer
[root@XueGod63 ~]# ipvsadm -a -t 192.168.1.63:80 -r 192.168.2.64 -m
//添加第二条 RealServer
-a,表示添加 real server 的地址;
-r 表示 realserver 地址;
-m 表示 masquerade,也就是 NAT 方式 LVS
查看规则与保存
[root@XueGod63 ~]# ipvsadm -L -n //配置及查看内核 IPVS 表和算法
的工具类似于 iptables
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.1.63:80 rr
-> 192.168.2.62:80 Masq 1 0 0
-> 192.168.2.64:80 Masq 1 0 0
InActConn 指非活跃连接数, TCP ESTABLISH 状态以外的连接都称为不活跃连接。
例如处于 SYN_RECV 状态的连接,处于 TIME_WAIT 状态的连接等
[root@XueGod63 ~]# /etc/init.d/ipvsadm save //保存规则
ipvsadm: Saving IPVS table to /etc/sysconfig/ipvsadm: [ OK ]
#可以看到保存路径
配置 Real Server
Real Server 配置 IP 过程略
XueGod62:
IP 地址:192.168.2.62,网关 192.168.2.63,DNS 192.168.2.63
[root@XueGod62 ~]# echo WEB62 > /var/www/html/index.html
[root@XueGod62 ~]# service httpd restart
XueGod64
IP 地址:192.168.2.64,网关 192.168.2.63,DNS 192.168.2.63
[root@XueGod64 ~]# echo WEB64 > /var/www/html/index.html
[root@XueGod64 ~]# service httpd restart
正是环境应该使用由对应测存储池,然后和我们的 REALSERVER 共享,来使得我们所
访问的资源是同步的
测试集群
物理机模拟客户端,浏览器访问 http://192.168.1.63,使用 F5 键刷新
测试结果是会在两个页面之间切换
ipvsadm 其他参数
--add-service -A add virtual service with option
#在内核的虚拟服务器表中添加一条新的虚拟服务器记录。也就是增加一台新
的虚拟服务器
--edit-service -E edit virtual service with options
#编辑内核虚拟服务器表中的一条虚拟服务器记录
--delete-service -D delete virtual service
#删除内核虚拟服务器表中的一条虚拟服务器记录
--clear -C clear the whole table
#清除内核虚拟服务器表中的所有记录
--restore -R restore rules from stdin
#恢复虚拟服务器规则
--save -S save rules to stdout
#保存虚拟服务器规则,输出为-R 选项可读的格式
--add-server -a add real server with options
#在内核虚拟服务器表的一条记录里添加一条新的真实服务器
--edit-server -e edit real server with options
#编辑一条虚拟服务器记录中的某条真实服务器记录
--delete-server -d delete real server
#删除一条虚拟服务器记录中的某条真实服务器记录
--list -L|-l list the table
#显示内核虚拟服务器表
--zero -Z zero counters in a service or all services
#虚拟服务表计数器清零
--set tcp tcpfin udp set connection timeout values
#设置连接超时值
--start-daemon start connection sync daemon
#启动同步守护进程。他后面可以是 master 或 backup,用来说明 LVS
Router 是 master 或是 backup。在这个功能上也可以采 keepalived 的 VRRP 功
能。
--stop-daemon stop connection sync daemon
#停止同步守护进程
--help -h display this help message
#显示帮助信息
ipvsadm 其他选项
--tcp-service -t service-address service-address is host[:port]
#说明虚拟服务器提供的是 tcp 的服务[vip:port] or [real-server-ip:port]
--udp-service -u service-address service-address is host[:port]
#说明虚拟服务器提供的是 udp 的服务[vip:port] or [real-server-ip:port]
--fwmark-service -f fwmark fwmark is an integer greater than zero
#说明是经过 iptables 标记过的服务类型。
--scheduler -s scheduler one of
rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq,the default scheduler is wlc.
#使用的调度算法,有这样几个选项,默认的调度算法是: wlc.
--persistent -p [timeout] persistent service
#持久稳固的服务。这个选项的意思是来自同一个客户的多次请求,将被同一
台真实的服务器处理。 timeout 的默认值为 300 秒
--netmask -M netmask persistent granularity mask
--real-server -r server-address server-address is host (and port)
#真实的服务器[Real-Server:port]
--gatewaying -g gatewaying (direct routing) (default)
#指定 LVS 的工作模式为直接路由模式(也是 LVS 默认的模式
--ipip