Linux运维-day52-综合架构-nginx负载均衡案例和高可用keepalived

一、案例1:根据用户的客户端转发请求

16955089-fc4dc36d0b997551.png
1.1 环境准备
服务器名称内网IP外网IP
lb01172.16.1.510.0.0.5负载均衡
web01172.16.1.710.0.0.7存放PC端的页面
web02172.16.1.810.0.0.8存放移动端的页面
1.2 创建环境
\\web01
echo this is PC website>/app/www/lidao.html

\\web02
echo this is Mobile website>/app/www/lidao.html
1.3 lb01命令行测试
[root@lb01 ~]# curl 10.0.0.[7-8]/lidao.html

[1/2]: 10.0.0.7/lidao.html --> <stdout>
--_curl_--10.0.0.7/lidao.html
this is PC website

[2/2]: 10.0.0.8/lidao.html --> <stdout>
--_curl_--10.0.0.8/lidao.html
this is Mobile website
[root@lb01 ~]# 
1.4 在lb01判断客户端类型,
[root@lb01 /etc/nginx]# cat nginx.conf
……
    upstream default_pools{
        server 10.0.0.7:80 weight=1 max_fails=1 fail_timeout=10s;
    }
    upstream mobile_pools{
        server 10.0.0.8:80 weight=1 max_fails=1 fail_timeout=10s;
    }
    server{ 
        listen 80;
        server_name www.oldboy.com;
        location / {
            if ($http_user_agent ~* "Android|IOS") { 
                proxy_pass http://mobile_pools;
            }
        proxy_pass http://default_pools;
        proxy_set_header Host $host;
        proxy_set_header X_Forwarded-For $remote_addr;
        }
    }
……
[root@lb01 /etc/nginx]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@lb01 /etc/nginx]# systemctl reload nginx

1>在命令行进行测试

[root@lb01 /etc/nginx]# curl 10.0.0.5/lidao.html
this is PC website
[root@lb01 /etc/nginx]# curl -A ios 10.0.0.5/lidao.html
this is Mobile website
[root@lb01 /etc/nginx]# 

2>在火狐浏览器进行
首先,下载安装firefox,安装 user agent switch 插件


16955089-7eed10c10cb21aec.png

其次,打开火狐浏览器进行测试


16955089-3879d49bdc5915af.png

二、案例2:动静态分离

根据用户的uri进行转发location


16955089-c2b9b4d273773200.png
技术大牛-李导

16955089-c9b0cf8aa724903a.png
2.1 环境准备
服务器名称内网IP外网IP
lb01172.16.1.510.0.0.5负载均衡
web01172.16.1.710.0.0.7模拟存放上传/upload
web02172.16.1.810.0.0.8模拟存放静态网页static
web03172.16.1.910.0.0.9模拟存放动态网页(默认)
2.2 创建环境
\\\\web01 
[root@web01 ~]# mkdir -p  /app/www/upload/
[root@web01 ~]# echo  this is upload  >/app/www/upload/guoav.html
[root@web01 ~]# 

\\\\web02  
[root@web02 ~]# mkdir -p  /app/www/static/
[root@web02 ~]# echo  this is static  >/app/www/static/guoav.html 
[root@web02 ~]# 

\\\\web03  
[root@web03 ~]# mkdir -p  /app/www/
[root@web03 ~]# echo  this is default  >/app/www/guoav.html 
[root@web03 ~]#

检查模拟环境是否ok

[root@web01 ~]# curl 10.0.0.7/upload/guoav.html
this is upload
[root@web01 ~]# curl 10.0.0.8/static/guoav.html
this is static
[root@web01 ~]# curl 10.0.0.9/guoav.html
this is default
[root@web01 ~]# 
2.3 配置lb01
[root@lb01 /etc/nginx]# cat nginx.conf
…… 
    upstream upload{
        server 10.0.0.7:80 weight=1 max_fails=1 fail_timeout=10s;
    }
    upstream static{
        server 10.0.0.8:80 weight=1 max_fails=1 fail_timeout=10s;
    }
    upstream default{
        server 10.0.0.9:80 weight=1 max_fails=1 fail_timeout=10s;
    }
    server{ 
        listen 80;
        server_name www.oldboy.com;
        location /upload {
            proxy_pass http://upload;
        proxy_set_header Host $host;
        proxy_set_header X_Forwarded-For $remote_addr;
        }
        location /static {
            proxy_pass http://static;
        proxy_set_header Host $host;
        proxy_set_header X_Forwarded-For $remote_addr;
        }
        location / {
            proxy_pass http://default;
        proxy_set_header Host $host;
        proxy_set_header X_Forwarded-For $remote_addr;
        }
    }
