1、题记
Elasticsearch后台程序开发完毕后,相关的ES配置、部署、ES DSL查询、聚合语句也做了优化,但实际客户仍然要求提高QPS,要求保障性能的前提下的很高的并发用户数。
这时候,你能想到的方案是什么呢?
实际调研发现,优选方案是Nginx负载均衡方案。
2、为什么是Nginx?
Nginx是俄罗斯软件工程师Igor Sysoev开发的免费开源web服务器软件。nginx于2004年发布,c语言开发,聚焦于高性能,高并发和低内存消耗问题。并且具有多种web服务器功能特性:负载均衡,缓存,访问控制,带宽控制,以及高效整合各种应用的能力,这些特性使nginx很适合于现代网站架构。
在国内,已经有淘宝、新浪博客、新浪播客、网易新闻、六间房、56.com、Discuz!、水木社区、豆瓣、YUPOO、海内、迅雷在线等多家网站使用 Nginx 作为Web服务器或反向代理服务器。
3、Nginx通过反向代理实现负载均衡
NginX,是一款高性能的反向代理服务器;也是一个IMAP、POP3、SMTP代理服务器;也是一个Http服务器。也就是说Nginx本身就可以托管网站,进行Http服务处理,也可以作为反向代理服务器使用。
反向代理:代理服务器服务的对象不是用户,而是其他内容服务器。用户访问反向代理服务器(nginx服务器),由反向代理服务器决定转发给哪台服务器处理请求。
注意:不是反向代理提高了性能,反向代理到后端服务器(N台),通过轮询多台后端服务器来提高逻辑处理能力,达到提高系统性能的效果。
显然,Nginx起到的核心作用如下:
1、分流请求
2、负载均衡
4、Linux下nginx的安装
4.1.正则表达式库安装
1)确保进行了安装了linux常用必备支持库。
用命令rpm -qa | grep gcc 检查是否安装了g++、gcc。
若未安装请使用命令:
# yum install gcc-c++
进行安装。
2) 下载pcre-8.12.tar.gz, nginx-1.5.0.tar.gz
到 /usr/local/src/nginx目录下。
3)解压pcre-8.12.tar.gz
# cd /usr/local/src/nginx
# tar zxvf pcre-8.12.tar.gz
4)进入解压后的目录
# cd pcre-8.12
5)配置
# ./configure
6) 编译
# make
7) 安装
# make install
4.2 Nginx安装
1) 创建用户nginx使用的www用户。
#添加www组
# groupadd www
#创建nginx运行账户www并加入到www组,不允许www用户直接登录系统
# useradd -g www www -s /bin/false
2)创建安装目录与日志目录
创建安装目录
# mkdir /usr/local/nginx
创建日志目录
# mkdir /data0/logs/nginx
# chown www:www /data0/logs/nginx -R
3) 判断系统是否安装了zlib-devel。
如果没有安装。使用如下命令进行安装:
# yum install -y zlib-devel
4)Nginx下载解压
切换目录到/usr/local/src/nginx目录下
# cd /usr/local/src/nginx
下载nginx到该目录
将下载的文件解压
# tar zxvf nginx-1.5.0.tar.gz
5) 进入Nginx路径
# cd nginx-1.5.0
6) 配置
通常将软件安装在/usr/local/目录下。
# ./configure --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_realip_module
注意:openssl的安装
yum install -y openssl-devel
7)编译
# make
8) 安装
# make install
9) 检查是否安装成功
# cd /usr/local/nginx/sbin
# ./nginx -t
结果显示:
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
则表示安装成功。
4.3 Linux做负载均衡的配置
修改/usr/local/nginx/conf/nginx.conf
#user www;
worker_processes 8;#修改为和服务器CPU核数一样
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#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;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
#将进行负载均衡的服务器及端口号配置在这里
upstream backend {
#ip_hash
server 192.168.12.15:19001;
}
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
#设置主机头和客户端真实地址,以便服务器获取客户端真实IP
# proxy_set_header Host $host;
# proxy_set_header X-Real-IP $remote_addr;
# proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#禁用缓存
# proxy_buffering off;
#设置反向代理的地址,将负载均衡的服务器变量backend设为反向代理地址
proxy_pass http://backend;
# root html;
# index index.html index.htm;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
4.4 Nginx启停
1)检查配置文件是否正确
/usr/local/nginx-1.6/sbin/nginx -t
./sbin/nginx -V # 可以看到编译选项
2)启动 Nginx
./sbin/nginx # 默认配置文件 conf/nginx.conf,-c 指定
3)停止Nginx
./sbin/nginx -s stop
或pkill nginx
4)重启 Nginx
# ./sbin/nginx -s reload
或 kill -HUP `cat /usr/local/nginx-1.6/logs/nginx.pid`
推荐阅读
[1] Nginx压缩高效配置: https://www.insp.top/article/open-nginx-gzip-module
[2] Nginx简介:https://blog.csdn.net/wang379275614/article/details/47777985
[3] Nginx介绍:https://blog.csdn.net/hanhuili/article/details/9389571