负载均衡服务

第1章 负载均衡服务

服务作用:

(1) 对用户的请求进行调度

(2) 减少web服务器的访问压力

实现服务软件:

硬件设备方式: F5 A10 (厂商会负责培训或远程支持设备维护)

软件方式:

(1) nginx服务 利用OSI网络模型的四层或七层 实现负载均衡

(2) LVS服务 利用OSI网络模型的四层 实现负载均衡

(3) haproxy服务 利用OSI网络模型的四层或七层 实现负载均衡 (功能强大,默认有节点健康状态检查功能(图形界面))

负载均衡名词概念

(1) 集群: 多台服务器完成相同的工作 (提高网站架构并发处理能力 架构伸缩性更高 架构冗余能力强 架构成本降低)

集群条件包含但不限于

(1) 部署的软件服务相同

(2) 软件的配置相同

(3) 部署的网站代码相同(web服务器集群)

(2) 反向代理 正向代理

反向代理简述 : 可以让外网主机访问内网主机 (访问通过外网访问内网时 进行IP转换 访问内网 这个过程为反向代理 实际比这个复杂)

正向代理简述 : 可以让内网主机访问外网主机

(内网通过路由等功能访问外网时 会将IP地址进行映射 这个过程为正向代理 实际比这个复杂)

第2章 负载均衡部署

nginx服务部署负载均衡服务

web集群方面

(1) 配置后端web服务集群

(2) 编写站点目录,测试文件

(3) 进行访问测试

nginx服务部署负载均衡

(1) 负载均衡服务器更新yum源 并下载安装nginx服务

(2) 利用nginx服务的upstream模块进行负载均衡的搭建 利用proxy模块进行反向代理分发请求

主配置文件中编写

upstream old{            upstream 设置负载均衡主机表 old=主机表的名字

  server 10.0.0.7:80;     

server 10.0.0.8:80;      server 指定主机ip :80 端口 server 10.0.0.9:80;

}

# upstream 模块只能写在http模块下

server{

listen 80;               指定传输端口

server_name localhost;   默认指定域名  后面值可随意写

location /{              匹配模块  符号匹配条件执行xx命令

proxy_pass http://old;   将http请求发送给old主机表内的主机  默认为rr (轮询)

}

}

proxy 不能写入server模块中所以使用location进行默认匹配

(3) 重启nginx服务进行测试 查看是否轮询访问

第3章 upstream模块扩展应用

upstream 模块官方应用解释

Syntax: upstream name { ... } --- 指定可以分配用户请求web节点信息

Default: —                    --- 无默认值

Context: http                 --- 可在什么模块使用

扩展应用

根据节点能力进行分配用户访问请求

upstream old{

server 10.0.0.7:80 weight=3;       设置权重值为3

server 10.0.0.8:80 weight=2;       设置权重值为2

server 10.0.0.9:80 weight=1;       设置权重值为1

} 
分配访问请求时会根据权重值进行分配  权重值越高  分配任务越多

根据后端节点健康状态进行分配

web集群中万一有主机突然硬件损坏 / 网络延时等状况 造成应答不及时或无法应答

这时用户访问的时候会出现 错误代码 造成无法访问网页 为了防止发生这种情况 就要将无法返回正常信息的主机暂时停止传输请求 只对能过够返回正常页面的进行传输请求

设置方法

upstream old{

  server 10.0.0.7:80;

  server 10.0.0.8:80 max_fails=3 fail_timeout=5s;

 (主机给与n次机会  全部失败5s后在发送一次请求查看是否恢复健康)

}

根据后端节点状态进行热备节点的使用

upstream old{

  server 10.0.0.6:80;

  server 10.0.0.7:80;

server 10.0.0.9:80 backup;       将指定主机设为备用主机

}

当集群主机都无法响应请求 启用热备主机 平时热备主机不会参与集群

根据后端节点连接数进行分配

负载均衡会根据每一台主机的请求连接数进行分配请求 (连接多的少分配 少的多分配)

least_conn 根据连接数进行分配请求指令

upstream old{

least_conn;            指定开启连接数分配模式

  server 10.0.0.8:80;

  server 10.0.0.9:80;

}

根据用户源IP地址hash (哈希值) 分配请求

每一台后端主机 负载均衡服务器都会分配一个哈希值区域 当用户请求访问进来 负载均衡会记录主机信息 并赋予哈希值 这样以后这台主机在次访问会被负载均衡服务器直接分配 第一次访问时分配的web主机

缺点 容易造成负载不均衡 导致web压力过大

upstream old{

  ip_hash;             指定开启根据哈希值分配模式

  server 10.0.0.6:80;

  server 10.0.0.7:80;

}

第4章 proxy扩展功能应用

proxy模块官方应用解释

Syntax:  proxy_pass URL;                        --- 传输请求到指定主机表

Default: —                                      --- 无默认值

