22、lnmp_nginx反向代理(负载均衡)、高可用
负载均衡,根据ip和端口号找到相应的web服务器站点(即端口区分):
22.1、nginx的负载均衡:
1、介绍:
网站的访问量越来越大,服务器的服务模式也得进行相应的升级,比如分离出数据库服务器、分离出图片作为单独服务,这些是简单的数据的负载均衡,
将压力分散到不同的机器上。有时候来自web前端的压力,也能让人十分头痛。怎样将同一个域名的访问分散到两台或更多的机器上呢?这其实就是另一
种负载均衡了,nginx自身就可以做到,只需要做个简单的配置就行。nginx不单可以作为强大的web服务器,也可以作为一个反向代理服务器,而且nginx
还可以按照调度规则实现动态、静态页面的分离,可以按照轮询、ip哈希、URL哈希、权重等多种方式对后端服务器做负载均衡,同时还支持后端服务器的健康检查。
2、nginx的反向代理和负载均衡的区别:
(1)负载均衡需要通过反向代理来实现;
(2)反向代理就是指nginx作为前端服务器,将请求转发到后端,再将后端服务器的结果,返回给客户端;
(3)它在中间做了一个代理服务器的角色;
(4)负载均衡对反向代理增加了一些策略,因为后端是多台服务器,nginx会根据设定的策略将请求转发给
一个相对空闲的服务器,对负载进行分流,减轻服务器压力;
22.2、nginx 的 upstream目前支持 4 种方式的分配
1、轮询(默认)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
2、weight
指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
3、ip_hash
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题,也可以搭建session服务器,共享所有用户的session。
4、fair(第三方)
按后端服务器的响应时间来分配请求,响应时间短的优先分配。
5、url_hash(第三方)
22.3、反向代理和负载均衡的区别:
nginx仅仅作为nginx Proxy反向代理使用,因为这个反向代理功能表现的效果是负载均衡均衡集群的效果,
所以称之为nginx的负载均衡。普通的负载均衡软件,例如大名鼎鼎的lvs,其实现的功能只是对请求数据包的转发
(也可能会改写数据包)、传递,其中DR模式明显的特征是从负载均衡下面的节点服务器来看,接收到的请求还是
来自访问负载均衡器的客户端的真实用户。反向代理接收到访问用户的请求后,会代理用户重行发起请求代理下的
节点服务器,最后把数据返回给客户端用户,在节点服务器看来,访问节点服务器的客户端用户就是反向大力服务器,而非真实的网站访问用户。
几大负载均衡的软件:
nginx(小企业 l4 l7)、lvs(中等企业 l4)、haproxy(特大企业 l4 l7)
ois网络七层模型:l4:tcp(传输层)负载均衡;l7:http(应用层)负载均衡;
nginx负载均衡的组件模块:
ngx_http_proxy_module:proxy代理模块,用于把请求后抛给服务器节点或upstrem服务器池;
ngx_http_upstream_module:负载均衡模块,可以实现网站的负载均衡功能及节点的健康检(upstrem服务器池);
http://nginx.org/en/docs/http/ngx_http_upstream_module.html#负载均衡的配置官网
22.4、配置nginx反向代理:
1、安装反向代理软件nginx(和安装nginx web服务器是一样的操作,lb01)
2、nginx负载均衡配置:
(1)普通配置介绍:
pstream backend {
server backend1.example.com weight=5; #weight,加权操作
server backend2.example.com:8080;
server backup1.example.com:8080 backup;//备份,不参与转发,只有当所有服务器都挂掉时才参与转发;
server backend3.example.com:8080 down;//临时停机维护,不参与任何转发,是关闭状态,
server 192.168.1.66 max_fails=2 fail_timeout=60s;//达到2次访问失败后认为服务器挂掉;挂掉60s后再次测试是否已经挂掉;
}
server {
location / {
proxy_pass http://backend;
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上使用设置日志接收模式为X-Forwarded-For即可;
}
}
(2)部署实例:
1)负载均衡服务器配置(lb01):
[root@lb01 ~]# cd /application/nginx/conf/
[root@lb01 conf]# cat nginx.conf
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
upstream php-pools {
server 10.0.0.8:80;
server 10.0.0.7:80;
ip_hash;
}
server {
listen 80;
server_name www.proxy.com;
location / {
proxy_pass http://php-pools;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
}
2)web01服务器配置:
[root@web01 nginx]# cat conf/nginx.conf
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
include extra/php.conf;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log logs/access.log main;
}
[root@web01 ~]# cat /application/nginx/conf/extra/php.conf
server {
listen 80;
server_name www.php.com;
location / {
root html/php/;
index index.php index.html;
}
location ~ .*\.(php|php5)?$ {
root html/php/;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi.conf;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
3)web02配置:
web02的配置(因为之前使用的是apache搭建的服务器,所以使用该服务器,最后是使用nginx做web服务器):
[root@web02 ~]# vim /application/apache/conf/extra/httpd-vhosts.conf
<VirtualHost *:80>
ServerAdmin 250416476-5@qq.com
DocumentRoot "/application/apache-2.2.31/htdocs/php/"
ServerName www.php.com
#ServerAlias www.dummy-host.example.com
ErrorLog "logs/www.php.com_error.log"
CustomLog "logs/www.php.com-access_log" common
</VirtualHost>
4)在本机的host文件添加域名解析:
10.0.0.5 www.proxy.com
5)在网页中进行测试:
先部署然后挂掉一个web服务器看访问日志如果有变化表示代理成功,或通过访问页面去判断;
也可以在linux中使用curl命令进行测试:
for n in `seq 20` ;do curl 10.0.0.5;sleep 1;done
22.5、配置vip:
vip(浮动ip,辅助ip) 、当lb01宕机之后,lb02顶上(平时lb02处于暂停服务的状态),即负载均衡的高可用;
在lb02上配置和lb01一样的配置;
(1)自动模式的浮动ip(keepalived):
1)lb01和lb02安装keeplived软件包:
[root@lb01 ~]# yum install keepalived -y
[root@lb01 ~]# rpm -qa keepalived
keepalived-1.2.13-5.el6_6.x86_64
2)配置lb01和lb02上的keeplived配置文件:
[root@lb01 ~]# vim /etc/keepalived/keepalived.conf #主
! Configuration File for keepalived
global_defs {
notification_email {
25041647-65@qq.com #发送邮件的地址 root@localhost.localdomain;
}
notification_email_from 25041647-65@qq.com #发送邮件的地址;
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id LVS_DEVEL #id,不同的keepalived的id不同
}
vrrp_instance VI_1 { #实例
state MASTER #状态
interface eth0 #通信的网卡
virtual_router_id 51 #实例的id,相同
priority 100 #优先级,优先级大的获取资源
advert_int 1 #心跳间隔
authentication { #两台机器通信的密码
auth_type PASS
auth_pass 1111
}
virtual_ipaddress { #绑定的vip
10.0.0.3/24 dev eth0 label eth0:1
}
}
[root@lb02 ~]# vim /etc/keepalived/keepalived.conf #备
! Configuration File for keepalived
global_defs {
notification_email {
25041647-65@qq.com
}
notification_email_from 25041647-65@qq.com
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id LVS_DEVEL1
}
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 51
priority 90
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0.0.3/24 dev eth0 label eth0:1
}
}
3)启动lb01和lb02上的keepalived服务:
[root@lb01~]# /etc/init.d/keepalived start
正在启动 keepalived: [确定]
4)lb01和lb02上的keepalived服务开机自启:
[root@lb01 ~]# chkconfig --list keepalived
keepalived 0:关闭 1:关闭 2:关闭 3:关闭 4:关闭 5:关闭 6:关闭
[root@lb01~]# chkconfig keepalived on
[root@lb01 ~]# chkconfig --list keepalived
keepalived 0:关闭 1:关闭 2:启用 3:启用 4:启用 5:启用 6:关闭
[root@lb01 ~]# ip addr | grep 10.0.0.3 #此时lb01的浮动ip地址已经启动
inet 10.0.0.3/24 scope global secondary eth0:1
5)在windows本地hosts中添加主机和域名的解析文件:
在lb01宕机后lb02能够自动顶上;
10.0.0.3 www.proxy.com
6)测试:
查看lb02的浮动ip没有结果,因为lb02的优先级小于lb01的优先级:
[root@lb02 ~]# ip addr | grep 10.0.0.3
当lb01宕机后,此时查看lb01的浮动ip地址已经出现:
[root@lb02 ~]# ip addr | grep 10.0.0.3
inet 10.0.0.3/24 scope global secondary eth0:1
22、lnmp_nginx反向代理(负载均衡)、高可用的更多相关文章
- nginx负载均衡高可用部署和代理配置
nginx负载均衡高可用配置 服务器A:172.16.100.2 服务器B:172.16.100.3 首先先在两台服务器上分别安装好nginx和keepalived后,再进行下面的操作 配置keepa ...
- 实现基于Haproxy+Keepalived负载均衡高可用架构
1.项目介绍: 上上期我们实现了keepalived主从高可用集群网站架构,随着公司业务的发展,公司负载均衡服务已经实现四层负载均衡,但业务的复杂程度提升,公司要求把mobile手机站点作为单独的服务 ...
- Nginx+Keepalived负载均衡高可用
Nginx+Keepalived负载均衡高可用方案: Nginx 使用平台:unix.linux.windows. 功能: A.www web服务 http 80 b.负载均衡(方向代理proxy) ...
- nginx 详解反向代理负载均衡
什么是反向代理负载均衡 使用代理服务器可以将请求转发给内部的Web服务器,使用这种加速模式显然可以提升静态网页的访问速度.因此也可以考虑使用这种技术,让代理服务器将请求 均匀转发给多台内部Web服务器 ...
- Nginx特性验证-反向代理/负载均衡/页面缓存/URL重定向
原文发表于cu:2016-08-25 参考文档: Nginx 反向代理.负载均衡.页面缓存.URL重写等:http://freeloda.blog.51cto.com/2033581/1288553 ...
- 反向代理负载均衡-----nginx
一:集群 1.1:集群的概念 集群是一组相互独立的.通过高速网络互联的计算机,他们构成了一个组,并以单一系统的模式加以管理.一个客户与集群相互作用时,集群像是一个独立的服务器.集群配置是用于提高 ...
- Keepalived实现Nginx负载均衡高可用
第一章:keepalived介绍 VRRP协议 目的就是为了解决静态路由单点故障问题的 第二章: keepalived工作原理 2.1 作为系统网络服务的高可用功能(failover) keepali ...
- 反向代理负载均衡之nginx
一.集群 1.1 什么是集群 集群是一组相互独立的.通过高速网络互联的计算机,它们构成了一个组,并以单一系统的模式加以管理.一个客户与集群相互作用时,集群像是一个独立的服务器.集群配置是用于提高可用性 ...
- 如何使用Weave以及Docker搭建Nginx反向代理/负载均衡服务器
Hi, 今天我们将会学习如何使用 Weave 和 Docker 搭建 Nginx 的反向代理/负载均衡服务器.Weave 可以创建一个虚拟网络将 Docker 容器彼此连接在一起,支持跨主机部署及自动 ...
- 项目实战2.2—nginx 反向代理负载均衡、动静分离和缓存的实现
实验一:实现反向代理负载均衡且动静分离 1.环境准备: 机器名称 IP配置 服务角色 备注 nginx VIP:172.17.11.11 反向代理服务器 开启代理功能 设置监控,调度 rs01 RIP ...
随机推荐
- [bug] Springboot JPA使用Sort排序时的问题
参考 https://blog.csdn.net/qq_44039966/article/details/102713779
- Job for ssh.service failed because the control process exited with error code. See "systemctl status ssh.service" and "journalctl -xe" for details.
1.按照提示 systemctl status ssh.service 查看报错原因 sshd -t 2.结果 /etc/ssh/sshd_config line 34: missing argume ...
- swagger上的接口写入数据库
一.依赖 virtualenv -p python3.6 xx pip install scrapy pip install pymysql 二. 1.创建项目和spider1 scrapy star ...
- /var/log/syslog日志usb接口
p:~# cat /proc/bus/input/devices |grep usbP: Phys=usb-0000:00:05.1-1/buttonS: Sysfs=/devices/pci0000 ...
- JQuery Ajax 请求参数 List 集合处理
引言 JQuery Ajax 发送请求参数一般都是基本类型,比如 String.int:那么,请求参数如果是 List 集合应该如何处理呢? 情况一:Aajx 发送 List 类型请求参数 举例如下: ...
- elasticsearch_dsl 操作
import elasticsearch from elasticsearch_dsl import Search, MultiSearch # Search-执行一个搜索,MultiSearch-同 ...
- 07.ElementUI 2.X 源码学习:源码剖析之工程化(二)
0x.00 前言 项目工程化系列文章链接如下,推荐按照顺序阅读文章 . 1️⃣ 源码剖析之工程化(一):项目概览.package.json.npm script 2️⃣ 源码剖析之工程化(二):项目构 ...
- nginx 重定向到系统维护页面
上周末兄弟项目准备扩展服务器以便提供更好的服务,兄弟项目有一些功能是实时提供到我这边的,需要我这边暂时把对应系统功能屏蔽,因为使用nginx,所以可以直接配置nginx重定向到固定系统维护页面. ng ...
- YOLO、SSD、FPN、Mask-RCNN检测模型对比
YOLO.SSD.FPN.Mask-RCNN检测模型对比 一.YOLO(you only look once) YOLO 属于回归系列的目标检测方法,与滑窗和后续区域划分的检测方法不同,他把检测任务当 ...
- 摄像头ISP系统原理(上)
摄像头ISP系统原理(上) ISP(Image Signal Processor),即图像信号处理器,用于处理图像信号传感器输出的图像信号.它在相机系统中占有核心主导的地位,是构成相机的重要设备. 主 ...