---- (整理)By 小甘丶 php
什么是集群: html
集群是一组相互独立的、经过高速网络互联的计算机,它们构成了一个组,并以单一系统的模式加以管理。(Cluster就是一组计算机,它们做为一个总体向用户提供一组网络资源。这些单个的计算机系统就是集群的节点node)。 前端
LVS: node
Linux Virtual Server的简写,意即Linux虚拟服务器 linux
是一个虚拟的服务器集群系统,此项目在1998年5月由章文嵩博士成立,是中国国内最先出现的自由软件项目之一。 web
集群宗旨: 算法
可伸缩性(Scalability);可靠性(Reliability);可管理性(Manageability) vim
可伸缩性(Scalability):20台计算机为咱们提供服务,可缩可减,可增可拓 后端
可靠性(Reliability):万一部分计算机出现问题,并不影响对用户提供服务 浏览器
可管理性(Manageability):统一管理
集群分类
负载均衡集群:Load Balance集群,简称LB
当一台服务器没法知足需求的时候,两台或多台服务器同时为客户端提供服务,以分担需求,提供轮询工做查询
高可用集群:High Availability集群,简称HA
好比一台服务器出现故障的时候,可是不影响客户端体验,另一台服务器担当这台服务器的工做!
高性能集群:High Perfermance Computing集群,简称HPC
一台计算机是4路,那么100台计算机同时来辅助计算处理,就是400颗CPU!
硬件集群和软件集群
硬件:F5负载均衡器 https://f5.com/
软件:LVS (工做在OSI第四层,传输层) Nginx(工做在OSI第七应用层)
LVS:
英文官方网站:http://www.linuxvirtualserver.org/
中文官方网站:http://zh.linuxvirtualserver.org/
ipvsadm/ipvs 相似: iptables/netfilter
LVS集群的三层结构
1:负载调度器/分发器 (load balancer) director
他是整个集群对外的前端机,负责将客户的请求发送到一组服务器上执行,而客户认为服务是来自一个IP地址上的,咱们称这个IP为虚拟IP,Virtual IP=VIP。
2:服务器池 (Server Pool)
也就是下图中的RealServer Group,是一组真正执行客户请求的服务器,执行程序能够是一组WEB,FTP,MAIL和DNS等等。RIP
3:共享存储(Shared Storage)
它是为服务器池提供的一个共享存储区,这样很容易使得服务器拥有相同的内容,提供相同的服务!
LVS包转发方式
LVS有四种转发方式:NAT(网络地址映射)、IP Tunneling(IP 隧道)、Direct Routing(直路由),Full-NAT(全NAT)。不一样的转发模式决定了不一样的Cluster的网络结构
NAT:
NAT方式支持任何操做系统,以及私有网络,而且只须要一个Internet IP便可!缺点是整个系统的性能受到限制,由于执行NAT的过程每一次都须要重写包,有必定的延迟。另外,大部分应用有80%的数据是从服务器流向客户端,也就是用户的请求很是短,而服务器的回应很是大,对负载均衡器造成很是大的压力,成为新的瓶颈!大体数据上:真实服务器的数目在10台和20台之间时,负载调度器将成为整个集群系统的瓶颈!
IP Tunneling
Director(分发器)分配请求到不一样的Real Server,Real Server处理请求后直接回应给客户端,这样director负载均衡器处理客户端与服务器的一半连接。IP Tunneling技术极大的提升了director的调度处理能力 ,同时也极大的提升了系统能容纳的最大节点数,能够超过100个节点,Real Server能够在任何LAN和WAN上运行,这就意味着容许地理上的分布(因为经过IP Tuneling封装后,封装后的IP包的目的地址为Real Server的IP地址,那么只要Real Server的地址路由可达,Real Server在什么网络里均可以,这样能够减小对于公网IP地址的消耗,可是由于处理IP Tunneling封装和解封装的开销,那么效率就不如DR模式),这在灾难恢复中有重要意义。服务器必须拥有正式的IP地址用于与客户端直接通信(每一个Real Server必须绑定VIP),而且全部服务器必须支持IP隧道协议!
Direct Routing
与IP Tuneling相似,只不过IP Tuneling工做在第三层,而DR工做在第二层,数据链路层。负载均衡器(LB)仅处理了一半的连接,避免了新的瓶颈,同时增长了系统的可伸缩性。Direct Routing与IP Tuneling相比没有IP封装的开销,可是因为采用物理层修改MAC地址技术,因此全部服务器必须在一个物理网段!
LVS-NAT工做原理
原理:就是把客户端发来的数据包的IP头的目的地址,在负载均衡器上换成其中一台RS的IP地址,并发至此RS来处理,RS处理完成后把数据交给负载均衡器,负载均衡器再把数据包的原IP地址改成本身的IP,将目的地址改成客户端IP地址便可。期间,不管是进来的流量,仍是出去的流量,都必须通过负载均衡器。
优势:集群中的物理服务器可使用任何支持TCP/IP操做系统,只有负载均衡器须要一个合法的IP地址。
缺点:扩展性有限。当服务器节点增加过多时,负载均衡器将成为整个系统的瓶颈,由于全部的请求包和应答包的流向都通过负载均衡器。当服务器节点过多时,大量的数据包都交汇在负载均衡器那,速度就会变慢!
关于集群中的IP名称缩写
名称 |
缩写 |
说明 |
虚拟IP地址(Virtual IP address) |
VIP |
VIP为Director用户向客户端提供服务的IP地址 |
真实IP地址(Real Server IP address) |
RIP |
在集群下面节点上使用的IP地址 |
Director IP地址(Director IP Address) |
DIP |
Director用于链接内外网的IP地址,物理网卡上的IP地址 |
客户端IP地址(Client Ip Address) |
CIP |
客户端用户请求集群服务器的IP地址,改地址用做发送给集群请求的源IP地址 |
图解LVS-NAT工做原理-数据包流动过程文字描述:
客户端访问服务器,访问请求到达调度器,调度器经过网络地址转换,调度器重写请求报文的目标地址,根据预设的调度算法,将请求分派给后端的Real Server;Real Server的相应包经过调度器时,报文的源地址被重写,再返回给客户,完成整个负载调度过程。
步骤一:客户端访问VIP1的网站
发送的请求包是源地址是本身的IP地址CIP,目标地址直接访问的是Director的VIP,请求显示某一个页面,是不去直接访问RealServer里面的IP地址(RealServer的IP地址是私有的IP地址,须要通过NAT的方式将内部IP地址转化以后的VIP才能在公网上运做)
步骤二:客户端访问调度器时,调度器经过网络地址转换,调度器重写请求报文的目标地址,根据预设的调度算法,将请求分派给后端的真实服务器;
步骤三:真实服务器的响应报文经过调度器时,报文的源地址被重写,再返回给客户,完成整个负载调度过程。
第四步: 通过了Director,Source IP:VIP1 DSTIP: CIP1
1: request: S: CIP D:VIP
2: director: S: CIP D:RIP
3: replay: S: RIP D:CIP
4: ditector:S: VIP D:CIP
实验环境
配置分发器
配置网路环境,gan61.cn配置成分发器,gan62.cn和gan63.cn为提供服务的真实服务器
为gan61.cn添加一块网卡,用于模拟内网,采用vmnet4模式
添加一张网卡 eth1 : 模式vmnet4 模拟内网
eth0 原网卡,模式bridge 模拟公网
配置新添加的网卡IP
[root@gan61 ~]# cd /etc/sysconfig/network-scripts/
[root@gan61 ~]# cp ifcfg-eth0 ifcfg-eth1
[root@gan61 ~]# vim ifcfg-eth1
1 DEVICE=eth1
2 TYPE=Ethernet
3 ONBOOT=yes
4 NM_CONTROLLED=yes
5 BOOTPROTO=static
6 IPADDR=192.168.1.111
7 PREFIX=24
[root@gan61 ~]# service network restart # 重启网络服务!使IP生效
[root@gan61 ~]# ip addr # 查看网卡IP信息
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:77:74:1a brd ff:ff:ff:ff:ff:ff
inet 192.168.31.61/24 brd 192.168.31.255 scope global eth0
inet6 fe80::20c:29ff:fe77:741a/64 scope link
valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:77:74:24 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.111/24 brd 192.168.1.255 scope global eth1
inet6 fe80::20c:29ff:fe77:7424/64 scope link
valid_lft forever preferred_lft forever
[root@gan61 ~]# vim /etc/sysctl.conf # 打开路由转发功能
#将
……
net.ipv4.ip_forward = 0
……
#改成
net.ipv4.ip_forward = 1
[root@gan61 ~]# sysctl -p # 加载配置,是指sysctl.conf里面的配置生效
net.ipv4.ip_forward = 1
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
kernel.sysrq = 0
kernel.core_uses_pid = 1
net.ipv4.tcp_syncookies = 1
kernel.msgmnb = 65536
kernel.msgmax = 65536
kernel.shmmax = 68719476736
kernel.shmall = 4294967296
[root@gan61 ~]# yum -y install ipvsadm # 安装LVS管理工具
[root@gan61 ~]# ipvsadm -A -t 192.168.31.61:80 -s rr # 配置ipv规则
# 添加虚拟服务器IP
# rr表示轮询,round-robin
# -A,表示添加; -t,表示TCP的服务,后面书写格式为VIP:Port; -s设置调度算法
[root@gan61 ~]# ipvsadm -a -t 192.168.31.61:80 -r 192.168.1.62 -m
[root@gan61 ~]# ipvsadm -a -t 192.168.31.61:80 -r 192.168.31.63 -m
# 添加Real Server
# -a,表示添加real server的地址;
# -r表示realserver地址;
# -m表示masquerade,也就是NAT方式LVS
[root@gan61 ~]# ipvsadm -L # 查看当前ipvsadm规则
# 配置及查看内核IPVS表和算法的工具相似于iptables
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP gan61.cn:http rr
-> 192.168.1.62:http Masq 1 0 0
-> 192.168.31.63:http Masq 1 0 0
InActConn 指非活跃链接数, TCP ESTABLISH 状态之外的链接都称为不活跃链接。例如处于 SYN_RECV 状态的链接,处于 TIME_WAIT 状态的链接等
[root@gan61 ~]# /etc/init.d/ipvsadm save #保存IPvsadm规则
# 保存ipvsadm规则,到/etc/sysconfig/ipvsadm
ipvsadm: Saving IPVS table to /etc/sysconfig/ipvsadm: [ OK ]
[root@gan61 ~]# chkconfig ipvsadm on
配置Real Server
配置 Real Server web服务
[root@gan62 ~]# yum -y install httpd # 安装Httpd服务
[root@gan62 ~]# echo "<h1><em>This is Gan62.cn</em></h1>" > /var/www/html/index.html # 建立测试页面
[root@gan62 ~]# chkconfig httpd on # 设置开机自启动
[root@gan62 ~]# service httpd start # 启动服务
Starting httpd: [ OK ]
[root@gan63 ~]# yum -y install httpd # 安装Httpd服务
[root@gan63 ~]# echo "<h1><em>This is Gan62.cn</em></h1>" > /var/www/html/index.html # 建立测试页面
[root@gan63 ~]# chkconfig httpd on # 设置开机自启动
[root@gan63 ~]# service httpd start # 启动服务
Starting httpd: [ OK ]
****************************************************************
拓展:TCP三次握手:
ESTABLISH ESTABLISH
TCP四次挥手
****************************************************************
Real Server配置IP
Gan62.cn:
IP地址:192.168.1.62,网关192.168.1.62,DNS 192.168.1.111
Gan63.cn:
IP地址:192.168.31.63,网关192.168.31.63,DNS 192.168.1.111
调整gan62.cn 和 gan63.cn 的网卡模式为 vmnet4
[root@gan62 ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0
1 DEVICE=eth0
2 TYPE=Ethernet
3 ONBOOT=yes
4 NM_CONTROLLED=yes
5 BOOTPROTO=static
6 IPADDR=192.168.1.62
7 PREFIX=24
8 GATEWAY=192.168.1.111
[root@gan62 ~]# service network restart && service httpd restart
[root@gan63 ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0
1 DEVICE=eth0
2 TYPE=Ethernet
3 ONBOOT=yes
4 NM_CONTROLLED=yes
5 BOOTPROTO=static
6 IPADDR=192.168.31.63
7 PREFIX=24
8 GATEWAY=192.168.1.111
[root@gan63 ~]# service network restart && service httpd restart
真实环境应该使用由对应的存储池,而后和咱们的REAL SERVER共享,来使得咱们所访问的资源是同步的
测试集群
物理机模拟客户端,浏览器访问http://192.168.31.63,使用F5键刷新
按F5刷新,测试结果是会在两个页面之间切换
ipvsadm:USAGE:
Usage:
ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]] [-M netmask] [--pe persistence_engine]
ipvsadm -D -t|u|f service-address
ipvsadm -C
ipvsadm -R
ipvsadm -S [-n]
ipvsadm -a|e -t|u|f service-address -r server-address [options]
ipvsadm -d -t|u|f service-address -r server-address
ipvsadm -L|l [options]
ipvsadm -Z [-t|u|f service-address]
ipvsadm --set tcp tcpfin udp
ipvsadm --start-daemon state [--mcast-interface interface] [--syncid sid]
ipvsadm --stop-daemon state
ipvsadm -h
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 -i ipip encapsulation (tunneling)
#指定LVS 的工做模式为隧道模式
--masquerading -m masquerading (NAT)
#指定LVS 的工做模式为NAT 模式
- -weight -w weight # capacity of real server
#真实服务器的权值
--u-threshold -x uthreshold # upper threshold of connections
--l-threshold -y lthreshold # lower threshold of connections
--mcast-interface interface # multicast interface for connection sync
#指定组播的同步接口
--syncid sid # syncid for connection sync (default=255)
--connection -c # output of current IPVS connections
#显示LVS 目前的链接 如:ipvsadm -L -c
--timeout # output of timeout (tcp tcpfin udp)
#显示tcp tcpfin udp 的timeout 值 如:ipvsadm -L --timeout
--daemon # output of daemon information
#显示同步守护进程状态
--stats # output of statistics information
#显示统计信息
--rate # output of rate information
#显示速率信息
--thresholds # output of thresholds information
--persistent-conn # output of persistent connection info
--sort # sorting output of service/server entries
#对虚拟服务器和真实服务器排序输出
--ops -O # one-packet scheduling
--numeric -n # numeric output of addresses and ports
#输出IP 地址和端口的数字形式
Ipvsadm命令实例
[root@gan61 ~]# ipvsadm -L -n –c # 查看客户端链接分发器和Real Server的状况
IPVS connection entries
pro expire state source virtual destination
TCP 01:57 TIME_WAIT 192.168.31.228:52955 192.168.31.63:80 192.168.1.63:80
TCP 01:57 TIME_WAIT 192.168.31.228:52953 192.168.31.63:80 192.168.1.63:80
TCP 01:58 TIME_WAIT 192.168.31.228:52959 192.168.31.63:80 192.168.1.63:80
TCP 01:57 TIME_WAIT 192.168.31.228:52952 192.168.31.63:80 192.168.1.62:80
TCP 01:57 TIME_WAIT 192.168.31.228:52956 192.168.31.63:80 192.168.1.62:80
TCP 01:57 TIME_WAIT 192.168.31.228:52954 192.168.31.63:80 192.168.1.62:80
TCP 01:55 TIME_WAIT 192.168.31.228:52951 192.168.31.63:80 192.168.1.63:80
TCP 01:58 TIME_WAIT 192.168.31.228:52958 192.168.31.63:80 192.168.1.62:80
TCP 01:57 TIME_WAIT 192.168.31.228:52957 192.168.31.63:80 192.168.1.63:80
[root@gan61 ~]# ipvsadm -Z # 清空当前虚拟服务表的计数器
[root@gan61 ~]# ipvsadm -L –n --stats # 查看分发状况
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Conns InPkts OutPkts InBytes OutBytes
-> RemoteAddress:Port
TCP 192.168.31.63:80 13 73 58 7729 5222
-> 192.168.1.62:80 7 36 28 4023 2564
-> 192.168.1.63:80 6 37 30 3706 2658
Conns (connections scheduled) 已经转发过的链接数
InPkts (incoming packets) 入包个数
OutPkts (outgoing packets) 出包个数
InBytes (incoming bytes) 入流量(字节)
OutBytes (outgoing bytes) 出流量(字节)
[root@gan61 ~]# ipvsadm -L -n --rate # 查看速率
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port CPS InPPS OutPPS InBPS OutBPS
-> RemoteAddress:Port
TCP 192.168.31.63:80 1 9 7 897 712
-> 192.168.1.62:80 1 4 3 419 333
-> 192.168.1.63:80 1 5 4 478 379
CPS (current connection rate) 每秒链接数
InPPS (current in packet rate) 每秒的入包个数
OutPPS (current out packet rate) 每秒的出包个数
InBPS (current in byte rate) 每秒入流量(字节)
OutBPS (current out byte rate) 每秒入流量(字节)
[root@gan61 ~]# ipvsadm -d -t 192.168.31.63:80 -r 192.168.1.62 # 删除一台RS
[root@gan61 ~]# ipvsadm -C # 清空规则
1:一组计算机为咱们的用户提供同一类服务
1000台:统一管理
node:节点
2:集群特性
可伸缩性(Scalability);可靠性(Reliability);可管理性(Manageability)
可伸缩性(Scalability):20台计算机为咱们提供服务,可缩可减,可增可拓
可靠性(Reliability):万一部分计算机出现问题,并不影响对用户提供服务
可管理性(Manageability):统一管理
3:层次化
能够经过IP(来源IP),由那些服务器为用户提供服务
经过不一样的程序,为用户提供服务
html
jsp
php
png
jeg
mp4
avi
asp
net
数据层,为用户提供服务
网络层(传输层)-->应用层--->数据层[分割]
4:集群的类型
负载均衡集群:Load Balance 集群,简称 LB,当一台服务器没法知足需求的时候,两台或多台服务器同时为客户端提供服务,以分担需求,提供轮询(RR)工做查询
拓展伸缩
高可用集群:High Availability 集群,简称 HA,好比一台服务器出现故障的时候,可是不影响客户端体验,另一台服务器担当这台服务器的工做! realserver 前段代理的高可用 做用:避免单点故障
高性能集群:High Perfermance Computing 集群,简称 HPC,一台计算机是 4路,那么 100 台计算机同时来辅助计算处理,就是 400 颗 CPU! hadoop
5:分布式
分散布局合一
分布式计算
分布式应用
分布式存储
6:集群的类型
软件集群
lvs(传输层)
Nginx(应用层)
haproxy(应用层)
硬件集群
F5
A10
Array
Redware
Netscaler
HA
heartbeat
keepalived
corosync+pacemaker
RHCS
HPC
hadoop
6:国内比较知名开源软件
tengine(Nginx的二次开发)
TFS
LVS (full-nat)
都和淘宝逃不了关系 章文松
7:LVS介绍
物理层-->数据链路层-->网络--->传输层-->会话层--->表示层--->应用层
BIT MAC IP application
L4:四层路由,四层交换
根据目标地址和目标端口是先求转发
LVS:Linux Virtual Server
iptables/netfilter
ipvsadm/ipvs
tcp/udp
IP:PORT
8:三层结构
load balancer :负载调度器
Server Pool: 服务器池,web,FTP,mail,DNS
Shared Storage: 共享存储
9:相关术语
director:分发器,负载调度器,也就是load balancer
real server:真正为用户提供服务器服务器
IP
VIP:Virtual IP,真正对外提供服务的IP,也就是DNS解析的地址IP
DIP:Director IP,面对咱们后端真实服务器的IP
RIP:Realserver IP
CIP:Client IP
ipvs:ip virtual server
10:LVS的类型
LVS包的转发方式
lvs-nat[network Address translation]
lvs-dr [direct Routing]
lvs-tun [tunneling]