nginx负载均衡部署

82 篇文章 3 订阅

###############概念###########################################

1.什么是nginx?

Nginx (engine x)是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的 Rambler.ru站点(文:Рамблер)开发的,第一个公开版本0.1.0发布于2004年10月4日。其将源代码以类BSD许可证的形式发布, 因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。2011年6月1日,nginx 1.0.4发布。
Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百 度、京东、新浪、网易、腾讯、淘宝等。

2.nginx的优点?

Nginx 可以在大多数 UnixLinux OS 上编译运行,并有 Windows 移植版。 Nginx 的1.4.0稳定版已经于2013年4月24日发布,一般情况下,对于新建站点,建议使用最新稳定版作为生产版本,已有站点的升级急迫性不高。
Nginx 的源代码使用 2-clause BSD-like license。
Nginx 是一个很强大的高性能Web和反向代理服务器,它具有很多非常优越的特性:
在连接高并发的情况下,Nginx是Apache服务器不错的替代品:Nginx在美国是做虚拟主机生意的老板们经常选择的软件平台之一。能够支持高达 50,000 个并发连接数的响应,感谢Nginx为我们选择了 epoll and kqueue作为开发模型。

3.nginx负载均衡?

    网站的访问量越来越大,服务器的服务模式也得进行相应的升级,比如分离出数据库服务器、分离出图片作为单独服务,这些是简单的数据的负载均衡,将压力分散 到不同的机器上。有时候来自web前端的压力,也能让人十分头痛。怎样将同一个域名的访问分散到两台或更多的机器上呢?这其实就是另一种负载均衡 了,nginx自身就可以做到,只需要做个简单的配置就行。
  nginx不单可以作为强大的web服务器,也可以作为一个反向代理服务器,而且nginx还可以按照调度规则实现动态、静态页面的分离,可以按照轮询、ip哈希、URL哈希、权重等多种方式对后端服务器做负载均衡,同时还支持后端服务器的健康检查。

4.nginx服务器?

Nginx作为负载均衡服务器:Nginx 既可以在内部直接支持 Rails 和 PHP 程序对外进行服务,也可以支持作为HTTP代理服务器对外进行服务。
Nginx采用C进行编写,不论是系统资源开销还是CPU使用效率都比 Perlbal 要好很多。处理静态文件,索引文件以及自动索引;打开文件描述符缓冲。 无缓存的反向代理加速,简单的负载均衡和容错。
FastCGI,简单的负载均衡和容错。 模块化的结构。包括 gzipping, byte ranges, chunked responses,以及 SSI-filter 等 filter。如果由 FastCG或其它代理服务器处理单页中存在的多个SSI,则这项处理可以并行运行,而不需要相互等待。 支持 SSL 和 TLSSNI。

作为邮件代理服务器:Nginx 同时也是一个非常优秀的邮件代理服务器(最早开发这个产品的目的之一也是作为邮件代理服务器),Last.fm 描述了成功并且美妙的使用经验。 Nginx 是一个安装非常的简单、配置文件非常简洁(还能够支持perl语法)、Bug非常少的服务器。Nginx 启动特别容易,并且几乎可以做到7*24不间断运行,即使运行数个月也不需要重新启动。你还能够不间断服务的情况下进行软件版本的升级。

nginx 的 upstream目前支持 4 种方式的分配
1)、轮询(默认)
  每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
2)、weight
  指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
3)、ip_hash
  每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
4)、fair(第三方)
  按后端服务器的响应时间来分配请求,响应时间短的优先分配。
5)、url_hash(第三方)

###################nginx部署#########################

实验准备:

创建一个新的虚拟机(目的是有一个纯净环境,便于实验),例如我们创建的虚拟机名叫server1。

实验步骤:

在server1上:

(1)安装以及修改配置文件

[root@server1 ~]# ls
nginx-1.14.0.tar.gz   ##安装包
[root@server1 ~]# tar zxf nginx-1.14.0.tar.gz   ##解压
[root@server1 ~]# ls
 nginx-1.14.0   ##解压后的目录
