Nginx架构六之动静分离和高可用

动静分离

什么是动静分离

动态站点: 处理业务的应用程序,一般由动态语言JAVA开发。

静态站点: 网站的静态资源(html,javaScript,css,images等文件)。

将两者进行分开部署访问,提供用户进行访问。举例说明就是以后 所有和静态资源相关的内容都交给Nginx来部署访问,非静态内容则交给类似于Tomcat的服务器来部署访问。

为什么要动静分离

Nginx在处理静态资源的时候,效率是非常高的,而且 Nginx的并发访问量也是名列前茅,而Tomcat则相对比较弱一些,所以 把静态资源交给Nginx后,可以减轻Tomcat服务器的访问压力并提高静 态资源的访问速度。

配置实战

1 部署动态站点,返回Hello World

请求地址:http://127.0.0.1:8080/

2 在nginx 目录下创建web目录,该目录包括 index.html,aaaa.jpeg,js 文件

index 文件内容如下

<html>
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="js/jquery.min.js"></script>
    <script>
        $(function(){
$.get('http://127.0.0.1/tomcat',function(data){
               $("#msg").html(data);});
});
    </script>
</head>
<body>
 <h1>请求后端服务</h1> <h3 id="msg"></h3>
<img src="aaaa.jpeg"/>
</body>
</html>

3 nginx配置如下

    upstream tomcat {
        server 127.0.0.1:8080;
    }
    server {
        listen       80;
        server_name  localhost;

        location /tomcat {
          proxy_pass http://tomcat/;
        }

        #静态资源
        location /web/ {                                                                                                                                        
          root /usr/local/nginx/;
          gzip on;
        }
   }

4 测试

   访问地址:http://127.0.0.1/web/index.html

实现Tomcat集群搭建

如果部署单台Tomcat服务器,如果服务器宕机了,整个系统就会不完整,所以 如何解决上述问题,一台服务器容易宕机,那就多搭建几台Tomcat服务 器,这样的话就提升了后端服务器的可用性。这也就是我们常说的集 群,搭建Tomcat的集群需要用到了Nginx的反向代理和负载均衡的知 识。

nginx配置

 upstream tomcat {
        server 127.0.0.1:8080;
        server 127.0.0.1:8180;
        server 127.0.0.1:8280;
    }

    server {
        listen       80;
        server_name  localhost;

        location /tomcat {
          proxy_pass http://tomcat/;
        }
   }

高可用解决方案

Keepalived

Keepalived的作用是检测服务器的状态,如果有一台web服务器宕机,或工作出现故障,Keepalived将检测到,并将有故障的服务器从系统中剔除,同时使用其他服务器代替该服务器的工作,当服务器工作正常后Keepalived自动将服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的服务器。

VRRP协议

VRRP是一种选择协议,它可以把一个虚拟路由器的责任动态分配到局域网上的 VRRP 路由器中的一台。控制虚拟路由器 IP 地址的 VRRP 路由器称为主路由器,它负责转发数据包到这些虚拟 IP 地址。一旦主路由器不可用,这种选择过程就提供了动态的故障转移机制,这就允许虚拟路由器的 IP 地址可以作为终端主机的默认第一跳路由器。是一种LAN接入设备备份协议。一个局域网络内的所有主机都设置缺省网关,这样主机发出的目的地址不在本网段的报文将被通过缺省网关发往三层交换机,从而实现了主机和外部网络的通信。 

在VRRP协议中,有两组重要的概念:VRRP路由器和虚拟路由器,主控路由器和备份路由器。VRRP路由器是指运行VRRP的路由器,是物理实体;虚拟路由器是指VRRP协议创建的,是逻辑概念。一组VRRP路由器协同工作,共同构成一台虚拟路由器。该虚拟路由器对外表现为一个具有唯一固定的IP地址和MAC地址的逻辑路由器。处于同一个VRRP组中的路由器具有两种互斥的角色:主控路由器和备份路由器,一个VRRP组中有且只有一台处于主控角色的路由器,可以有一个或者多个处于备份角色的路由器VRRP协议从路由器组中选出一台作为主控路由器,负责ARP解析和转发IP数据包,组中的其他路由器作为备份的角色并处于待命状态,当由于某种原因主控路由器发生故障时,其中的一台备份路由器能在瞬间的时延后升级为主控路由器,由于此切换非常迅速而且不用改变IP地址和MAC地址,故对终端使用者系统是透明的。

部署实战

环境搭建

brew 安装 

% /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

 brew 安装路径:/opt/homebrew/bin

yangyanping@ZBMac-WP2HJYDWY bin % pwd 
/opt/homebrew/bin
yangyanping@ZBMac-WP2HJYDWY bin % ./brew help
Example usage:
  brew search TEXT|/REGEX/
  brew info [FORMULA|CASK...]
  brew install FORMULA|CASK...
  brew update
  brew upgrade [FORMULA|CASK...]
  brew uninstall FORMULA|CASK...
  brew list [FORMULA|CASK...]

