Nginx负载均衡Rabbitmq

以下均为本人理解,欢迎大佬指出错误,小白希望深入理解请到官网
查看TroubleShot,本文最后

为什么使用nginx

因为虽然之前的文章进行rabbitmq的集群搭建,但是在使用过程中,还是要进行负载均衡。尽可能的让每一个节点收到请求,这个三个节点的集群才有意义。

Niginx是什么?

Nginx (engine x) 是一个高性能的HTTP和[反向代理]web服务器,同时也提供了IMAP/POP3/SMTP[服务]。国内貌似都只是用来做反向代理和负载均衡。

Nginx安装

前提是linux的gcc编译环境正常

  • 1.安装基础环境
    apt-get install build-essential
    apt-get install libtool
cd /usr/local/src
wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.41.tar.gz
tar -zxvf pcre-8.41.tar.gz
cd pcre-8.41
./configure
make
make insta

如果你在自己的目录,然后把pcre-8.41下的文件拷贝/usr/local/src/,Nginx-1.17.1会去这里找pcre。

cd /usr/local/src

wget http://zlib.net/zlib-1.2.11.tar.gz
tar -zxvf zlib-1.2.11.tar.gz
cd zlib-1.2.11
./configure
make
make install
apt-get install openssl
apt-get install libssl-dev

以上都是一些基础环境,本人不知道是干嘛的,就像你使用软件你不会想操作系统是怎么使用硬件的。这些有兴趣,有能力,有时间再去研究吧!

  • 2.下面开始安装Nginx了
cd /usr/local/src
wget http://nginx.org/download/nginx-1.17.1.tar.gz
tar -zxvf nginx-1.17.1.tar.gz
cd nginx-1.17.1
#编译我们要使用的模块,重点是最后的Stream模块,否则无法使用Stream关键字
./configure --prefix=/usr/local/nginx --user=www --group=www --with-http_ssl_module --with-http_gzip_static_module --http-client-body-temp-path=/usr/local/nginx/tmp/client/ --http-proxy-temp-path=/usr/local/nginx/tmp/proxy/ --http-fastcgi-temp-path=/usr/local/nginx/tmp/fcgi/ --with-poll_module --with-file-aio --with-http_realip_module --with-http_addition_module --with-http_addition_module --with-http_random_index_module --with-http_stub_status_module --http-uwsgi-temp-path=/usr/local/nginx/uwsgi_temp --http-scgi-temp-path=/usr/local/nginx/scgi_temp --with-pcre=/usr/local/src/pcre-8.41 --with-stream

make
make install

安装成功后,先学习下目录和命令

目录 作用
/usr/local/nginx/conf Nginx启动配置文件nginx.conf在这里
/usr/local/nginx/sbin 启动脚本Nginx在这里
/usr/local/nginx/logs 日志
/var/logs/nginx 日志,不清楚为啥两个地方日志
命令 作用
./nginx -V 查看版本号及已编译模块
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf 使用配置文件启动
./nginx -s reload 重新加配置
kill -QUIT 2072 杀死进程,可以杀一个,两个nginx进程都退出
  • 3.添加如下配置在/usr/local/nginx/conf/nginx.conf
stream {
   #打开nginx的转发日志,可以看到请求从哪里来,被转发到那台机器上
   log_format proxy '$remote_addr [$time_local] '
                 '$protocol $status $bytes_sent $bytes_received '
                 '$session_time "$upstream_addr" '
                 '"$upstream_bytes_sent" "$upstream_bytes_received" "$upstream_connect_time"';

    access_log /var/log/nginx/tcp-access.log proxy ;
    open_log_file_cache off;
    include /etc/nginx/conf.d/*.stream;

   #指定需要负载均衡的服务器地址
   upstream rabbitmq {
       server 47.102.115.83:5672 weight=5 max_fails=1 fail_timeout=30s;
       server 47.102.115.83:5673 weight=5 max_fails=1 fail_timeout=30s;
       server 47.102.115.83:5674 weight=5 max_fails=1 fail_timeout=30s;
   }

   # 创建一个虚拟主机来监听端口
   server {
      listen 5675;
      proxy_connect_timeout 30s;
      proxy_timeout 30s;
      proxy_pass rabbitmq;
   }
}

上面配置就做了三件事
1.创建一个虚拟主机监听端口
2.指定需要负载均衡的上游服务器
3.开启TCP日志,追踪请求转发
4.保留原有的http模块,不要删除,用来验证nginx默认配置

  • 4.启动nginx
    验证默认的配置
    Nginx负载均衡Rabbitmq_第1张图片
    image.png

    验证转发Rabbitmq
    首先查看springboot连接日志
    image.png

    然后查看前面我们配置的tcp追踪日志
    Nginx负载均衡Rabbitmq_第2张图片
    image.png

    图中转发到了rabbitmq的5672,5673,5674三个节点的端口

Trouble Shot

一直连接不上rabbitmq,默认配置页面可以进入,查看日志
recv() failed (104: Connection reset by peer) while reading response header from upstream

缓存或者超时时间太小

你可能感兴趣的:(Nginx负载均衡Rabbitmq)