Linux学习10-CentOS搭建nginx负载均衡环境

前言

当自己的web网站访问的人越来越多,一台服务器无法满足现有的业务时,此时会想到多加几台服务器来实现负载均衡。
网站的访问量越来越大,服务器的服务模式也得进行相应的升级,怎样将同一个域名的访问分散到两台或更多的机器上呢?这就需要用nginx来配置负载均衡的环境了。
以多个tomcat服务为例,用nginx配置管理多个tomcat服务

什么是负载均衡

负载均衡建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。负载均衡,英文名称为Load Balance,其意思就是分摊到多个操作单元上进行执行,例如Web服务器、FTP服务器、企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务。

如果还是不懂的话,可以举个例子:
假设你是个妹子,你败家太厉害,以至于你的男友根本吃不消,于是乎你找了两个男朋友,一三五单号,二四六双号限行,从而减少一个男朋友所面临的压力,这叫负载均衡。

nginx的负载均衡策略有2种,第一种是轮询:也就是上面说的“两个男朋友,一三五单号,二四六双号限行”,看下图

另外一种是加权轮询:两个男友,一个是正牌的,权重比较大,一二四五;另外一个是备胎三六,权重比为2:1

如果是同一个用户,在服务器1上登录了,接着去连续访问页面时候,如果按上面的轮询策略就会到账一会在服务器1上访问,一会服务器2上访问,session不共享就会错乱了。
于是就有了Ip hash算法,对客户端请求的ip进行hash操作,然后根据hash结果将同一个客户端ip的请求分发给同一台服务器进行处理,可以解决session不共享的问题。

搭建多个tomcat环境

如果你有多台服务器的话,可以在多个服务器上搭建一样的tomcat环境,关于tomcat环境搭建可以参考这篇https://www.cnblogs.com/yoyoketang/p/10186513.html
前面是用的yum直接安装的,本篇介绍用wget下载安装apache-tomcat-8.5.35,下载地址wget http://mirrors.hust.edu.cn/apache/tomcat/tomcat-8/v8.5.35/bin/apache-tomcat-8.5.35.tar.gz

由于我这边只有一台服务器,为了方便练习,可以在一个服务器上搭建3个tomcat环境

  • 先在/usr/local目录下新建一个tomcat目录
  • wget下载apache-tomcat-8.5.35.tar.gz
  • tar -zxf解压
  • 解压后重命名apache-tomcat-1
  • 同一目录下复制2个一样的apache-tomcat-2、apache-tomcat-3
[[email protected] ~]# cd ..
[[email protected] local]# cd /usr/local
[[email protected] local]# mkdir tomcat
[[email protected] local]# cd tomcat/
[[email protected] tomcat]# wget http://mirrors.hust.edu.cn/apache/tomcat/tomcat-8/v8.5.35/bin/apache-tomcat-8.5.35.tar.gz
[[email protected] tomcat]# tar -zxf apache-tomcat-8.5.35.tar.gz

# 下载解压后,复制三个一样的文件apache-tomcat-1、apache-tomcat-2、apache-tomcat-3
[[email protected] tomcat]# mv apache-tomcat-8.5.35 apache-tomcat-1
[[email protected] tomcat]# cp -r apache-tomcat-1 apache-tomcat-2
[[email protected] tomcat]# cp -r apache-tomcat-1 apache-tomcat-3

tomcat默认都是在8080端口启动的,为了能让3个服务都能启动,就需要改启动端口,打开apache-tomcat-1/conf/server.xml目录编辑

vim /usr/local/tomcat/apache-tomcat-1/conf/server.xml
找到以下三个地方,把端口改成跟之前不一样的,如下

//8011远程停服务端口
<Server port="8011" shutdown="SHUTDOWN">
//8081为http端口 <Connector port="8081" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
//8021为AJP端口,Apache能通过AJP协议访问Tomcat的8006端口
<Connector port="8021" protocol="AJP/1.3" redirectPort="8443" /> 

打开apache-tomcat-2/conf/server.xml目录编辑

//8012远程停服务端口
<Server port="8012" shutdown="SHUTDOWN">
//8082为http端口 <Connector port="8082" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
//8022为AJP端口,Apache能通过AJP协议访问Tomcat的8006端口
<Connector port="8022" protocol="AJP/1.3" redirectPort="8443" /> 

打开apache-tomcat-3/conf/server.xml目录编辑