[root@server1 ~]# cd nginx-1.14.0
[root@server1 nginx-1.14.0]# cd src/
[root@server1 src]# cd core/
[root@server1 core]# vim nginx.h   ##编辑内容
[root@server1 core]# cd ..
[root@server1 src]# cd ..
[root@server1 nginx-1.14.0]# cd auto/
[root@server1 auto]# cd cc/
[root@server1 cc]# vim gcc   ##编辑文件
[root@server1 cc]# cd
[root@server1 ~]# cd nginx-1.14.0
[root@server1 nginx-1.14.0]# yum install gcc -y    ##安装gcc语言
[root@server1 nginx-1.14.0]# yum install openssl-devel -y   ##安装依赖性
[root@server1 nginx-1.14.0]# yum install pcre-devel -y   ##安装依赖性

在gcc文件中:

在nginx.h文件中(删掉的内容可以不显示版本号):

[root@server1 core]# vim nginx.h
#define NGINX_VER          "nginx"

(2)编译三部曲

[root@server1 cc]# cd ..
[root@server1 auto]# cd ..
[root@server1 nginx-1.14.0]# ./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_stub_status_module --with-threads --with-file-aio      #编译第1步
[root@server1 nginx-1.14.0]# make  #编译第2步
[root@server1 nginx-1.14.0]# make install    #编译第3步
[root@server1 nginx-1.14.0]# cd /usr/local/nginx/
[root@server1 nginx]# ls
[root@server1 nginx]# du -sh   #查看大小

 

(3)制作软连接(创建完成后就可以直接调用)

(4)打开nginx

nginx的相关命令

命令含义
nginx开启nginx服务
nginx -t检查配置文件的语法
nginx -s stop关闭nginx服务
nginx -s reload

重新加载nginx服务

(5)在网页输入server1的IP,进行nginx检测

(6)添加文件

[root@server1 ~]# cd /usr/local/nginx/html
[root@server1 html]# vim test.html
<h1>www.westos.org</h1>
[root@server1 html]# ls
50x.html  index.html  test.html
#默认发布文件:index.html

再次测试:

##########################nginx实现负载均衡########################

1.轮循(默认)

每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。

在调度器(server1)上:

[root@server1 ~]# sysctl -a |grep file
fs.file-nr = 448    0   98864
fs.file-max = 98864    ##最大进程数
[root@server1 ~]# vim /etc/security/limits.conf    ##添加内容
[root@server1 ~]# cd /usr/local/nginx/
[root@server1 nginx]# cd conf/
[root@server1 conf]# lscpu   ##查看cpu
CPU(s):                1   
[root@server1 conf]# vim nginx.conf   ##修改内容
[root@server1 conf]# useradd -M -d /usr/local/nginx/ nginx    ##建立用户
[root@server1 conf]# id nginx
uid=500(nginx) gid=500(nginx) groups=500(nginx)
[root@server1 conf]# nginx -t   
[root@server1 conf]# nginx -s reload
[root@server1 conf]# nginx -s reload
  • 在/etc/security/limits.conf文件中


在nginx.conf文件中

Nginx worker_processes进程数设置,一般来说,拥有几个逻辑CPU,就设置为几个worker_processes 为宜
本机只有一个cpu我设置为1,也可调用auto函数,自动匹配。

worker_cpu_affinity的说明
默认是没有开启的,0001  0010    0100   1000 分别代表第1、2、3、4个逻辑CPU。

设置轮叫upstream

在末尾加入:
当访问 www.westos.org的80端口时把页面定位到upstream westos

在后端服务器(server2和server3)上:

(1)开启server2和server3的httpd服务

root@server2 ~]# /etc/init.d/httpd start
[root@server3 ~]# /etc/init.d/httpd start

在客户端(物理主机上):

(1)添加本地域名解析

root@foundation14 ~]# vim /etc/hosts
172.25.9.1 www.westos.org

(2)测试:

root@foundation9 ~]# curl www.westos.org

2.IP哈希

Nginx中的ip_hash技术能够将某个ip 的请求定向到同一台后端web机器中,这样一来这个ip 下的客户端和某个后端 web机器就能建立起稳固的链接
ip_hash机制能够让某一客户机在相当长的一段时间内只访问固定的后端的某台真实的web服务器,这样会话就会得以保持,在网站页面进行login的时候就不会在后面的web服务器之间跳来跳去了,也不会出现登录一次的网站又提醒重新登录的情况.

(1)在调度器上(server1):

[root@server1 conf]# vim nginx.conf
[root@server1 conf]# nginx -t
[root@server1 conf]# nginx -s reload

 

