美文网首页
9、综合架构详解-4、7层负载均衡服务

9、综合架构详解-4、7层负载均衡服务

作者: 一个反派人物 | 来源:发表于2020-12-28 12:42 被阅读0次

1 准备负载均衡的环境

1.1 集群服务器部署

集群中每台服务器的配置一摸一样

  1. 先部署好一台LNMP服务器,上传代码信息
  2. 进行访问测试
  3. 批量部署多台web服务器
  4. 将nginx配置文件进行分发
  5. 将站点目录分发给所有主机

2 Nginx负载均衡服务器部署

2.1 部署nginx

使用ngx_http_upstream_module、ngx_http_proxy_module模块,配置lb.conf文件
基本配置:

Syntax: upstream name { ... }
Default:    —
Context:    http


vim lb.conf
#定义一个负载均衡集群bigsky
upstream bigsky{
   server 172.16.1.7:80;
   server 172.16.1.8:80;
   server 172.16.1.9:80;
}
server {
    listen       80;
    server_name  www.bigsky.cn;
    location / {
       #调用负载均衡集群bigsky
       proxy_pass http://bigsky;
       #反向代理时,转发用户真实请求host
       proxy_set_header Host $http_host;
       #反向代理时,记录用户源IP
       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
       #后端web服务器返回错误时,跳过该服务器
       proxy_next_upstream error timeout http_404 http_502;
    }
}

2.1.1 调度功能

使用ngx_http_upstream_module模块

2.1.1.1 轮询分配,默认(平均)

2.1.1.2 权重分配

配置weight=,默认是1

upstream bigsky{
   server 10.0.0.7:80 weight=3;
   server 10.0.0.8:80 weight=2;
   server 10.0.0.9:80 weight=1;
}

2.1.1.3 热备功能

配置backup,当所有其他server均无效时,backup生效

upstream bigsky{
   server 10.0.0.7:80 ;
   server 10.0.0.8:80 ;
   server 10.0.0.9:80 backup;
}

2.1.1.4 最大失败次数--健康检查参数

设置max_fails=number,默认是1。达到失败次数后,认为server不可达。企业场景,建议2-3次。

2.1.1.5 失败后重传时间--健康检查参数

设置fail_timeout=time,默认是10s。当到达max_fails次数后,每隔多长时间再进行一次健康检查。常规业务2-3s比较合理。

2.1.1.6 限制最大的接收连接数

设置max_conns

upstream bigsky{
   server 10.0.0.7:80 max_fails=2 fail_timeout=10 max_conns=100;
   server 10.0.0.8:80 ;
   server 10.0.0.9:80 ;
}

2.1.2 调度算法

使用ngx_http_upstream_module模块
1. rr 轮询调度算法,默认
2. wrr 权重调度算法,配置weight

upstream bigsky{
   server 10.0.0.7:80 weight=5;
   server 10.0.0.8:80 ;
   server 10.0.0.9:80 ;
}

3. ip_hash 算法,源地址hash会话保持

upstream bigsky{
   ip_hash;
   server 10.0.0.7:80 ;
   server 10.0.0.8:80 ;
   server 10.0.0.9:80 ;
}

4. least_conn 根据服务器连接数分配资源
5. sticky 基于cookie的会话保持

语法sticky cookie name [expires=time] [domain=domain] [httponly] [secure] [path=path];,采用cookie插入方式

  • name,cookie的名字
  • expires=time,cookie过期时间,默认浏览器关闭过期
  • domain=domain,哪些域名下能够使用这个cookie
  • httponly,添加httponly属性到cookie
  • secure,添加secure属性到cookie
  • path=path,在哪个路径下使用cookie
upstream bigsky{
   server 10.0.0.7:80 ;
   server 10.0.0.8:80 ;
   server 10.0.0.9:80 ;
   sticky cookie srv_id expires=1h domain=.example.com path=/;
}

2.1.3 替换反向代理时的host

使用ngx_http_proxy_module模块,配置proxy_set_header Host $http_host;,反向代理时使用用户原有的请求host进行请求。如不配置,反向代理时,使用的是proxy_pass里的请求host。

server {
    listen       80;
    server_name  www.bigsky.cn;
    location / {
       proxy_pass http://bigsky;
       proxy_set_header Host $http_host;
    }
}

2.1.4 反向代理时添加真实客户侧信息

使用ngx_http_proxy_module模块,配置proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;,反向代理时使用X-Forwarded-For记录用户原IP地址。

