2、nginx负载均衡
nginx在 nginx.conf配置文件中通过 upstream模块 和 server模块的配合使用,就可以实现负载均衡。
2.1 upstream 模块
upstream 模块:负载均衡模块,通过一个简单的调度算法来实现客户端IP到后端服务器的负载均衡。
在http的 upstream模块中,可以通过 server指令指定后端服务器的IP地址和端口,同时还可以设定每个后端服务器在负载均衡调度中的状态。
常用的状态有:
- weight:服务访问的权重,默认是1。
- down:表示当前的server暂时不参与负载均衡。
- backup:预留的备份机器。当其他所有的非backup机器出现故障或者忙的时候,才会请求backup机器,因此这台机器的压力最轻。
- max_fails:在fail_timeout时间内,允许请求最大的失败次数,默认为1。当达到最大失败时,会在fail_timeout时间内不允许再次被选择。,返回 proxy_next_upstream 模块定义的错误。
- fail_timeout:单位为秒,默认是10秒。指定一段时间内,请求经历了max_fails次失败后,该server不能访问的时间(暂停服务的时间)。max_fails可以和fail_timeout一起使用。
注意:
当负载调度算法为ip_hash时,后端服务器在负载均衡调度中的状态不能是backup。
2.2 nginx负载均衡配置
nginx.conf 负载均衡的基本配置内容如下,以轮询策略为例:
worker_processes 1;
events {
worker_connections 1024;
}
http {
# upstream模块:server\_group\_name 自定义服务组名
upstream server_group_name {
# server指令指定后端服务器的IP地址和端口
server localhost:8080;
server 192.168.xxx.xxx:8081 down;
server 192.168.xxx.xxx:8082 max\_fails=3 fail\_timeout=20s;
server 192.168.xxx.xxx:8083;
}
# server模块
server {
listen 80;
server_name localhost;
location / {
# proxy\_pass:代理转发,将单体服务http://127.0.0.1:80,改为服务组名
proxy_pass http://server_group_name/;
# proxy\_redirect default;
}
}
}
二、Nginx负载均衡实战
浏览效果:在浏览器访问:http://192.168.xxx.xxx/test.html时,由于配置的负载均衡会将请求平均分发到两台服务器中,访问时会出现不同界面。。
1、准备工作
这里准备两台tomcat服务器,一台服务器的端口为8080,另一台服务器的端口也为8080吧;
在这两台tomcat服务器的webapps目录中的 ROOT文件夹中创建一个 test.html文件,用于测试。
# 添加 html文件并加入内容
echo "<h1>This is 8080 Port</h1>" > /usr/local/tomcat8080/webapps/ROOT/test.html
echo "<h1>This is 8080 Port -------</h1>" > /usr/local/tomcat8080/webapps/ROOT/test.html
启动两个tomcat服务。
#启动tomcat8080
#启动tomcat8080:
/usr/local/tomcat8080/bin/startup.sh
#关闭tomcat8080:
#/usr/local/tomcat8080/bin/shutdown.sh
浏览器直接访问tomcat服务。
2、Nginx负载均衡配置
第一步:修改Nginx的配置文件
vim /usr/local/nginx/conf/nginx.conf
配置内容如下,以轮询策略为例:
worker_processes 1;
events {
worker_connections 1024;
}
http {
# upstream模块:自定义服务组名
upstream my_tomcat_server {
server 192.168.xxx.1xx:8080;
server 192.168.xxx.2xx:8080;
}
server {
listen 80;
server_name 192.168.xxx.xxx; # 指定虚拟主机的IP,或者外网域名
location / {
root html;
index index.html index.htm;
# proxy\_pass:代理转发,指定我们配置负载均衡的服务名my\_tomcat\_server
proxy_pass http://my_tomcat_server;
# 增加下面内容
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote\_addr;
proxy_set_header X-Forwarded-For $proxy\_add\_x\_forwarded\_for;
}
}
}
注意:如果遇到 nginx 配置了https upstream,然后访问跳转失败,直接报404。
解决方法:在nginx的配置文件中添加下面内容。
# 增加下面内容
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote\_addr;
proxy_set_header X-Forwarded-For $proxy\_add\_x\_forwarded\_for;
第二步:重启Nginx
修改 nginx完之后,保存退出,重启Nginx。
/usr/local/nginx/sbin/nginx -s reload
# 先执行停止命令再执行启动命令
[root@centos7 sbin]# /usr/local/nginx/sbin/nginx -s quit
[root@centos7 sbin]# /usr/local/nginx/sbin/nginx
第三步:浏览器访问OK
在浏览器访问:http://192.168.xxx.xxx/test.html时,由于配置的负载均衡会将请求平均分发到到这两台服务器中,所以,访问时会出现不同界面。
第四步:关闭服务
#关闭Nginx
/usr/local/nginx/sbin/nginx -s quit
#关闭tomcat
/usr/local/tomcat8080/bin/shutdown.sh
三、Nginx负载均衡分配策略介绍
1、轮询[默认]
轮询方式是Nginx负载默认的方式。
该策略会使得每个请求按时间顺序逐一分配到不同的后端服务器,如果其中某个后端服务器 down 掉,该策略能自动从轮询列表中剔除该服务。
轮询方式是将所有请求按顺序轮流地分配到后端服务器上,它均衡地对待后端的每一台服务器,而不关心服务器实际的连接数和当前的系统负载。
# upstream模块:自定义服务组名
upstream my_tomcat_server {
server localhost:8080; # 服务器的ip:port
server 192.168.xxx.xxx:8081;
}
2、权重(weight)
该策略会指定每个服务的权重比例,权重越高被分配的客户端(请求)也就越多,weight 和访问比率成正比。主要用于后端服务器性能不均的情况。
- weight指定轮询权值,默认值为1。通常用于后端服务机器性能不统一,将性能好的分配权重高来发挥服务器最大性能。
不同的后端服务器可能机器的配置和当前系统的负载并不相同,因此它们的抗压能力也不相同。给配置高、负载低的机器配置更高的权重,让其处理更多的请;而配置低、负载高的机器,给其分配较低的权重,降低其系统负载,加权轮询能很好地处理这一问题,并将请求顺序且按照权重分配到后端。
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Linux运维工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Linux运维全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Linux运维知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加VX:vip1024b (备注Linux运维获取)
为了做好运维面试路上的助攻手,特整理了上百道 【运维技术栈面试题集锦】 ,让你面试不慌心不跳,高薪offer怀里抱!
这次整理的面试题,小到shell、MySQL,大到K8s等云原生技术栈,不仅适合运维新人入行面试需要,还适用于想提升进阶跳槽加薪的运维朋友。
本份面试集锦涵盖了
- 174 道运维工程师面试题
- 128道k8s面试题
- 108道shell脚本面试题
- 200道Linux面试题
- 51道docker面试题
- 35道Jenkis面试题
- 78道MongoDB面试题
- 17道ansible面试题
- 60道dubbo面试题
- 53道kafka面试
- 18道mysql面试题
- 40道nginx面试题
- 77道redis面试题
- 28道zookeeper
总计 1000+ 道面试题, 内容 又全含金量又高
- 174道运维工程师面试题
1、什么是运维?
2、在工作中,运维人员经常需要跟运营人员打交道,请问运营人员是做什么工作的?
3、现在给你三百台服务器,你怎么对他们进行管理?
4、简述raid0 raid1raid5二种工作模式的工作原理及特点
5、LVS、Nginx、HAproxy有什么区别?工作中你怎么选择?
6、Squid、Varinsh和Nginx有什么区别,工作中你怎么选择?
7、Tomcat和Resin有什么区别,工作中你怎么选择?
8、什么是中间件?什么是jdk?
9、讲述一下Tomcat8005、8009、8080三个端口的含义?
10、什么叫CDN?
11、什么叫网站灰度发布?
12、简述DNS进行域名解析的过程?
13、RabbitMQ是什么东西?
14、讲一下Keepalived的工作原理?
15、讲述一下LVS三种模式的工作过程?
16、mysql的innodb如何定位锁问题,mysql如何减少主从复制延迟?
17、如何重置mysql root密码?
一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
义?
10、什么叫CDN?
11、什么叫网站灰度发布?
12、简述DNS进行域名解析的过程?
13、RabbitMQ是什么东西?
14、讲一下Keepalived的工作原理?
15、讲述一下LVS三种模式的工作过程?
16、mysql的innodb如何定位锁问题,mysql如何减少主从复制延迟?
17、如何重置mysql root密码?
一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
[外链图片转存中…(img-P1JdAgA3-1712853130076)]