//8013远程停服务端口
<Server port="8013" shutdown="SHUTDOWN">
//8083为http端口 <Connector port="8083" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
//8023为AJP端口,Apache能通过AJP协议访问Tomcat的8006端口
<Connector port="8023" protocol="AJP/1.3" redirectPort="8443" /> 

改完之后,去阿里云ECS后台管理-安全组-配置规则-新增8081、8082、8083三个端口访问权限

接着去启动3个tomcat, 看到如下提示,说明正常启动了

[[email protected] tomcat]# cd /usr/local/tomcat/apache-tomcat-1/bin/
[[email protected] bin]# ./startup.sh
Using CATALINA_BASE:   /usr/local/tomcat/apache-tomcat-1
Using CATALINA_HOME:   /usr/local/tomcat/apache-tomcat-1
Using CATALINA_TMPDIR: /usr/local/tomcat/apache-tomcat-1/temp
Using JRE_HOME:        /usr
Using CLASSPATH:       /usr/local/tomcat/apache-tomcat-1/bin/bootstrap.jar:/usr/local/tomcat/apache-tomcat-1/bin/tomcat-juli.jar
Tomcat started.
[[email protected] bin]# 

[[email protected] tomcat]# cd /usr/local/tomcat/apache-tomcat-2/bin/
[[email protected] bin]# ./startup.sh 

[[email protected] tomcat]# cd /usr/local/tomcat/apache-tomcat-3/bin/
[[email protected] bin]# ./startup.sh 

停掉tomcat服务是在bin下执行./shutdown.sh

[[email protected] bin]# ll
total 844
-rw-r----- 1 root root  35051 Nov  4 01:39 bootstrap.jar
-rw-r----- 1 root root  15900 Nov  4 01:39 catalina.bat
-rwxr-x--- 1 root root  23463 Nov  4 01:39 catalina.sh
-rw-r----- 1 root root   1664 Nov  4 01:42 catalina-tasks.xml
-rw-r----- 1 root root  25145 Nov  4 01:39 commons-daemon.jar
-rw-r----- 1 root root 207125 Nov  4 01:39 commons-daemon-native.tar.gz
-rw-r----- 1 root root   2040 Nov  4 01:39 configtest.bat
-rwxr-x--- 1 root root   1922 Nov  4 01:39 configtest.sh
-rwxr-x--- 1 root root   8508 Nov  4 01:39 daemon.sh
-rw-r----- 1 root root   2091 Nov  4 01:39 digest.bat
-rwxr-x--- 1 root root   1965 Nov  4 01:39 digest.sh
-rw-r----- 1 root root   3460 Nov  4 01:39 setclasspath.bat
-rwxr-x--- 1 root root   3680 Nov  4 01:39 setclasspath.sh
-rw-r----- 1 root root   2020 Nov  4 01:39 shutdown.bat
-rwxr-x--- 1 root root   1902 Nov  4 01:39 shutdown.sh
-rw-r----- 1 root root   2022 Nov  4 01:39 startup.bat
-rwxr-x--- 1 root root   1904 Nov  4 01:39 startup.sh
-rw-r----- 1 root root  49336 Nov  4 01:39 tomcat-juli.jar
-rw-r----- 1 root root 411789 Nov  4 01:39 tomcat-native.tar.gz
-rw-r----- 1 root root   4574 Nov  4 01:39 tool-wrapper.bat
-rwxr-x--- 1 root root   5483 Nov  4 01:39 tool-wrapper.sh
-rw-r----- 1 root root   2026 Nov  4 01:39 version.bat
-rwxr-x--- 1 root root   1908 Nov  4 01:39 version.sh
[[email protected] bin]# ./shutdown.sh 

启动完成后,在浏览器上分别然后访问http://47.104.x.x:8081/http://47.104.x.x:8082/http://47.104.x.x:8082/。会发现都可以访问到了。
首次访问会比较慢,如果不能访问就执行reboot重启

为了验证方便,修改tomcat首页/usr/local/tomcat/apache-tomcat-1/webapps/ROOT,打开index.jsp文件,把Home 分别改成Home8081,Home8082,Home8083

改完之后刷新页面就能访问了

nginx配置

前面一篇https://www.cnblogs.com/yoyoketang/p/10239179.html在/usr/local/nginx/conf目录在nginx.conf配置里面把默认监听端口改成了81
先配置一个tomcat环境,当访问http://47.104.x.x:81/端口时,让nginx把服务指向http://47.104.x.x:8081/

