集群
一组相互独立的服务器利用高速通信网络组成的一个整体,可以改变过滤引导数据。
分类
计算机集群架构按功能和结构可以分成以下几类:
负载均衡集群 LBC或者LB ,分摊,保持,应用 (工作常用)
高可用性集群 HAC 防单点 (工作常用)
高性能计算集群 HPC
网格计算集群
负载均衡集群
负载均衡集群提供了一种廉价,有效,透明的方法,来扩展网络设备和服务器的负载,带宽和吞吐量,同时加强了网络数据处理能力,提高了网络的灵活性和可用性。
服务器向外部提供服务,当一台服务器承受过多的压力,那么服务可能会产生服务不可用的情况,所以,我们应该让一台服务器承受的压力在合理范围内,如果一台服务器无法满足需求,那么可以横向扩展使用多台服务器分摊这些压力,这些服务器作为一个整体对外提供服务,并且分摊压力时,那么我们可以称这些服务器为"负载均衡集群"。
负载均衡器
(1)LVS:基于OSI七层模型中的第四层(传输层)
LVS通过转发数据包(修改mac地址或者IP地址)来实现负载均衡,对于用户数据无任何修改,效率高,支持大并发,功能少。
过滤不了用户的URL,不论用户发什么URL,都会转给后方web服务器,所以web服务器内容必须一致。
(2)nginx:nginx本身没有负载均衡功能,他是通过反向代理来实现的负载均衡
http中的URL请求基于OSI七层模型中的第七层,效率低,支持并发相对LVS来说低,实现功能多。
代替用户发出请求(代理);
能过滤用户的URL,可以分业务,后方web服务器内容可以不一样。
(3)hoproxy:四七都有
实践Nginx负载均衡
1.准备3台安装已经完成并且正常启动的nginx的服务器,1台作负载均衡器。2台作web服务器。
2.两台web服务器配置输出内容设置为不同内容,方便查看结果。
3.编写负载均衡器配置文件如下:
worker_processes 1;
error_log logs/error.log;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
upstream Web_pools { # 服务器池 web_pools服务器池的名字
server 192.168.200.216 weight=2; #server是一个节点 没有单点问题除非全坏
server 192.168.200.214 weight=1; #weight权重 backup备份 down下线用于维护
}
server {
listen 80;
server_name _;
location / {
proxy_pass http://Web_pools; #proxy_pass反向代理的命令
}
}
}
lsaf -i:80 查看端口被什么占用
4.upstream模块
模块内参数
upstream中的server也是拥有健康检查的,不存在单点问题,除非全坏
调度算法
(1) rr轮询
(2)wrr权重轮询
(3)ip_hash
让同一个IP地址永远负载给同一个web节点,写在负载均衡池。但是不能真正起负载均衡的作用。某点服务器压力会加大
(4)fair(动态调度算法)
(5)least_conn
least_conn算法会根据后端节点的连接数来决定分配情况,哪个机器连接数少就分发。
(6)url_hash算法(web缓存节点)
(7)一致性hash算法
真正解决客户验证登录生成随即图片的问题
http_proxy代理模块知识及相关参数
http proxy模块参数
在Web服务器通过tail -5 /usr/local/nginx/logs/access.log 查看访问日志看到用户都是用过网关IP进行访问,不能显示用户的真实IP(nginx的反向代理)
proxy_set_header host $host;
#在代理向后端服务器发送的http请求头中加入host字段信息,用于当后端服务器配置有多个虚拟主机时,可以识别代理的是哪个虚拟主机。这是节点服务器多虚拟主机时的关键配置。
proxy_set_header X-Forwarded-For $remote_addr;
#这是反向代理时,节点服务器获取用户真实IP的必要功能配置
可直接include使用
cat proxy.conf
proxy_set_header host $host;
proxy_set_header x-forwarded-for $remote_addr;
proxy_connect_timeout 60;
proxy_send_timeout 60;
proxy_read_timeout 60;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
基于URI路径,user_agent,扩展名规则
1.URL路径实践
用户通过nginx反向代理从后方取数据,数据是图片和文字类型,而且图片和文字不在一个Web服务器内。
nginx配置文件设置,如下:
worker_processes 1;
error_log logs/error.log;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
upstream default_pools {
server 192.168.200.216 weight=1;
}
upstream static_pools {
server 192.168.200.214 weight=1;
}
server {
listen 80;
server_name _;
location / {
proxy_pass http://default_pools;
}
location /static/{
proxy_pass http://static_pools;
}
}
}
两个web服务器。其中216服务器的主页文件为
<html>
216 216 216
<img src="http://192.168.200.214/tu.jpg">
</html>
这样用户浏览器中就会显示图片与文字的页面。
2.根据客户端的设备(user_agent)转发实践需求
location / {
if ($http_user_agent ~* "android")
{
proxy_pass http://android_pools; #这里是android服务器池
}
if ($http_user_agent ~* "iphone")
{
proxy_pass http://iphone_pools; #这里是iphone服务器池
}
proxy_pass http://pc_pools; #这里是默认的pc服务器池
include extra/proxy.conf;
}
3.根据文件扩展名实现代理转发
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|css|js)$ {
proxy_pass http://static_pools;
include proxy.conf;
}
location ~ .*\.(php|php3|php5)$ {
proxy_pass http://dynamic_pools;
include proxy.conf
}
监测Nginx代理下面节点的健康状态
淘宝技术团队开发了一个Tengine(Nginx的分支)模块Nginx_upstream_check_module,用于提供主动式后端服务器健康检查。通过它可以检测后端realserver的健康状态,如果后端realserver不可用,则所有的请求就不会转发到该节点上。
Tengine原生支持这个模块,而Nginx则需要通过打补丁的方式将该模块添加到Nginx中。补丁下载地址:https://github.com/yaoweibin/nginx_upstream_check_module。
(个人理解,如若错误请谅解指教)