nginx集群

本文介绍了Nginx集群的基本概念,包括传统web访问模型的问题、并行处理解决方案和集群的构成。重点讲解了Nginx在集群中的角色,作为分发器接受、分发和响应请求,并详细描述了Nginx集群的工作流程。此外,还提供了构建WEB集群的环境准备和配置步骤。
摘要由CSDN通过智能技术生成

目录:

一. 集群介绍

1、传统web访问模型

在这里插入图片描述
(1)传统web访问模型完成一次请求的步骤

  • 1)用户发起请求
  • 2)服务器接受请求
  • 3)服务器处理请求(压力最大)
  • 4)服务器响应请求

(2)传统模型缺点

  • 单点故障;
  • 单台服务器资源有限(客户端则是无限的);
  • 单台服务器处理耗时长(客户等待时间过长);

(3)传统模型优化——单点故障解决方案

  • 优化方案一:部署一台备份服务器,宕机直接切换
  • 该方案可以有效解决服务器故障导致的单点故障,但且服务器利用率低、成本高,切换不及时,且无法解决服务器业务压力问题。
  • 优化方案二:部署多台服务器,根据DNS的轮询解析机制去实现用户分发
  • 优势是用户处理速度得到了提升,但是当其中一台故障,dns并不会知道它故障了,依然将请求分给这个服务器,导致一部分用户访问不了业务。

2、并行处理解决方案

  • 1)DNS轮询解析方案
  • 2)多机阵列——集群模式
    在这里插入图片描述

图中,前面两台服务器负责接受请求和分发请求,它自己并不处理请求,将请求分发给后面的业务服务器来处理。业务服务器处理完请求后,将请求发还给分发器,再由分发器将请求发送给客户,因此分发器还承担了响应请求的任务。
  由此可见之前传统模型中服务器端需要承担的服务器接收请求和响应请求都交给分发器处理了,而业务压力最大的处理请求则交给业务服务器完成。
  分发器和dns虽然都是进行了分发的工作,但不同点在于分发器是自己部署的服务器,而DNS都是使用的运营商的,因此可以调整分发器的逻辑判断规则。

3、集群

计算机集群简称集群,是一种计算机系统,
它通过一组松散集成的计算机软件或硬件连接起来高度紧密地协作完成计算工作。在某种意义上,他们可以被看作是一台计算机。 (百度解释)将多个物理机器组成一个逻辑计算机,实现负载均衡和容错。

组成要素:

  • 1)VIP: 给分发器的一个虚IP
  • 2)分发器:nginx
  • 3)数据服务器:web服务器

4、Nginx集群原理

  • 在Nginx集群中Nginx扮演的角色是:分发器。
  • 任务:接受请求、分发请求、响应请求。
  • 功能模块:
    • 1)ngx_http_upstream_module:基于应用层(七层)分发模块
    • 2)ngx_stream_core_module:基于传输层(四层)分发模块(1.9开始提供该功能)

(1)Nginx集群的实质

  • Nginx集群其实是:虚拟主机+反向代理+upstream分发模块组成的。

  • 虚拟主机:负责接受和响应请求。

  • 反向代理:带领用户去数据服务器拿数据。

  • upstream:告诉nginx去哪个数据服务器拿数据。

(2)数据走向(请求处理流程)

  • 1)虚拟主机接受用户请求
  • 2)虚拟主机去找反向代理(问反向代理去哪拿数据)
  • 3)反向代理让去找upstream
  • 4)upstream告诉一个数据服务器IP
  • 5)Nginx去找数据服务器,并发起用户的请求
  • 6)数据服务器接受请求并处理请求
  • 7)数据服务器响应请求给Nginx
  • 8)Nginx响应请求给用户

二、使用Nginx分发器构建一个WEB集群

1、环境准备

