LNMP高可用负载均衡服务器之nginx

业务需求:

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

一、服务器基本环境部署

server01 web1 192.168.17.102

server02 mysql 192.168.17.100

server03 web2 192.168.17.101

server04 lb load balance 192.168.17.103

网卡ip、主机名称、hosts解析

设置静态ip

vim /etc/sysconfig/network-scripts/ifcfg-eth0或者ens33

添加 IPADDR= GATEWAY= NETMASK= DNS1= DNS2=

二、负载均衡服务器搭建
1、负载均衡概念

负载均衡技术(load blance)是:把资源的使用进行平均分配。

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

作用:

服务器容灾 流量分发

主要作用:

①流量分发请求平均 降低单例压力

其他作用:

②安全隐藏后端真实服务

③屏蔽非法请求(七层负载均衡)

2、负载均衡的分类

二层负载均衡(mac)

根据OSl模型分的二层进行负载,一般是用虚拟mac地址方式,外部对虚拟MAC地址请求,负载均衡接收后,再分配后端实际的MAC地址响应

三层负载均衡( ip)

一般采用虚拟IP地址方式,外部对虚拟的ip地址请求,负载均衡接收后,再分配后端实际的IP地址响应

四层负载均衡(tcp)网络运输层面的负载均衡

在三层负载均衡的基础上,用ip+port接收请求,再转发到对应的机器

七层负载均衡(http)智能型负载均衡

根据虚拟的url或IP,主机接收请求,再转向(反向代理)相应的处理服务器

3、常见实现方式

软件和硬件(负载均衡器很贵)

三次握手:

C S

第一次:C发送数据包S

第二次:S回复C收到的数据包(ack+1)(实际上已经建立连接了,在等待客户端的响应)

syn攻击 : 客户端不发送数据包,一直消耗服务器的连接数

第三次:C发送数据包(ack+1) S

可以设置服务器响应等待之后回收连接数

还可以在七层设置非法请求拦截

4、Nginx负载均衡配置

官方文档: http://nginx.org/en/docs/http/ngx_http_upstream_module.html

也可以在官网搜upstream module

架构分析:

①用户访问请求Nginx负载均衡服务器

②Nginx负载均衡服务器再分发请求到web服务器

实际配置负载均衡,只需修改作为负载均衡服务器的Nginx即可。当前架构中的server04

①在客户端解析域名到负载均衡服务器

②在负载均衡的Nginx配置

注意本次架构中server04的Nginx服务器是负载均衡服务器

cd /usr/local/nginx/conf/nginx.conf

配置文件示例:

#在http段进行配置
#分发请求到后端服务器
    upstream shop {
    #web1 server01
    server 192.168.17.102;
    #web2 server02
    server 192.168.17.101;
    server {
    listen 80;
    server_name www.shop.com;
    location / {
#代理转发到shop段匹配到上面的upstream
    proxy_pass http://shop;
#以下两条配置,实质是设置了传输的header头信息
#传输域名给后端服务器进行识别方便匹配对应server虚拟主机(一定要加,要不然会匹配到其他server)
    proxy_set_header Host $host;
#发送客户端IP给后端服务器用来方便后端服务器识别用户真实IP
    proxy_set_header X-Real-IP $remote_addr;
    }
}

③重载负载均衡服务器Nginx配置

测试查看效果可以停掉其中一台web服务器进行测试

负载均衡nginx只负责转发请求不用解析php

确认负载均衡是否分发可以查看nginx访问日志access.log

5、负载均衡后获取客户端IP

负载均衡之后,在后端的web服务器获取到的是负载均衡服务器的IP,而不能够获取到客户端的真实IP。需要进行以下特殊配置:

①首先在负载均衡服务器中配置,转发客户端IP给后端web服务器

②后端web服务器需要配置,识别从负载均衡服务器传输过来的客户端真实IP

官方网址: http://nginx.org/en/docs/http/ngx_http_realip_module.html

使用ngx_http_realip_module模块提供的set_real_ip_from语法,默认此模块没有安装,

需要编译时添加编译参数

web服务器上配置set_real_ip_from 代表从哪儿来源的IP,需要识别真实客户端IP

示例配置:

#此配置是配置在两个web服务器上的
#可配置到http、server、location中,推荐配置到server中
#配置需要识别的IP来源     负载均衡的IP
set_real_ip_from    192.168.17.103;

6、upstream中server的关键字

upstream中的分发之后的几个关键字:

backup备其他的没有backup标识的都无响应,才分发到backup

down此条配置,不会被分发到

    upstream shop {
        server 192.168.17.102 down;
        server 192.168.17.101 backup;
    }

7、session一致性问题

验证码位置可以设置

负载均衡验证码报错原因:

①比如分发到web1服务器,生成验证码,存储到session中,默认在服务器本地②再次校验的时候,请求分发到web2服务器了,所有验证码一直校验不通过解决方案思路:

①生成和验证session都请求同一台服务器

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

②共享session nfs mysql 内存缓存软件(memcached、redis)

8、Nginx负载均衡算法

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

Round-Robin RR轮询(默认)一次一个(两台服务器)的来(理论上的,实际实验可能会有间隔)

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

ip_hash 同一个IP,所有的访问都分发到同一个web服务器(可以解决验证码session不一致的问题)

但是这种方法对负载均衡不公平,一台服务器收到的请求多,就会一直请求下去,另外一台就没有请求了。

upstream shop {
    #ip_hash一致性算法配置 此项weight就失效了ip_hash;
    #web1 server01
    server 192.168.17.102 weight=5;
    #web2 server02
    server 192.168.17.101 weight=3;
}

9、实现负载均衡高可用

通过keepalived实现VIP在负载均衡服务器组的切换。

server04 master LB 192.168.17.103

server05 backup LB 192.168.17.50

主备负载均衡服务器的keepalived都必须一样

vrrp_instance VI_1 {
    state BACKUP
    interface ethe
    #虚拟路由ID新ID 不要之前的冲突
    virtual_router_id 52
    piority 100
    nopreempt 
    advert_int 1
    authentication {
    auth_type PASS
    auth_pass 1111
    }
    virtual_ipaddress {
    # 添加新VIP
    192.168.17.199
    }
    track_script {
    check_nginx
    }
}

配置完成之后service keepalived start

ip a查看vip绑定情况 域名解析

关掉其中一台访问测试负载均衡高可用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值