服务注册与配置中心(Nacos)

1、概述

①、什么是Cloud Alibaba

2018.10.31Spring Cloud Alibaba正式入驻了Spring Cloud官方孵化器,并在Maven中央库发布了第一个版本。

中文文档官方文档

Spring Cloud for Alibaba,它是由一些阿里巴巴的开源组件和云产品组成的。这个项目的目的是为了让大家所熟知的Spring 框架,其优秀的设计模式和抽象理念,以给使用阿里巴巴产品的Java开发者带来使用Spring BootSpring Cloud 的更多便利。

②、Cloud Alibaba能干什么

  • 服务限流降级:默认支持 WebServletWebFlux, OpenFeignRestTemplateSpring Cloud Gateway, ZuulDubboRocketMQ 限流降级功能的接入,可以在运行时通过控制台实时修改限流降级规则,还支持查看限流降级 Metrics 监控。
  • 服务注册与发现:适配 Spring Cloud 服务注册与发现标准,默认集成了 Ribbon 的支持。
  • 分布式配置管理:支持分布式系统中的外部化配置,配置更改时自动刷新。
  • 消息驱动能力:基于 Spring Cloud Stream 为微服务应用构建消息驱动能力。
  • 分布式事务:使用 @GlobalTransactional 注解, 高效并且对业务零侵入地解决分布式事务问题。
  • 阿里云对象存储:阿里云提供的海量、安全、低成本、高可靠的云存储服务。支持在任何应用、任何时间、任何地点存储和访问任意类型的数据。
  • 分布式任务调度:提供秒级、精准、高可靠、高可用的定时(基于 Cron 表达式)任务调度服务。同时提供分布式的任务执行模型,如网格任务。网格任务支持海量子任务均匀分配到所有 Workerschedulerx-client)上执行。
  • 阿里云短信服务:覆盖全球的短信服务,友好、高效、智能的互联化通讯能力,帮助企业迅速搭建客户触达通道。

③、什么是Nacos

中文文档

为什么叫Nacos?前四个字母分别为NamingConfiguration的前两个字母,最后的sService,服务管理配置服务。

一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。等价于Eureka+Config+Bus

④、Windows安装Nacos

Ⅰ、下载

下载地址

选择一个稳定的版本

image-20210219093936702

选择Windows版本下载

image-20210219094324128

Ⅱ、修改相关配置

如下关于MySQL的配置是为了搭建Nacos集群,如果仅仅是单机模式,Nacos自带嵌入式数据库Derby

下载下来解压,修改bin目录下的startup.cmd文件,由于默认是集群模式,先修改为单机

set MODE="standalone"

image-20210219101718270

然后新建本地MySQL数据库

image-20210219095731125

conf目录下的nacos-mysql.sql文件内容复制,在数据库中执行一遍,生成所需要的数据库表

image-20210219101253846

进入conf文件夹打开application.properties文件,将图中的几个配置的注释取消,userpassword自己修改

image-20210219101348175

Ⅲ、运行测试

然后运行startup.cmd

image-20210219094707918

image-20210219102345048

访问http://192.168.137.1:8848/nacos/index.html8848钛金手机哈哈),IP地址可用localhost代替,这里这个IPNacos运行控制面板给出的地址,是等价的

image-20210219102405383

账号密码默认都是nacos

image-20210219102523994

⑤、Docker安装

Windows安装挺麻烦的,况且生产环境也不会让nacos跑在Windows上面,接下来在Docker中安装Nacos

Ⅰ、拉取镜像

image-20210219102945999

docker pull nacos/nacos-server

image-20210219102958374

Ⅱ、启动容器

docker run --env MODE=standalone --name nacos -d -p 8848:8848 nacos/nacos-server

image-20210219103059762

Ⅲ、访问测试

记得开启安全组(云服务器)http://39.105.43.3:8848/nacos/

image-20210219105117157

⑥、引入Cloud Alibaba 依赖坐标

<!--Spring cloud alibaba 2.1.0.RELEASE-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-alibaba-dependencies</artifactId>
    <version>2.1.0.RELEASE</version>
    <type>pom</type>
    <scope>import</scope>
</dependency>

2、Nacos做服务注册中心

①、第一个服务提供者

Ⅰ、建Module

image-20210219105743237

Ⅱ、POM

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>SpringCloudDemo</artifactId>
        <groupId>com.phz.springcloud</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>NacosProviderPayment9001</artifactId>

    <dependencies>
        <!-- SpringCloud ailibaba nacos-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--监控-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
</project>

Ⅲ、YML

server:
  port: 9001

