Day50
课堂笔记
2019年5月10日
编译安装负载均衡深入
两个模块:
upstream服务器池,里面放服务器
upstream backend{
server 10.0.0.7:80 weight=1;
server 10.0.0.7:80 weight=1;
server 10.0.0.9:80 weight=1;
}
这种分配方式叫做负载均衡算法
第一类为静态调度算法:
和节点无关的调度算法
l rr轮询(默认调度算法,静态调度算法)
l wrr(权重轮询,静态调度算法)
l ip_hash(静态调度算法) hash(ip)===oldboy 调度给某一台机器
负载不均衡
解决会话保持https://blog.51cto.com/oldboy/1331316
第一类为动态调度算法:
l fair(动态调度算法)
l least_conn最小连接调度算法
l url_hash算法 同一个URL地址,调度给同一台节点。
hash(url)===oldgril调度给某一台机器
http://nginx.org/en/docs/http/ngx_http_upstream_module.html调度给A服务器
web缓存服务器的负载均衡
一致性HASH算法
proxy
1)将匹配URI为name的请求抛给http://127.0.0.1/remote/。
server {
listen 80;
server_name blog.etiantian.org;
location / {
proxy_pass http://backend;
proxy_set_header Host $host;
}
}
server {
listen 80;
server_name www.etiantian.org;
location / {
proxy_pass http://backend;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
}
}
根据路径转发:
location /name/ {
proxy_pass http://127.0.0.1/remote/;
}
根据url中的目录地址实现代理转发说明
location /name/ {
proxy_pass http://127.0.0.1/remote/;
}
案例背景:通过Nginx实现动静分离,即通过Nginx反向代理配置规则实现让动态资源和静态资源及其他业务分别由不同的服务器解析,以解决网站性能、安全、用户体验等重要问题。
upstream static_pools {
server 10.0.0.7:80 weight=1;
}
upstream upload_pools {
server 10.0.0.8:80 weight=1;
}
upstream default_pools {
server 10.0.0.9:80 weight=1;
}
#www.etiantian.org/static/xxxxx路径调度到static_pools
location /static/ {
proxy_pass http://static_pools;
}
location /upload/ {
proxy_pass http://upload_pools;
}
location / {
proxy_pass http://default_pools;
}
域名不变,基于路径实现动静分离:
http://www.etiantian.org/static/
http://www.etiantian.org/upload/
http://www.etiantian.org/
http://www.etiantian.org/new/
http://www.etiantian.org/static/
基于扩展名实现刚才的案例
location ~ .*.(gif|jpg|jpeg|png|bmp|swf|css|js)$ {
proxy_pass http://static_pools;
}
location / {
proxy_pass http://default_pools;
}
location /upload/ {
proxy_pass http://upload_pools;
}
[root@lb01 conf]# cat nginx.conf.base_uri
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
upstream static_pools {
server 10.0.0.7:80 weight=1;
}
upstream upload_pools {
server 10.0.0.8:80 weight=1;
}
upstream default_pools {
server 10.0.0.9:80 weight=1;
}
server {
listen 80;
server_name www.etiantian.org;
location /static/ {
proxy_pass http://static_pools;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
}
location /upload/ {
proxy_pass http://upload_pools;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
}
location / {
proxy_pass http://default_pools;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
}
}
}
直接通过不同的域名实现动静分离:
www.etiantian.org动态
img.etiantian.org静态
基于不同类型的设备实现转发:
HTTP报文的请求头里,会提供http_user_agent信息。
http_user_agent用户的设备:
location / {
if ($http_user_agent ~* "android")
{
proxy_pass http://android_pools; #<==这是android服务器池,需要提前定义upstream。
}
if ($http_user_agent ~* "iphone")
{
proxy_pass http://iphone_pools; #<==这是iphone服务器池,需要提前定义upstream。
}
proxy_pass http://pc_pools;
}
location / {
if ($http_user_agent ~* "MSIE")
{
proxy_pass http://static_pools;
}
if ($http_user_agent ~* "Chrome")
#if ($http_user_agent ~* "Firefox")
{
proxy_pass http://upload_pools;
}
proxy_pass http://default_pools;
include proxy.conf;
}
location / {
if ($http_user_agent ~* "android")
{
proxy_pass http://static_pools;
}
if ($http_user_agent ~* "iphone")
{
proxy_pass http://upload_pools;
}
proxy_pass http://default_pools;
}
[root@lb01 conf]# curl -A "android" http://www.etiantian.org/upload/
upload server
[root@lb01 conf]# curl -A "iphone" http://www.etiantian.org/static/
static server
[root@lb01 conf]# curl -A "android" http://www.etiantian.org
www7
[root@lb01 conf]# curl -A "iphone" http://www.etiantian.org/
www8
[root@lb01 conf]# curl http://www.etiantian.org/
www9
安卓:
http://192.168.12.201:8000/upload/
upload
iphone
http://192.168.12.201:8000/static/
static
其他:
http://192.168.12.201:8000/
http://192.168.12.201:8000/new/
[root@lb01 conf]# curl -A "android" http://www.etiantian.org/upload/
upload
[root@lb01 conf]# curl -A "iphone" http://www.etiantian.org/static/
static
[root@lb01 conf]# curl -A "android" http://www.etiantian.org
www7
[root@lb01 conf]# curl -A "iphone" http://www.etiantian.org/
www8
[root@lb01 conf]# curl http://www.etiantian.org/
www9
实践:
1、基于路径转发 实现动静分离
2、基于扩展名转发 实现动静分离
3、基于user_agent转发 实现PC 手机 不同手机分离
直接通过不同的域名实现动静分离:
www.etiantian.org动态
img.etiantian.org静态
负载均衡器已经配好了动态和静态的负载均衡:
server {
listen 80;
server_name blog.etiantian.org;
location / {
proxy_pass http://backend;
proxy_set_header Host $host;
}
}
server {
listen 80;
server_name img.etiantian.org img1.etiantian.org;
location / {
proxy_pass http://backend;
proxy_set_header Host $host;
}
}
Web01上创建静态服务:
[root@web01 /etc/nginx/conf.d]# cat img.conf
server {
listen 80;
server_name img.etiantian.org;
location / {
root /usr/share/nginx/html/img;
index index.html;
}
}
Web02上创建静态服务:
[root@web02 /application/nginx/conf/extra]# cat 05_img.conf
server {
listen 80;
server_name img.etiantian.org;
location / {
root html/img;
index index.html;
}
}