server {
    listen       80;
    server_name  www.bigsky.cn;
    location / {
       proxy_pass http://bigsky;
       proxy_set_header Host $http_host;
       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

2.1.5 负载均衡时跳过返回错误的服务器

使用ngx_http_proxy_module模块,配置proxy_next_upstream error

Syntax: proxy_next_upstream error | timeout | invalid_header | http_500 | http_502 | http_503 | http_504 | http_403 | http_404 | http_429 | non_idempotent | off ...;
Default:    
proxy_next_upstream error timeout;
Context:    http, server, location

server {
    listen       80;
    server_name  www.bigsky.cn;
    location / {
       proxy_pass http://bigsky;
       proxy_set_header Host $http_host;
       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
       proxy_next_upstream error timeout http_404 http_502;
    }
}

2.2 排错思路

  1. 负载均衡-测试后端web节点服务器是否能正常访问
curl -H host:www.bigsky.cn 10.0.0.7/xxx.html
curl -H host:www.bigsky.cn 10.0.0.8/xxx.html
curl -H host:www.bigsky.cn 10.0.0.9/xxx.html
  1. 负载均衡-利用curl命令访问负载均衡服务器
  2. 外部ping负载均衡域名
  3. 配置文件编写不正确

3 负载均衡应用

3.1 根据用户访问的uri信息进行负载均衡

网站集群分离示例

实现网站集群动静分离:

  1. 提高网站服务安全性
  2. 管理操作工作简化
  3. 可以划分不同人员管理不同集群服务器

3.1.1 环境规划

uri 集群服务器地址 目录 集群类型
/upload 集群-10.0.0.8:80 html/www/upload upload服务器集群
/static 集群-10.0.0.7:80 html/www/static static服务器集群
/ 集群-10.0.0.9:80 html/www

3.1.2 编写负载均衡配置文件

编写lb.conf

upstream upload{
   server 10.0.0.8:80 ;
}
upstream static{
   server 10.0.0.7:80 ;
}
upstream default{
   server 10.0.0.9:80 ;
}
server {
    listen       80;
    server_name  www.bigsky.cn;
    location / {
       proxy_pass http://default;
       proxy_set_header Host $http_host;
       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
    location /upload/ {
       proxy_pass http://upload;
       proxy_set_header Host $http_host;
       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
    location /static/ {
       proxy_pass http://static;
       proxy_set_header Host $http_host;
       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

3.2 根据用户访问的终端信息显示不同页面

3.2.1 环境规划

终端类型 集群服务器地址 访问域名 访问类型 集群类型
iphone 集群-10.0.0.7:80 www.bigsky.cn iphone_access mobile移动端集群
谷歌 集群-10.0.0.8:80 www.bigsky.cn google_access web端集群
IE 集群-10.0.0.9:80 www.bigsky.cn default_access default端集群

3.2.2 编写负载均衡配置文件

编写lb.conf,使用$http_user_agent进行判断

upstream google{
   server 10.0.0.8:80 ;
}
upstream mobile{
   server 10.0.0.7:80 ;
}
upstream default{
   server 10.0.0.9:80 ;
}
server {
    listen       80;
    server_name  www.bigsky.cn;
    location / {
    if ($http_user_agent ~* "iphone"){
       proxy_pass http://mobile;
    }
    if ($http_user_agent ~* "chrome"){
       proxy_pass http://google;
    }
       proxy_pass http://default;
       proxy_set_header Host $http_host;
       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

4 利用redis解决后端session共享问题

4.1 后端php环境

修改/etc/php.ini文件

session.save_handler = redis
session.save_path = "tcp://redis ip地址:6379"
#如果redis存在密码,使用下面配置
session.save_path = "tcp://redis ip地址:6379?auth=密码"

注释php-fpm.d/www.conf里面内容,避免session内容写入本机文件,php注释使用;

;php_value[session.save_handler] = files
;php_value[session.save_path] = /var/lib/php/session

5 四层负载均衡配置

编译安装时需要加入--with-stream模块

创建4层负载配置文件

mkdir /usr/local/nginx/stream.conf.d
vim /usr/local/nginx/stream.conf.d/lb.conf

stream {
    log_format  proxy  '$remote_addr $remote_port - [$time_local] $status $protocol '      
                       '"$upstream_addr" "$upstream_bytes_sent" "$upstream_connect_time"' ;
    access_log  /usr/local/nginx/logs/proxy.log  proxy;
    upstream lb {
        server 172.16.1.5:80 max_fails=3 fail_timeout=30s;
        server 172.16.1.6:80 max_fails=3 fail_timeout=30s;
    }

    server {
        listen 80;
        proxy_connect_timeout 3s;
        proxy_timeout 30s;
        proxy_pass lb;
    }
}

编辑nginx.conf文件,include4层负载配置文件

events {
       ...
}

include /usr/local/nginx/stream.conf.d/*.conf

http {
      ...
}

相关文章

网友评论

      本文标题:9、综合架构详解-4、7层负载均衡服务

      本文链接:https://www.haomeiwen.com/subject/vbdonktx.html