前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >nginx负载均衡

nginx负载均衡

作者头像
超蛋lhy
发布2018-08-31 11:26:21
1.1K0
发布2018-08-31 11:26:21
举报
文章被收录于专栏:PythonistaPythonista

NGINX 

nginx是什么

代码语言:javascript
复制
nginx是一个开源的,支持高性能,高并发的www服务和代理服务软件。它是一个俄罗斯人lgor sysoev开发的,作者将源代码开源出来供全球使用。
nginx比它大哥apache性能改进许多,nginx占用的系统资源更少,支持更高的并发连接,有更高的访问效率。
nginx不但是一个优秀的web服务软件,还可以作为反向代理,负载均衡,以及缓存服务使用。
安装更为简单,方便,灵活。
nginx可以说是非常nb了

面试回答nginx技巧

代码语言:javascript
复制
支持高并发,能支持几万并发连接
资源消耗少,在3万并发连接下开启10个nginx线程消耗的内存不到200M
可以做http反向代理和负载均衡
支持异步网络i/o时间模型epoll

Tengine是由淘宝网发起的Web服务器项目。它在Nginx的基础上,针对大访问量网站的需求,添加了很多高级功能和特性。Tengine的性能和稳定性已经在大型的网站如淘宝网,天猫商城等得到了很好的检验。它的最终目标是打造一个高效、稳定、安全、易用的Web平台。

安装环境准备

代码语言:javascript
复制
一. gcc 安装
安装 nginx 需要先将官网下载的源码进行编译,编译依赖 gcc 环境,如果没有 gcc 环境,则需要安装:

yum install gcc-c++
二. PCRE pcre-devel 安装
PCRE(Perl Compatible Regular Expressions) 是一个Perl库,包括 perl 兼容的正则表达式库。nginx 的 http 模块使用 pcre 来解析正则表达式,所以需要在 linux 上安装 pcre 库,pcre-devel 是使用 pcre 开发的一个二次开发库。nginx也需要此库。命令:

yum install -y pcre pcre-devel
三. zlib 安装
zlib 库提供了很多种压缩和解压缩的方式, nginx 使用 zlib 对 http 包的内容进行 gzip ,所以需要在 Centos 上安装 zlib 库。

yum install -y zlib zlib-devel
四. OpenSSL 安装
OpenSSL 是一个强大的安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及 SSL 协议,并提供丰富的应用程序供测试或其它目的使用。
nginx 不仅支持 http 协议,还支持 https(即在ssl协议上传输http),所以需要在 Centos 安装 OpenSSL 库。

yum install -y openssl openssl-devel

安装,启动nginx

代码语言:javascript
复制
1.下载源码包
wget -c https://nginx.org/download/nginx-1.12.0.tar.gz
2.解压缩源码
tar -zxvf nginx-1.12.0.tar.gz
3.配置,编译安装
./configure --prefix=/opt/nginx1-12/
make && make install 
4.启动nginx,进入sbin目录,找到nginx启动命令
cd sbin
./nginx #启动
./nginx -s stop #关闭
./nginx -s reload #重新加载

nginx访问日志(access_log)

日志功能对每个用户访问网站的日志信息记录到指定的日志文件里,开发运维人员可以分析用户的浏览器行为,此功能由ngx_http_log_module模块负责,官网地址是:

http://nginx.org/en/docs/http/ngx_http_log_module.html

控制日志的参数

代码语言:javascript
复制
log_format    记录日志的格式,可定义多种格式
accsss_log    指定日志文件的路径以及格式

对应参数解析

代码语言:javascript
复制
$remote_addr    记录客户端ip
$remote_user    远程用户,没有就是 “-”
$time_local    对应[14/Aug/2018:18:46:52 +0800]
$request     对应请求信息"GET /favicon.ico HTTP/1.1"
$status      状态码
$body_bytes_sent  571字节 请求体的大小
$http_referer  对应“-”  由于是直接输入浏览器就是 -
$http_user_agent  客户端身份信息
$http_x_forwarded_for  记录客户端的来源真实ip 97.64.34.118

日志效果如下

代码语言:javascript
复制
66.102.6.6 - - [14/Aug/2018:18:46:52 +0800] "GET /favicon.ico HTTP/1.1" 404 571 "-"

 "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 Google Favicon" "97.64.34.118"

 nginx.conf默认配置

代码语言:javascript
复制
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  logs/access.log  main;

日志格式配置定义

代码语言:javascript
复制
log_format是日志关键字参数,不能变
main是日志格式指定的标签,记录日志时通过main标签选择指定的格式。 

集群的概念

代码语言:javascript
复制
集群就是一组(若干个)相互独立的计算机,利用网络组成一个较大的计算机服务器系统,每个节点运行各自的独立服务器。
服务器之间彼此通信,协同向用户提供应用程序,系统资源和数据。
当用户请求集群系统时,用户的感知就是一台单一的服务器,其实用户的请求是发给了一组服务器
代码语言:javascript
复制
就像百度的页面,你可能觉得这么简单的页面10分钟就能做出一样的页面,实际上这个页面的背后是成千上万的服务器集群协同工作提供的服务。
简单来说,集群就是一堆服务器一起干一件事,这些机器可以在一个机房,也可以分布在全国各地机房。