实验机 : Vmware 虚拟机 2核4G   
网卡:桥接   
系统:centos7.5   
防火墙:关闭   
Selinux:关闭
网段:192.168.31.0/24   
准备四台实验机:都安装nginx服务,两台当作分发器,两台当作web服务器。

在这里插入图片描述

2、配置web业务机器

(1)nginx安装脚本

#!/bin/bash

nginx_pkg='nginx-1.5.1.tar.gz'
nginx_prefix=/usr/local/nginx
html=/var/nginx
log=/var/log/nginx

check13 () {
   [ $UID -ne 0 ] && echo "need to be root to that" && exit 1
   [ ! -f $nginx_pkg ]  && echo "not found source packager" && exit 1
   [ ! -d $html ] && mkdir -p $html
   [ ! -d $log ] && mkdir -p $log
}

nginx_install () {
   source_pkg=`echo $nginx_pkg|awk -F ".tar" '{print $1}'` 
   [ -d /usr/src/$source_pkg ]&&rm -rf /usr/src/$source_pkg
   tar xf $nginx_pkg -C /usr/src
   cp nginxd /usr/src/$source_pkg
    if [ $? -eq 0 ];then
        cd /usr/src/$source_pkg
        if [ $? -eq 0 ];then
            yum -y install gcc-* pcre pcre-devel zlib zlib-devel openssl-* &> /dev/null
            [ $? -ne 0 ]&&"YUM set error" && exit 1
            ./configure --prefix=$nginx_prefix
            if [ $? -eq 0 ];then
                make
                if [ $? -eq 0 ];then
                    make install
                    if [ $? -eq 0 ];then
                        ln -s -f $nginx_prefix/conf/nginx.conf /etc/
                        ln -s -f $nginx_prefix/logs/ $log/logs
                        ln -s -f $nginx_prefix/html $html/html
                        ln -s -f $nginx_prefix/sbin/ /usr/sbin/
                        cp nginxd /etc/init.d/nginx;chmod 755 /etc/init.d/nginx
                    else
                                            exit 1
                    fi
                else
                    exit 1
                fi
            else    
                exit 1
            fi
        else
            exit 1
        fi
    else
        exit 1
fi
 [ $? -eq 0 ]&&clear||exit
   echo -e "\n\033[32m Nginx Install Success: \033[0m"
   echo -e "\n"
   echo -e "\tNginx_conf: /etc/nginx.conf"
   echo -e "\tNginx_html: $html/html"
   echo -e "\tNginx_access_log: $log/logs/access.log"
   echo -e "\tNginx_error_log: $log/logs/error.log\n\n\n\n"
   read -n1 -p "press any key and exit...."
   echo 
}

check13
nginx_install

(2)配置web服务器操作

[root@web02 ~]# sh nginx_install     # 脚本安装nginx
[root@web02 ~]# echo web02 > /usr/local/nginx/html/index.html    # 写入页面
[root@web02 ~]# yum -y install elinks &>/dev/null    # 安装文本浏览器
[root@web02 ~]# /usr/local/nginx/sbin/nginx      # 启动nginx
[root@web02 ~]# elinks http://localhost -dump
    web02

3、配置分发器(轮询方式分发)

# 清除空行和注释项
$ sed -i '/#/d'  nginx.conf
$ sed -i '/^$/d'  nginx.conf

# 配置nginx.conf
worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    upstream web{    # 名为web的反向代理群组
        server 192.168.31.42;
        server 192.168.31.43;
    }
    server {
        listen       80;
        server_name  localhost;
        location / {
            proxy_pass http://web;   # 去找反向代理
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

4、集群分发测试(默认轮询)

  客户端访问分发器地址,默认按照轮询的方式来进行分发。
[root@web02 ~]# elinks http://192.168.31.40 -dump 
    web01
[root@web02 ~]# elinks http://192.168.31.40 -dump 
    web02
[root@web02 ~]# elinks http://192.168.31.40 -dump 
    web01
[root@web02 ~]# elinks http://192.168.31.40 -dump 
    web02
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值