共计 4419 个字符,预计需要花费 12 分钟才能阅读完成。
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 负载均衡配置 相关教程见以下内容:
Nginx 负载均衡配置说明 http://www.linuxidc.com/Linux/2016-03/129424.htm
Linux 下 Nginx+Tomcat 负载均衡和动静分离配置要点 http://www.linuxidc.com/Linux/2016-01/127255.htm
Docker+Nginx+Tomcat7 配置简单的负载均衡 http://www.linuxidc.com/Linux/2015-12/125907.htm
Nginx 负载均衡(主备)+Keepalived http://www.linuxidc.com/Linux/2015-12/126865.htm
使用 Nginx 作为负载均衡器 http://www.linuxidc.com/Linux/2015-12/125789.htm
使用 Nginx 简单实现负载均衡 http://www.linuxidc.com/Linux/2016-08/134443.htm
Nginx 负载均衡与高可用的实现 http://www.linuxidc.com/Linux/2016-04/130350.htm
Nginx 的详细介绍:请点这里
Nginx 的下载地址:请点这里
本文永久更新链接地址:http://www.linuxidc.com/Linux/2016-10/136116.htm