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
[root@yoyo ~]# cd ..
[root@yoyo local]# cd /usr/local
[root@yoyo local]# mkdir tomcat
[root@yoyo local]# cd tomcat/
[root@yoyo tomcat]# wget http://mirrors.hust.edu.cn/apache/tomcat/tomcat-8/v8.5.35/bin/apache-tomcat-8.5.35.tar.gz
[root@yoyo tomcat]# tar -zxf apache-tomcat-8.5.35.tar.gz
# 下载解压后,复制三个一样的文件apache-tomcat-1、apache-tomcat-2、apache-tomcat-3
[root@yoyo tomcat]# mv apache-tomcat-8.5.35 apache-tomcat-1
[root@yoyo tomcat]# cp -r apache-tomcat-1 apache-tomcat-2
[root@yoyo 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, 看到如下提示,说明正常启动了
[root@yoyo tomcat]# cd /usr/local/tomcat/apache-tomcat-1/bin/
[root@yoyo 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.
[root@yoyo bin]#
[root@yoyo tomcat]# cd /usr/local/tomcat/apache-tomcat-2/bin/
[root@yoyo bin]# ./startup.sh
[root@yoyo tomcat]# cd /usr/local/tomcat/apache-tomcat-3/bin/
[root@yoyo bin]# ./startup.sh
停掉tomcat服务是在bin下执行./shutdown.sh
[root@yoyo 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
