集群简介:
简单来说就是多个服务器合作干一件事,通过技术将多个服务器组合起来,统一调度管理。
集群特点:
高性能,高可用,高并发,可伸缩性。
集群的分类:
负载均衡集群
高可用集群
高性能计算集群
常见的软硬件集群产品:
软件:ngixn,lvs,haproxy,keepalived,heartbeat
硬件:F5,Netscaler,Radware,A10等
反向代理与负载均衡概念简介:
例如:lvs等负载均衡软件是转发用户请求的数据包,而Nginx反向代理是接收用户的请求之后,然后重新发起请求,请求后端服务器的节点。
nginx简单的负载均衡测试:
http {
include mime.types;
default_type application/octet-stream;
upstream proxy {
server 192.168.1.251 weight=2;
server 192.168.1.109 weight=1;
}
server {
listen 80;
server_name www.yy.com;
location / {
proxy_pass http://proxy;
root html;
index index.html index.htm;
}
通过upstream 指定的组名称进行负载均衡配置,在location区块中进行配置。
其中的proxy字段为指定的一个组,可以随意设置。
客户端进行测试:
例如负载均衡服务器为192.168.1.33
客户端进行访问测试:curl www.yy.com
依次显示的页面为后端服务器192.168.1.251和192.168.1.109服务器的页面。
upstream模块介绍:
nginx的负载均衡依赖于ngx_http_upstream_module 模块,所支持的代理方式又proxy_pass ,fastcgi_pass ,memcached_pass等。
2通过域名做负载均衡:
http {
include mime.types;
default_type application/octet-stream;
upstream proxy {
server www.yy.com weight=2;
}
server {
listen 80;
server_name www.yy.com;
location / {
proxy_pass http://proxy;
root html;
index index.html index.htm;
}
}
需要注意的是,通过域名的话,需要内网中有dns服务器,或者在负载均衡服务器上配置hosts解析文件。
负载均衡upstream多个参数的讲解
weight=2 服务器权重,数字越大代表接受的请求越大
max_fails =1 最大失败次数,企业中建议2~3次
backup 热备配置,如果配置中所有服务器宕机了,那么就会向他转发请求
fail_timeout=10 定义失败后,下次检查的间隔时间
down 表示不可用
upstream 模块调度算法
调度算法一般是分为两类:即静态调度算法,和动态调度算法。
静态调度算法:即负载均衡根据自身设定的规则进行分配,不考虑后端节点服务器的情况,例如:rr,wrr,ip_hash都属于静态调度算法
动态调度算法:即负载均衡服务器会通过后端服务器节点状态进行分配请求,例如:连接数少的服务器获得优先请求,响应时间短的优先获得请求,例如:least_conn.fair 都属于动态调度算法。
1:rr轮询算法,(默认调度算法)
将客户端的请求,逐步分配到后端不同的节点服务器,相当与lvs的rr算法,如果后端服务器宕机,宕机服务器会在负载均衡地址池中删除,保证客户端访问不受影响
2:wrr(权重轮询,静态调度算法)
在rr算法中加上权重,即为权重轮询算法,权重值越大,分配的请求越多,可根据服务器性能灵活分配。
3:ip_hash(静态调度算法)
ip_hash算法的原理很简单,根据请求所属的客户端IP计算得到一个数值,然后把请求发往该数值对应的后端。
所以同一个客户端的请求,都会发往同一台后端,除非该后端不可用了。ip_hash能够达到保持会话的效果。
每个请求按客户端ip的hash结果分配,当新的请求到达时,当新的请求到达时,先将客户端ip通过hash算法,hash出一个值,在随着客户端的请求时,会将hash值相同的分配到同一台服务器,该算法可以解决动态页面的session共享的问题,但有时会导致分配不均匀,注意:设置ip_hash的算法时,地址池中的weight和backup将不可用。
4:fair(动态调度算法)
此算法通过后端服务器的响应时间动态分配,响应时间短的将会优先分配。这是更加智能的调度算法,此种算法可以通过页面的大小和响应时间长短,进行动态负载均衡,注意:nginx本身不支持这种算法,必须下载nginx的模块:upstream_fair
示例 upstteam proxy {
server 192.168.1.2;
server 192.168.1.3 ;
fair;
}
5:least_conn 算法
least_conn 算法会根据后端节点的连接数来决定分配情况,那个机器连接数少就分发,
6:url_hash 算法
与ip_hash类似,这里是通过访问url 的hash结果进行分配请求,让每个URL定向到同一个后端服务器,进一步提高后端服务器的缓存的命中率
示例: upstream proxy {
server squid1:3322;
server squid2:3322;
hash $request_uri;
hash_method crc32;
}
7:一致性hash算法
一致性hash算法一般用于代理后端业务为缓存服务的场景,将用户请求的url或者指定的字符串进行计算,然后调度到后端服务器中。