一, 案例分析
1, 案例概述
通常情况下, 一台 Tomcat 站点由于可能出现单点故障及无法应付过多的客户复杂多样的请求等问题, 不能单独应用于生产环境下, 所以需要使用负载均衡来解决这些问题.
Nginx 是一个非常优秀的 http 服务器软件, 它能够支持高达 50000 个并发连接数的响应, 拥有强大的静态资源处理能力, 运行稳定, 并且内存, CPU 等系统资源消耗非常低. 目前很多大型网站都应用 Nginx 服务器作为后端网站程序的反向代理及负载均衡器, 来提升整个站点的负载并发能力.
开始准备工作, 搭建下面的环境, 为了简化, 就不部署共享存储服务器了, 环境如下:
镜像可以到我网盘自行提取: https://pan.baidu.com/s/1YAtbAVRg7wejN3XRl28J1g https://pan.baidu.com/s/1YAtbAVRg7wejN3XRl28J1g
提取码: 2f7f
二, 案例实施
1, 部署第一台 Tomcat 服务器
- [[email protected] ~]# java -version <!-- 查看 JDK 是否安装, 若没有, 自行安装 -->
- openjdk version "1.8.0_131"
- OpenJDK Runtime Environment (build 1.8.0_131-b12)
- OpenJDK 64-Bit Server VM (build 25.131-b12, mixed mode)
- [[email protected] ~]# systemctl stop firewalld <!-- 关闭防火墙 -->
- [[email protected] ~]# systemctl disable firewalld <!-- 禁止防火墙开机自动启动 -->
- [[email protected] ~]# mount /dev/cdrom /mnt/ <!-- 挂载 Linux 光盘 -->
mount: /dev/sr0 写保护, 将以只读方式挂载
- [[email protected] ~]# rm -rf /etc/yum.repos.d/CentOS-* <!-- 清除系统自带 yum 源 -->
- [[email protected] ~]# tar zxvf /mnt/apache-tomcat-7.0.54.tar.gz -C /usr/src/
- <!-- 解压缩 tomcat 软件包 -->
- [[email protected] ~]# mv /usr/src/apache-tomcat-7.0.54/ /usr/local/tomcat
- <!-- 将 tomcat 软件包剪切到 / usr/local/tomcat 目录 -->
- [[email protected] ~]# /usr/local/tomcat/bin/startup.sh <!-- 启动 tomcat 服务 -->
客户端配置和服务器同网段的 IP 地址测试访问 tomcat 是否正常 http://192.168.100.20:8080
2,Tomcat 发布 web 站点
- [[email protected] ~]# mkdir /var/www <!-- 创建网站根目录 -->
- [[email protected] ~]# VIM /var/www/index.jsp <!-- 编写网站主页测试文件 -->
- <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
- <html>
- <head>
- <title>test01</title>
- </head>
- <body>
- <% out.println("www.benet.com!!!");%>
- </body>
- </HTML>
- [[email protected] ~]# VIM /usr/local/tomcat/conf/server.xml
- <!-- 修改 tomcat 主配置文件发布网站 -->
- <!-- 定位到该行, 然后添加下面两行内容 -->
- 126 <Context docBase="/var/www/" path=""reloadable="false">
- 127 </Context> <!--docBase:web 应用的文档默认目录 -->
- <!--path=""设置默认" 类 "-->
- <!--reloadable 设置监视 "类" 是否变化 -->
- [[email protected] ~]# /usr/local/tomcat/bin/shutdown.sh <!-- 关闭 tomcat 服务 -->
- [[email protected] ~]# /usr/local/tomcat/bin/startup.sh <!-- 启动 tomcat 服务 -->
客户端访问 http://192.168.100.20:8080 会发现网站主页内容已经成为了我们自行编写的内容
至此, 192.168.100.20 的 Tomcat 就已经配置完成了, 另一台 Tomcat 服务器 192.168.100.30 的配置和 192.168.100.20 的配置完全一样, 将上面的配置在 192.168.100.30 服务器上配置一遍即可,(我这里就懒省事直接复制了, 嘿嘿). 不过为了测试的时候可以看出负载均衡的效果, 让我们可以看出每次访问的服务器都不是同一台, 需要将两台 tomcat 服务器的网站主页内容设置称为不一样的内容. 实际生产环境中, 两台 Tomcat 访问的一定是使用同一个共享存储服务器, 不管是哪台服务器向用户提供服务, 用户接受到的页面一定是一样的.
3, 部署第二台 tomcat 服务器
- [[email protected] ~]# mkdir /var/www <!-- 第二台 tomcat 服务器上创建网站根目录 -->
- [[email protected] ~]# scp /var/www/index.jsp [email protected]:/var/www/
- <!-- 在第一台 tomcat 服务器复制网站主页测试文件到第二台 tomcat 服务器 -->
- The authenticity of host '192.168.100.30 (192.168.100.30)' can't be established.
- ECDSA key fingerprint is SHA256:PUueT9fU9QbsyNB5NC5hbSXzaWxxQavBxXmfoknXl4I.
- ECDSA key fingerprint is MD5:6d:f7:95:0e:51:1a:d8:9e:7b:b6:3f:58:51:51:4b:3b.
- Are you sure you want to continue connecting (yes/no)? yes <!-- 输入 yes-->
- [email protected]'s password: <!-- 输入密码 -->
- index.jsp 100% 240 59.3KB/s 00:00 <!-- 上传完成 -->
- [[email protected] ~]# cd /var/www/ <!-- 第二台 tomcat 服务器上查看是否复制成功 -->
- [[email protected] www]# ls
index.jsp
- [[email protected] ~]# scp -r /usr/local/tomcat/ [email protected]:/usr/local/tomcat
- <!-- 复制 tomcat 服务所有配置文件到第二台服务器 -->
- [email protected]'s password: <!-- 输入密码 -->
- [[email protected] ~]# cd /usr/local/tomcat/ <!-- 查看是否复制成功 -->
- [[email protected] tomcat]# ls
- bin conf lib LICENSE logs NOTICE RELEASE-NOTES RUNNING.txt temp webapps work
- [[email protected] ~]# VIM /var/www/index.jsp
- <!-- 修改第二台 tomcat 服务器的网站主页测试文件 -->
- <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
- <HTML>
- <head>
- <title>test02</title>
- </head>
- <body>
- <% out.println("www.accp.com!!!");%>
- </body>
- </HTML>
[[email protected] ~]# /usr/local/tomcat/bin/startup.sh <!-- 启动 tomcat 服务 -->
客户端访问第二台 tomcat 服务器 http://192.168.100.30:8080
4, 部署 Nginx 服务器
- [[email protected] ~]# groupadd nginx <!-- 创建管理 Nginx 的用户 -->
- [[email protected] ~]# useradd -M -s /sbin/nologin -g nginx nginx <!-- 创建管理 Nginx 的组 -->
- [[email protected] ~]# mount /dev/cdrom /mnt/ <!-- 挂载操作系统盘 -->
mount: /dev/sr0 写保护, 将以只读方式挂载
- [[email protected] ~]# rm -rf /etc/yum.repos.d/CentOS-* <!-- 清除系统自带 yum 源 -->
- [[email protected] ~]# yum -y install pcre-devel zlib-devel openssl-devel
- <!-- 安装 Nginx 依赖软件 -->
- [[email protected] ~]# mount /dev/cdrom /mnt/ <!-- 切换 Linux 光盘 -->
mount: /dev/sr0 写保护, 将以只读方式挂载
- [[email protected] ~]# tar zxvf /mnt/nginx-1.6.0.tar.gz -C /usr/src/ <!-- 解压缩 Nginx 软件包 -->
- [[email protected] ~]# cd /usr/src/nginx-1.6.0/ <!-- 进入 nginx 目录 -->
- [[email protected] nginx-1.6.0]# ./configure --prefix=/usr/local/nginx --user=nginx
- --group=nginx --with-http_stub_status_module --with-http_gzip_static_module
- --with-file-aio --with-http_ssl_module --with-http_flv_module <!-- 配置 Nginx-->
- [[email protected] nginx-1.6.0]# make && make install <!-- 编辑及安装 Nginx-->
- [[email protected] ~]# ln -s /usr/local/nginx/sbin/*/usr/local/sbin/ <!-- 优化 Nginx 执行命令 -->
- [[email protected] ~]# VIM /usr/local/nginx/conf/nginx.conf <!-- 修改 Nginx 主配置文件 -->
- 34 upstream tomcat_server { <!-- 添加此行 -->
- 35 server 192.168.100.20:8080 weight=1; <!-- 添加此行 -->
- <!--weight 参数表示权重, 权重越高, 表示被分配到的概率越大.
- <!-- 为了测试效果明显, 这里将权重设置为一样 -->
- 36 server 192.168.100.30:8080 weight=1; <!-- 添加此行 -->
- 37 }
- 38 server {
- 39 listen 80; <!-- 监听端口号 -->
- 40 server_name www.benet.com; <!-- 监听域名 -->
- 41 charset utf-8; <!-- 默认支持字符集 -->
- 42 location / {
- 43 root HTML;
- 44 proxy_pass http://tomcat_server;
- <!-- 定位到该 { } 中, 写入该行,"http://" 后面的名字要和上面添加的 upstream 项后面的
- 名字一致, 才可实现调度 -->
- 45 index index.HTML index.htm;
- 46 }
- [[email protected] ~]# nginx -t <!-- 检查 Nginx 主配置文件是否错误 -->
- 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
- [[email protected] ~]# nginx <!-- 启动 Nginx 服务 -->
- [[email protected] ~]# netstat -anptu | grep nginx <!-- 查看 Nginx 服务运行状态 -->
- tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 4186/nginx: master
5, 部署 DNS
- [[email protected] ~]# umount /mnt/ <!-- 卸载光盘 -->
- [[email protected] ~]# mount /dev/cdrom /mnt/ <!-- 切换操作系统光盘 -->
mount: /dev/sr0 写保护, 将以只读方式挂载
- [[email protected] ~]# yum -y install bind bind-chroot bind-utils <!-- 安装 DNS 依赖软件 -->
- [[email protected] ~]# echo ""> /etc/named.conf <!-- 清空主配置文件 -->
- [[email protected] ~]# VIM /etc/named.conf <!-- 编辑主配置文件 -->
- options {
- listen-on port 53 { any; };
- directory "/var/named";
- };
- zone benet.com IN {
- type master;
- file "benet.com.zone";
- };
- [[email protected] ~]# named-checkconf -z /etc/named.conf <!-- 检查主配置文件是否错误 -->
- [[email protected] ~]# VIM /var/named/benet.com.zone
- <!-- 编写 benet.com 的正向解析区域配置文件 -->
- $TTL 86400
- @ SOA benet.com. root.benet.com.(
- 2019113001
- 1H
- 15M
- 1W
- 1D
- )
- @ NS centos01.benet.com.
- centos01 A 192.168.100.10
- www A 192.168.100.10
- [[email protected] ~]# named-checkzone benet.com /var/named/benet.com.zone
- <!-- 检查正向解析区域配置文件是否错误 -->
- zone benet.com/IN: loaded serial 2019113001
- OK
- [[email protected] ~]# chmod +x /var/named/benet.com.zone <!-- 添加执行权限 -->
- [[email protected] ~]# chown named:named /var/named/benet.com.zone<!-- 修改属主属组 -->
- [[email protected] ~]# systemctl start named <!-- 启动 named 服务 -->
- [[email protected] ~]# systemctl enable named <!-- 设置开机自动启动 -->
客户端添加 DNS 地址
客户端第一次访问 www.benet.com
刷新一下网页第二次访问将会看到如下主页内容:
可以看到, 我们访问的是 Nginx 服务器, 真正处理访问请求的是 Tomcat 服务器, 而且每次访问请求都是不同的 Tomcat 服务器来处理, 效果也就显而易见了. 实际工作中两个主页内容是一样的, 我这里只是想让大家更好的看出效果所以设置 成为了不一样的内容.
来源: http://www.bubuko.com/infodetail-3316682.html