(2)在客户端(物理机)上:

注意:加入ip_hash 原地址不变后端地址也不变,只有这台服务器挂了以后另一台会补上。一般写在前面的后端服务最先建立连接。

3.权重weight

[root@server1 conf]# vim nginx.conf
[root@server1 conf]# nginx -t
[root@server1 conf]# nginx -s reload

 

这里写图片描述

指定轮询机率,weight和访问比率成正比,用于后端服务器性能不均的情况。
物理机测试:

4.backup

只有当其它所有的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻。
只要在希望成为后备的服务器ip后面多添加一个backup参数,这台服务器就会成为备份服务器。
在平时不使用,nginx不会给它转发任何请求。只有当其他节点全部无法连接的时候,nginx才会启用这个节点。
一旦有可用的节点恢复服务,该节点则不再使用,又进入后备状态。

[root@server1 conf]# vim nginx.conf
[root@server1 conf]# nginx -t
[root@server1 conf]# nginx -s reload

如果将server2和server3的httpd服务关闭,nginx不会给它转发任何请求

#####################在nginx中静态添加模块sticky################

Sticky工作原理 :
Sticky是nginx的一个模块,它是基于cookie的一种nginx的负载均衡解决方案,通过分发和识别cookie,来使同一个客户端的请求落在同一台服务器上,默认标识名为route
1.客户端首次发起访问请求,nginx接收后,发现请求头没有cookie,则以轮询方式将请求分发给后端服务器。
2.后端服务器处理完请求,将响应数据返回给nginx。
3.此时nginx生成带route的cookie,返回给客户端。route的值与后端服务器对应,可能是明文,也可能是md5、sha1等Hash值
4.客户端接收请求,并保存带route的cookie。
5.当客户端下一次发送请求时,会带上route,nginx根据接收到的cookie中的route值,转发给对应的后端服务器。

[root@server1 ~]# ls
nginx-sticky-module-ng.tar.gz
nginx-1.10.1.tar.gz
[root@server1 ~]# tar zxf nginx-1.10.1.tar.gz 
[root@server1 ~]# tar zxf nginx-sticky-module-ng.tar.gz 
[root@server1 ~]# ls
 nginx-1.14.0
 nginx-sticky-module-ng
[root@server1 ~]# cd nginx-1.10.1
[root@server1 nginx-1.10.1]# ls
[root@server1 nginx-1.10.1]# ./configure --prefix=/opt/nginx --with-http_ssl_module --with-http_stub_status_module --with-threads --with-file-aio --add-module=/root/nginx-sticky-module-ng
[root@server1 nginx-1.10.1]# make 
[root@server1 nginx-1.10.1]# make install
[root@server1 nginx-1.10.1]# pwd
/root/nginx-1.10.1
[root@server1 nginx-1.10.1]# cd /opt/nginx/   ##新的nginx的配置文件
[root@server1 nginx]# cd conf/
[root@server1 conf]# cp /usr/local/nginx/conf/nginx.conf .
cp: overwrite `./nginx.conf'? y
[root@server1 conf]# vim nginx.conf

在nginx.conf中写入:

17 http {
 18         upstream westos {
 19         sticky;
 20         server 172.25.9.2:80;
 21         server 172.25.9.3:80;
 22         }

开启服务
因为之前版本的nginx 链到了/sbin,所以采用绝对路径的方法来调用1.10版的nginx

[root@server1 conf]# /opt/nginx/sbin/nginx -s reload
[root@server1 conf]# /opt/nginx/sbin/nginx  -t   #检测语句
nginx: the configuration file /opt/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /opt/nginx/conf/nginx.conf test is successful
[root@server1 conf]# /opt/nginx/sbin/nginx   #开启nginx

将server2和server3的httpd打开,并在/var/www/html写入index.html文件

测试:

在物理机测试:curl www.westos.org   server2 server3轮流服务


在浏览器中(有cookie)测试www.westos.org 只有一个rs服务

在浏览器中按F12,可查看cookie。

注意:每台后端真实服务器都会有一个唯一的route值,所以不管你真实服务器前端有几个装了sticky的nginx代理,它都是不会变化的. 这个cookie是会话方式的,所以你浏览器关闭了,服务器会给你重新分配一台服务器。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值