nginx负载均衡

相关概念

Nginx (engine x) 是一个高性能的HTTP和反向代理服务,IMAP/POP3/SMTP服务。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版本0.1.0发布于2004年10月4日。Nginx是一款轻量级的web 服务器/反向代理服务器(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东新浪网易腾讯淘宝

nginx支持的负载均衡调度算法方式:

  1. weight轮询(默认):接收到的请求按照顺序逐一分配到不同的后端服务器,即使在使用过程中,某一台后端服务器宕机,nginx会自动将该服务器剔除出队列,请求受理情况不会受到任何影响。 这种方式下,可以给不同的后端服务器设置一个权重值(weight),用于调整不同的服务器上请求的分配率;权重数据越大,被分配到请求的几率越大;该权重值,主要是针对实际工作环境中不同的后端服务器硬件配置进行调整的。

  2. ip_hash:每个请求按照发起客户端的ip的hash结果进行匹配,这样的算法下一个固定ip地址的客户端总会访问到同一个后端服务器,这也在一定程度上解决了集群部署环境下session共享的问题

  3. fair:智能调整调度算法,动态的根据后端服务器的请求处理到响应的时间进行均衡分配,响应时间短处理效率高的服务器分配到请求的概率高,响应时间长处理效率低的服务器分配到的请求少;结合了前两者的优点的一种调度算法。但是需要注意的是nginx默认不支持fair算法,如果要使用这种调度算法,请安装upstream_fair模块

  4. url_hash:按照访问的url的hash结果分配请求,每个请求的url会指向后端固定的某个服务器,可以在nginx作为静态服务器的情况下提高缓存效率。同样要注意nginx默认不支持这种调度算法,要使用的话需要安装nginx的hash软件包

nginx部署

1.在官网下载压缩包,解压

2.更改一些配置

[root@server1 nginx-1.14.0]# ls
auto  CHANGES  CHANGES.ru  conf  configure  contrib  html  LICENSE  man  README  src
[root@server1 nginx-1.14.0]# cd src/core/
[root@server1 core]# ls
nginx.c           ngx_crc.h    ngx_md5.c              ngx_proxy_protocol.c  ngx_sha1.h
nginx.h           ngx_crypt.c  ngx_md5.h              ngx_proxy_protocol.h  ngx_shmtx.c
ngx_array.c       ngx_crypt.h  ngx_module.c           ngx_queue.c           ngx_shmtx.h
ngx_array.h       ngx_cycle.c  ngx_module.h           ngx_queue.h     
[root@server1 core]# vim nginx.h #删除掉14行最后的NGINX_VERSION ,这样可以不对外显示你的版本号

[root@server1 ~]# cd nginx-1.14.0/auto/cc/
[root@server1 cc]# ls
acc  bcc  ccc  clang  conf  gcc  icc  msvc  name  owc  sunc
[root@server1 cc]# vim gcc  #将172行     CFLAGS="$CFLAGS -g"注释掉

3.源码编译和安装

yum install gcc -y
yum install -y pcre-devel
yum install -y openssl-devel
./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_stub_status_module --with-threads --with-file-aio
make && make install

命令操作:

 nginx -t         检查语法
 nginx            打开nginx
 nginx -s stop    关闭nginx
 nginx -s reload   重新加载nginx
 useradd -M -d /usr/local/nginx/ nginx  添加一个nginx用户
 id nginx      查看用户nginx的id

添加文件:

nginx的默认发布目录:/usr/local/nginx/html

vim test.html

测试:

 

 cd /usr/local/nginx/conf/  ##切换到这个目录

 lscpu ##查看主机的cpu数

 vim /etc/security/limits.conf

 写入:

     nginx     -    nofile   65536

vim nginx.conf  编辑nginx主配置文件

测试:

1.正常的轮询(默认)

2.添加ip_hash后的效果(添加这条语句后,一旦监测到ip,后端服务器将不再改变)

3.加上权重后的效果

4.添加backup

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

vim/etc/httpd/conf/httpd.conf

/etc/init.d/httpd start

测试:

5.添加back

在调度器中直接将server3down掉,即使server3的http服务开启,客户端也无法访问(不常使用)

测试:

在使用负载均衡的时候会遇到会话保持的问题,常用的方法有:
1.ip hash,根据客户端的IP,将请求分配到不同的服务器上;
2.cookie,服务器给客户端下发一个cookie,具有特定cookie的请求会分配给它的发布者
注意:cookie需要浏览器支持,且有时候会泄露数据

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值,转发给对应的后端服务器。

重新编译nginx增加nginx-sticky-module模块

[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=/usr/local/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

vim nginx.conf

 

nginx -t

nginx -s reload

在浏览器测试:只有server2进行响应,不会产生轮询。在浏览器中按F12,可查看cookie。

Nginx实现高可用

实验环境:

Server1:h1,172.25.66.1

Server4:h2,172.25.66.4

Server1和server4上都安装ricci,为其设置密码,并开启服务

在server1:

/etc/init.d/ricci start
/etc/init.d/luci start
scp -r /usr/local/nginx/  server4:/usr/local/

在server4中:

/etc/init.d/ricci start
ln -s /usr/local/nginx/sbin/nginx   /sbin/   ###做软链接
useradd -M -d /usr/local/nginx/ nginx  ###建立一个nginx用户
id nginx     ##查看用户是否建立
nginx

在物理机上:

vim /etc/hosts

在浏览器访问:https://server1:8084,luci自动开启8084端口接受集群节点的11111端口的数据包 
使用server1的root密码登陆

 

nginx本身没有启动脚本的,所以要自己制作nginx脚本

Vim /etc/init.d/nginx

chmod a+x /etc/init.d/nginx

/etc/init.d/nginx start

将添加的资源放在一个资源组里:

在server1中查看

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值