From 1c91d778fca86dbd1e80d6d56e8b3d6dec17a4d9 Mon Sep 17 00:00:00 2001 From: star <1563232784@qq.com> Date: Sun, 8 Aug 2021 16:51:47 +0800 Subject: [PATCH] Nginx --- .../SpringCloud.md" | 696 +++++++++++++++++- .../img/Snipaste_2021-07-31_23-47-10.png" | Bin 0 -> 50302 bytes .../img/Snipaste_2021-08-01_01-41-01.png" | Bin 0 -> 27300 bytes .../img/Snipaste_2021-08-01_18-40-53.png" | Bin 0 -> 39389 bytes .../img/wwianshen.jpg" | Bin 0 -> 24065 bytes .../1183448-20180210145226654-1347579045.png" | Bin 0 -> 23345 bytes ...\234\215\345\212\241\345\231\250-Nginx.md" | 462 +++++++++--- .../Jenkins.md" | 4 - 8 files changed, 1041 insertions(+), 121 deletions(-) create mode 100644 "notes/Java\350\257\255\350\250\200/\345\274\200\346\272\220\346\241\206\346\236\266/img/Snipaste_2021-07-31_23-47-10.png" create mode 100644 "notes/Java\350\257\255\350\250\200/\345\274\200\346\272\220\346\241\206\346\236\266/img/Snipaste_2021-08-01_01-41-01.png" create mode 100644 "notes/Java\350\257\255\350\250\200/\345\274\200\346\272\220\346\241\206\346\236\266/img/Snipaste_2021-08-01_18-40-53.png" create mode 100644 "notes/Java\350\257\255\350\250\200/\345\274\200\346\272\220\346\241\206\346\236\266/img/wwianshen.jpg" create mode 100644 "notes/\344\270\255\351\227\264\344\273\266/Web\345\272\224\347\224\250\346\234\215\345\212\241\345\231\250/Image/1183448-20180210145226654-1347579045.png" diff --git "a/notes/Java\350\257\255\350\250\200/\345\274\200\346\272\220\346\241\206\346\236\266/SpringCloud.md" "b/notes/Java\350\257\255\350\250\200/\345\274\200\346\272\220\346\241\206\346\236\266/SpringCloud.md" index 7e5ba87..9ef21f3 100644 --- "a/notes/Java\350\257\255\350\250\200/\345\274\200\346\272\220\346\241\206\346\236\266/SpringCloud.md" +++ "b/notes/Java\350\257\255\350\250\200/\345\274\200\346\272\220\346\241\206\346\236\266/SpringCloud.md" @@ -6,13 +6,705 @@ #### 1.微服务概述 +在过去,企业的应用程序一般以传统的单体应用为主,随着互联网的不断发展,单体应用逐渐出现了下面的问题: + +1. 系统间(例如:订单系统、库存系统)通常以 API 的形式互相访问,耦合紧密导致难以维护; +2. 各业务领域需要采用相同的技术栈,难以快速应用新技术; +3. 对系统的任何修改都必须整个系统一起重新部署/升级,系统更新成本高; +4. 在系统负载增加时,难以进行水平扩展; +5. 当系统中一处出现问题,可能会影响到整个系统; + +这些原因导致了微服务架构风格的出现。 + + + 什么是微服务? +微服务的概念最早由来自于英格兰的 Martin Fowler 提出,它是一种 "**架构模式**",原博文地址:https://martinfowler.com/articles/microservices.html。它提倡将单⼀应⽤程序划分成⼀组⼩的服务,每个服务运⾏在自己独⽴的进程中,甚至不同服务还可以使用不同的语言进行开发;服务之间采用轻量级的通信机制(RESTful API)互相协调、互相配合,为⽤户提供最终价值。 + +> :oncoming_taxi: 通俗地讲,微服务化就是将传统的一站式应用 根据业务拆分 成一个一个的服务,彻底地去耦合。每一个微服务只做一件事,能够单独地启动或销毁,并且拥有自己独立的数据库。 + + + +微服务的优点: + +1. **单一职责**:每个微服务足够内聚,足够小,只聚焦一个指定的业务功能,开发简单。 +2. **松耦合**:一个微服务就是一个独立的实体,它可以独立地进行开发、部署、升级和扩展。 + +微服务的缺点: + +1. **技术栈复杂**:微服务间通过 REST、RPC 等形式交互,需要考虑被调用方故障、过载、消息丢失等各种异常情况,代码逻辑更加复杂;同时,微服务的事务机制也更加复杂。 +2. **运维复杂**:运行多个独立的微服务使运维的难度增加,需要运维人员对各个微服务的运行状态进行监控,运维压力增大。 + + + +--- + +#### 2.SpringCloud + +作为一种流行的架构思想,微服务诞生了很多的落地实现,其中 Dubbo 和 SpringCloud 最为流行。 + +Dubbo 和 SpringCloud 的区别: + +1. Dubbo 主要是提供服务通信与微服务治理两大关键能力,还需要结合其他组件进行使用(如:Zookeeper 等);而 SpringCloud 是一整套的微服务架构解决方案。 + +2. 服务调用方式:Dubbo 使用 RPC 方式进行远程调用,而 SpringCloud 使用 RESTful API 进行远程调用。 + + > RPC(Remote Procedure Call):远程过程调用,就是像调用本地方法一样调用远程方法,即通过接口进行远程调用,耦合性较强,但性能较好。 + > + > RESTful API:即 HTTP 调用,不用关心接口实现细节,耦合性较低,但性能不如 RPC 高。 + +Dubbo 和 SpringCloud 如何抉择: + +1. RPC 适用于内网服务调用,对外提供服务需要使用 RESTful API。 +2. RPC 适用于服务调用密集与复杂的系统(如大型电商系统),如果服务频次较低则使用 RESTful API。 + +> :card_index: 目前,阿里巴巴开源中间件与 SpringCloud 体系进行融合诞生了 **SpringCloud Alibaba**,一个以 Dubbo 的 RPC 调用为基础的微服务一站式解决方案。 + + + +SpringCloud 微服务技术实现: + +| 微服务技术栈 | SpringCloud 技术实现 | +| ------------------------------------------------------------ | --------------------------------------- | +| 服务注册与发现 | Netflix Eureka | +| 服务调用 | Rest、Feign(接口化调用) | +| 服务熔断 | Hystrix | +| 云端负载均衡 | Ribbon、Feign | +| 配置中心 | Spring Cloud Config(小规模场景)、Apollo | +| 数据流处理(封装了 Redis、Rabbit、Kafka 等数据流操作) | Spring Cloud Stream | +| 服务路由(提供动态路由,监控,弹性,安全等边缘服务) | Zuul、Spring Cloud Gateway(新) | +| 服务监控 | Turbine | +| 事件、消息总线(用于在集群中传播事件,如:配置文件发生改变等) | Spring Cloud Bus | +| 安全工具包 | Spring Cloud OAuth2 | + + + +> :bullettrain_side: SpringCloud 官网:https://spring.io/cloud +> +> :blue_car: SpringCloud 中文网:https://www.springcloud.io + + + +--- + +#### 3.SpringCloud 项目搭建 + +SpringCloud 的总体架构就是一个父 Project 带着多个 Module 子模块,每个子模块就是一个微服务; + +父 Project 主要用来管理整个微服务项目的 jar 包,它定义一个父工程的 POM 文件,用来聚合工程和管理依赖。 + +> SpringCloud 各种实例代码:https://github.com/spring-cloud-samples/ + + + +1. 使用 Spring Initialzr 构建一个空的 Maven 父工程,打包方式选择 pom,完整 pom.xml 文件如下: + + ~~~xml + + + 4.0.0 + com.star + cloud + 0.0.1-SNAPSHOT + cloud + Demo project for Spring Cloud + pom + + + 1.8 + 2020.0.3 + 2.5.3 + + + + + + org.springframework.cloud + spring-cloud-dependencies + ${spring-cloud.version} + pom + import + + + org.springframework.boot + spring-boot-dependencies + ${spring-boot.version} + pom + import + + + + + ~~~ + + 使用 dependencyManagement 节点来管理子模块的 SpringBoot 版本和 SpringCloud 版本。 + + + +2. 创建公共 API 模块,用来保存都会用到的公共组件(如:统一返回类 Result、工具类、及其他组件): + + 在父项目上右键添加 Module,创建 Maven 子模块,在 pom.xml 中添加常用的功能(如:lombok、hutool 等)。 + + ~~~xml + + + cn.hutool + hutool-all + 5.7.6 + + + org.projectlombok + lombok + + false + + + ~~~ + + 创建好公共 API 模块后,再创建一个 Dept 实体类供后续使用(注意:微服务中实体类需要实现 Serializable 接口)。 + + + +3. 创建服务提供者 cloud-provider: + + 在父项目上使用 Spring Initialzr 创建子模块,勾选需要的功能(如:web,MySQL、MyBatis、Druid 等)。 + + 修改子模块的 parent 并且在父工程的 modules 标签中添加此模块。 + + 进行 application.properties 配置(端口、数据库、连接池、MyBatis 等),配置如下: + + ~~~properties + # 服务端口号 + server.port=8001 + # 服务名称,部署至 Eureka 时需要用到 + spring.application.name=cloud-provider + # 数据库连接信息 + spring.datasource.type=com.alibaba.druid.pool.DruidDataSource + spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver + spring.datasource.url=jdbc:mysql://192.168.253.128:3306/cloud?serverTimezone=UTC + spring.datasource.username=root + spring.datasource.password=TinyStar0920 + # MyBatis 配置信息 + mybatis.mapper-locations=classpath:mapper/** + mybatis.configuration.map-underscore-to-camel-case=true + #热部署生效 + spring.devtools.restart.enabled=true + #设置重启的目录 + spring.devtools.restart.additional-paths=src/main/java + ~~~ + + 配置完成后,创建相应的数据库、controller、service、mapper 并进行初步测试。 + + + +4. 创建服务消费者模块 cloud-consumer: + + 在父项目上使用 Spring Initialzr 创建子模块,并勾选 web 功能。 + + 修改子模块的 parent 并且在父工程的 modules 标签中添加此模块。 + + 进行 application.properties 配置(端口、数据库、连接池、MyBatis 等),配置如下: + + ~~~properties + # 服务端口号 + server.port=9001 + # 服务名称,部署至 Eureka 时需要用到 + spring.application.name=cloud-consumer + ~~~ + + 向容器中注入一个 **RestTemplate**: + + ~~~java + @Configuration + public class BeanConfig { + @Bean + public RestTemplate restTemplate() { + return new RestTemplate(); + } + } + ~~~ + + > :rescue_worker_helmet: RestTemplate 提供了多种便捷访问远程 Http 服务的方法,它是一种简单便捷的访问 restful 服务的模板类。是 Spring 封装的用于访问 Rest 服务的客户端模板工具。 + + 编写 Controller,通过 RestTemplate 从 cloud-provider 获取 Dept 信息: + + ~~~java + @RestController + @RequestMapping("/dept") + public class DeptConsumerController { + + private static final String REST_URL_PREFIX = "http://localhost:8001"; + + @Autowired + private RestTemplate restTemplate; + + @GetMapping("/{id}") + public Dept getDeptById(@PathVariable int id) { + return restTemplate.getForObject(REST_URL_PREFIX + "/dept/" + id, Dept.class); + } + } + ~~~ + + 搭建完成后,在 cloud-consumer 发起请求,如果能接收到 cloud-provider 提供的正确查询结果,则项目初步搭建成功。 + + + +--- + +#### 4.Eureka 服务注册与发现 + +Eureka 是 Netflix 的一个子模块,也是核心模块之一。它基于 REST 服务来注册和发现服务,以实现云端中间层服务发现和故障转移。 + +系统启动时,服务提供方将自身服务注册到 Eureka,而服务消费方从 Eureka 获取注册的服务列表,从而消费服务。 + + + +Eureka 包含了 EurekaServer 和 EurekaClient 两个组件,它们的运行逻辑如下: + +- Eureka 采用了 C-S 的设计架构。EurekaServer 作为服务注册功能的服务器,它是服务注册中心。 +- 系统中的其他微服务,使用 Eureka 的客户端连接到 EurekaServer 并维持心跳连接。 + +> :tophat: 通过 EurekaServer 和 EurekaClient 的连接,系统的维护人员就可以通过 EurekaServer 来监控系统中各个微服务是否正常运行。系统中的其他一些模块(如:Zuul)也可以通过 EurekaServer 来发现系统中的其他微服务,并执行相关的逻辑。 +> +> :horse_racing: EurekaClient 具备一个内置的、使用轮询负载算法的负载均衡器,它在应用启动后将会向 EurekaServer 发送心跳(默认周期为 30 秒),如果EurekaServer 在多个心跳周期内没有接收到某个节点的心跳,EurekaServer 将会从服务注册表中把这个节点移除(默认 90 秒)。 + + + +搭建 Eureka 服务注册中心: + +1. 搭建 EurekaServer: + + 在父项目上使用 Spring Initialzr 创建子模块,并勾选 Eureka Server、web 功能。 + + 修改子模块的 parent 并且在父工程的 modules 标签中添加此模块。 + + 配置 eureka-server 的 application.properties 文件: + + ~~~properties + # Eureka Server 端口 + server.port=7001 + # Eureka Server 实例名称 + spring.application.name=eureka-server + # 单机版本时,由于本服务就是服务注册中心,所以不向服务注册中心注册自己 + eureka.client.register-with-eureka=false + # 单机版本时,本服务就是服务注册中心,不需要向服务注册中心获取服务列表 + eureka.client.fetch-registry=false + # Eureka Server 启动后会不断地与服务中心进行连接,所以需要指明服务注册中心地址(本服务),否则将一直打印日志错误(不影响服务) + eureka.client.service-url.defaultZone=http://localhost:${server.port}/eureka + ~~~ + + 主启动类上标注注解:**@EnableEurekaServer** + + ~~~java +@EnableEurekaServer + @SpringBootApplication +public class EurekaServerApplication { + public static void main(String[] args) { + SpringApplication.run(EurekaServerApplication.class, args); + } + } + ~~~ + + 启动项目后,访问 http://localhost:7001/ 将会看到 Eureka 服务注册中心。 + + ![](D:\GitRepository\HexBook\notes\Java语言\开源框架\img\Snipaste_2021-07-31_23-47-10.png) + +2. 将 cloud-provider 注册到 EurekaServer 中: + + 向 cloud-provider 的 pom.xml 中添加依赖: + + ~~~xml + + org.springframework.cloud + spring-cloud-starter-netflix-eureka-client + + ~~~ + + 在 cloud-provider 中加入 Eureka Client 配置: + + ~~~properties + # 将此服务注册到 Eureka Server 中 + eureka.client.service-url.defaultZone=http://localhost:7001/eureka + ~~~ + + 在主启动类上标注注解:**@EnableEurekaClient**。 + + 先启动 eureka-server,再启动 cloud-provider 即可在配置中心的服务列表上查看到 cloud-provider 服务。 + + ![](D:\GitRepository\HexBook\notes\Java语言\开源框架\img\Snipaste_2021-08-01_01-41-01.png) + + + + + + + +服务注册完善: + +1. 默认服务名称的修改(服务列表中 Status 栏下面的名称): + + ```properties + # 服务实例名称,将会展示到 Eureka Server 的服务列表 + eureka.instance.instance-id=cloud-provider-8001 + ``` + +2. 在服务列表的链接 hover 中显示具体的 IP 地址: + + ```properties + # 在 Eureka Server 的服务列表中的名称 hover 时显示具体的 IP 地址 + eureka.instance.prefer-ip-address=true + ``` + +3. 服务注册信息完善(点击服务列表的超链接即可跳转显示): + + 添加 spring-boot-starter-actuator 依赖(用于监控服务以及管理服务信息)。 + + ~~~xml + + org.springframework.boot + spring-boot-starter-actuator + + ~~~ + + 在 cloud-provider 暴露 actuator 接口,配置服务信息: + + ~~~properties + # 暴露 actuator 监控的接口 + management.endpoints.web.exposure.include=health,info + # 添加此微服务的详细信息 + info.app-name=cloud-provider + ~~~ + + 重启后,在点击服务列表中的超链接,即可看到配置文件中配置的服务信息。 + + + +> :european_castle: Eureka 自我保护机制: +> +> 默认情况下,如果 EurekaServer 在一定时间内没有接收到某个微服务实例的心跳,EurekaServer 将会注销该实例(默认90秒)。但是当网络分区故障发生时,在短时间内 EurekaServer 可能会丢失过多客户端,此时 Eureka 将会开启 "自我保护模式"。 +> +> 进入自我保护模式后,EurekaServer 就会保护服务注册表中的信息,不再删除服务注册表中的数据(也就是不会注销任何微服务)。 +> +> 当 EurekaServer 收到的心跳数重新恢复到阈值以上时会自动退出自我保护模式。 +> +> 在 SpringCloud 中,可以配置 eureka.server.enable-self-preservation=false 来禁用自我保护模式(不推荐)。 + + + +在代码中如何获取注册中心的服务列表? + +当主启动类上标注了注解 **@EnableEurekaClient** 时,此服务即可被其他服务所发现。同时 SpringCloud 支持在代码中获取服务注册中心的服务列表: + +~~~java +@Autowired +private EurekaDiscoveryClient discoveryClient; + +@GetMapping("/discovery") +public List getDiscovery() { + List services = discoveryClient.getServices(); + return services.stream() + .map(service -> discoveryClient.getInstances(service)) + .flatMap(Collection::stream) + .collect(Collectors.toList()); +} +~~~ + +在 SpringCloud 中,通过 EurekaDiscoveryClient 组件对 "服务发现" 相关业务进行操作。 + + + +> :currency_exchange: Eureka 服务器没有后端存储,但注册中心中的服务实例都必须发送心跳以保持其注册最新。 +> +> Eureka 客户端也有一个 Eureka 注册的内存缓存(因此他们不必为每个服务请求都去注册中心)。 + + + +--- + +#### 5.Eureka 集群配置 + +为了保证注册中心的高可用,往往需要搭建 Eureka 集群进行使用。 + + + +Eureka 集群搭建: + +1. 复制 application.properties 文件配置不同的 3 个节点。 + + application-node-1.properties、application-node-2.properties、application-node-3.properties + +2. 修改 application-node-1.properties 文件内容: + + ```properties + # Eureka Server 端口 + server.port=7001 + # Eureka Server 实例名称 + spring.application.name=eureka-server-1 + # Eureka Server 实例 IP 地址 + eureka.instance.hostname=eureka-01 + # 配置 Eureka Server 集群中的其他 Server + eureka.client.service-url.defaultZone=http://eureka-02:7002/eureka,http://eureka-03:7003/eureka + ``` + + > 一般来说,在搭建 Eureka 集群时,**hostname** 和 **defaultZone** 都直接写 IP 地址,如: + > + > `eureka.instance.hostname=192.168.253.127`、`eureka.client.service-url.defaultZone=http://192.168.253.128:7001/eureka` + > + > 集群中每一个 hostname 都不一样(集群搭建在不同的服务器上)。 + > + > 但是在搭建单机集群时(集群搭建在一个服务器上),由于 Eureka 集群是通过 hostname 来区分彼此,所以我们需要配置不同的 hostname 并且在 hosts 文件中映射至本机 IP,然后在配置文件中进行使用。 + + 按照实例继续修改 application-node-2.properties、application-node-3.properties 的内容。 + +3. 在 Linux 中创建 3 个集群节点运行目录,编写服务启动脚本 + + ~~~shell + [root@localhost cloud]# cd /srv/cloud + [root@localhost cloud]# mkdir server-01 + [root@localhost cloud]# mkdir server-02 + [root@localhost cloud]# mkdir server-03 + ~~~ + + 编写 shell 脚本: + + ~~~shell + #!/bin/bash + jarFile=eureka-server-0.0.1-SNAPSHOT.jar + profileConfig=spring.profiles.active=node-1 + pid=$(ps -ef | grep "$jarFile --$profileConfig" | grep -v grep | awk '{print $2}') + if [ -n "$pid" ];then + kill -9 $pid + fi + nohup java -jar ../$jarFile --$profileConfig & + ~~~ + +4. 配置 jenkins,通过 jenkins 将 Eureka 集群发布在虚拟机中: + + ![](D:\GitRepository\HexBook\notes\Java语言\开源框架\img\Snipaste_2021-08-01_18-40-53.png) + + 确认防火墙端口开启后,在外部浏览器输入 http://192.168.253.128:7001/ 即可查看集群状况。 + +5. 配置 cloud-provider 的注册中心地址: + + ~~~properties + eureka.client.service-url.defaultZone=http://erueka-01:7001/eureka,http://erueka-02:7002/eureka,http://erueka-03:7003/eureka + ~~~ + + + +--- + +#### 6.Eureka 与 CAP 理论 + +在传统数据库(如:MySQL、Oracle)中,**ACID** 是常用的设计理念,它追求强一致性模型: + +- Atomicity:原子性,一个事务中所有操作都必须全部完成,要么全部不完成。 +- Consistency:一致性,在事务开始或结束时,数据必须保持一致的状态。比如 A 给 B 转账,不论转账是否成功,两者存款的总额不变。 +- Isolation:隔离性,并发的事务之间不会相互影响。 +- Durability:永久性,一旦事务完成,就不能被回滚。 + +ACID 模型要求一个事务必须满足上面的四点,这是对关系型传统数据库的指导性依据。 + + + +在如今的分布式系统设计中,一般采用 **CAP** 理论作为指导性依据,即: + +> :yin_yang: 一个分布式系统最多只能同时满足 +> +> - **Consistency**:强一致性,数据一旦更新,所有数据变动都是同步的。 +> - **Availability**:高可用性,集群在任何时间内都正常使用。 +> - **Partition tolerance**:分区容错性,当某一部分集群坏掉时,另一部分仍能正常工作。 +> +> 这三项中的两项。 + +常见的数据库产品的 CAP 占有图: + + + +由于传统的数据库追求数据的高一致性,且数据库不具有分区容错性,所以一般是满足 CA 特性的。 + +在分布式系统中,由于网络之间一定存在着延迟、丢包等现象,所以我们必须保证分布式系统的分区容错性,然后在一致性和可用性之间做出抉择。 + +> 对于大多数互联网应用来说(如:淘宝、微博),因为机器数量庞大,部署节点分散,网络故障是常态,可用性 A 是必须需要保证的,所以一般选择设置弱一致性来保证服务的 AP,如:淘宝双 11 时账单功能会出现延迟。 +> +> 对于需要确保强一致性的场景(如:银行),通常会权衡 CA 和 CP 模型,CA 模型网络故障时完全不可用,CP 模型具备部分可用性,实际的选择需要通过业务场景来权衡,有时只能查看信息不能更新信息有时候从产品层面还不如直接拒绝服务。 + + + +在 CAP 理论的基础上,架构师 Dan Pritchett 对大规模分布式系统的实践进行总结得出了 BASE 理论: + +> :anger: 在保证分区容错性的前提下,系统即使无法做到强一致性,但可以采用适合的方式达到最终一致性。 + +根据 BASE 理论,设计良好的分布式系统具有以下特性: + +1. 基本可用(Basically Available):例如系统可以忍受响应时间上的损失,也可以使用服务降级来保证系统的基本可用。 + - 响应时间上的损失:例如在正常情况下,一个在线搜索引擎需要 0.5 秒内返回给用户相应的查询结果,但由于出现部分机房断电或断网故障,查询结果的响应时间增加到了 1~2 秒,此时系统仍然可以被看作是基本可用的。 + - 功能上的损失:正常情况下,在一个电子商务网站上进行购物,消费者几乎能够顺利地完成每一笔订单,但是在一些节日大促购物高峰的时候,由于消费者的购物行为激增,为了保护购物系统的稳定性,部分消费者可能会被引导到一个降级页面,这种情况也可以被看作是基本可用的。 +2. 软状态(Soft state):允许系统存在中间状态,而该中间状态不会影响系统整体可用性。分布式存储中一般一份数据至少会有三个副本,允许不同节点间副本同步的延时就是软状态的体现。 +3. 最终一致性(Eventually consistent):指系统中的所有数据副本经过一定时间后,最终能够达到一致的状态。 + + + +Eureka 与 Zookeeper 在 CAP 理论中的区别:Eureka 保证 AP,Zookeeper 保证 CP。 + +> Eureka 在网络发生故障时可能会延迟更新服务注册中心的服务列表,即丢弃了高一致性。 +> +> Zookeeper 在网络发生故障时如果 master 掉线将会重新进行选举,选举期间(1-2 分钟)服务不可用,即丢弃了高可用性。 + + + +--- + +#### 7.SpringCloud 负载均衡 + +负载均衡(Load Banlance,LB)分类: + +1. 集中式负载均衡:在服务的消费方和提供方之间使用独立的 LB 设施(可以是硬件如:F5, 也可以是软件如:Nginx),由该设施负责把访问请求通过某种策略转发至服务的提供方。 +2. 进程内负载均衡:将 LB 逻辑集成到消费方,消费方从服务注册中心获知有哪些地址可用,然后自己再从这些地址中选择出一个合适的服务器。 + + + +:articulated_lorry: **LoadBalancer** 负载均衡: + +在 Spring Cloud 2020 之前,Spring Cloud 一般采用 Netflix 的 Ribbon 作为一个负载均衡组件,而在这之后已经被删除。 + +现在,Spring Cloud 团队建议用 Spring Cloud Loadbalancer 替换 Ribbon。 + +LoadBalancer 属于进程内 LB,它只集成于消费方,是一套 **客户端** 负载均衡的工具。 + +POM 引用如下: + +~~~xml + + org.springframework.cloud + spring-cloud-starter-loadbalancer + +~~~ + +cloud-consumer 模块集成 Loadbalancer: + +1. 为 cloud-consumer 模块添加 EurekaClient 和 LoadBalancer 依赖。 + +2. 修改 application.properties 配置: + + ```properties + # 由于此服务为消费方,所以不向服务配置中心注册 + eureka.client.register-with-eureka=false + # Eureka Server 集群地址 + eureka.client.service-url.defaultZone=http://eureka-01:7001/eureka,http://eureka-02:7002/eureka,http://eureka-03:7003/eureka + ``` + +3. 在 RestTemplate 注入时加入负载均衡逻辑: + + ~~~java + @Bean + @LoadBalanced + public RestTemplate restTemplate() { + return new RestTemplate(); + } + ~~~ + +4. 将 RestTemplate 的 url 换成微服务名,通过生产者配置的 `spring.application.name` 访问具体的微服务: + + ~~~java + private static final String REST_URL_PREFIX = "http://CLOUD-PROVIDER"; + ~~~ + +5. 测试联通后,复制 3 份 cloud-provider 到不同的端口进行启动,测试负载均衡。 + + + +:crossed_swords: **SpringCloud Open Feign** 负载均衡 + +SpringCloud Open Feign 是一个声明式的 REST 客户端,它是在 LoadBalancer 上的进一步封装,使其支持声明式调用, 做到使用 HTTP 请求远程服务时就像调用本地方法一样的体验。 + +它的使用方法是定义一个接口,然后在上面添加注解(面向接口编程)。 + +POM 引用如下: + +```xml + + org.springframework.cloud + spring-cloud-starter-openfeign + +``` + +注:引入 openfeign 就无需引入 loadbalancer 了。 + +其次,在主配置类上添加注解:`@EnableFeignClients`。 + +创建 Feign 接口: + +~~~java +@FeignClient(value = "CLOUD-PROVIDER") +public interface DeptFeignService { + @RequestMapping(method = RequestMethod.GET, value = "/dept/{id}") + Dept getDeptById(@PathVariable(value = "id") int id); +} +~~~ + +在 Controller 中进行使用: + +~~~java +@RestController +@RequestMapping("/dept") +public class DeptConsumerController { + + @Autowired + private DeptFeignService service; + + @GetMapping("/{id}") + public Dept getDeptById(@PathVariable int id) { + return service.getDeptById(id); + } +} +~~~ + +将原来的 RestTemplate 切换为了接口调用。 + + + +切换负载均衡策略: + +默认情况下,LoadBalancer 采用轮询的负载均衡模式`org.springframework.cloud.loadbalancer.core.RoundRobinLoadBalancer`。 + +除此之外,LoadBalancer 还提供了随机的负载均衡模式`org.springframework.cloud.loadbalancer.core.RandomLoadBalancer`,切换方式如下: + +~~~java +// 这里一定不能加 @Configuration 注解 +public class CustomLoadBalancerConfiguration { + @Bean + ReactorLoadBalancer randomLoadBalancer(Environment environment, LoadBalancerClientFactory loadBalancerClientFactory) { + String name = environment.getProperty(LoadBalancerClientFactory.PROPERTY_NAME); + return new RandomLoadBalancer(loadBalancerClientFactory.getLazyProvider(name, ServiceInstanceListSupplier.class), name); + } +} +~~~ + +第二步,在某个配置类上添加负载均衡客户端配置到容器中(这里加在了 BeanConfiguration 配置类中): + +~~~java +@Configuration +@LoadBalancerClient(value = "CLOUD-PROVIDER", configuration = CustomerLoadBalancerConfiguration.class) +public class XxxConfiguration { + +} +~~~ + +同样的,SpringCloud 还支持自定义其他负载均衡模式(通过 ServiceInstanceListSupplier 来进行定义)。 + +##### TODO + + + +--- +#### 8.SpringCloud 断路器 -微服务的技术栈有哪一些? -SpringCloud 和 Dubbo 的区别? +许多以前处于维护模式的Netflix-related模块在Spring Cloud2020 中被删除。这包括您正在使用的Ribbon和Zuul。Spring Cloud团队建议用Spring Cloud Loadbalancer替换Ribbon,用Spring Cloud Gateway替换Zuul。 \ No newline at end of file diff --git "a/notes/Java\350\257\255\350\250\200/\345\274\200\346\272\220\346\241\206\346\236\266/img/Snipaste_2021-07-31_23-47-10.png" "b/notes/Java\350\257\255\350\250\200/\345\274\200\346\272\220\346\241\206\346\236\266/img/Snipaste_2021-07-31_23-47-10.png" new file mode 100644 index 0000000000000000000000000000000000000000..955765c95433f5f571d79c5816cd3ad8a7377a90 GIT binary patch literal 50302 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 literal 0 HcmV?d00001 diff --git "a/notes/Java\350\257\255\350\250\200/\345\274\200\346\272\220\346\241\206\346\236\266/img/Snipaste_2021-08-01_18-40-53.png" "b/notes/Java\350\257\255\350\250\200/\345\274\200\346\272\220\346\241\206\346\236\266/img/Snipaste_2021-08-01_18-40-53.png" new file mode 100644 index 0000000000000000000000000000000000000000..f53c28eea0256ad25f2d6b34a973707f45e6c7cd GIT binary patch literal 39389 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�g4_H*XFNqizh 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�{sWe%zFO^3_53^~p(-WNFt+;6XmsJ+RcP037< zX8iM8e^E5R4TObwl}LSa75>Lk$Q7H3oRF410!jiAP28^_zWk4Xkkk`_>U$5#dyB8d zhlnQcFhnV`&M?ALUIusVu6%naHDE0+f}*E3ek ztAGxvz{`tt0SorsROY0m>TEaa2+D29^fOR-Si`WBwlGn`<%h$yciq8kZ^B+VK=AGP#$YO65Gu>R=2CnSHdBVVU8^83ENVr=icV5^(( z)#hxi*2EmMSJ;yn^#U|SapZ53=6l&ktWzuvPzw*+4Q;A<B`_bBR)Cany-kOVm;evs4Q<+?HUCBZyoLra#nB-A=0gu+W!ipe^mrKF?5 zf7lR@bJkm7&BWTvPCM(+uK~2&lRoMR&fgK4DIsfU(hnj7>9@V)cC!`&P6VLA>Dwqj zn7dT7sY@1uKy6Ri`vQ*uD9aFv6I(W!WKGeNOTm4-^#}vF#(bcP3Mp;MC(LSxj2&mF zTQ$sS4R4ct{d2Upp_;D8asefAyD-t1V`7iBW51m1+SlKJ2LP1%Dvk+D zVUX7Lpz|e}R&{|5T~dZS$t>nO6uZeviu?c3&UFPfp>0tV1q)4z6d{2N!j(u7X`w3* zA|gf+LAnSiA%tE-FA`CTQk9YjQsokiBtQ~CFjS=|O-$$@7=qLQp@=UtcixOM?|r;B z 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 XAYsZGn;QhEu&GQ8Ev{ARyT| -在使用 DNF 软件包管理器安装 Nginx 后,官方的二进制命令文件的位置在 */usr/sbin/nginx*,我们可以通过命令行参数和控制信号运行脚本文件使 Nginx 作出不同的行为(也可以使用 systemctl 命令管理 Nginx 服务)。 - -*Nginx* 常用命令行参数: - -- -?,-h:显示帮助。 - -- -c filename:启动时为 Nginx 指定一个配置文件来代替缺省的配置文件。 - -- -t:不运行 Nginx,而仅仅测试配置文件。nginx 将检查配置文件的语法的正确性,并尝试打开配置文件中所引用到的文件。 - -- -v,-V:查看 Nginx 的版本(以及编译器版本和配置参数)。 - -- -s signal:向主进程发送信号,quit(正常停止),stop(强制停止),reload(重新加载),reopen(重新打开日志文件,日志切割时使用)。 - - ~~~shell - [root@localhost ~]# nginx -c /etc/nginx/nginx.conf #启动 nginx 服务 - [root@localhost ~]# nginx -s reload #重新加载 nginx 服务 - ~~~ - -*Nginx* 主要控制信号: - -- *TERM*, *INT*:快速停止服务,不建议。 -- *QUIT*:优雅地关闭服务。 -- *HUP*:配置重载,使用新配置启动新 worker 进程,正常关闭旧的 worker 进程。 -- *USR1*:重新打开日志文件(日志切割时使用)。 -- *USR2*:平滑的升级二进制脚本文件。 -- *WINCH*:优雅地关闭 worker 进程。 - -*Nginx* 控制信号使用方法:使用 ***kill*** 命令向 Nginx 主进程发送控制信号。 - -1. 获取 Nginx 的主进程 ID: - - ~~~shell - [root@localhost nginx]# ps -ef|grep nginx - root 2257 1 0 01:52 ? 00:00:00 nginx: master process /usr/sbin/nginx - nginx 2265 2257 0 01:53 ? 00:00:00 nginx: worker process - nginx 2266 2257 0 01:53 ? 00:00:00 nginx: worker process - nginx 2267 2257 0 01:53 ? 00:00:00 nginx: worker process - nginx 2268 2257 0 01:53 ? 00:00:00 nginx: worker process - root 2348 2181 0 02:05 pts/0 00:00:00 grep --color=auto nginx - [root@localhost nginx]# cat /run/nginx.pid - 2257 - ~~~ - -- 使用 kill 命令发送控制信号: - - ~~~shell - [root@localhost nginx]# kill -HUP 2257 - [root@localhost nginx]# kill -QUIT $(cat /run/nginx.pid) - [root@localhost nginx]# ps -ef|grep nginx - root 2373 2181 0 02:08 pts/0 00:00:00 grep --color=auto nginx - ~~~ - --- -#### 2.Nginx安装 +#### 2.Nginx 安装 1. 安装Nginx @@ -154,9 +101,9 @@ Nginx 官方文档:http://nginx.org/en/docs/