spring:
  application:
    name: nacos-payment-service
  cloud:
    nacos:
      discovery:
        server-addr: 39.105.43.3:8848 #配置Nacos地址

management:
  endpoints:
    web:
      exposure:
        include: '*'

Ⅳ、主启动

/**
 * @author PengHuAnZhi
 * @createTime 2021/2/19 11:10
 * @projectName SpringCloudDemo
 * @className PaymentMain9001.java
 * @description TODO
 */
@SpringBootApplication
@EnableDiscoveryClient
public class PaymentMain9001 {
    
    
    public static void main(String[] args) {
    
    
        SpringApplication.run(PaymentMain9001.class, args);
    }
}

Ⅴ、Controller

/**
 * @author PengHuAnZhi
 * @createTime 2021/2/19 11:11
 * @projectName SpringCloudDemo
 * @className PaymentController.java
 * @description TODO
 */
@RestController
@Slf4j
public class PaymentController {
    
    
    @Value("${server.port}")
    private String serverPort;

    @GetMapping("/payment/getServerPort")
    public String getServerPort() {
    
    
        return "Nacos serverPort : " + serverPort;
    }
}

Ⅵ、测试

image-20210219111452162

image-20210219111514078

②、第二个服务提供者

步骤同第一个提供者,此处省略,端口号为9002

Ⅰ、测试

image-20210219112153452

image-20210219112216120

③、服务消费者

Ⅰ、建Module

image-20210219112855735

Ⅱ、POM

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>SpringCloudDemo</artifactId>
        <groupId>com.phz.springcloud</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>NacosConsumerOrder9003</artifactId>

    <dependencies>
        <!-- SpringCloud ailibaba nacos-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <dependency>
            <groupId>com.phz.springcloud</groupId>
            <artifactId>CloudAPI</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--监控-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
</project>

可一看到,Nacos天生就集成了Ribbon负载均衡,也就是为什么一开始建了两个服务提供者,是为了接下来演示服务集群的负载均衡功能

image-20210219113539657

Ⅲ、YML

server:
  port: 9003

spring:
  application:
    name: nacos-order-consumer
  cloud:
    nacos:
      discovery:
        server-addr: 39.105.43.3:8848 #配置Nacos地址

#消费者将去访问的微服务名称(注册成功进nacos的微服务提供者)
service-url:
  nacos-user-service: http://nacos-payment-service

Ⅳ、主启动类

/**
 * @author PengHuAnZhi
 * @createTime 2021/2/19 11:38
 * @projectName SpringCloudDemo
 * @className OrderMain9003.java
 * @description TODO
 */
@SpringBootApplication
@EnableDiscoveryClient
public class OrderMain9003 {
    
    
    public static void main(String[] args) {
    
    
        SpringApplication.run(OrderMain9003.class, args);
    }
}

Ⅴ、业务类

首先依然引入了Ribbon,那肯定是有一个RestTamplate的,定义配置类

/**
 * @author PengHuAnZhi
 * @createTime 2021/2/19 11:40
 * @projectName SpringCloudDemo
 * @className ApplicationContextConfig.java
 * @description TODO
 */
@Configuration
public class ApplicationContextConfig {
    
    
    @Bean
    @LoadBalanced
    public RestTemplate getRestTemplate() {
    
    
        return new RestTemplate();
    }
}

然后是Controller

/**
 * @author PengHuAnZhi
 * @createTime 2021/2/19 11:42
 * @projectName SpringCloudDemo
 * @className OrderController.java
 * @description TODO
 */
@RestController
@Slf4j
public class OrderController {
    
    
    @Resource
    RestTemplate restTemplate;

    @Value("${service-url.nacos-user-service}")
    private String serverUrl;

    @GetMapping("order/payment/getServerPort")
    public String getServerPort() {
    
    
        return restTemplate.getForObject(serverUrl + "/payment/getServerPort", String.class);
    }
}

Ⅵ、测试启动

image-20210219114848655

QQ录屏20210219115126

可以看到Ribbon所提供的负载均衡功能也实现了。

3、服务注册中心对比

Nacos支持CAP规则中的CPAP,但是不同时支持CAPCPAP可自行切换

Nacos Eureka Consul CoreDNS Zookeeper
一致性协议 CP+AP AP CP CP
健康检查 TCP/HTTP/MYSQL/Client Beat Client Beat TCP/HTTP/gRPC/Cmd Keep Alive
负载均衡策略 权重/ metadata/Selector Ribbon Fabio RoundRobin
雪崩保护
自动注销实例 支持 支持 支持 不支持 支持
访问协议 HTTP/DNS HTTP HTTP/DNS DNS TCP
监听支持 支持 支持 支持 不支持 支持
多数据中心 支持 支持 支持 不支持 不支持
跨注册中心同步 支持 不支持 支持 不支持 不支持
SpringCloud集成 支持 支持 支持 不支持 支持
Dubbo集成 支持 不支持 支持 不支持 支持
K8S集成 支持 不支持 支持 支持 不支持