集群的分类

代码语言:javascript
复制
计算机集群常分为:
负载均衡集群
高性能计算集群
高可用性集群
网格计算集群

负载均衡集群

代码语言:javascript
复制
负载均衡集群为企业提供更实用,性价比更好的系统架构解决方案。
负载均衡集群可以吧客户集中的访问请求压力,尽可能平均的分摊在计算机集群中处理,每个节点都承担一定的访问请求压力,并且实现访问请求在各个节点之间动态分配,以实现负载均衡。

运作方式

代码语言:javascript
复制
负载均衡集群运行时,一般通过一个或多个负载均衡器将客户请求分发到后端的一组服务器上,从而达到整个系统的高性能和高可用性。

Nginx负载均衡集群

反向代理和负载均衡的概念

代码语言:javascript
复制
确切的说,Nginx仅仅是nginx proxy反向代理的用法,因为这个反向代理效果和负载均衡集群效果一样,也被称作nginx负载均衡。
nginx反向代理是接收用户的请求,然后重新发起请求去请求后面的节点

nginx实现负载均衡的组件

代码语言:javascript
复制
ngx_http_proxy_module    proxy代理模块,用于把请求抛给服务器节点或者upstream服务器池
ngx_http_upstream_module  负载均衡模块

反向代理逻辑图

实现一个简单的负载均衡

机器准备,两台服务器

代码语言:javascript
复制
master  192.168.11.63  主负载
slave   192.168.11.64  web1

主负载均衡节点的配置文件

代码语言:javascript
复制
worker_processes  1;
error_log  logs/error.log;
pid        logs/nginx.pid;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
    access_log  logs/access.log  main;
    sendfile        on;
    keepalive_timeout  65;
        upstream slave_pools{
    server 192.168.11.64:80 weight=1;
}
    server {
        listen       80;
        server_name  localhost;
        location / {
        proxy_pass  http://slave_pools;
            root   html;
            index  index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

检查语法并启动nginx

代码语言:javascript
复制
[root@master 192.168.11.63 /opt/nginx1-12]$/opt/nginx1-12/sbin/nginx -t
nginx: the configuration file /opt/nginx1-12/conf/nginx.conf syntax is ok
nginx: configuration file /opt/nginx1-12/conf/nginx.conf test is successful
代码语言:javascript
复制
#启动nginx
[root@master 192.168.11.63 /opt/nginx1-12]$/opt/nginx1-12/sbin/nginx
#检查端口
[root@master 192.168.11.63 /opt/nginx1-12]$netstat -tunlp|grep nginx
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      8921/nginx: master

此时访问master的服务器192.168.11.63:80地址,已经会将请求转发给slave的80端口

除了页面效果的展示以外,还可以通过log(access.log)查看代理效果

master端日志

slave端日志

Keepalived高可用软件

什么是keepalived

代码语言:javascript
复制
Keepalived是一个用C语言编写的路由软件。该项目的主要目标是为Linux系统和基于Linux的基础架构提供简单而强大的负载均衡和高可用性设施。 
还可以作为其他服务(nginx,mysql)的高可用软件
keepalived主要通过vrrp协议实现高可用功能。vrrp叫(virtual router redundancy protocol)虚拟路由器冗余协议,
目的为了解决单点故障问题,他可以保证个别节点宕机时。整个网络可以不间断的运行。 

高可用故障切换原理

代码语言:javascript
复制
在keepalived工作时,主master节点会不断的向备节点发送心跳消息,告诉备节点自己还活着,
当master节点故障时,就无法发送心跳消息,备节点就无法检测到来自master的心跳了,于是调用自身的接管程序,接管master节点的ip资源以及服务,
当master主节点恢复时,备backup节点又会释放接管的ip资源和服务,回复到原本的备节点角色。

1.硬件环境准备

代码语言:javascript
复制
实验环境应该最好是4台虚拟机,环境有限因此用2台机器
master
slave

2.centos系统和nginx代理环境

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-08-13 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • NGINX 
    • nginx是什么
      • 安装环境准备
    • 安装,启动nginx
      • nginx访问日志(access_log)
  • 集群的概念
    • 负载均衡集群
      • Nginx负载均衡集群
        • 实现一个简单的负载均衡
    • Keepalived高可用软件
    相关产品与服务
    负载均衡
    负载均衡(Cloud Load Balancer,CLB)提供安全快捷的流量分发服务,访问流量经由 CLB 可以自动分配到云中的多台后端服务器上,扩展系统的服务能力并消除单点故障。负载均衡支持亿级连接和千万级并发,可轻松应对大流量访问,满足业务需求。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档