企业架构LNMP高可用负载均衡服务器

学习目标和内容

  1. 能够理解负载均衡技术
  2. 能够理解keepalived互为主备模式
  3. 能够实现keepalived互为主备配置
  4. 能够实现负载均衡案列
  5. 能够实现负载均衡服务器高可用案列

一、背景描述及其方案设计

1、业务背景描述

时间:2011.6.-2013.9

发布产品类型:互联⽹动态站点 商城

⽤户数量: 4000-8000(⽤户量猛增)

PV : 16000-100000(24⼩时访问次数总和)

QPS: 50-100*(每秒访问次数)

DAU: 400-800(每⽇活跃⽤户数)

随着业务量骤增,之前单活服务器,已经不能够满足业务使用需要,主服务器宕机,备服务器提供服务,因为流量太大,备也宕机。需要多台服务器,同时提供服务

模拟运维设计方案

以上架构服务器,已经不能够满足以上提到的业务需求。架构发生如下变化

二、服务器基本环境部署

1、引入负载均衡技术

负载均衡技术 (load blance) 是一种概念 要去把一些资源使用平均分配。

负载均衡:分发流量、请求到不同的服务器。使流量平均分配(理想的状态的)

作用:服务器容灾 流量分发

负载均衡实现方式:

硬件级别 F5 性能好 价格高 几万到几十万不等

软件级别 性价比高

lvs linux下分发软件 四层 ip+port NAT

nginx upstream功能分发 应用层分发 http tcp等等

haproxy 七层负载均衡

一般用 LVS 做四层转发,Nginx做七层转发。

七层可以进行智能的配置,确认图片访问哪个服务器,其他资源访问哪个服务器,对应的图片服务器带宽调整。资源访问服务器也可以对应开启GZIP压缩。

四层的网络层数据转发,没有“请求”的概念。

2、克隆复制虚拟机

server01 web1 192.168.17.100

server02 mysql 192.168..17.102

sevver03 web2 192.168.17.104

server04 lb load balance 192.168.17.105

3、FQDN配置

4、网络配置和检测

根据之前的配置方式实现以上配置

负载均衡服务器搭建

此处负载均衡使用七层的负载均衡方式,nginx的Module ngx_http_upstream_module

请求先去负载均衡服务器,所以要先解析域名到负载均衡

负载均衡服务器配置

配置负载均衡,只需要修改做为负载均衡服务器的nginx即可,也就是在架构中的server04服务器

①在server04 load balance 修改配置

负载均衡的nginx不提供页面和php都不进行反回和解析,全部转发代理到后端

②注意web服务器配置,shop的server段一定要在第一项

在server01(web1)和server03(web2)

查看负载均衡效果

为了能够看到分发到不同服务器的效果,可以在server01和server03的访问页面中,写入不同的信息,来测试效果。真实的业务环境中,用户是无需知道访问的是哪个服务器。

①在server01和server03的页面文件写入不同的内容

②测试访问效果

当web服务器,有宕机,负载均衡服务器,会自动切换到其他可用服务器,实现心跳检测

nginx的负载均衡算法

nginx 官方默认3种负载均衡的算法

① RR 轮询(默认) 一次一个的来(理论上的,实际实验可能会有间隔)

②weight 权重 权重高多分发一些 服务器硬件更好的设置权重更高一些

server01 web 1 5 1 1 1 1 1

server03 web 2 3 1 1 1

8次中,server01分发5次,server03分发3次

③ip_hash

同一个IP,所有的访问都分发到同一个web服务器

问题:

①验证码校验不通过 访问web1 生成验证码 存储起来,第二次跳转请求转发web2,校验验证码没有存储的值,所有校验不成功。

②是否登录的判断方式,session里的值(uid,username),分发到不同的web服务器,就会造成用户已经登录,但是转发到另外的服务器,就显示没有登录

分析:

图片生成验证码之后,需要写入保存到session(会话机制,默认保存到服务器本地文件中)

①生成验证码存储在了server01 web2

②校验验证码跑多了server03 web2

③验证码值永远都校验不正确

经典问题:多台服务器分布式架构集群中 session如何共享和存储?

①ip_hash

②session入库共享 存储到数据库 memcache redis

③磁盘共享 nfs

keepalived互为主备配置

server01 web1

server03 web2

之前这两台服务器已经拥有了VIP

在负载均衡配置中,使用真实IP,可以满足需求的,当服务器停止响应,IP会自动踢出配置。nginx本身具有心跳检测,当一台服务器宕机了,切换中理论是有延迟的。

解决方案:

双VIP 负载均衡集群

LB 分发到VIP1和VIP2

默认VIP1绑定server01 web1 如果web1宕机,飘移到web2

默认VIP2绑定server03 web2 如果web2宕机,飘移到web1

语法:

配置两段vrrp_instance 实现两个VIP

互为主备

配置以下服务器

server01 web1

server03 web2

实现双VIP绑定对应的主机

配置负载均衡服务器的分发IP到VIP中

实现负载均衡高可用

所有的请求流量,都要经过负载均衡服务器,负载均衡服务器压力很大,防止它宕机,导致后端服务所有都不可用,需要对负载均衡服务器,做HA(双机单活)

①克隆配置基本环境

②配置主备服务

server04是master

server05 是backup