①、CP和AP之间切换

C是所有节点在同—时间看到的数据是—致的;而A的定义是所有的请求都会收到响应。

何时选择使用何种模式?

—般来说,如果不需要存储服务级别的信息且服务实例是通过nacos-client注册,并能够保持心跳上报,那么就可以选择AP模式。当前主流的服务如Spring cloudDubbo服务,都适用于AP模式,AP模式为了服务的可用性而减弱了一致性,因此AP模式下只支持注册临时实例。

如果需要在服务级别编辑或者存储配置信息,那么CP是必须,K8S服务和DNS服务则适用于CP模式。
CP模式下则支持注册持久化实例,此时则是以Raft协议为集群运行模式,该模式下注册实例之前必须先注册服务,如果服务不存在,则会返回错误。

curl -X PUT '$NACOS_SERVER:8848/nacos/v1/ns/operator/switches?entry=serverMode&value=CP' #指定CP或者AP

4、Nacos做服务配置中心

①、案例

Ⅰ、建Module

image-20210219135144534

Ⅱ、POM

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>SpringCloudDemo</artifactId>
        <groupId>com.phz.springcloud</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>NacosConfigClient3377</artifactId>

    <dependencies>
        <!-- nacos config-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>
        <!-- SpringCloud ailibaba nacos-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <dependency>
            <groupId>com.phz.springcloud</groupId>
            <artifactId>CloudAPI</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--监控-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
</project>

Ⅲ、YML

注意命名为bootstrap.yml

server:
  port: 3377

spring:
  application:
    name: nacos-config-client
  cloud:
    nacos:
      discovery:
        server-addr: 39.105.43.3:8848 #Nacos服务注册中心地址
      config:
        server-addr: 39.105.43.3:8848 #Nacos作为配置中心地址
        file-extension: yaml #指定yaml格式配置

再创建application.yml

spring:
  profiles:
    active: dev #表示开发环境

Ⅳ、主启动类

/**
 * @author PengHuAnZhi
 * @createTime 2021/2/19 13:47
 * @projectName SpringCloudDemo
 * @className NacosConfigClient3377.java
 * @description TODO
 */
@SpringBootApplication
@EnableDiscoveryClient
public class NacosConfigClient3377 {
    
    
    public static void main(String[] args) {
    
    
        SpringApplication.run(NacosConfigClient3377.class, args);
    }
}

Ⅴ、Controller

/**
 * @author PengHuAnZhi
 * @createTime 2021/2/19 13:53
 * @projectName SpringCloudDemo
 * @className ConfigClientController.java
 * @description TODO
 */
@RestController
@RefreshScope // 支持Nacos的动态刷新功能
public class ConfigClientController {
    
    

    @Value("${config.info}")
    private String configInfo;

    @GetMapping("/config/info")
    public String getConfigInfo() {
    
    
        return configInfo;
    }
}

Ⅵ、在Nacos中添加配置信息

a、配置规则

查阅官方文档,了解Nacosdataid的组成格式及SpringBoot配置文件中的匹配规则

bootstrap.properties 中配置 Nacos server 的地址和应用名

spring.cloud.nacos.config.server-addr=127.0.0.1:8848

spring.application.name=example

说明:之所以需要配置 spring.application.name ,是因为它是构成 Nacos 配置管理 dataId字段的一部分。

Nacos Spring Cloud 中,dataId 的完整格式如下:

${
    
    prefix}-${
    
    spring.profiles.active}.${
    
    file-extension}
  • prefix 默认为 spring.application.name 的值,也可以通过配置项 spring.cloud.nacos.config.prefix来配置。
  • spring.profiles.active 即为当前环境对应的 profile,详情可以参考 Spring Boot文档。 注意:当 spring.profiles.active 为空时,对应的连接符 - 也将不存在,dataId 的拼接格式变成 ${prefix}.${file-extension}
  • file-exetension 为配置内容的数据格式,可以通过配置项 spring.cloud.nacos.config.file-extension 来配置。目前只支持 propertiesyaml 类型。

总结下来就是这个公式:${spring.application.name}-${spring.profile.active}.${file-extension}

b、准备配置

根据前面配置的yml文件内容可以得出,我们需要配置的文件名为:nacos-config-client-dev.yml

image-20210219162706787

image-20210219164735368