Troubleshooting:
  brew config
  brew doctor
  brew install --verbose --debug FORMULA|CASK

Contributing:
  brew create URL [--no-fetch]
  brew edit [FORMULA|CASK...]

Further help:
  brew commands
  brew help [COMMAND]
  man brew
  https://docs.brew.sh
yangyanping@ZBMac-WP2HJYDWY bin % 

Keepalived 下载

  Keepalived官网下载地址:Keepalived for Linux

docker 安装keepalied 

 运行centos

yangyanping@ZBMac-WP2HJYDWY ~ % docker run -d --name centos7 --privileged=true centos:7 /usr/sbin/init  /bash
9c45b94d15eb4ef3dc1777209f4bfce46c687763612453b20cfff679996564c4
yangyanping@ZBMac-WP2HJYDWY ~ % docker exec -it centos7 bash

 安装keepalived

[root@9c45b94d15eb /]# yum install keepalived y
Loaded plugins: fastestmirror, ovl
Determining fastest mirrors
 * base: mirrors.tuna.tsinghua.edu.cn
 * extras: mirrors.tuna.tsinghua.edu.cn
 * updates: mirrors.tuna.tsinghua.edu.cn
base                                                                                                                                                                                     | 3.6 kB  00:00:00     
extras                                                                                                                                                                                   | 2.9 kB  00:00:00     
updates                                                                                                                                                                                  | 2.9 kB  00:00:00     
(1/4): base/7/aarch64/group_gz                                                                                                                                                           | 153 kB  00:00:00     
(2/4): extras/7/aarch64/primary_db                                                                                                                                                       | 250 kB  00:00:00     
(3/4): base/7/aarch64/primary_db                                                                                                                                                         | 4.9 MB  00:00:01     
(4/4): updates/7/aarch64/primary_db     
............

 运行keepalived

[root@9c45b94d15eb /]# whereis keepalived
keepalived: /usr/sbin/keepalived /etc/keepalived /usr/libexec/keepalived
[root@9c45b94d15eb /]# /usr/sbin/keepalived

安装initscripts,用于执行IP命令

[root@9c45b94d15eb /]#  yum -y install initscripts
Loaded plugins: fastestmirror, ovl
Loading mirror speeds from cached hostfile
 * base: mirrors.tuna.tsinghua.edu.cn
 * extras: mirrors.tuna.tsinghua.edu.cn
 * updates: mirrors.tuna.tsinghua.edu.cn

查看IP信息 

[root@9c45b94d15eb /]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
2: tunl0@NONE: <NOARP> mtu 1480 qdisc noop state DOWN group default qlen 1000
    link/ipip 0.0.0.0 brd 0.0.0.0
3: ip6tnl0@NONE: <NOARP> mtu 1452 qdisc noop state DOWN group default qlen 1000
    link/tunnel6 :: brd ::
20: eth0@if21: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
    link/ether 02:42:ac:11:00:07 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 172.17.0.7/16 brd 172.17.255.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet 192.168.200.16/32 scope global eth0
       valid_lft forever preferred_lft forever
    inet 192.168.200.17/32 scope global eth0
       valid_lft forever preferred_lft forever
    inet 192.168.200.18/32 scope global eth0
       valid_lft forever preferred_lft forever

默认的keepalived的配置文件

[root@9c45b94d15eb /]# vi /etc/keepalived/keepalived.conf 
    real_server 192.168.200.3 1358 {
        weight 1
        HTTP_GET {
            url {
              path /testurl/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334c
            }
            url {
              path /testurl2/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334c
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}

virtual_server 10.10.10.3 1358 {
    delay_loop 3
    lb_algo rr
    lb_kind NAT
    persistence_timeout 50
    protocol TCP

    real_server 192.168.200.4 1358 {
        weight 1
        HTTP_GET {
            url {
              path /testurl/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334d
            }
            url {
              path /testurl2/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334d
            }
            url {
              path /testurl3/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334d
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }

    real_server 192.168.200.5 1358 {
        weight 1
        HTTP_GET {
            url {
              path /testurl/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334d
            }
            url {
              path /testurl2/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334d
            }
            url {
              path /testurl3/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334d
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}

访问测试

启动keepalived之后,咱们先使用命令 ip a ,查看本机IP情况,虚拟了三个IP地址,如下:

.......    
    inet 192.168.200.16/32 scope global eth0
       valid_lft forever preferred_lft forever
    inet 192.168.200.17/32 scope global eth0
       valid_lft forever preferred_lft forever
    inet 192.168.200.18/32 scope global eth0
       valid_lft forever preferred_lft forever

......

参考

Keepalived实现Nginx(Docker)高可用_咖啡不甜不好喝的博客-CSDN博客_docker 安装keepalived

yum方式安装nginx_铭keny的博客-CSDN博客_yum安装nginx

猜你喜欢

转载自blog.csdn.net/yangyanping20108/article/details/124992953
今日推荐