vim打开/usr/local/nginx/conf/nginx.conf先配置server

vim /usr/local/nginx/conf/nginx.conf

把location 这项改成proxy_pass http://47.104.x.x:8081;注意后面有个分号

    server {
        listen       81;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            proxy_pass http://47.104.x.x:8081;
            # 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;
        }

编辑完成后:wq保存退出,执行reload,重新加载nginx文件

[[email protected] conf]# cd /usr/local/nginx/sbin/
[[email protected] sbin]# ./nginx -s reload

接着在浏览器输入http://47.104.x.x:81 就能访问到8081的tomcat首页了,之前是访问的nginx页面,说明监听成功

负载均衡

轮询访问

一台服务配置好了,接着把三个tomcat服务全部放到一块,让访问http://47.104.x.x:81能自动分配到8081、8082、8083这三个服务器上,实现负载均衡

vim打开/usr/local/nginx/conf/nginx.conf在server上方加个upstream标签,把多个服务器server地址配置进去就可以了

upstream tomcats {
            server  47.104.190.48:8081;
            server  47.104.190.48:8082;
            server  47.104.190.48:8083;
          }

    server {
        listen       81;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            proxy_pass http://tomcats;
            # root   html;
            # index  index.html index.htm;
        }

编辑完成后:wq保存退出,执行reload,重新加载nginx文件

[[email protected] conf]# cd /usr/local/nginx/sbin/
[[email protected] sbin]# ./nginx -s reload

接着在浏览器输入http://47.104.x.x:81,多次刷新,会发现tomcat首页轮询显示Home8081、Home8082、Home8083

加权轮询

如果3台服务器的性能和配置不一样,我们希望访问某台服务器的权重加大,只需加一个参数就可以

upstream tomcats {
            server  47.104.190.48:8081 weight=1;
            server  47.104.190.48:8082 weight=2;
            server  47.104.190.48:8083 weight=3;
          }

跟上面步骤一样,改完之后./nginx -s reload,访问6次,会有3次出现Home8083

ip_hash解决session共享问题

涉及到不同的ip访问多个服务器会出现session不共享的问题,可以加个参数:ip_hash,就可以解决了

upstream tomcats {
            ip_hash;
            server  47.104.190.48:8081 weight=1;
            server  47.104.190.48:8082 weight=2;
            server  47.104.190.48:8083 weight=3;
          }

设置链接超时

location里面可以配置链接服务超时时间

    location / {
        proxy_pass http://tomcats;
        proxy_connect_timeout 36000s;
        proxy_send_timeout 36000s;
        proxy_read_timeout 36000s;
    }

proxy_connect_timeout 为连接应用服务器的超时时间,单位为秒
proxy_send_timeout 为发送请求到应用服务器的超时时间,单位为秒
proxy_read_timeout 为等待应用服务器响应的超时时间,单位为秒

到此为止负载均衡环境就脚本搭建完成,那么对外只需开放81端口,就可以了,8081,8082,8083这三个服务端口可以关掉,这样用户就感知到是只访问一个服务。
当然这个不是完美的,当81端口这个主机服务挂掉时候,那整个服务就挂了,所以需要有备机服务,在多个机器上搭建备机服务(和主机服务环境一致),同样可以设置权重
这样多个机器,其中某个服务机器挂了也不影响。

原文地址:https://www.cnblogs.com/yoyoketang/p/10244094.html

时间: 2024-10-09 20:29:43

Linux学习10-CentOS搭建nginx负载均衡环境的相关文章

Linux CentOS搭建JDK+Mysql+Tomcat+Nginx负载均衡环境 &nbsp; &nbsp; &nbsp;

