负载均衡的概念说明
- 什么是集群
完成相同任务或工作的一组服务器 - 什么是负载均衡
- 实现用户访问请求进行调度分配
- 实现用户访问压力分担
- 什么是反向代理
反向代理:外网 ---->(ech0外网)代理服务器(eth1内网) ------>公司网站服务器(内网)
正向代理:
准备负载均衡的环境
集群服务器部署:
PS:集群中每台服务器配置一模一样
企业中:
- 先部署好一台LNMP服务器,上传代码信息
- 进行访问测试
- 批量部署多台web服务器
- 将nginx配置文件进行分发
- 将站点目录分发给所有主机
虚拟环境中:
将web01作为模板主机克隆
修改IP和主机名
利用手动方式实现负载均衡
手动修改host文件中的IP访问不同web主机
使用NFS实现共享存储,将web的数据目录都挂载在存储服务器上的一个目录
负载均衡服务器部署:
- 安装部署nginx软件
- 编写nginx负载服务配置文件
ngx_http_upstream_module ---- upstream 负载均衡
ngx_http_proxy_module ---- proxy_pass 反向代理
vim blog.conf
upstream xcn{
192.168.168.128:80;
192.168.168.129:80;
192.168.168.130:80;
}
#定义可以将请求分配给哪些web服务器
server{
listen 80;
server_name www.xcnyunyun.com;
location / {
proxy_pass http://xcn;
}
}
#将请求分配给指定的集群
负载均衡配置模块详细说明
- ngx_http_upstream_module ---- upstream 负载均衡
- 实现不用调度功能
- 轮询分配请求(平均)
- 权重分配请求(能力越强责任越重)
upstream xcn{
192.168.168.128:80 weight=3;
192.168.168.129:80 weight=2;
192.168.168.130:80 weight=1;
}
weight=分配权重,数字最大权重越大
- 实现热备功能
upstream xcn{
192.168.168.128:80;
192.168.168.129:80;
192.168.168.130:80 backup;
}
当192.168.168.128和192.168.168.129都坏了,才会访问192.168.168.130
- 定义最大失败次数
upstream xcn{
192.168.168.128:80 max_fails=5;
192.168.168.129:80;
192.168.168.130:80 backup;
}
定义192.168.168.128访问失败5次后不再访问
- 定义失败之后重发的间隔时间
fail_timeout=10s
当失败5次后10s后会给失败服务器一次机会,再过10s会再给次机会
- 实现不同调度算法
- rr轮询调度算法
- wrr权重调度算法
- ip_hash算法(出现反复登录的时候)
- least_conn 根据服务器连接数分配资源
- ngx_http_proxy_module ---- proxy_pass 反向代理
- 访问不同的网站地址,不能显示不同的网站页面
proxy_set_header Host $host;
server{
listen 80;
server_name www.xcnyunyun.com;
location / {
proxy_pass http://xcn;
proxy_set_header Host $host;
}
}
- 访问网站用户地址信息无法进行分析统计
server{
listen 80;
server_name www.xcnyunyun.com;
location / {
proxy_pass http://xcn;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
}
}
proxy_set_header X-Forwarded-For $remote_addr;使日志中有用户地址信息,因为对于web服务器中客户端时负载均衡服务器,所以只会记录负载均衡服务器的IP
- 访问负载均衡会出现错误页面,影响用户体验
server{
listen 80;
server_name www.xcnyunyun.com;
location / {
proxy_pass http://xcn;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_next_upstream error timeout http_404 http_502 http_403;
}
}
proxy_next_upstream error timeout http_404 http_502 http_403;
当访问到错误界面的节点自动跳过,不展示
负载均衡企业实践应用
根据用户访问的uri信息进行负载均衡(动静分离)
- 架构环境规划
分一台upload服务器、动态访问服务器、静态访问服务器
在upload服务器上操作
mkdir /html/www/upload 创建上传目录
echo ‘upload’ > /html/www/upload/xcn.html 写上首页文件
其他服务器同理 - 编写负载均衡配置文件
upstream upload{
192.168.168.128:80;
}
upstream static{
192.168.168.129:80;
}
upstream default{
192.168.168.130:80;
}
server{
listen 80;
server_name www.xcnyunyun.com;
location / {
proxy_pass http://default;
}
location /upload {
proxy_pass http://upload;
}
location /static {
proxy_pass http://static;
}
}
总结:实现网站集群动静分离
- 提高网站服务安全性
- 管理操作工作简化
- 可以换分不同人员管理不同集群服务器
根据用户访问的终端信息显示不同页面
- 准备架构环境
一个移动端集群、一个web端集群、一个default端集群
移动端集群机器配置
echo ‘iphone 192.168.168.128’ > /html/www/oldboy.html
web端集群机器配置
echo ‘web 192.168.168.129’ > /html/www/oldboy.html
default端集群机器配置
echo ‘default 192.168.168.130’ > /html/www/oldboy.html - 配置负载均衡配置文件
upstream iphone{
192.168.168.128:80;
}
upstream web{
192.168.168.129:80;
}
upstream default{
192.168.168.130:80;
}
server{
listen 80;
server_name www.xcnyunyun.com;
location / {
if ($http_user-agent ~* iphone){
proxy_pass http://iphone;
}
if ($http_user-agent ~* Chrome){
proxy_pass http://web;
}
proxy_pass http://default;
}
}
$http_user-agent判断用户用什么终端的变量