使用nginx实现动静分离的负载均衡集群
大家好,我是寂静的树林,今天我们利用nginx来作为负载,实现两台apache服务器的动静分离集群实战;
文章目录
一. 实验环境
1.1 系统及服务
本次用到的操作系统及服务:
本次实验一共需要3台服务器,一台nginx做为负载均衡分发器和动静分离的分发器,两台apache做为后端服务器,使用nginx实现两台apache服务器的负载均衡和动静分离。
操作系统: centos7.6
nginx 版本: 1.22 版本
apache版本: 系统默认自带的2.4.6
php版本: 系统默认自带的 5.4.16
apache和php版本,都可以升级为最新版本,可以从官网下载安装。
1.2 本次要实现的架构图
一般我们的服务器分很多种,有文件服务器,图片服务器,数据库服务器。
还有各种不同的服务:
- 静态文件处理:可以使用nginx 或apache
- 动文件处理: apache ,tomcat
- 图片文件处理: squid
本文中我们使用nginx实现动静分离的负载均衡集群。
二. nginx负载均衡详解
2.1 什么是负载均衡?
服务器的负载均衡是指将来自客户端的请求分摊到多台服务器上,以达到提高系统性能、增加系统可靠性、避免单点故障等目的的技术。
通过负载均衡,可以使得多台服务器共同处理客户端的请求,从而提高系统的整体性能和可用性。
在负载均衡中,通常会把多台服务器组成一个服务器集群,客户端向负载均衡器发送请求,负载均衡器会根据一定的算法将请求分配到服务器集群中的一台或多台服务器上进行处理。负载均衡的算法有很多种,常见的有轮询、随机、最小连接数等。
负载均衡还可以通过一些高级功能来实现更加复杂的负载均衡策略,例如会话保持、健康检查、动态调整权重等。这些功能可以根据实际需求进行配置和调整,使得负载均衡系统更加灵活和高效。
2.2 负载均衡的5中方式
Nginx 的 upstream 负载的5种方式,目前最常用 前3 种方式:
1) 轮询(默认)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器 down 掉,能自动剔除。
2) weight
指定轮询几率,weight 和访问比率成正比,用于后端服务器性能不均的情况。
3) ip_hash
每个请求按访问 ip 的 hash 结果分配,这样每个访客固定访问一个后端服务器,可以解决 session 的问题。
4) air(第三方)
按后端服务器的响应时间来分配请求,响应时间短的优先分配。
5) url_hash(第三方)
按访问url的hash结果来分配请求,使同样的url定向到同一个后端服务器,后端服务器为缓存时比较有效
三. 安装nginx作为流量分发器
2.1 安装nginx前准备
- 安装依赖工具
[root@mufeng41 ~]# yum -y install gcc gcc-c++ autoconf automake
[root@mufeng41 ~]# yum -y install zlib zlib-devel openssl openssl-devel pcre pcre-devel
- 1
- 2
- 3
我在做这一步安装的时候,忘了挂载镜像,浪费了不少时间,所以要提前挂载,配置好yum源哦。
- 上传nginx压缩包,进行解压
[root@mufeng41 ~]# ll nginx-1.12.2.tar.gz
-rw-r--r--. 1 root root 981687 8月 27 2019 nginx-1.12.2.tar.gz
[root@mufeng41 ~]# tar xf nginx-1.12.2.tar.gz -C /usr/local/src/
- 1
- 2
- 3
- 登录并查看
root@mufeng41 ~]# cd !$
cd /usr/local/src/
[root@mufeng41 src]# ls
nginx-1.12.2
[root@mufeng41 src]# cd nginx-1.12.2/
[root@mufeng41 nginx-1.12.2]# ls
auto CHANGES CHANGES.ru conf configure contrib html LICENSE man README src
[root@mufeng41 nginx-1.12.2]#
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
2.2 开始编译
./configure --prefix=/usr/local/nginx --with-http_dav_module --with-http_stub_status_module --with-http_addition_module --with-http_sub_module --with-http_flv_module --with-http_mp4_module
- 1
对参数的解释:
-
–with-http_dav_module 启用ngx_http_dav_module支持(增加PUT,DELETE,MKCOL:创建集合,COPY和MOVE方法)默认情况下为关闭,需编译开启
-
–with-http_stub_status_module 启用ngx_http_stub_status_module支持(获取nginx自上次启动以来的工作状态)
-
–with-http_addition_module 启用ngx_http_addition_module支持(作为一个输出过滤器,支持不完全缓冲,分部分响应请求)
-
–with-http_sub_module 启用ngx_http_sub_module支持(允许用一些其他文本替换nginx响应中的一些文本)
-
–with-http_flv_module 启用ngx_http_flv_module支持(提供寻求内存使用基于时间的偏移量文件)
-
–with-http_mp4_module 启用对mp4文件支持(提供寻求内存使用基于时间的偏移量文件)
2.3 开始编译安装nginx
使用make && make install
进行安装
[root@mufeng41 nginx-1.12.2]# make && make install
- 1
如何判断是否执行成功?
答: echo $?
2.4 生成运行的nginx用户
[root@mufeng41 nginx-1.12.2]# useradd -u 8000 -s /sbin/nologin nginx
[root@mufeng41 nginx-1.12.2]# id nginx
uid=8000(nginx) gid=8000(nginx) 组=8000(nginx)
[root@mufeng41 nginx-1.12.2]#
- 1
- 2
- 3
- 4
2.5 启动nginx并测试
如果你不知道nginx配置文件和启动脚本在哪,可以搜一下,使用find / -name nginx.conf
.
- 启动服务
[root@itlaoxin163 ~]# find / -name nginx.conf
/usr/local/nginx/conf/nginx.conf
# 启动
[root@mufeng41 nginx-1.12.2]# /usr/local/nginx/sbin/nginx
[root@mufeng41 nginx-1.12.2]# netstat -antup |grep 80
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 25286/nginx: master
udp 0 0 0.0.0.0:58076 0.0.0.0:*
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 查看效果
[root@mufeng41 nginx-1.12.2]# systemctl stop firewalld.service
[root@mufeng41 nginx-1.12.2]# curl -I 127.0.0.1
HTTP/1.1 200 OK
Server: nginx/1.12.2
Date: Fri, 24 Mar 2023 11:06:29 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Fri, 24 Mar 2023 11:01:53 GMT
Connection: keep-alive
ETag: "641d8321-264"
Accept-Ranges: byte
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
四. 配置nginx成为分发器
4.1 先备份配置文件
[root@mufeng41 conf]# pwd
/usr/local/nginx/conf
[root@mufeng41 conf]# cp nginx.conf nginx.conf.bak
[root@mufeng41 conf]#
- 1
- 2
- 3
- 4
4.2 把nginx设置成分发器,实现动静分离
配置如下图:
- 配置分发器
location / { root html; index index.html index.htm;
<span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token variable">$request_uri</span> ~* <span class="token punctuation">\</span>.html$<span class="token punctuation">)</span><span class="token punctuation">{<!-- --></span> proxy_pass http://htmlservers<span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token variable">$request_uri</span> ~* <span class="token punctuation">\</span>.php$<span class="token punctuation">)</span><span class="token punctuation">{<!-- --></span> proxy_pass http://phpservers<span class="token punctuation">;</span> <span class="token punctuation">}</span> proxy_pass http://picservers<span class="token punctuation">;</span> <span class="token punctuation">}</span>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
注释:
location 的作用是根据请求的 URI,将请求转发到不同的后端服务器上进行处理。具体解释如下:
location /
:表示所有请求(URI)都会被这个 location 块所匹配。root html
:表示当访问的 URI对应的文件不存在时,会在 nginx 安装目录下的 html 目录中查找对应的文件。index index.html
index.htm:表示当访问的 URI 对应的目录中没有指定的默认文件时,会尝试访问 index.html 或 index.htm 文件。if ($request_uri ~* .html$)
:表示如果请求的 URI 包含 .html,则执行下面的语句。proxy_pass http://htmlservers
:表示将请求转发到名为 htmlservers 的后端服务器处理。if ($request_uri ~* .php$)
:表示如果请求的 URI 包含 .php,则执行下面的语句。proxy_pass http://phpservers
:表示将请求转发到名为 phpservers 的后端服务器处理。proxy_pass http://picservers
:表示将请求转发到名为 picservers 的后端服务器处理,这个语句没有条件限制,如果以上两个if
语句都不匹配,则会执行这个语句。
接下来设置负载均衡对应的IP
- 定义负载均衡设备的IP
在nginx配置文件最后一行}前添加一下内容:
代码如下:
upstream htmlservers {
server 192.168.1.42:80;
server 192.168.1.43:80;
}
upstream phpservers{
server 192.168.1.42:80;
server 192.168.1.43:80;
}
upstream picservers {
server 192.168.1.42:80;
server 192.168.1.43:80;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 配置文件是否有错误
[root@mufeng41 conf]# /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
- 1
- 2
- 3
- 重启nginx
[root@mufeng41 conf]# /usr/local/nginx/sbin/nginx -s reload
- 1
- 2
五. 配置两台http服务器
接下来,需要在 mufeng42和mufeng43上操作
5.1 配置mufeng42服务器
- 配置web服务器:
[root@mufeng42 ~]# yum install httpd php -y
- 1
- 生成静态测试文件
[root@mufeng42 ~]# echo 192.168.1.42 > /var/www/html/index.html
- 1
- 在创建一个php文件:
[root@itlaoxin162 ~]# vim /var/www/html/test.php
- 1
- 写入内容:
echo "我是42服务器";
echo "我是寂静的树林"
<?php
phpinfo();
?>
- 1
- 2
- 3
- 4
- 5
- 启动apache
[root@mufeng42 ~]# systemctl restart httpd
- 1
5.2 配置mufeng43服务器
- 安装http并生成静态文件
[root@mufeng43 ~]# yum install httpd php -y
[root@mufeng43 ~]# echo 192.168.1.43 > /var/www/html/index.html
- 1
- 2
- 3
- 建立php文件
[root@mufeng43 ~]# cd /var/www/html/
[root@mufeng43 html]# vi mufeng.php
[root@mufeng43 html]# cat mufeng.php
echo “我是43服务器”;
<?php
phpinfo();
?>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 启动配置文件
[root@mufeng43 html]# systemctl restart httpd
- 1
- 2
5.3 测试
到目前为止,nginx负载均衡就结束了,接下来就可以测试了:
- 测试静态页面
浏览器输入: http://192.168.1.41/ 进行测试
- 测试转发动态页面:
浏览器输入 http://192.168.1.41/test.php
总结
寂静的树致力于打造最全和最细致化的专栏,希望对你有用。以上就是本文的全部内容了,记得关注我哦。
💕 好啦,这就是今天要分享给大家的全部内容了,我们下期再见!
💕 博客主页:https://blog.csdn.net/m0_72294577?type=blog
💕 本文由寂静的树林原创,首发于CSDN博客
💕 全力以赴,持续学习,不负如来不负卿,喜欢的话记得点赞收藏哦
为帮助您在CSDN创作的文章获得更多曝光和关注,我们为您提供了专属福利:
已注册且未在CSDN平台发布过文章的用户,9月1日—9月30日期间发布首篇文章可享大额首篇流量券扶持,且发布首篇文章后30日内,享连续每日流量券扶持;
已注册且未在CSDN平台发布过文章的用户,在8月1日—8月30日期间发布过首篇,可自9月1日起,享连续30天每日流量券扶持;
更多福利介绍详见https://mp.csdn.net/mp_blog/manage/traffic
如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。
新的改变
我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:
- 全新的界面设计 ,将会带来全新的写作体验;
- 在创作中心设置你喜爱的代码高亮样式,Markdown 将代码片显示选择的高亮样式 进行展示;
- 增加了 图片拖拽 功能,你可以将本地的图片直接拖拽到编辑区域直接展示;
- 全新的 KaTeX数学公式 语法;
- 增加了支持甘特图的mermaid语法1 功能;
- 增加了 多屏幕编辑 Markdown文章功能;
- 增加了 焦点写作模式、预览模式、简洁写作模式、左右区域同步滚轮设置 等功能,功能按钮位于编辑区域与预览区域中间;
- 增加了 检查列表 功能。
功能快捷键
撤销:Ctrl/Command + Z
重做:Ctrl/Command + Y
加粗:Ctrl/Command + B
斜体:Ctrl/Command + I
标题:Ctrl/Command + Shift + H
无序列表:Ctrl/Command + Shift + U
有序列表:Ctrl/Command + Shift + O
检查列表:Ctrl/Command + Shift + C
插入代码:Ctrl/Command + Shift + K
插入链接:Ctrl/Command + Shift + L
插入图片:Ctrl/Command + Shift + G
查找:Ctrl/Command + F
替换:Ctrl/Command + G
合理的创建标题,有助于目录的生成
直接输入1次#,并按下space后,将生成1级标题。
输入2次#,并按下space后,将生成2级标题。
以此类推,我们支持6级标题。有助于使用TOC
语法后生成一个完美的目录。
如何改变文本的样式
强调文本 强调文本
加粗文本 加粗文本
标记文本
删除文本
引用文本
H2O is是液体。
210 运算结果是 1024.
插入链接与图片
链接: link.
图片:
带尺寸的图片:
居中的图片:
居中并且带尺寸的图片:
当然,我们为了让用户更加便捷,我们增加了图片拖拽功能。
如何插入一段漂亮的代码片
去博客设置页面,选择一款你喜欢的代码片高亮样式,下面展示同样高亮的 代码片
.
// An highlighted block
var foo = 'bar';
生成一个适合你的列表
- 项目
- 项目
- 项目
- 项目
- 项目1
- 项目2
- 项目3
- 计划任务
- 完成任务
创建一个表格
一个简单的表格是这么创建的:
项目 | Value |
---|---|
电脑 | $1600 |
手机 | $12 |
导管 | $1 |
设定内容居中、居左、居右
使用:---------:
居中
使用:----------
居左
使用----------:
居右
第一列 | 第二列 | 第三列 |
---|---|---|
第一列文本居中 | 第二列文本居右 | 第三列文本居左 |
SmartyPants
SmartyPants将ASCII标点字符转换为“智能”印刷标点HTML实体。例如:
TYPE | ASCII | HTML |
---|---|---|
Single backticks | 'Isn't this fun?' | ‘Isn’t this fun?’ |
Quotes | "Isn't this fun?" | “Isn’t this fun?” |
Dashes | -- is en-dash, --- is em-dash | – is en-dash, — is em-dash |
创建一个自定义列表
-
Markdown
- Text-to- HTML conversion tool Authors
- John
- Luke
如何创建一个注脚
一个具有注脚的文本。2
注释也是必不可少的
Markdown将文本转换为 HTML。
KaTeX数学公式
您可以使用渲染LaTeX数学表达式 KaTeX:
Gamma公式展示 Γ ( n ) = ( n − 1 ) ! ∀ n ∈ N \Gamma(n) = (n-1)!\quad\forall n\in\mathbb N Γ(n)=(n−1)!∀n∈N 是通过欧拉积分
Γ ( z ) = ∫ 0 ∞ t z − 1 e − t d t . \Gamma(z) = \int_0^\infty t^{z-1}e^{-t}dt\,. Γ(z)=∫0∞tz−1e−tdt.
你可以找到更多关于的信息 LaTeX 数学表达式here.
新的甘特图功能,丰富你的文章
- 关于 甘特图 语法,参考 这儿,
UML 图表
可以使用UML图表进行渲染。 Mermaid. 例如下面产生的一个序列图:
这将产生一个流程图。:
- 关于 Mermaid 语法,参考 这儿,
FLowchart流程图
我们依旧会支持flowchart的流程图:
- 关于 Flowchart流程图 语法,参考 这儿.
导出与导入
导出
如果你想尝试使用此编辑器, 你可以在此篇文章任意编辑。当你完成了一篇文章的写作, 在上方工具栏找到 文章导出 ,生成一个.md文件或者.html文件进行本地保存。
导入
如果你想加载一篇你写过的.md文件,在上方工具栏可以选择导入功能进行对应扩展名的文件导入,
继续你的创作。
注脚的解释 ↩︎