web开发之负载均衡的简单架构
负载均衡
负载均衡的核心思想就是:请求分担
最简单的配置:
一台负载均衡服务器 两台webserver服务器
两台webserver服务器需要配置相同的服务器环境,设置相同的域名指向
负载均衡服务器需要修改nginx.conf配置文件
修改内容如下:
- upstream www_server_pools{
- server 10.0.169.158 weight=2;#webserver服务器IP地址,权重
- server 10.0.169.160 weight=1;#webserver服务器IP地址,权重
- #ip_hash;每个服务器过来 固定访问一个服务器 可以解决session问题
- #fair;
- #hash $request_url
- #hash_method crc32; #每个请求按照逐一的书信不同的后端服务器 如果服务器down掉自动剔除
- }
- server{
- listen 80;
- server_name www.91porn.com 91porn.com;
- location / {
- proxy_pass http://www_server_pools;#域名请求过来 自动查询连接池
- proxy_set_header Host $host; #把主机头发给轮询的主机
- proxy_set_header X-forward-For $remote_addr; #获取真实的IP地址
- }
- }
server 主机端口 | 作用 |
---|---|
weight | 权重 |
max_fails=1 | 最大错误的尝试次数 |
fail_timeout=10s | 错误请求超时时间 |
backup | 找备用服务器 |
高可用负载均衡服务器配置方法:
配置两台负载均衡服务器
每台服务器上需要安装keepalived
修改keepalived配置文件 vim /etc/keepalived/keepalived.conf
- #第一步删除第32行后的所有行(virtual_server 192.168.200.100 443)
- #主负载服务器配置文件修改如下
- global_defs {
- notification_email {
- 17854284556@163.com #接受包含错误信息的邮件的邮箱
- }
- notification_email_from master@liangkun.com #发送错误信息的邮件服务器
- smtp-server 10.0.169.1 #发送邮件服务器的IP
- smtp_connect_timeout 30 #连接超时时间
- router_id LVS_1 #表示服务器编号 这里不能一样
- }
- vrrp_instace VI_1 { #VI_1 这里要相同 可以自定义
- state MASTER #MASTER 主负载
- interface eth2 # 这里要看好你的网卡
- virtual_router_id 160 #ip地址的最后一位 两台主机之间要一样
- priority 200 #权重
- advert_int 1 # 通信间隔时间 秒为单位
- autentication {
- auth_type PASS #认证
- auth_pass 1234 #密码
- }
- virtual_ipaddress {
- 10.0.169.253 #阿里云会提供两个地址 一个内网 一个外网 ip 这时候 要写内网的IP
- }
- }
- #辅负载服务器配置文件修改如下
- global_defs {
- notification_email {
- 17854284556@163.com #接受包含错误信息的邮件的邮箱
- }
- notification_email_from master@liangkun.com #发送错误信息的邮件服务器
- smtp-server 10.0.169.1 #发送邮件服务器的IP
- smtp_connect_timeout 30 #连接超时时间
- router_id LVS_2 #表示服务器编号 这里不能一样
- }
- vrrp_instace VI_1 { #VI_1 这里要相同 可以自定义
- state BACKUIP #MASTER 主负载 BACKUP 表示辅负载
- interface eth3 # 这里要看好你的网卡 本地服务器的网卡
- virtual_router_id 158 #ip地址的最后一位 两台主机之间要一样
- priority 150 #权重
- advert_int 1 # 通信间隔时间 秒为单位
- autentication {
- auth_type PASS #认证
- auth_pass 1234 #密码
- }
- virtual_ipaddress {
- 10.0.169.253 #阿里云会提供两个地址 一个内网 一个外网 ip 这时候 要写内网的IP
- }
- }
- 最后启动keepalived
- service keepalived restart
- ip addr
- chkconfig --level keepalived 2345 on
裂脑问题
两台高可用的负载均衡服务器一个主 一个辅 两个服务器之间 检测不到对方的心跳 但是两台服务器都可以独立的正常工作 这样就可能出现一个问题 一个IP在两台服务器上同时存在 最严重的是两台主机占用一个IP地址 用户写入数据 可能会同时写入两个 容易导致两个服务器数据不同步 数据丢失 这个问题就叫做裂脑
一般出现的裂脑的原因:
两个服务器之间 心跳线路故障 导致无法通信
网卡驱动问题 以及IP配置问题
仲裁服务器 出现故障
iptables selinux 阻止了
心跳网卡的地址配置 错误
virtual_ipaddress 配置不一致 导致 裂脑问题
解决方案:
同时使用串行线路和以太网链接 一条线路坏了 另一条启用 (串行线路距离较短)
如果检测到裂脑 强行关闭一个心跳节点
做好监控报警
引入第三方仲裁 也就是说 每个节点 必须判定自身的状态 如果自身能够ping同网关 则对方有问题 如果ping不通则自身有问题
web开发之负载均衡的简单架构的更多相关文章
- 基于node开发的web应用,负载均衡的简单实践
集群(cluster)是一组相互独立的.通过高速网络互联的计算机,它们构成了一个组,并以单一系统的模式加以管理.一个客户与集群相互作用时,集群像是一个独立的服务器. 负载均衡(Load Balance ...
- 浅谈web应用的负载均衡、集群、高可用(HA)解决方案(转)
1.熟悉几个组件 1.1.apache —— 它是Apache软件基金会的一个开放源代码的跨平台的网页服务器,属于老牌的web服务器了,支持基于Ip或者域名的虚拟主机,支持代理服务器,支持安 ...
- 实现基于Haproxy+Keepalived负载均衡高可用架构
1.项目介绍: 上上期我们实现了keepalived主从高可用集群网站架构,随着公司业务的发展,公司负载均衡服务已经实现四层负载均衡,但业务的复杂程度提升,公司要求把mobile手机站点作为单独的服务 ...
- Azure 提供负载均衡(一)Azure Traffic Manager 为我们的Web项目提供负载均衡
一,引言 上一篇讲到我们将自己的Net Core Web 项目部署到 Azure 的 Web App 的一项 pass 服务,假如随着项目的日益增长的访问量,之前部署到单节点的应用可能无法保证其稳定性 ...
- Azure Load Balancer(一) 为我们的Web项目提供负载均衡
一,引言 上节,我们讲到使用 Azure Traffic Manager 为我们的 Demo 项目提供负载均衡,以及流量转发的功能.但是Azure 提供类似的功能的服务远远不止这一个,今天我们就来讲一 ...
- Azure Application Gateway(一)对后端 Web App 进行负载均衡
一,引言 今天,我们学习一个新的知识点-----Azure Application Gateway,通过Azure 应用程序网关为我么后端的服务提供负载均衡的功能.我们再文章头中大概先了解一下什么是应 ...
- Nginx负载均衡配置简单配置方法
http://www.jb51.net/article/121235.htm Nginx作为负载均衡服务器,用户请求先到达nginx,再由nginx根据负载配置将请求转发至不同的Web服务器.下面通过 ...
- 高并发大流量专题---11、Web服务器的负载均衡
高并发大流量专题---11.Web服务器的负载均衡 一.总结 一句话总结: 推荐使用nginx七层(应用层)负载均衡的实现:配置那是相当的简单 http{ upstream cluster{ serv ...
- LVS之2---基于LVS负载均衡集群架构
LVS之2---基于LVS负载均衡集群架构实现 目录 LVS之2---基于LVS负载均衡集群架构实现 ipvsadm software package Options 常用命令 保存及重载规则 内存映 ...
随机推荐
- Java 9 揭秘(1.Java入门介绍)
文 by / 林本托 在第一部分中,主要讲解如下内容: JDK 9 包含了哪些内容 运行代码的系统要求 如何安装 NetBeans 1 JDK 介绍 JDK 9是Java开发工具包的第九个主要版本,计 ...
- spring异常处理器
一.本篇文章旨在讨论异常处理器: 1.因为异常处理器在实战中通常用来处理开发人员自定义的运行时异常,所以如果要了解如何自定义运行时异常,请自行搜索相关资料. 2.本文的demo用IndexOutOfB ...
- MQ产品比较-ActiveMQ-RocketMQ
几种MQ产品说明: ZeroMQ : 扩展性好,开发比较灵活,采用C语言实现,实际上他只是一个socket库的重新封装,如果我们做为消息队列使用,需要开发大量的代码 RabbitMQ :结合erla ...
- NLTK学习笔记(一):语言处理和Python
目录 [TOC] nltk资料下载 import nltk nltk.download() 其中,download() 参数默认是all,可以在脚本里面加上nltk.download(需要的资料库) ...
- javaCV图像处理之Frame、Mat和IplImage三者相互转换(使用openCV进行Mat和IplImage转换)
前言:本篇文章依赖四个jar包,其中javacv.jar,javacpp.jar和opencv.jar为固定jar包,opencv-系统环境.jar为选配(根据自己的系统平台,x64还是x86而定) ...
- 提高java编程质量 - (一)易变业务使用脚本语言编写
脚本语言的3大特征: 1.灵活:脚本语言一般是动态类型,可以不声明变量类型直接使用,也可以在运行期改变类型:2.便捷:脚本语言是解释性语言,在运行期变更非常方便,而不用重启服务3.简单:脚本语言语法比 ...
- nmon用法
一.简介 nmon是一个简单的性能监测工具,可以监测CPU.内存.网络等的使用情况.它是一个系统监视.调优.性能测试工具,它能一次性提供大量性能相关的信息. 二.安装与执行 下载地址:http://n ...
- 推荐几款.NET客户端开源报表图
如果你正在开发客户端报表图相关的应用,除了.NET自带的控件,你还可以考虑使用以下几个控件库. [OxyPlot] OxyPlot是一个支持.NET的跨平台绘图库.你可以在很多平台上使用它,如WPF, ...
- 耍一把codegen,这样算懂编译么?
最近使用protobuf搭了些服务器,对protobuf的机制略感兴趣,所以研究了下. 大致分析没有什么复杂的 1 对定义的结构体生成消息封包协议 2 对定义的rpc函数生成接口定义 3 用户按pro ...
- JAVAEE——spring03:spring整合JDBC和aop事务
一.spring整合JDBC 1.spring提供了很多模板整合Dao技术 2.spring中提供了一个可以操作数据库的对象.对象封装了jdbc技术. JDBCTemplate => JDBC模 ...