-5. DNF安装Nginx后各个文件目录位置 +5. DNF 安装 Nginx 后各个文件目录位置 - - 安装位置:***/etc/nginx/***,各种配置文件,参数文件都在此目录下。 + - 安装位置:/etc/nginx/,各种配置文件,参数文件都在此目录下。 ```shell [root@localhost nginx]# ls @@ -164,21 +111,84 @@ Nginx 官方文档:http://nginx.org/en/docs/ default.d fastcgi.conf.default fastcgi_params.default koi-win mime.types.default nginx.conf.default scgi_params.default uwsgi_params.default ``` - - web服务器默认目录:***/usr/share/nginx/***,此目录下有一个html目录用来存放网页文件,其中的 index.html 即为 Nginx 配置的默认页面。 + - web服务器默认目录:/usr/share/nginx/,此目录下有一个html目录用来存放网页文件,其中的 index.html 即为 Nginx 配置的默认页面。 + + - 日志存放路径:/var/log/nginx/ + + - 帮助文档存放路径:/usr/share/doc/nginx/ + - - 日志存放路径:***/var/log/nginx/*** - - 帮助文档存放路径:***/usr/share/doc/nginx/*** +在使用 DNF 软件包管理器安装 Nginx 后,官方的二进制命令文件的位置在 /usr/sbin/nginx,我们可以通过命令行参数和控制信号运行脚本文件使 Nginx 作出不同的行为(也可以使用 systemctl 命令管理 Nginx 服务)。 + +*Nginx* 常用命令行参数: + +- -?,-h:显示帮助。 + +- -c filename:启动时为 Nginx 指定一个配置文件来代替缺省的配置文件。 + +- -t:不运行 Nginx,而仅仅测试配置文件。nginx 将检查配置文件的语法的正确性,并尝试打开配置文件中所引用到的文件。 + +- -v,-V:查看 Nginx 的版本(以及编译器版本和配置参数)。 + +- -s signal:向主进程发送信号,quit(正常停止),stop(强制停止),reload(重新加载),reopen(重新打开日志文件,日志切割时使用)。 + + ~~~shell + [root@localhost ~]# nginx -c /etc/nginx/nginx.conf #启动 nginx 服务 + [root@localhost ~]# nginx -s reload #重新加载 nginx 服务 + ~~~ + +*Nginx* 主要控制信号: + +- *TERM*, *INT*:快速停止服务,不建议。 +- *QUIT*:优雅地关闭服务。 +- *HUP*:配置重载,使用新配置启动新 worker 进程,正常关闭旧的 worker 进程。 +- *USR1*:重新打开日志文件(日志切割时使用)。 +- *USR2*:平滑的升级二进制脚本文件。 +- *WINCH*:优雅地关闭 worker 进程。 + +*Nginx* 控制信号使用方法:使用 kill 命令向 Nginx 主进程发送控制信号。 + +1. 获取 Nginx 的主进程 ID: + + ~~~shell + [root@localhost nginx]# ps -ef|grep nginx + root 2257 1 0 01:52 ? 00:00:00 nginx: master process /usr/sbin/nginx + nginx 2265 2257 0 01:53 ? 00:00:00 nginx: worker process + nginx 2266 2257 0 01:53 ? 00:00:00 nginx: worker process + nginx 2267 2257 0 01:53 ? 00:00:00 nginx: worker process + nginx 2268 2257 0 01:53 ? 00:00:00 nginx: worker process + root 2348 2181 0 02:05 pts/0 00:00:00 grep --color=auto nginx + [root@localhost nginx]# cat /run/nginx.pid + 2257 + ~~~ + +- 使用 kill 命令发送控制信号: + + ~~~shell + [root@localhost nginx]# kill -HUP 2257 + [root@localhost nginx]# kill -QUIT $(cat /run/nginx.pid) + [root@localhost nginx]# ps -ef|grep nginx + root 2373 2181 0 02:08 pts/0 00:00:00 grep --color=auto nginx + ~~~ --- -#### 3.Nginx基本配置 +#### 3.Nginx 主配置文件 + +Nginx 主配置文件位于 /etc/nginx/nginx.conf,可以被分为 3 部分: -*Nginx* 主配置文件:*/etc/nginx/nginx.conf* +1. 全局块:从配置文件开始到 events 块之间的内容,用来设置一些会影响 Nginx 服务器整体运行的配置指令,主要包括运行 Nginx 的用户(组),允许生成的 worker process 数,进程 PID 的存放路径、日志存放路径和类型、配置文件引入等。 +2. events 块:主要配置 Nginx 服务器与用户的网络连接,常见的如:是否允许同时接受多个网络连接、选用哪种事件驱动模型来处理连接请求、每个 work process 可以同时支持的最大连接数等。 +3. http 块:http 块中又包含了 2 个部分,http 全局块和 server 部分 + 1. http 全局块:包括了文件引入、MIME-TYPE 定义、日志定义、连接超时时间等。 + 2. server 块:配置一个虚拟主机(应用服务),每个 http 块可以包含多个 server 块,每一个 server 块都是一个独立的应用服务。 -全局段配置:配置一些全局参数。 + + +:first_quarter_moon: 全局块配置: ~~~nginx user nginx; @@ -187,34 +197,42 @@ error_log /var/log/nginx/error.log; pid /run/nginx.pid; # Load dynamic modules. See /usr/share/doc/nginx/README.dynamic. include /usr/share/nginx/modules/*.conf; -events { - worker_connections 1024; -} + ~~~ -- ***user***:后面可以跟用户(及用户组),定义 Nginx 运行的用户和用户组,当 Nginx 主线程启动后会使用此处配置的用户启动 worker 进程。 +- user:后面可以跟用户(及用户组),定义 Nginx 运行的用户和用户组,当 Nginx 主线程启动后会使用此处配置的用户启动 worker 进程。 ~~~shell user nginx xxx; # 以 xxx 用户组,nginx 用户的身份启动 work 线程 ~~~ -- ***worker_processes***:工作进程的数量,一般设置为机器的核心数量(CPU数*每个CPU的核心数),当设置为 *auto* 时,nginx 会根据核心数生成对应数量的 worker 进程。 +- worker_processes:工作进程的数量,一般设置为机器的核心数量(CPU 数 * 每个 CPU 的核心数),当设置为 auto 时,nginx 会根据核心数生成对应数量的 worker 进程。 -- ***error_log***:错误日志的存放路径,可以同时定义日志级别(debug 除上诉配置外,http 配置段还可以配置负载均衡,gzip,编码等。 +> :biking_woman: 在 server 块中我们配置具体的虚拟主机,也是在开发中需要我们配置的主要部分。 -虚拟主机配置段(包含在 http 之内):配置代理服务的虚拟主机的各项参数。 + +--- + +#### 4.Nginx 反向代理配置 一般来说,每部署一个服务,都在 /etc/nginx/conf.d 目录下新增一个 xxxx.conf 配置 server 信息,每个服务的文件互不干扰。 +在 /etc/nginx/conf.d 目录下新建 demo.conf 文件,文件内容如下: + ~~~nginx server { listen 80 default_server; listen [::]:80 default_server; - server_name _; + server_name _; root /usr/share/nginx/html; include /etc/nginx/default.d/*.conf; location / { + proxy_pass http://127.0.0.1:8080; + index index.html; } error_page 404 /404.html; location = /40x.html { @@ -273,7 +300,7 @@ server { } ~~~ -- ***listen***:定义要监听的端口。 +- listen:定义要监听的端口 - `listen 80;`:监听所有的 ipv4 地址的 80 端口。 - `listen [::]:80;`:监听所有的 ipv6 地址的 80 端口。 @@ -281,15 +308,15 @@ server { - `listen [fe80::919c:9a57:127f:5a8a]:80;`:只监听 *fe80::919c:9a57:127f:5a8a* 的 ipv6 地址下的 80 端口。 - *default_server*:将此 server 定义为默认的 server(一个 http 块中可以配置多个 server 模块),当请求的域名未匹配到任何 server_name 时,nginx 将会使用 default_server 来处理请求,如果均未配置 default_server,使用第一个 server 进行请求处理。 -- ***server_name***:定义域名,可以定义多个,使用空格隔开,也可以使用正则表达式。配置 server_name 后,就可以在浏览器中直接输入域名进行访问而不需要输入 ip 地址( _ 为官方随意指定的一个无效域名,无任何意义)。 +- server_name:定义域名,可以定义多个,使用空格隔开,也可以使用正则表达式。配置 server_name 后,相当于本机的 hosts 文件( _ 为官方随意指定的一个无效域名,无任何意义)。 -- ***root***:定义根目录,nginx 会根据该目录进行文件映射,例如:nginx 配置 `root /usr/share/nginx/html;`,用户访问 /project/xxx.html 时,nginx 则会返回 /usr/share/nginx/html/project/xxx.html 文件。 +- root:定义根目录,nginx 会根据该目录进行文件映射,例如:nginx 配置 `root /usr/share/nginx/html;`,用户访问 /project/xxx.html 时,nginx 则会返回 /usr/share/nginx/html/project/xxx.html 文件。 -- ***include***:将其他配置文件包含进来。 +- include:将其他配置文件包含进来。 -- ***location***:指定路径匹配规则,/ 为匹配任何路径。 +- location:指定路径匹配规则,/ 为匹配任何路径。 -- ***error_page***:定义发生错误的时候需要显示一个的定义的 uri。 +- error_page:定义发生错误的时候需要显示一个的定义的 uri。 ~~~nginx error_page 500 502 503 504 /50x.html; @@ -303,45 +330,250 @@ server { -常见错误记录: +在 location 区域中,配置了用于反向代理的路径跳转: + +~~~nginx +location / { + proxy_pass http://127.0.0.1:8080; + index index.html; +} +~~~ + +当用户访问 http://192.168.253.133:80 时(Nginx 服务器 IP),将被代理到服务器上的 8080 端口下进行访问。 + +> 如果对不同的路径有多种代理方式,可以配置多个 location 进行代理。 + + + +location 匹配规则: `location [=|~|~*|^~] /uri/ { … }` + +1. 什么都不带时,表示以 xxx 开头的 uri,如:`location /demo {...}` +2. `=`:开头表示精确匹配(会忽略 get 请求的参数),例: `location = /demo {...}` +3. `~`:开启 uri 包含的正则匹配(区分大小写),例:`location ~ /list/[0-9] {...}` +4. `^~`:用于不包含正则表达式的 uri 前,相当于以 xxx 开头,例:`location ^~ /xxx {...}` +5. `~` 开头表示区分大小写的正则匹配 以xx结尾 +6. `~*`:开启 uri 包含的正则匹配(不区分大小写)。 +7. `!~` 和 `!~*`:分别表示区分大小写的不匹配和不区分大小写的不匹配的正则。 +8. `/`:通用匹配,任何请求都会匹配到。 -1. 启动时报错:nginx: [emerg] bind() to 0.0.0.0:82 failed (13: Permission denied) - 原因:系统不允许访问 82 端口,需要手动进行开通, - - 查询 http 允许访问的端口: +--- + +#### 5.Nginx 负载均衡配置 + +Nginx 支持对多态服务器进行负载均衡,还自带了多种负载均衡策略。 + + + +负载均衡的配置方法: + +1. 配置 upstream(配置位置为 http 配置段内): - ~~~shell - [root@localhost nginx]# semanage port -l | grep http_port_t - http_port_t tcp 80, 81, 443, 488, 8008, 8009, 8443, 9000 - pegasus_http_port_t tcp 5988 - ~~~ + ~~~nginx + upstream myserver { + server 192.168.253.132:8080; + server 192.168.253.132:8081; + } + ~~~ + +2. 将 server 段的 server_name 配置为本机 IP。 + +3. 配置反向代理的代理内容: + + ~~~nginx + proxy_pass http://myserver; + ~~~ + + - - 开通 82 端口允许 http 访问: +Nginx 负载均衡策略: - ~~~shell - [root@localhost nginx]# semanage port -a -t http_port_t -p tcp 82 - ~~~ +1. 轮询:默认的负载均衡策略,每个请求按时间的先后顺序分配到不同的后端服务器上。 + + 配置方法就是上例中的配置。 + +2. 权重:指定轮询几率的负载均衡方式,默认情况下的权重是 1,权重越高,访问到的几率越大。 + + ~~~nginx + upstream myserver { + server 192.168.253.132:8080 weight=5; + server 192.168.253.132:8081 weight=10; + } + ~~~ + +3. 根据客户端 IP 进行 Hash 然后分配,每一个客户端只能访问到其中某一台服务器上,可以解决 session 存储的问题。 + + ~~~nginx + upstream myserver { + ip_hash; + server 192.168.253.132:8080; + server 192.168.253.132:8081; + } + ~~~ + +4. fair:按照后端服务器的响应时间来分配权重,响应时间短的进行优先分配 + + ~~~nginx + upstream myserver { + server 192.168.253.132:8080; + server 192.168.253.132:8081; + fair; + } + ~~~ + +5. 最少连接策略:把请求转发给连接数较少的后端服务器。 + + ~~~nginx + upstream myserver { + least_conn; + server 192.168.253.132:8080; + server 192.168.253.132:8081; + } + ~~~ +6. 根据 url 的 Hash 值来进行分配,同一个 url 一般定向到同一个后端服务器,一般配合本地缓存进行使用。 + + ~~~nginx + upstream myserver { + hash $request_uri; + server 192.168.253.132:8080; + server 192.168.253.132:8081; + } + ~~~ + + + +--- + +#### 6.Nginx 动静分离 + +动静分离就是指将动态请求和静态请求分离开来,使用 Nginx 来处理静态页面,而数据内容(动态请求)代理到后端服务器进行完成。 + +Nginx 通过不同的 location 映射来进行动静分离功能的实现。 + + + +配置文件内容: + +~~~nginx +location /data/ { + proxy_pass http://127.0.0.1:8080; +} + +location / { + root /usr/share/nginx/html; + index index.html; +} +~~~ + +Nginx 从上到下进行匹配,如果 url 已 data 开头,则进入后端服务器进行处理,否则继续向下匹配代理到本机的静态资源。 + + + +--- + +#### 7.Nginx 高可用 + +在实际的生产环境中,如果使用一个 Nginx 来代理所有的访问请求,一旦 Nginx 出现故障,那么整个应用将处于不可访问的状态。 + +一般情况下,我们搭建一个 Nginx 集群并结合 Keepalived 实现 Nginx 的高可用。 + + + +Keepalived:它是 Linux 下的一个轻量级的高可用解决方案,用来监控集群系统中各个服务节点的状态。如果某个服务节点出现异常,将被 Keepalived 检测到,并将出现故障的服务节点从集群系统中剔除,而在故障节点恢复正常后,Keepalived 又可以自动将此服务节点重新加入服务器集群中。 + +安装 Keepalived: + +~~~shell +[root@localhost nginx]# dnf install Keepalived +~~~ + +安装后的配置文件位置:/etc/keepalived + + + +修改 Keepalived 的配置文件: + +1. Nginx 服务器 Keepalived 配置: + + ~~~nginx + ! Configuration File for keepalived + global_defs { + notification_email { + acassen@firewall.loc + failover@firewall.loc + sysadmin@firewall.loc + } + notification_email_from Alexandre.Cassen@firewall.loc + smtp_connect_timeout 30 + router_id LVS_DEVEL # 路由 ID,需要在 hosts 文件中配置 127.0.0.1 LVS_DEVEL + vrrp_skip_check_adv_addr + vrrp_strict + vrrp_garp_interval 0 + vrrp_gna_interval 0 + } + + vrrp_instance VI_1 { + state MASTER # 备机配置为 BACKUP + interface ens32 + virtual_router_id 51 # 路由 ID,主备机的值应该相等 + priority 100 # 权重,主机应大于备机 + advert_int 1 # 检查的时间间隔,默认为 1 秒 + authentication { + auth_type PASS + auth_pass 1111 + } + virtual_ipaddress { + 192.168.253.88 # 虚拟 IP 地址 + } + } + ~~~ + + 修改 hosts 文件添加:`127.0.0.1 LVS_DEVEL`。 + + 备 Nginx 服务器 Keepalived 配置与主机基本保持一致。 + +启动 keepalived:`systemctl start keepalived.service` + +2. 配置 Nginx 配置文件 demo.conf: + + ~~~nginx + server { + listen 7000; + root /usr/share/nginx/html; + location / { + proxy_pass http://192.168.253.128:8080; + } + } + ~~~ + + 重新加载 Nginx 配置文件。 + +3. 需要关闭 SELinux,否则可能会对 Keepalived 有影响。 + +确定防火墙开启了对应端口后,即可进行测试。 + + --- -#### 4.Nginx日志 +#### 8.Nginx 原理 -*Nginx* 允许针对不同的 server 配置不同的 Log,在 server 段中的日志配置会覆盖 http 段的日志配置。 +Nginx 默认采用多进程工作方式,Nginx 启动后,会运行一个 master 进程和多个 worker 进程。 -- 配置日志格式: +master 充当整个进程组与用户的交互接口,同时对进程进行监护,管理 worker 进程来实现重启服务、平滑升级、更换日志文件、配置文件实时生效等功能。worker 用来处理基本的网络事件,worker 之间是平等的,他们共同竞争来处理来自客户端的请求。 - ~~~nginx - log_format mylog '$remote_addr - $remote_user [$time_local] "$request" ' - '$status $body_bytes_sent "$http_referer" ' - '"$http_user_agent" "$http_x_forwarded_for"'; - ~~~ +![](Image/1183448-20180210145226654-1347579045.png) + +使用 master-worker 机制的好处: - Nginx 日志的部分格式配置项: +1. 可以使用 nginx –s reload 进行热部署(不会一次性地停掉所有 worker)。 +2. 每个 woker 都是独立的进程,不需要加锁,节省了很多开销,如果有其中的一个 woker 出现问题也不会影响到其他 worker,不会造成服务中断。 -
参数说明示例
$remote_addr客户端地址211.28.65.253
$remote_user客户端用户名称
$time_local访问时间和时区18/Jul/2012:17:00:01 +0800
$request请求的URI和HTTP协议“GET /article-10000.html HTTP/1.1”
$http_host请求地址,即浏览器中你输入的地址(IP或域名)www.it300.com/192.168.100.100
$statusHTTP请求状态200
$upstream_statusupstream状态200
$body_bytes_sent发送给客户端文件内容大小1547
$http_refererurl跳转来源https://www.baidu.com/
$http_user_agent用户终端浏览器等信息"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36"
$ssl_protocolSSL协议版本TLSv1
$ssl_cipher交换数据中的算法RC4-SHA
$upstream_addr后台upstream的地址,即真正提供服务的主机地址10.10.10.100:80
$request_time整个请求的总时间0.205
$upstream_response_time请求过程中,upstream响应时间0.002
$http_x_forwarded_for当客户使用代理服务器时的真正IP地址211.28.65.253
+Nginx 多进程事件模型:异步非阻塞 +虽然 Nginx 采用多 worker 的方式来处理请求,每个 worker 里面只有一个主线程,但是 Nginx 采用了异步非阻塞(EPOLL)的方式来处理请求,也就是说,Nginx 是可以同时处理成千上万个请求的。一个 worker 进程可以同时处理的请求数只受限于内存大小,而且在架构设计上,不同的 worker 进程之间处理并发请求时几乎没有同步锁的限制,worker 进程通常不会进入睡眠状态,因此,当 Nginx 上的进程数与 CPU 核心数相等时,进程间切换的代价是最小的。 \ No newline at end of file diff --git "a/notes/\347\274\226\347\240\201\345\256\236\350\267\265/\351\241\271\347\233\256\345\267\245\345\205\267/Jenkins.md" "b/notes/\347\274\226\347\240\201\345\256\236\350\267\265/\351\241\271\347\233\256\345\267\245\345\205\267/Jenkins.md" index abb7315..93abc88 100644 --- "a/notes/\347\274\226\347\240\201\345\256\236\350\267\265/\351\241\271\347\233\256\345\267\245\345\205\267/Jenkins.md" +++ "b/notes/\347\274\226\347\240\201\345\256\236\350\267\265/\351\241\271\347\233\256\345\267\245\345\205\267/Jenkins.md" @@ -155,10 +155,6 @@ Jenkins 可以与 SVN 和 Git 进行集成,下面将采用 Jenkins + Git 进 -1. - - - - --- #### 3.Jenkins工作创建 -- GitLab