Ⅶ、测试

image-20210219181953096

修改配置中心配置文件version

image-20210220104256235

image-20210220104323902

②、多环境多项目管理

问题a、实际开发中,通常一个系统会准备:

  • dev开发环境
  • test测试环境
  • prod生产环境。

如何保证指定环境启动时服务能正确读取到Nacos上相应环境的配置文件呢?

问题b、—个大型分布式微服务系统会有很多微服务子项目,

每个微服务项目又都会有相应的开发环境、测试环境、预发环境、正式环境

那怎么对这些微服务配置进行管理呢?

Ⅰ、命名空间

类似Java里面的package名和类名,最外面的namespace是可以用于区分部署环境的,GroupDataID逻辑上区分两个目标对象。

image-20210220093614426

三者之间的关系

image-20210220094322851

默认Namespace=publicGroup=DEFAULT_GROUP,默认ClusterDEFAULT

  • Nacos默认的命名空间是publicNamespace主要用来实现隔离。
    比方说我们现在有三个环境:开发、测试、生产环境,我们就可以创建三个Namespace,不同的Namespace之间是隔离的;
  • Group默认是DEFAULT_GROUPGroup可以把不同的微服务划分到同一个分组里面去
  • Service就是微服务;一个Service前以包含多个Cluster(集),Nacos默认ClusterDEFAULT,Cluster是对指定微服务的一个虚似划分。比方说为了容灾,将Service微服务分别部署在了杭州机房和广州机房,这时就可以给杭州机房的Service微服务起—个集群名称(HZ) ,给广州机房的Service微服务起一个集群名称(GZ),还可以尽呈让同一个机房的微服务互相调用,以提升性能。
  • instance就是微服务的实例

Ⅱ、三种方案加载配置

a、DateID方式

新建一个test环境配置文件

image-20210220103806959

修改active环境为test

image-20210220103907116

测试

image-20210220104034345

b、Group方式

新建nacos-config-client-info.yaml配置文件,并指定为一个DEV_GROUP组,相同的文件名再创建一个配置文件,指定组为TEST_GROUP。

image-20210220105351073

image-20210220110104465

修改bootstrap配置文件,指定group名称,修改application配置文件,active指定info

image-20210220105907062

测试

在这里插入图片描述

切换DEV_GROUP,再次测试

image-20210220110214054

c、namespace方式

新建两个命名空间分别为:devtestid可以自动生成也可以自定义,这里我不定义

image-20210220110437521

分别在两个命名空间创建两个配置文件,后缀也分别为devtest,这里给出一个模板

image-20210220110929141

然后在bootstrap配置文件中指定namespaceidapplication指定active环境即可,group重置为DEFAULT

image-20210220111843042

测试:

image-20210220112200724

5、Nacos集群介绍

①、集群架构说明

逛逛官网

推荐用户把所有服务列表放到一个vip下面,然后挂到一个域名下面

