第一章 集群的优势特点
一些国家重要的计算密集型应用(如:天气预报、核试验模拟等),需要计算机有很强的运算处理能力。以全世界现有的技术,即使是大型机,其计算能力也是有限的,很难单独完成此任务。因为计算时间可能会相当长,也许几天,甚至纪念或更久,因此,对于这类复杂的计算业务,便使用了计算机集群技术,集中有几十上百台,甚至成千上万台计算机进行计算。
第二章 集群的常见分类
负载均衡集群(Load balancing clusters),简称LBC或LB
高可用性集群(High-availability clusters)简称HAC
高性能计算集群(High-performance clusters)简称HPC
网络计算(Grid computing)
第三章 负载均衡集群的作用
- 分担用户访问请求及数据流量(负载均衡)。
- 保持业务连续性,即7*24小时服务(高可用性)。
- 应用于web业务及数据库从库(读)等服务器的业务。
- 负载均衡集群典型的开源软件包括LVS、Nginx Haproxy等。
第四章 高可用性集群
高可用性集群常用的开源软件包括Keepalived、Hearbeat等
第五章 企业中常见软硬件介绍
互联网企业常用的开源集群软件有:Nginx LVS Haproxy Keepalived Hearbeat
应用层(http、https)
传输层(tcp)
互联网企业常用的商业集群硬件有:F5、Netscaler、Radware、A10等。工作模式相当于haproxy的工作模式。
第六章 企业中常见软硬件选择
- 当企业业务重要,技术力量又薄弱,并且希望出钱购买产品及获取更好的服务时,可以选择硬件负载均衡产品,如F5、Netscaler、Radware等,此类公司多为传统的大兴非互联网企业,如银行、证券、金融、宝马、奔驰等。
- 对于门户网站来说,大多会并用软件及硬件产品来分担单一产品的风险,如淘宝、腾讯、新浪等。融资了的企业会购买硬件的产品,如赶集等网站。
- 中小型互联网企业,由于起步阶段无利润可赚或者利润很低,会希望通过使用开源免费的方案来解决问题,因此会雇佣专门的运维人员进行维护。
第七章 反向代理与负载均衡概念
严格的说,Nginx仅仅是作为Nginx Proxy反向代理使用的,因此这个反向代理功能表现的效果是负载均衡的效果,所以本文称之为Nginx负载均衡。
普通负载均衡软件,例如LVS。其实现的功能只是对请求数据包的转发(也可能会改成数据包)、传递,其中DR模式明显的特征是从负载均衡下面的节点服务来看,接受到的请求还是来自访问负载均衡器的客户端的真实用户,而反向代理就不一样了,反向代理接收访问用户的请求后,会代理用户重新发起请求代理下的节点服务器,最后把数据返回给客户端用户,在节点服务器看来,访问的节点服务器的客户端用户就是反向代理服务器了,而非真是的的网站访问用户。
第八章 负载均衡的组件模块
Nginx http功能模块 | 模块说明 |
---|---|
ngx_http_proxy_module | proxy代理模块,用于把请求后抛给服务器节点或upstream服务器池。 |
ngx_http_upstream_module | 负载均衡该模块,可以实现网站的负载均衡功能及节点的健康检查。创建了一个池子,web服务器 |
第九章 配置nginx web服务
1. 配置文件修改
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
server {
listen 80;
server_name www.etiantian.org;
location / {
root html/www;
index index.html index.htm;
}
access_log logs/access_www.log main;
}
server {
listen 80;
server_name bbs.etiantian.org;
location / {
root html/bbs;
index index.html index.htm;
}
access_log logs/access_bbs.log main;
}
}
2. 创建对应站点目录及首页文件
mkdir -p /application/nginx/html/{www,bbs}
for dir in www bbs;do echo "`ifconfig eth0|egrep -o "10.0.0.[0-9]+"` $dir" >/application/nginx/html/$dir/index.html;done
3. 优雅重启
[root@web02-8 html]# nginx -t
nginx: the configuration file /application/nginx-1.10.2/conf/nginx.conf syntax is ok
nginx: configuration file /application/nginx-1.10.2/conf/nginx.conf test is successful
[root@web02-8 html]# nginx -s reload
4. 负载均衡upstream
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
upstream server_pools {
server 10.0.0.7;
server 10.0.0.8;
server 10.0.0.9;
}
server {
listen 80;
server_name www.etiantian.org;
location / {
proxy_pass http://server_pools;
}
}
}
5. weight权重模块
[root@LB01_5 conf]# vim nginx.conf
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
upstream server_pools {
server 10.0.0.7:80 weight=2;
server 10.0.0.8:80 weight=1;
server 10.0.0.9:80 weight=1;
}
server {
listen 80;
server_name www.etiantian.org;
location / {
proxy_pass http://server_pools;
}
}
}
6. max_fails fail_timeout
upstream server_pools {
server 10.0.0.7:80 weight=4 max_fails=3 fail_timeout=30s;
server 10.0.0.8:80 weight=4 max_fails=3 fail_timeout=30s;
max_fail 最大的失败连接数,当连接失败后会再继续3次连接
fail_timeout失败连接超时时间,当连接失败超过30s后会尝试重新连接
7. backup
upstream server_pools {
server 10.0.0.7:80 weight=4 max_fails=3 fail_timeout=30s;
server 10.0.0.8:80 weight=4 max_fails=3 fail_timeout=30s;
server 10.0.0.9:80 weight=4 max_fails=3 fail_timeout=30s backup;
}
backup备用服务器,当加入backup后不使用该服务器,当其它两台服务器挂掉之后自动使用本服务器。
8. server标签详解
server标签 | 参数说明 |
---|---|
server 10.0.0.8:80 | 负载均衡后面的RS配置,可以是IP或域名,如果端口不写,默认是80端口。高并发场景下,IP可换成域名,通过DNS做负载均衡。 |
weight=1 | 代表服务器的权重默认值是1。权重数字越大表示接受的请求比例越大。 |
max_fails=1 | Nginx尝试连接后端主机失败的次数,这个数值是配合proxy_next_upstarem \ fastcgi_next_upstream和memcached_next_upstream这三个参数来使用的,当Nginx接收后端服务器返回的这三个参数定义的状态码时,会将这个请求转发给正常工作的后端服务器,例如404、502、503。max_fails的默认值是1;企业场景:建议2-3次。京东1次,蓝汛10次。根据业务需求去配置 |
fail_timeout=10s | 在max_fails定义的失败次数后,距离下次检查的间隔时间,默认是10s;如果max_fails是5,它就检测5次,如果5次都是502。那么,它就会根据fail_timeout的值,等待10s再去检查。还是只检查一次,如果持续502,在不重新加载nginx配置的情况下,每隔10s |
backup | 热备配置(RS节点的高可用),当前面激活的RS都失败后会自动启用热备RS。这标志着这个服务器作为备份服务器,若主服务器全部宕机了,就会向它转发请求;注意,当负载调度算法为ip_hash时,后端服务器在负载均衡调度中的状态不能是weight和backup。 |
down | 这标志着服务器永远不适用相当于注释,这个参数可配合ip_hash使用。 |
第十章 upstream模块调度算法
1. rr轮询(round robin默认调度算法,静态调度算法)
把客户端的请求逐一分配到不同的后端节点服务器,这相当于LVS中的rr算法,如果后端节点服务器宕机(默认情况下nginx只检测80端口),宕机的服务器会被自动从节点服务器池中剔除,以使客户端的用户访问不受影响。新的请求分配给正常的服务器。
2. wrr权重轮询
在rr轮询算法的基础上加上权重,即为权重轮询算法,但是用该算法时候,权重和用户访问成正比,权重值越大,被转发的请求也就越多,可以根据服务器的配置和性能制定权重大小,有效解决新旧服务器溪能不均带来的请求分配问题。
3. least_conn算法
least_conn算法会根据后端节点的连接数来决定分配情况,哪个机器连接数少就分发。
4. url_hash算法
和ip_hash类似,这里是根据访问URL的hash结果来分配请求的,让每个URL定向到同一个后端服务器,后端服务器为缓存服务器时效果显著。在upstream中加入hash语句,server语句中不能写入weight等其他的参数,hash_method使用的hash算法。
5. ip_hash静态调度算法
每个请求按客户端IP的hash结果分配,当新的请求达到时,先将其客户端端IP通过hash算法哈希出一个值,在随后的客户端请求中,客户端IP哈希值只要相同,就会被分配给同一台服务器,该调度算法可以解决动态网页的session共享问题,但有时会导致请求分配不均,即无法保证1:1的负载均衡,因为在国内大多数公司都是NAT上网模式,多个客户端会对应一个外部IP,所以这些客户端都会被分配到同一节点服务器,从而导致请求分配不均。LVS负载均衡的-p参数、Keepalived配置里的persistence_timeout50参数都类似这个nginx里的IP_hash参数。其功能都可以解决动态网页的session共享问题。
第十一章 proxy模块
http proxy模块相关参数 | 说明 |
---|---|
proxy_set_header | 负载均衡请求后面web服务器的时候,请求,响应。 |
proxy_set_header | 修改 请求头里面的信息设置http请求header项传给后端服务器节点,例如:可实现让代理后端的服务器节点获取访问客户端用户的真实IP地址。 |
client_body_buffer_size | 用户指定客户端请求主体缓冲区大小,此处如了解前文的http请求包的原理就好理解了。 |
proxy_connect_timeout | 表示反向代理与后端接单服务器连接的超时时间,即发起握手等候相应的超时时间。 |
proxy_send_timeout | 表示代理后端服务器的数据回传时间,即在规定时间之内后端服务器必须传完所有的数据,否则,Nginx将断开这个连接。 |
proxy_read_timeout | 设置Nginx从代理的后端服务器获取信息的时间,表示连接建立成功后,Nginx等待后端服务器的响应时间,其实是Nginx已经进入后端的派对只中等候处理的时间。 |
9. proxy_set_header Host
server {
listen 80;
server_name bbs.etiantian.org;
location / {
proxy_pass http://server_pools;
proxy_set_header Host $host;
}
}
10. proxy_set_header X-Forwarded-For
server {
listen 80;
server_name bbs.etiantian.org;
location / {
proxy_pass http://server_pools;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
}
}
[root@LB01_5 conf]# vim nginx.conf
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
upstream server_pools {
server 10.0.0.7:80 weight=4 max_fails=3 fail_timeout=30s;
server 10.0.0.8:80 weight=4 max_fails=3 fail_timeout=30s;
server 10.0.0.9:80 weight=4 max_fails=3 fail_timeout=30s;
}
server {
listen 80;
server_name www.etiantian.org;
location / {
proxy_pass http://server_pools;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
}
}
server {
listen 80;
server_name bbs.etiantian.org;
location / {
proxy_pass http://server_pools;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
}
}
}
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
upstream upload_pools {
server 10.0.0.8:80;
}
upstream static_pools {
server 10.0.0.7:80;
}
upstream default_pools {
server 10.0.0.9:80;
}
server {
listen 80;
server_name www.etiantian.org;
location /upload {
proxy_pass http://upload_pools;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
}
location /static {
proxy_pass http://static_pools;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
}
location / {
proxy_pass http://default_pools;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
}
}
}