干货 | Nginx实现Elasticsearch后台服务的负载均衡

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
传统型负载均衡 CLB,每月750个小时 15LCU
应用型负载均衡 ALB,每月750个小时 15LCU
简介: Elasticsearch后台程序开发完毕后,相关的ES配置、部署、ES DSL查询、聚合语句也做了优化,但实际客户仍然要求提高QPS,要求保障性能的前提下的很高的并发用户数。

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台),通过轮询多台后端服务器来提高逻辑处理能力,达到提高系统性能的效果。

image.png

显然,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

打造Elasticsearch基础、进阶、实战第一公众号

image.png


相关实践学习
SLB负载均衡实践
本场景通过使用阿里云负载均衡 SLB 以及对负载均衡 SLB 后端服务器 ECS 的权重进行修改,快速解决服务器响应速度慢的问题
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
相关文章
|
17天前
|
存储 API 数据库
检索服务elasticsearch索引(Index)
【8月更文挑战第23天】
35 6
|
17天前
|
存储 负载均衡 监控
检索服务elasticsearch节点(Node)
【8月更文挑战第23天】
34 5
|
17天前
|
存储 监控 负载均衡
检索服务elasticsearch集群(Cluster)
【8月更文挑战第23天】
43 3
|
10天前
|
NoSQL 关系型数据库 Redis
mall在linux环境下的部署(基于Docker容器),Docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongo
mall在linux环境下的部署(基于Docker容器),docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongodb、minio详细教程,拉取镜像、运行容器
mall在linux环境下的部署(基于Docker容器),Docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongo
|
2天前
|
负载均衡 网络协议 Unix
Nginx负载均衡与故障转移实践
Nginx通过ngx_http_upstream_module模块实现负载均衡与故障转移,适用于多服务器环境。利用`upstream`与`server`指令定义后端服务器组,通过`proxy_pass`将请求代理至这些服务器,实现请求分发。Nginx还提供了多种负载均衡策略,如轮询、权重分配、IP哈希等,并支持自定义故障转移逻辑,确保系统稳定性和高可用性。示例配置展示了如何定义负载均衡设备及状态,并应用到具体server配置中。
|
18天前
|
SQL 存储 自然语言处理
检索服务elasticsearch全文搜索
【8月更文挑战第22天】
39 3
|
18天前
|
负载均衡 应用服务中间件 网络安全
Django后端架构开发:Nginx服务优化实践
Django后端架构开发:Nginx服务优化实践
31 2
|
24天前
|
负载均衡 应用服务中间件 Linux
"揭晓nginx的神秘力量:如何实现反向代理与负载均衡,拯救服务器于水火?"
【8月更文挑战第20天】在Linux环境下,nginx作为高性能HTTP服务器与反向代理工具,在网站优化及服务器负载均衡中扮演重要角色。本文通过电商平台案例,解析nginx如何解决服务器压力大、访问慢的问题。首先介绍反向代理原理,即客户端请求经由代理服务器转发至内部服务器,隐藏真实服务器地址;并给出配置示例。接着讲解负载均衡原理,通过将请求分发到多个服务器来分散负载,同样附有配置实例。实践表明,采用nginx后,不仅服务器压力得到缓解,还提升了访问速度与系统稳定性。
40 3
|
15天前
|
安全 JavaScript 前端开发
Nginx服务扫描漏洞修复
Nginx服务扫描漏洞修复
|
19天前
|
SQL 存储 监控
检索服务elasticsearch
【8月更文挑战第21天】
29 0