[http://ip1](http://ip1/):port/openAPI 直连ip模式,机器挂则需要修改ip才可以使用。

[http://VIP](http://vip/):port/openAPI 挂载VIP模式,直连vip即可,下面挂server真实ip,可读性不好。

[http://nacos.com](http://nacos.com/):port/openAPI 域名 + VIP模式,可读性好,而且换ip方便,推荐模式

deployDnsVipMode.jpg

所谓的VIP,并不是Very Important Person的简称,而是Visual IP虚拟映射IP,为了保证服务的高可用,Nacos都不会是一个单机,而是一个集群,服务将会通过VIP来动态注册到Nacos集群中,当集群中的某一个Nacos挂了,VIP又负责将服务分配到其他可用的Nacos,而不是这台已经挂掉的Nacos,以上功能需求,自然而然就是需要一个反向代理Nginx服务了。为了进一步保证服务的高可用,如果集群中的某一台或者多台Nacos挂了,我们希望Nacos重启后,之前的数据不会丢失,那么Nacos后面应该还需要链接MySQL数据库才行,所以对官网的架构图进行翻译,便会得到如下的便于理解的架构图

image-20210220120244261

前面有说到Nacos自带嵌入式数据库Derby,此时如果搭建了集群环境,不能够三个Nacos都自带一个数据库,这时候就让三个嵌入式数据库转换为一个外部的MySQL数据库集群

②、持久化配置解释

Ⅰ、切换数据库

由于单机版Nacos自带一个Derby数据库,在使用集群配置的时候,需要将数据库切换到MySQL,首先是将安装目录下的conf文件夹中的nacos-mysql.sql文件内容复制到Navicat中执行,创建相应数据库表,这一步在Windows安装的时候已经执行过了,

然后同级目录打开application.properties文件,添加MySQL的若干配置,这一步也做过了

image-20210220121913557

简单测试一波,由于前面的案例全部是用的服务器的Docker安装的Nacos,暂时不方便演示,现在启动WindowsNacos

image-20210220122522472

进入管理页面,添加一行配置

image-20210220122623041

观察MySQL数据库,也能看到一行新的记录出现,证明配置MySQL是成功了的

image-20210220122654657

6、Nacos集群环境搭建

官方也推荐集群环境上Linux,所以就不搞Window那一套了,直接上linux版。

①、Nacos下载

/opt/目录下安装

wget https://github.com/alibaba/nacos/releases/download/1.4.1/nacos-server-1.4.1.tar.gz

image-20210220142104479

但是网络很慢,不敢恭维,还是先下载下来上传到服务器上面,快的呀批

image-20210220142220037

上传到服务器,解压。

tar -zxvf nacos-server-1.4.1.tar.gz

image-20210220142440571

递归拷贝到/mynacos/文件夹,然后进入到bin目录

cp -r nacos /mynacos/

image-20210220143104662

②、配置MySQL

重启切换到opt目录,开始下载安装,直接按照顺序执行即可,注意MySQL版本为8.0

#下载MySQL源
wget https://dev.mysql.com/get/mysql80-community-release-el8-1.noarch.rpm
#安装MySQL源
rpm -Uvh mysql80-community-release-el8-1.noarch.rpm 
#安装MySQL
yum install mysql-server 
#启动
systemctl start mysqld.service
#进入MySQL 初始无密码
mysql -u root -p

image-20210220171519566

#修改密码
alter user 'root'@'localhost' IDENTIFIED BY '123456';
#刷新配置
FLUSH PRIVILEGES;
#退出重新进入
exit
mysql -uroot -p
#授予外部访问权限,否则navicat无法连接
create user mysql_user;
GRANT ALL ON *.* TO 'mysql_user'@'%';
ALTER USER 'mysql_user'@'%' IDENTIFIED WITH mysql_native_password BY 'xxx';
flush privileges;

image-20210220173948984

nacos官方提供的SQL语句初始化执行到MySQL中,创建nacos数据库,执行SQL语句

image-20210220174736148

image-20210220174936701

配置完成

③、修改Nacos脚本参数

思考一个问题,我没启动nacos是直接./startup.sh,并没有指定端口号,但是现在我们要搭建一个nacos集群,他们的端口号需要区分出来才行。

#备份官方全局配置文件application.properties
cp application.properties application.properties.init
#备份官方的集群配置文件cluster.cong
cp cluster.conf.example cluster.conf

编辑application.properties,设置数据库参数

image-20210220175531661

编辑cluster.conf,进行集群配置

#获取本机内网地址
[root@PengHuAnZhi conf]# hostname -i
172.30.246.101
[root@PengHuAnZhi conf]# vim cluster.conf

image-20210220180431046

④、配置Nginx

#安装pcre
wget http://downloads.sourceforge.net/project/pcre/pcre/8.37/pcre-8.37.tar.gz
#解压
tar -zxvf pcre-8.37.tar.gz
#安装gcc
yum install -y gcc gcc-c++
#进入pcre目录执行configure
./configure
#make
make && make install
#安装其他依赖
yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel
#安装Nginx
wget http://nginx.org/download/nginx-1.10.2.tar.gz
#解压
tar -zxvf nginx-1.10.2.tar.gz 
#configure
./configure
#make
make && make install

make报错:

image-20210221140338304

编辑nginx/objs目录下的Makefile文件

image-20210221140135300

删除-Werror

image-20210221140305078

重新make

make && make install

再次报错

image-20210221140546650

注释图中语句

vim src/os/unix/ngx_user.c

image-20210221140710662

再次make

image-20210221140851564

进入nginx解压后的文件夹,进入conf,将配置文件复制一份,然后编辑nginx.conf。找到按图所示,修改三处。

cp nginx.conf nginx.conf.init

image-20210221160022671

⑤、测试

./startup.sh -p 3333
./startup.sh -p 4444
./startup.sh -p 5555
#进入usr/local/nginx/sbin目录,启动nginx服务
./nginx -c /etc/nginx/nginx-1.10.2/conf/nginx.conf

测试不了,阿里云的学生机只有1G的内存,启动第一个nacos就卡的要死,第二个直接躺尸了,我又做了一个虚拟机版的集群,供参考,从0到1,手把手教你搭建一个Nginx+MySQL+Nacos集群

猜你喜欢

转载自blog.csdn.net/qq_43509535/article/details/113869739