……
[root@lb01 /etc/nginx]# 
[root@lb01 /etc/nginx]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@lb01 /etc/nginx]# systemctl reload nginx 
2.4 浏览器测试
16955089-9635ab2c8cfd1075.png
根据用户请求文件类型进行转发

三、负载均衡的排查思路

四、负载均衡的轮询算法

默认轮询(rr)
加权轮询(wrr):weight
最小连接数(least conn):根据后端服务器连接数分配任务
ip_hash:只要客户端ip地址相同就会被转发到同一台机器上※※
16955089-c81de30b22f9655d.png

五、会话保持

cookie和session

1>cookie和session共同点:

存放用户修改
key value类型,变量和变量内容

2>cookie和session区别:

cookie:
存放在浏览器里面
存放简单的信息或存放钥匙
开发设置的
相应的时候服务器给你设置

session:
存放在服务器中--redis中
存放敏感信息
锁头
16955089-b7b8b065479bad05.png

六、高可用keepalived

16955089-9c34e969fa3e8b78.png
16955089-d65251eb4052a5ec.png
Keepalived服务的工作原理※※※

1> Keepalived高可用对之间是通过VRRP进行通信的,VRRP是通过竞选机制来确定主备的,主的优先高于备,因此,工作时主会优先获得所有的资源,备节点处于等待状态,当主挂了的时候,备节点就会接管主节点的资源,然后顶替主节点对外提供服务。
2> 在Keepalived服务队之间,只有作为主的服务器会一直发送VRRP广播包,告诉备他还活着,此时备不会抢占主,当主不可用时,即备监听不到主发送的广播包时,就回启动相关服务接管资源,保证业务的连续性。
3> 接管速度最快可以小于1秒。

6.1 环境准备
服务器名称内网IP外网IP
lb01172.16.1.510.0.0.5
lb02172.16.1.610.0.0.6
web01172.16.1.710.0.0.7
web02172.16.1.810.0.0.8

1>每台机器安装好nginx
2>在lb01和lb02安装keepalived----yum install -y keepalived
3>启动服务,并设置开机自启动
  启动服务:systemctl start keepalived
  开机自启动:systemctl enable keepalived
4>检查服务:rpm -qa keepalived

6.2 配置文件
分为三个部分:
    GLOBAL CONFIGURATION:全局定义部分
    VRRPD CONFIGURATION:vrrp实例(rsync模块)
    LVS CONFIGURATION:通过keepalived配置文件控制lvs
6.3 keepalived配置文件详解

https://www.processon.com/view/link/5d034b4ee4b08ceab31b8e11

16955089-241dec4dff46bc17.png

6.4 配置keepalived

对lb01(主)和lb02(备)进行以下配置
注:配置时请注意lbo1主负载均衡与lb02备负载均衡有些不同

[root@lb01 /etc/keepalived]# cp keepalived.conf{,.bak}
[root@lb01 /etc/keepalived]# ll
total 8
-rw-r--r-- 1 root root 3598 Jan  6 16:47 keepalived.conf
-rw-r--r-- 1 root root 3598 Jun 14 15:56 keepalived.conf.bak
[root@lb01 /etc/keepalived]# cat keepalived.conf
! Configuration File for keepalived

global_defs {
    router_id lb01
}

vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 150
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
     10.0.0.3/24 dev eth0 label eth0:1  
    }
}
[root@lb01 /etc/keepalived]# systemctl restart keepalived.service
16955089-09b78eee10551290.png

16955089-b5cd6c963b76b6ec.png
6.5 命令行测试
16955089-11c4a408f759f782.png
6.7 抓包测试
16955089-d296900644e453c5.png
16955089-eaa733b221525509.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值