Context: location, if in location, limit_except --- 可在什么模块内使用

经过负载均衡服务器 访问网站看到不同页面

根据前缀来访问不同的页面 默认传输的数据时 请求头是没有数据的会进行默认首选项的匹配

使用模块 proxy_set_header修改请求头信息 使访问不同网站显示不同的页面

使用方法: proxy_set_header Host $host;

upstream old {

 server 10.0.0.7:80;

 server 10.0.0.8:80;

 server 10.0.0.9:80;

}   

# 设置主机表

server {

 listen 80;

 server_name localhost;

 location / {

 proxy_pass http://old;

 proxy_set_header Host $host;      指定请求头信息为$host (原始请求头信息)

 }

}

让web节点日志显示真是用户IP地址

proxy_set_header 在请求头中添加内容

upstream old{

  server 10.0.0.7:80;

  server 10.0.0.8:80;

  server 10.0.0.9:80;

}

server{

listen      80;

server_name    localhost;

location / {

  proxy_pass    [http://old](http://old);

  proxy_set_header  Host $host;

  proxy_set_header   X-Forwarded-For $remote_addr;      指定请求行添加源ip地址

}

}

根据页面显示信息进行健康检查

server {

 listen 80;

 server_name localhost;

 location / {

 proxy_pass http://oldboy;

 proxy_set_header Host $host;

 proxy_set_header X-Forwarded-For  $remote_addr;

 proxy_next_upstream error timeout invalid_header http_404;     指定出现什么状态不进行显示  显示健康状态主页

 }

}

说明: 这样给用户显示的页面一定是正常的页面信息

第5章 负载均衡企业应用

负载均衡动静页面分离

思路 将动态静态页面分开建立主机表 然后用location进行匹配执行分配访问请求

负载均衡服务器配置:

upstream dynamic {

 server 10.0.0.7:80;

}   

upstream static {

 server 10.0.0.8:80;

}   

upstream upload {

 server 10.0.0.9:80;

}   

server {

 listen 80;

 server_name localhost;

 location /dynamic/ {

 proxy_pass http://dynamic;

 proxy_set_header Host $host;

 proxy_set_header X-Forwarded-For $remote_addr;

 proxy_next_upstream error timeout invalid_header http_404;

 }

 location /static/ {

 proxy_pass http://static;

 proxy_set_header Host $host;

 proxy_set_header X-Forwarded-For $remote_addr;

 proxy_next_upstream error timeout invalid_header http_404;

 }

 location /upload {

 proxy_pass http://upload;

 proxy_set_header Host $host;

 proxy_set_header X-Forwarded-For $remote_addr;

 proxy_next_upstream error timeout invalid_header http_404;

 }

}

利用负载均衡 实现访问时显示不同网页(手机端or电脑端)

判断请求信息中 主机信息 是使用什么设备进行的访问 根据不同设备返回不同网页

upstream chrome {               设置主机表

 server 10.0.0.7:80;

}   

upstream Android {

 server 10.0.0.8:80;

}   

location / {   

 if ($http_user_agent ~* chrome) {         if判断功能 日志中访问设备信息是否匹配chrome(谷歌浏览器内核)

 proxy_pass [http://chrome](http://chrome);     如果成立  将数据传输给指定服务器显示浏览器页面

 }

if ($http_user_agent ~* Android) {         if判断功能 判断是否匹配Android(安卓系统内核)

 proxy_pass http://iphone;

 }

 proxy_pass http://default;

 proxy_set_header Host $host;

 proxy_set_header X-Forwarded-For $remote_addr;

 proxy_next_upstream error timeout invalid_header http_404;

 }

$http_user_agent 调取日志主机信息中 访问设备信息

第6章 企业中服务网络安全访问配置

目的: 尽可能不暴露企业服务器IP地址给用户

第一步: 修改负载均衡配置文件

upstream oldboy {

 server 10.0.0.7:80;

 server 10.0.0.8:80;

 server 10.0.0.9:80;

}   

server {

 listen 10.0.0.3:80;        只监听指定ip的访问请求 (注意要自己网卡有的IP)

 server_name localhost;

 location / {

 proxy_pass http://oldboy;

 proxy_set_header Host $host;

 proxy_set_header X-Forwarded-For $remote_addr;

 }

}

第二步修改内核信息 修改为允许监听本地网卡没有的IP地址

echo 'net.ipv4.ip_nonlocal_bind = 1' >>/etc/sysctl.conf 修改内核信息

sysctl -p 查看是否允许监听没有的IP地址

注意项:

(1) nginx程序涉及到IP地址修改,必须重启nginx

(2) 监听的地址必须是本地网卡上有的地址

如何监听网卡上没有的地址:

解决方法:

echo 'net.ipv4.ip_nonlocal_bind = 1' >>/etc/sysctl.conf
sysctl -p

你可能感兴趣的:(负载均衡服务)