keepalived:是一个备份方案里面的一个关键的软件,主要是主监控从,一旦宕机立刻接管,
virtual IP:相当于一个权杖,是对外真正提供服务的IP,当nginx1是主,nginx2是副,那么只要主挂了,副就能够直接将主导权抢过来,负责通信业务
对于session方式,用户信息存放在服务器端,那么就直接搞一台session服务器,所有服务器就去session服务器上去读取用户信息,那么session同步解决了
web2到mysql中加缓存可以避免频繁的从mysql中读取相同的数据,加一个缓存层直接提升了速度,(注意缓存是直接存在内存中的,提高了IO速度)
后面的Web服务不管是什么系统(Nginx Apache),只要内容一样就可以了,但是一样的方便维护
Nginx 的负载均衡模块目前支持 4 种调度算法, 下面进行分别介绍,其中后两项属于第 三方的调度方法:
轮询poll(默认)。 每个请求按时间顺序逐一分配到不同的后端服务器,如果后端某台 服务器宕机,故障系统被自动剔除, 使用户访问不受影响。
Weight指定轮询权值, Weight 值越大, 分配到的访问机率越高, 主要用于后端每 个服务器性能不均的情况下。 就是权重值,可以设置
ip_hash。 每个请求按访问 IP 的 hash 结果分配,这样来自同一个 IP 的访客固定访 问一个后端服务器, 有效解决了动态网页存在的 session 共享问题。
fair。 比上面两个更加智能的负载均衡算法。 此种算法可以依据页面大小和加载时 间长短智能地进行负载均衡, 也就是根据后端服务器响应时间来分配请求,响应时间短的优先分配。 Nginx 本身是不支持 fair 的,如果需要使用这种调度算法,必须下载 Nginx的upstream_fair 模块。
url_hash。按访问 url 的 hash 结果来分配请求,使每个 url 定向到同一个后端服务器, 可以进一步提高后端缓存服务器的效率。 Nginx 本身是不支持 url_hash 的,如果需要使用这种调度算法,必须安装 Nginx 的 hash 软件包。
ip_hash在背后还是需要轮询的,只是在轮询的基础上做了识别
注意 当负载调度算法为 ip_hash 时,后端服务器在负载均衡调度中的状态不能是 weight 和 backup。
没有指定的就是默认的,就是轮询
做负载均衡服务器:
upstream myserver {
# server 172.16.60.32:80 weight=2 max_fails=3 fail_timeout=20s; 权重
# server 172.16.60.31:80 weight=1 max_fails=3 fail_timeout=20s;
server 172.16.60.32:80;
server 172.16.60.31:80;
server 172.16.60.52:80;
}
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location /{
root html;
index index.html index.htm;
proxy_pass http://myserver; ##注意这里,就是引用上面定义的proxy,定义了就要引用
proxy_next_upstream http_500 http_502 http_503 error timeout invalid_header;
include /opt/nginx/conf/proxy.conf;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500502503504/50x.html;
location =/50x.html {
root html;
}
需要创建/opt/nginx/conf/proxy.conf文件:
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 4k;
proxy_buffers 432k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
三种算法区别:
轮询
upstream myserver {
server 172.16.60.32:80;
server 172.16.60.31:80;
server 172.16.60.52:80;
}
权重:
upstream myserver {
server 172.16.60.32:80 weight=2 max_fails=3 fail_timeout=20s;
server 172.16.60.31:80 weight=1 max_fails=3 fail_timeout=20s;
server 172.16.60.52:80 weight=3 max_fails=3 fail_timeout=20s;
}
IP hash:
upstream myserver {
ip_hash;
server 172.16.60.32:80;
server 172.16.60.52:80;
server 172.16.60.31:80;
}
假如提示80端口占用就使用fuser -k 80/tcp杀掉占用80端口的程序
nginx集群实验总结;
1,明确拓扑结构,明确IP地址架构
2,确定real_server确定是可用的
3,确定real_server和集群服务器上selinux和seLinux不影响服务
4,看好了自己启用的nginx的目录是自己所配置的,不要改错了文件夹,
5,定义了负载均衡器名称要调用,一旦访问80端口就要转到负载均衡器上面,前面的http://表明转发的是http协议,是固定语法,是
6,注意括号问题
7,看英文报错误
那么问题来了:
数据从客户机 –>负载均衡—>real_server 的来回?从封装角度理解
数据经过负载均衡服务器之后,源IP和目的IP是否会发生改变?
答案:数据包经过nginx均衡服务器后,目的端口和目的IP地址和mac地址变为real_server的,源IP和端口和mac变为nginx服务器的
nginx是负责的代理的工作,完全代理,所以外面的客户机是根本就不知道里面real_server的真实地址的
高性能:大量的并发,同时处理大量的请求和数据–>集群解决方案
高可用:备份—>备份
keepalived:
keepalived是什么?
keepalived是集群管理中保证集群高可用的一个服务软件,其功能类似于heartbeat,用来防止单点故障。heartbeat(心跳)
keepalived工作原理
keepalived是以VRRP协议为实现基础的,VRRP全称Virtual Router Redundancy Protocol,即虚拟路由冗余协议。
虚拟路由冗余协议,可以认为是实现路由器高可用的协议,即将N台提供相同功能的路由器组成一个路由器组,这个组里面有一个master和多个backup,master上面有一个对外提供服务的vip(该路由器所在局域网内其他机器的默认路由为该vip),master会发组播,当backup收不到vrrp包时就认为master宕掉了,这时就需要根据VRRP的优先级来选举一个backup当master。这样的话就可以保证路由器的高可用了。
keepalived主要有三个模块,分别是core、check和vrrp。core模块为keepalived的核心,负责主进程的启动、维护以及全局配置文件的加载和解析。check负责健康检查,包括常见的各种检查方式。vrrp模块是来实现VRRP协议的。
keepalived的配置文件
keepalived只有一个配置文件keepalived.conf,里面主要包括以下几个配置区域,分别是global_defs、static_ipaddress、static_routes、vrrp_script、vrrp_instance和virtual_server。
global_defs区域
主要是配置故障发生时的通知对象以及机器标识
什么是四层负载均衡,什么是七层负载均衡?
四层:传输层,IP+port
七层:应用层,当然也能够用四层进行负载均衡
为什么四层的负载均衡快?各自的优缺点
四层负载均衡只修改IP包头的IP地址和端口,只相当于个路由器的功能,外面能看真实服务器的IP地址,不做tcp连接,只是做个转发,所以说四层要快,大并发
七层负载均衡是代理TCP连接,外面看不到里面的真实情况,我们学的nginx里面的就是七层,两面都要建立tcp连接,所以对性能的要求会更高
四层:lvs–>是中国人章文嵩搞的,现在在淘宝网,现在已经嵌入到Linux内核中去了, 美国人的F5也能够实现四层负载均衡,
七层:nginx,HAproxy,等
lvs也是需要keepalived做高可用的
集群:cluster
更多Nginx负载均衡配置相关教程见以下内容: