1.1 集群是什么

  简单地说,集群就是指一组(若干个)相互独立的计算机,利用高速通信网络组成的一个较大的计算机服务系统,每个集群节点(即集群中的每台计算机)都是运行各自服务的独立服器。这些服务器之间可以彼此通信,协同向用户提供应用程序、系统资源和数据,并以单一系统的模式加以管理。当用户客户机请求集群系统时,集群给用户的感觉就是一个单一独立的服务器,而实际上用户请求的是一组集群服务器。

  打开谷歌、百度的页面,看起来好简单,也许你觉得用几分钟就可以制作出相似的网页,而实际上,这个页面的背后是由成千上万台服务器集群协同工作的结果。而这么多的服务器维护和管理,以及相互协调工作也许就是读者你未来的工作职责了。

  若要用一句话描述集群,即一堆服务器合作做同一件事,这些机器可能需要整个技术团队架构、设计和统一协调管理,这些机器可以分布在一个机房,也可以分布在全国全球各个地区的多个机房。

1.2 为什么要有集群

  高性能、价格有效性、可伸缩性、高可用性

  透明性、可管理性、可编辑性

1.2.1 集群种类

  负载均衡集群 LB 解决调度问题

  高可用集群  HA 解决单点故障问题(keeplived

  高性能计算集群         HP 、网络计算集群 GC

1.2.2 硬件设备

  F5 设备   A10

1.2.3 软件

  nginx (7层  1.9版本之后支持4层)、LVS (4层)、HAproxy (4层 7层)

1.2.4 负载均衡概念说明

  对用户的访问请求进行调度管理

  对用户的访问请求进行压力分担

1.2.5 反向代理

  接收用户请求代替用户向后端访问

  反向代理与数据转发的区别

1.2.6 压力测试的方式

  ab (apache里的命令)

  通过   yum install httpd-tools   获得

1.3 nginx反向代理实践

1.3.1 地址规划说明

HOSTNAME

IP

说明

lb01

10.0.0.5

Nginx 主负载服务器

lb02

10.0.0.6

nginx 辅负载服务器

web01

10.0.0.8

web01服务器

web02

10.0.0.7

web02服务器

web03

10.0.0.9

web03服务器

说明:以上为实际生产架构负载实现规划内容

ip命令说明

ip address show  查看ip地址
ip route show 查看路由信息

1.3.2 反向代理与数据转发的区别

1.3.3 安装部署nginx过程(安装命令集)

yum install -y pcre-devel openssl-devel
mkdir -p /server/tools
cd /server/tools
wget -q http://nginx.org/download/nginx-1.10.3.tar.gz
ls -l nginx-1.10..tar.gz
useradd www -s /sbin/nologin -M
tar xf nginx-1.10..tar.gz
cd nginx-1.10.
./configure --user=nginx --group=nginx --prefix=/application/nginx-1.10. --with-http_stub_status_module --with-http_ssl_module
make
make install
ln -s /application/nginx-1.10. /application/ngin

1.3.4 编写nginx配置文件(统一web服务器配置)

worker_processes  ;
events {
worker_connections ;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout ;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
server {
listen ;
server_name bbs.etiantian.org;
location / {
root html/bbs;
index index.html index.htm;
}
access_log logs/access_bbs.log main;
}
server {
listen ;
server_name www.etiantian.org;
location / {
root html/www;
index index.html index.htm;
}
access_log logs/access_www.log main;
}
}

1.3.5 统一nginx测试环境 (web文件)

mkdir -p /application/nginx/html/{www,bbs}
for name in www bbs; do echo $name `hostname` >/application/nginx/html/$name/xiaoxinxin.html;done
for name in www bbs; do cat /application/nginx/html/$name/xiaoxinxin.html;done

1.3.6 测试

[root@lb01 ~]# curl -H host:bbs.etiantian.org  10.0.0.8/xiaoxinxin.html
bbs web01
[root@lb01 ~]# curl -H host:bbs.etiantian.org 10.0.0.7/xiaoxinxin.html
bbs web02
[root@lb01 ~]# curl -H host:bbs.etiantian.org 10.0.0.9/xiaoxinxin.html
bbs web03
[root@lb01 ~]# curl -H host:www.etiantian.org 10.0.0.8/xiaoxinxin.html
www web01
[root@lb01 ~]# curl -H host:www.etiantian.org 10.0.0.7/xiaoxinxin.html
www web02
[root@lb01 ~]# curl -H host:www.etiantian.org 10.0.0.9/xiaoxinxin.html
www web03

1.3.7 配置负载服务文件

worker_processes  ;
events {
worker_connections ;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout ;
upstream server_pools {
server 10.0.0.7:;
server 10.0.0.8:;
server 10.0.0.9:;
}
server {
listen ;
server_name bbs.etiantian.org;
location / {
proxy_pass http://server_pools;
}
}

1.3.8 测试访问

[root@lb01 conf]# curl -H host:bbs.etiantian.org 10.0.0.5/xiaoxinxin.html
bbs web03
[root@lb01 conf]# curl -H host:bbs.etiantian.org 10.0.0.5/xiaoxinxin.html
bbs web02
[root@lb01 conf]# curl -H host:bbs.etiantian.org 10.0.0.5/xiaoxinxin.html
bbs web01

1.4 nginx中常用模块说明

ngx_http_status_module
ngx_http_ssl_module
ngx_http_log_module
ngx_http_upstream_module
ngx_http_proxy_module

1.4.1 模块调度算法

     ①. 定义轮询调度算法-rr-默认调度算法

      ②. 定义权重调度算法-wrr

    ③. 定义静态调度算法-ip_hash

    ④. 定义最小的连接数-least_conn

1.4.2 nginx反向代理相关两个模块

    upstream 模块 类似与一个池塘,将nginx节点放置到池塘中

    proxy模块  用池塘里面的nginx节点,利用pr oxy进行调用

1.4.3 upstream模块核心参数简介

    weight 权重

    max_fails 抛得次数

    fail_timeout 失败的超时时间

    backup  备份

1.4.4 weight 参数实践 (权重)

  upstream 模块只能在http区块里

worker_processes  ;
events {
worker_connections ;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout ;
upstream server_pools{
server 10.0.0.7: weight=;
server 10.0.0.8: weight=;
}
server{
listen ;
server_name bbs.etiantian.org;
location / {
proxy_pass http://server_pools;
}
}
}

测试

[root@test tools]# curl 10.0.0.5
web01 www
[root@test tools]# curl 10.0.0.5
web01 www
[root@test tools]# curl 10.0.0.5
web02 www
[root@test tools]# curl 10.0.0.5
web01 www
[root@test tools]# curl 10.0.0.5
web01 www
[root@test tools]# curl 10.0.0.5
web02 www

1.4.5 其他的参数说明

  max_fails    失败的尝试次数

  fail_timeout 失败后的再次尝试时间

  backup 备份节点:所有的节点都挂掉后数据才会请求web01

server 10.0.0.7: weight= max_fails= fail_timeout= ;
server 10.0.0.8: weight= max_fails= fail_timeout= backup;

测试,将web02停掉

[root@test tools]# curl 10.0.0.5
web02 www
[root@test tools]# curl 10.0.0.5
web02 www

停掉web02后

[root@test tools]# curl 10.0.0.5
web01 www
[root@test tools]# curl 10.0.0.5
web01 www
[root@test tools]# curl 10.0.0.5

1.4.6 访问抓包

用户请求报文

负载均衡请求报文

说明:

hosts 主机头不同,未配置proxy_set_header Host $host 参数,在负载均衡访问的时候会不带hosts信息。

1.4.7 upsrteam参数详细说明

upstream模块内参数

参数说明

server 10.0.10.8:80

负载均衡后面的RS配置,可以是IP或域名,如果端口不写,默认是80端口。

高并发场景下, IP可换成域名,通过 DNS做负载均衡。

weigth=1

代表服务器的权重,默认值是1。权重数字越大表示接受的请求比例越大。

max_fails=3

Nginx尝试连接后端主机失败的次数,这个值是配合 proxy_next_upstream、fastcgi_next_upstream和memcached_next_upstream 这三个参数来使用的。当nginx接收后端服务器返回这三个参数定义的状态码时,会将这个请求转发给正常工作的后端服务器,例如404、502、503、 Max_fails的默认值是1 ;

企业场景下建议2-3次。如京东1次,蓝汛10次,根据业务需求去配置

fail_timeout=10s

在max_fails定义的失败次数后,距离下次检查的间隔时间,默认是10s ;如果max_fails是5 ,它就检测5次,如果5次都是502,那么,它就会根据fail_timeout的值,等待10s再去检查,还是只检查一次,如果持续502,在不重新加载 Nginx配置的情况下,每隔10s都只检查一次。常规业务2~3秒比较合理,比如京东3秒,蓝汛3秒,可根据业务需求去配置。

backup

热备配置(RS节点的高可用),当前面激活的RS都失败后会自动启用热备RS这标志看这个服务器作为备份服务器,若主服务器全部宕机了,就会向它转发请求。

注意:当负载调度算法为ip_hash时,后端服务器在负载均衡调度中的状态不能是weight和backup。

down

这标志着服务器永远不可用,这个参数可配合ip_hash使用;类似与注释。

  weight :调节服务器的请求分配权重。1.4.8 上述命令的说明如下:

    

Nginx的反向代理与负载均衡的更多相关文章

  1. Windos环境用Nginx配置反向代理和负载均衡

    Windos环境用Nginx配置反向代理和负载均衡 引言:在前后端分离架构下,难免会遇到跨域问题.目前的解决方案大致有JSONP,反向代理,CORS这三种方式.JSONP兼容性良好,最大的缺点是只支持 ...

  2. nginx的反向代理和负载均衡的一个总结

    之前一直觉的nginx的反向代理和负载均衡很厉害的样子,最近有机会接触了一下公司的这方面的技术,发现技术就是一张窗户纸呀,捅破了啥都明白了! 接下来先看一下nginx的反向代理: 简单的来说就是ngi ...

  3. nginx简单反向代理和负载均衡(ubuntu)

    nginx简单反向代理与负载均衡 环境:三台ubuntu 12.04.5 虚拟机    均装有nginx 1.1.19 以下u1(192.168.240.129) ,u2(192.168.240.13 ...

  4. nginx的反向代理和负载均衡的区别是什么 - 开源中国社区

    nginx的反向代理和负载均衡的区别是什么 - 开源中国社区   nginx的反向代理和负载均衡的区别是什么 #user  nobody;worker_processes  1;#error_log  ...

  5. nginx(三)反向代理和负载均衡

    nginx(三)反向代理和负载均衡 正向代理概念:比如在学校要上网,在学校内网是一个内网ip,需要连上公网就需要一个正向代理服务器. 反向代理概念: 看下图(Nginx只做请求的转发,后台有多个htt ...

  6. 七、CentOS 6.5 下 Nginx的反向代理和负载均衡的实现

    CentOS 6.5 下 Nginx的反向代理和负载均衡的实现 * 修复上面文章的问题: 复制出一个tomcat2之后,修改service.xml文件时,要修改三个端口: 1. <!-- 800 ...

  7. nginx实现反向代理和负载均衡

    利用nginx做反向代理和负载均衡是减轻服务器压力的有效方式.nginx代理服务器接收多个客户端请求, 根据配置的参数均衡到每个tomcat服务器上,tomcat处理请求,返回响应结果给nginx,n ...

  8. Nginx使用反向代理实现负载均衡

    Nginx使用反向代理实现负载均衡 yls 2019-9-20 简介 基于docker容器以及docker-compose,所以需要自学docker在linux环境的基本使用 使用两个tomcat作为 ...

  9. nginx 配置反向代理,负载均衡实战解析

    前言:NGINX的反向代理和负载均衡是网站架构中经常用到的一种高并发,高可用的方案,下面我们直接实战操作,当然理论也是要的. 一.反向代理 过程:反向代理:客户端 一>代理 <一> ...

  10. [笔记]nginx配置反向代理和负载均衡

    1.nginx配置文件:源码安装情况下,nginx.conf在解压后的安装包内.yum安装,一般情况下,一部分在/etc/nginx/nginx.conf中,一部分在/etc/nginx/conf.d ...

随机推荐

  1. Java求555 555的约数中最大的三位数。

    package org.llh.test; /** * 求555 555的约数中最大的三位数 * @author llh * */ public class Car { //整数j除以整数i(i≠0) ...

  2. C++实现引用和被引用对象分离

    上一篇博客简单介绍了C++中引用的底层实现,接下来,通过简单的代码验证如何将引用和被引用对象分离. 代码如下; #include <iostream> #include<string ...

  3. 原生JS实现图片放大镜插件

      前  言 我们大家经常逛各种电商类的网站,商品的细节就需要用到放大镜,这个大家一定不陌生,今天我们就做一个图片放大镜的插件,来看看图片是如何被放大的…… 先看一下我们要是实现的最终效果是怎么样的  ...

  4. js中的浅复制和深复制

    浅复制:浅复制是复制引用,复制后的引用都是指向同一个对象的实例,彼此之间的操作会互相影响 深复制:深复制不是简单的复制引用,而是在堆中重新分配内存,并且把源对象实例的所有属性都进行新建复制,以保证深复 ...

  5. 移动端车牌识别sdk开发包(可下载)

    移动端车牌识别是一项基于OCR识别的应用技术.移动端车牌识别过程主要包含五个步骤,其中包括图像采集.图像预处理.车牌定位.字符分割.字符识别.输出结果等一系列计算机算法运算, 第一步[图像采集]:此步 ...

  6. HTML学习笔记 w3sCss盒子模型(阴影)(div的一些使用)案例 第十节 (原创) 参考使用表

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  7. SQL Server 审计

    审计(Audit)用于追踪和记录SQL Server实例或数据库中发生的事件,审计主要包括审计对象(Audit)和审计规范(Audit Specification),创建审计首先需要创建一个SQL S ...

  8. 一起写框架-Ioc内核容器的实现-基础功能-ComponentScan支持组件注解限制(七)

    实现功能 以上的代码我们发现.我们都是将@ComponentScan扫描的路径下的所有类都加载到容器中的. 而实际需求,我们并不希望所有的类都创建对象,而是加了组件注解@Controller,@Ser ...

  9. Spring MVC的配置与DispatcherServlet的分析

    Spring MVC是一款Web MVC框架,是目前主流的Web MVC框架之一. Spring MVC工作原理简单来看如下图所示: 接下来进行Spring MVC的配置 首先我们配置Spring M ...

  10. Spring AOP高级——源码实现(2)Spring AOP中通知器(Advisor)与切面(Aspect)

    本文例子完整源码地址:https://github.com/yu-linfeng/BlogRepositories/tree/master/repositories/Spring%20AOP%E9%A ...