本文使用了Tomcat+Nginx环境,主要起到负载均衡的作用,使用Tomcat处理jsp后台程序,使用Nginx处理静态页面. 准备工作(下载软件版本,请自行百度下载) 安装包放至:/usr/local/src 安装地址:/usr/local/软件名 1.apache-tomcat-6.0.48 2.mysql-5.5.54 3.nginx-1.6.3 4.cmake-2.8.8 5.pcre-8.40 6.jdk-8u11-linux-x64 7.openssl-1.1.0d(https使用

Net分布式系统之二:CentOS系统搭建Nginx负载均衡

一.关于CentOS系统介绍 CentOS(Community Enterprise Operating System,中文意思是:社区企业操作系统)是Linux发行版之一,它是来自于Red Hat Enterprise Linux依照开放源代码规定释出的源代码所编译而成.基于Red Hat持续升级,和对已知BUG修复,所以CentOS更多用于搭建大型企业级服务器.目前较新版本为7.0,本文使用CentOS7 64bit进行搭建系统负载均衡. 二.安装VMWare VMWare (Virtual

CentOS系统搭建Nginx负载均衡

一.关于CentOS系统介绍 CentOS(Community Enterprise Operating System,中文意思是:社区企业操作系统)是Linux发行版之一,它是来自于Red Hat Enterprise Linux依照开放源代码规定释出的源代码所编译而成.基于Red Hat持续升级,和对已知BUG修复,所以CentOS更多用于搭建大型企业级服务器.目前较新版本为7.0,本文使用CentOS7 64bit进行搭建系统负载均衡. 二.安装VMWare VMWare (Virtual

CentOS中nginx负载均衡和反向代理的搭建

1: 修改centos命令行启动(减少内存占用): vim /etc/inittab id:5:initdefault: --> 修改5为3 若要界面启动使用 startx 2:安装jdk 1)解压:jdk-7u55-linux-i586.tar.gz [[email protected] jdk]# tar -zxvf jdk-7u55-linux-i586.tar.gz 2)复制:[[email protected] jdk]# cp -rf jdk1.7.0_55/ /usr/local/

搭建LVS负载均衡环境(keepalived+lvs+nginx)

LVS简介: LVS集群有DR.TUN.NAT三种配置模式,可以对www服务.FTP服务.MAIL服务等做负载均衡,下面通过搭建www服务的负载均衡实例,讲述基于DR模式的LVS集群配置 Director-Server: LVS的核心服务器,作用类似于一个路由器,含有为LVS功能完成的路由表,通过路由表把用户的请求分发给服务器组层的应用服务器(Real_Server),同时监控Real-servers ,在Real-Server不可用时,将其从LVS路由表中剔除,再恢复时,重新加入. Real-

linux,centos7上搭建LVS负载均衡

在linux,centos7上搭建LVS负载均衡 实前准备 准备五台虚拟机 四台centos7 一台做调度 一台做nfs缓存 两台做wed群集 一台windows7 开始逐个配置 配置nfs服务器(centos7在用的时候是在线下载源代码包但是为了做实验先把源代码用yum安装好后改为仅主机模式) IP:192.168.10.174 用rpm -q nfs-utils查看有没有安装 rpcbind (远程过程调用) 编辑配置文件 [[email protected] ~]# vim /etc/ex

docker 搭建 nginx负载均衡

本文描述如何在一台机器上搭建nginx负载均衡,我将会启动3个nginx的docker,分别是1台前置nginx负责分发,后面2台负责处理请求. 首先我切换到/usr/local/docker/文件夹下,这个文件夹是专门用来做docker映射文件夹用的,docker里的重要的文件夹会映射到这里,在这里执行 mkdir nginx mkdir nginx01 mkdir nginx02 nginx下存储的是前置nginx的文件 nginx01和nginx02负责存储后边两台nginx服务器的文件

开发人员学Linux(5):CentOS7编译安装Nginx并搭建Tomcat负载均衡环境

1.前言在上一篇讲述了JMeter的使用,在本篇就可以应用得上了.本篇将讲述如何编译安装Nginx并利用前面的介绍搭建一个负载均衡测试环境.2.软件准备Nginx-1.12.0,下载地址:https://nginx.org/download/nginx-1.12.0.tar.gzTomcat8(本系列已介绍过如何下载和安装)JMeter(本系列已介绍过如何下载和使用)注:VirtualBox宿主机IP为"192.168.60.16,虚拟机IP为:192.168.60.198,虚拟机通过桥接方式接

用docker搭建nginx负载均衡测试环境

昨天收了一篇好文章 nginx常用功能全揭秘,想着今天来按照步骤配置一下nginx代理的,结果在使用docker的时候一直出问题,才诞生了这篇关于docker配置nginx负载均衡. 首先在宿主机上创建两个两个目录n1,n2,分别作为两台nginx服务器的目录. mkdir -p n1 n2 然后分别在目录里新建一个index.html文件,并输入内容作为nginx集群配置成功的后页面呈现的标识. cd n1 && echo 'this is n1' >> index.html