简介

为什么叫Nacos

前四个字母分别为Naming和Configuration的前两个字母,最后的s为Service

Nacos是什么

据说Nacos在阿里巴巴内部有超过10万的实例运行,已经过了类似双十一等各种大型流量的考验。

Nacos安装

访问官网
image.png
找到1.1.4版本点击下载
image.png
下载完成后解压,启动startup.cmd

注意:我劝大家如果是按照教程来,不要下载最新版本的,最好下载1.1.4,应为最新版本需要配置很多东西,启动就报一大堆错,我解决了半个小时,最终放弃【我都配置了数据库链接,还报错 not database set】

image.png
启动成功后访问

  1. http://localhost:8848/nacos

image.png
用户名:nacos
密码:nacos
image.png
登录成功

提供者注册服务到Nacos

官方文档

新建模块9001

cloudalibaba-provider-payment9001

修改POM.xml

修改父工程POM.xml

  1. <dependencyManagement>
  2. <dependencies>
  3. <!--spring cloud alibaba 2.1.0.RELEASE-->
  4. <dependency>
  5. <groupId>com.alibaba.cloud</groupId>
  6. <artifactId>spring-cloud-alibaba-dependencies</artifactId>
  7. <version>2.1.0.RELEASE</version>
  8. <type>pom</type>
  9. <scope>import</scope>
  10. </dependency>
  11. </dependencies>
  12. </dependencyManagement>

修改9001 POM.xml

<?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>com.dance.springcloud</artifactId>
        <groupId>com.dance</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>cloudalibaba-provider-payment9001</artifactId>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>


    <dependencies>
        <!--SpringCloud ailibaba nacos -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <!-- SpringBoot整合Web组件 -->
        <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>
        <!--日常通用jar包配置-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </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-provider
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 #配置Nacos地址

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

新建主启动类

package com.dance.springcloud;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

@EnableDiscoveryClient
@SpringBootApplication
public class PaymentMain9001 {
    public static void main(String[] args) {
        SpringApplication.run(PaymentMain9001.class, args);
    }
}

新建Controller

import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class PaymentController {
    @Value("${server.port}")
    private String serverPort;

    @GetMapping(value = "/payment/nacos/{id}")
    public String getPayment(@PathVariable("id") Integer id) {
        return "nacos registry, serverPort: "+ serverPort+"\t id"+id;
    }
}

测试

  • 启动Nacos
  • 启动9001
  • 访问控制台查看
    • 启动成功后在控制台中查看
    • image.png
  • 调用URL访问
  • nacos服务注册中心+服务提供者9001都OK了
  • 为了后面的负载均衡,参照9001搭建9002

    搭建提供者集群

    参考9001

  • 新建cloudalibaba-provider-payment9002

    IDEA虚拟端口映射

    在启动的项目类上右击拷贝配置
    image.png
    image.png
    修改名字后设置环境变量,采用9011端口启动
    image.png
    在下面就可以找到拷贝的虚拟端口了
    image.png
    右击启动
    image.png
    再次查看控制台,发现实例数已经变成2了
    为了后面的方便,我还是新建9002工程去吧,这个只作为小知识点

    消费者注册服务到Nacos和负载均衡

    新家模块83

    cloudalibaba-consumer-nacos-order83

    修改POM.xml

    <?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>com.dance.springcloud</artifactId>
          <groupId>com.dance</groupId>
          <version>1.0-SNAPSHOT</version>
      </parent>
      <modelVersion>4.0.0</modelVersion>
    
      <artifactId>cloudalibaba-consumer-nacos-order83</artifactId>
    
      <properties>
          <maven.compiler.source>8</maven.compiler.source>
          <maven.compiler.target>8</maven.compiler.target>
      </properties>
      <dependencies>
          <!--SpringCloud ailibaba nacos -->
          <dependency>
              <groupId>com.alibaba.cloud</groupId>
              <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
          </dependency>
          <!-- dependent on common modules -->
          <dependency>
              <groupId>com.dance</groupId>
              <artifactId>cloud-api-commons</artifactId>
              <version>1.0-SNAPSHOT</version>
          </dependency>
          <!-- SpringBoot整合Web组件 -->
          <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>
          <!--日常通用jar包配置-->
          <dependency>
              <groupId>org.springframework.boot</groupId>
              <artifactId>spring-boot-devtools</artifactId>
              <scope>runtime</scope>
              <optional>true</optional>
          </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配置

    ```yaml server: port: 83

spring: application: name: nacos-order-consumer cloud: nacos: discovery: server-addr: localhost:8848

消费者将要去访问的微服务名称(注册成功进nacos的微服务提供者)

service-url: nacos-user-service: http://nacos-payment-provider

<a name="MsODL"></a>
## 新建主启动类
```java
package com.dance.springcloud;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;


@EnableDiscoveryClient
@SpringBootApplication
public class OrderNacosMain83
{
    public static void main(String[] args)
    {
        SpringApplication.run(OrderNacosMain83.class,args);
    }
}

新建配置类

package com.dance.springcloud.config;

import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;

@Configuration
public class ApplicationContextConfig
{
    @Bean
    @LoadBalanced
    public RestTemplate getRestTemplate()
    {
        return new RestTemplate();
    }
}

新建Controller

package com.dance.springcloud.controller;

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

import javax.annotation.Resource;

@RestController
@Slf4j
public class OrderNacosController {

    @Resource
    private RestTemplate restTemplate;

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

    @GetMapping(value = "/consumer/payment/nacos/{id}")
    public String paymentInfo(@PathVariable("id") Long id)
    {
        return restTemplate.getForObject(serverURL+"/payment/nacos/"+id,String.class);
    }

}

测试

为什么nacos支持负载均衡?因为spring-cloud-starter-alibaba-nacos-discovery内含netflix-ribbon包。
image.png

服务注册中心对比提升

Nacos全景图

image.png

Nacos与CAP

Nacos与其他注册中心特性对比
image.png

Nacos服务发现实例模型

image.png

Nacos支持AP和CP模式的切换

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

何时选择使用何种模式?

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

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

切换命令:

curl -X PUT '$NACOS_SERVER:8848/nacos/v1/ns/operator/switches?entry=serverMode&value=CP

Nacos作为服务配置中心(Spring-config)

新建项目3377

cloudalibaba-config-nacos-client3377

修改POM.xml

<?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>com.dance.springcloud</artifactId>
        <groupId>com.dance</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>cloudalibaba-config-nacos-client3377</artifactId>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>
    <dependencies>
        <!--nacos-config-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>
        <!--nacos-discovery-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <!--web + actuator-->
        <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.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </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

Nacos同springcloud-config一样,在项目初始化时,要保证先从配置中心进行配置拉取,拉取配置之后,才能保证项目的正常启动。
springboot中配置文件的加载是存在优先级顺序的,bootstrap优先级高于application

# nacos配置
server:
  port: 3377

spring:
  application:
    name: nacos-config-client
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 #Nacos服务注册中心地址
      config:
        server-addr: localhost:8848 #Nacos作为配置中心地址
        file-extension: yaml #指定yaml格式的配置
 #       group: DEV_GROUP
 #       namespace: 7d8f0f5a-6a53-4785-9686-dd460158e5d4


# ${spring.application.name}-${spring.profile.active}.${spring.cloud.nacos.config.file-extension}
# nacos-config-client-dev.yaml

# nacos-config-client-test.yaml   ----> config.info

新建application.yml

spring:
  profiles:
    active: dev # 表示开发环境
    #active: test # 表示测试环境
    #active: info

新建主启动类

package com.dance.springcloud;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;


@EnableDiscoveryClient
@SpringBootApplication
public class NacosConfigClientMain3377
{
    public static void main(String[] args) {
        SpringApplication.run(NacosConfigClientMain3377.class, args);
    }
}

新建Controller

package com.dance.springcloud.controller;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RefreshScope //支持Nacos的动态刷新功能。
public class ConfigClientController
{
    @Value("${config.info}")
    private String configInfo;

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

Nacos平台中添加配置信息

Nacos中的dataid的组成格式及与SpringBoot配置文件中的匹配规则
官方文档
说明:之所以需要配置spring.application.name,是因为它是构成Nacos配置管理dataId 字段的一部分。
在 Nacos Spring Cloud中,dataId的完整格式如下:

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

所以公式为

${spring.application.name)}-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}

打开配置列表

image.png

新增配置

image.png

按照规则设置Data Id

image.png

发布

image.png
配置完成启动项目

测试

  • 启动前需要在nacos客户端-配置管理-配置管理栏目下有对应的yaml配置文件
  • 运行cloud-config-nacos-client3377的主启动类
  • 调用接口查看配置信息 - http://localhost:3377/config/info
  • image.png

自带动态刷新
修改平台上的配置
点击编辑修改后重新发布
image.png
发布后无需任何操作,直接刷新就可以了
image.png
修改下Nacos中的yaml配置文件,再次调用查看配置的接口,就会发现配置已经刷新。

配置小结

image.png

Nacos命名空间分组和DataID三者的关系

问题:多环境多项目管理
问题1:
实际开发中,通常一个系统会准备

  1. dev开发环境
  2. test测试环境
  3. prod生产环境。

如何保证指定环境启动时服务能正确读取到Nacos上相应环境的配置文件呢?
问题2:
一个大型分布式微服务系统会有很多微服务子项目,每个微服务项目又都会有相应的开发环境、测试环境、预发环境、正式环境…那怎么对这些微服务配置进行管理呢?

Nacos的图形化管理界面

image.png
image.png

Namespace+Group+Data lD三者关系?为什么这么设计?

是什么

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

三者情况

image.png
默认情况:Namespace=public,Group=DEFAULT_GROUP,默认Cluster是DEFAULT

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

    Nacos DataID 配置

    指定spring.profile.active和配置文件的DatalD来使不同环境下读取不同的配置
    默认空间+默认分组+新建dev和test两个DatalD

    新建DEV配置的DataId

    image.png

    新建TEST配置的DataId

    image.png
    image.png
    通过spring.profile.active属性就能进行多环境下配置文件的读取
    image.png

    测试

  • 启动项目

  • http://localhost:3377/config/info
  • 配置是什么就加载什么 test/dev

image.png

Nacos Group分组方案

通过Group实现环境区分 - 新建Group

新增TEST分组

image.png

新增DEV分组

image.png

查看列表

image.png

修改bootstrap.yml

增加分组为DEV分组
image.png

修改application.yml

image.png

测试

image.png

Nacos NameSpace命名空间方案

新增DEV命名空间

image.png
image.png

新增TEST命名空间

image.png
image.png

查看服务列表

image.png
已经存在public test dev三个命名空间

在DEV命名空间下新建配置

image.png
image.png
image.png

修改YML配置

修改bootstrap.yml

image.png
拷贝命名空间的ID到配置文件中
image.png

修改application.yml

image.png

测试

上图官网翻译,真实情况
image.png
按照上述,我们需要mysql数据库

官网说明 默认Nacos使用嵌入式数据库实现数据的存储。所以,如果启动多个默认配置下的Nacos节点,数据存储是存在一致性问题的。为了解决这个问题,Nacos采用了集中式存储的方式来支持集群化部署,目前只支持MySQL的存储。 Nacos支持三种部署模式

  • 单机模式-用于测试和单机试用。
  • 集群模式-用于生产环境,确保高可用。
  • 多集群模式-用于多数据中心场景。

Windows cmd startup.cmd或者双击startup.cmd文件 单机模式支持mysql 在0.7版本之前,在单机模式时nacos使用嵌入式数据库实现数据的存储,不方便观察数据存储的基本情况。0.7版本增加了支持mysql数据源能力,具体的操作步骤:

  1. 安装数据库,版本要求:5.6.5+
  2. 初始化mysq数据库,数据库初始化文件: nacos-mysql.sql
  3. 修改conf/application.properties文件,增加支持mysql数据源配置(目前只支持mysql),添加mysql数据源的url、用户名和密码。
spring.datasource.platform=mysql

db.num=1
db.url.0=jdbc:mysql://11.162.196.16:3306/nacos_devtest?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=nacos_devtest
db.password=youdontknow

再以单机模式启动nacos,nacos所有写嵌入式数据库的数据都写到了mysql。

Nacos持久化配置

Nacos默认自带的是嵌入式数据库derby,nacos的pom.xml中可以看出。
derby到mysql切换配置步骤:

  1. nacos-server-1.1.4\nacos\conf录下找到nacos-mysql.sql文件,执行脚本。
  2. nacos-server-1.1.4\nacos\conf目录下找到application.properties,添加以下配置(按需修改对应值)。 ```java spring.datasource.platform=mysql

db.num=1 db.url.0=jdbc:mysql://localhost:3306/nacos_devtest?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true db.user=root db.password=1234

<a name="FUlsr"></a>
## 检查MySql的版本
![image.png](https://cdn.nlark.com/yuque/0/2021/png/1603133/1634559868587-f4d6210c-6dd1-403a-9686-abc94df5b4f4.png#clientId=u3b960479-d112-4&from=paste&height=162&id=u5ae00b36&margin=%5Bobject%20Object%5D&name=image.png&originHeight=162&originWidth=298&originalType=binary&ratio=1&size=5607&status=done&style=none&taskId=u50cf6f5c-78bc-44f2-b334-bbae26e2239&width=298)<br />额,为啥我的是MariaDB,算了试一下行不行吧,万一可以呢
<a name="jmhzp"></a>
## 新建数据库
![image.png](https://cdn.nlark.com/yuque/0/2021/png/1603133/1634559942064-8f174529-ede2-473a-bd79-c1d3c4a5ab5c.png#clientId=u3b960479-d112-4&from=paste&height=141&id=ub2151071&margin=%5Bobject%20Object%5D&name=image.png&originHeight=141&originWidth=427&originalType=binary&ratio=1&size=5841&status=done&style=none&taskId=ue965df8d-2538-482d-9012-922e6c1349b&width=427)
<a name="LJUad"></a>
## 执行Nacos-mysql.sql
在conf文件夹下<br />![image.png](https://cdn.nlark.com/yuque/0/2021/png/1603133/1634560020180-f69c4aa3-1a70-4511-8485-b612086eda28.png#clientId=u3b960479-d112-4&from=paste&height=239&id=uf7790a6f&margin=%5Bobject%20Object%5D&name=image.png&originHeight=239&originWidth=672&originalType=binary&ratio=1&size=24538&status=done&style=none&taskId=u304c130b-e803-467b-a834-4fb37eea22a&width=672)<br />![image.png](https://cdn.nlark.com/yuque/0/2021/png/1603133/1634560052994-8779c594-a713-4b2b-883e-63542cc407e5.png#clientId=u3b960479-d112-4&from=paste&height=755&id=ud11de4b2&margin=%5Bobject%20Object%5D&name=image.png&originHeight=755&originWidth=945&originalType=binary&ratio=1&size=65255&status=done&style=none&taskId=u6dca295d-60e7-421e-839a-16d5d9014a5&width=945)<br />执行完成
<a name="hePWr"></a>
## 修改application.properties
```java
spring.datasource.platform=mysql

db.num=1
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=root
db.password=123456

测试

  • 重启Nacos服务器
  • 访问http://localhost:8848/nacos
  • 登录后查看服务列表
  • image.png
  • 启动Nacos,可以看到是个全新的空记录界面,以前是记录进derby。

    新增一条配置

  • image.png

    查看数据库

  • image.png

  • 成功保存到数据库

    Nacos Linux集群搭建

    材料准备

    预计需要,1个Nginx+3个nacos注册中心+1个mysql

    请确保是在环境中安装使用:

    1. 64 bit OS Linux/Unix/Mac,推荐使用Linux系统。
    2. 64 bit JDK 1.8+;下载.配置
    3. Maven 3.2.x+;下载.配置
    4. 3个或3个以上Nacos节点才能构成集群。

    link

Nacos下载Linux版

下载NacosLinux版本1.1.4

image.png
下载完成后上传到Linux

查看

[root@localhost opt]# ll
总用量 50896
-rw-r--r--. 1 root root 52115827 10月 20 17:05 nacos-server-1.1.4.tar.gz

解压

[root@localhost opt]# tar -zxvf nacos-server-1.1.4.tar.gz
nacos/LICENSE
nacos/NOTICE
nacos/target/nacos-server.jar
nacos/conf/
nacos/conf/schema.sql
nacos/conf/nacos-mysql.sql
nacos/conf/application.properties.example
nacos/conf/nacos-logback.xml
nacos/conf/cluster.conf.example
nacos/conf/application.properties
nacos/bin/startup.sh
nacos/bin/startup.cmd
nacos/bin/shutdown.sh
nacos/bin/shutdown.cmd

拷贝一份新的

[root@localhost opt]# cp -r nacos/ mynacos/

Linux安装Mysql

下载Mysql Linux版本

https://downloads.mysql.com/archives/community/

image.png
点击下载,静静等待~
image.png

安装

我在安装这个包的时候碰见了问题,不知道为啥初始化失败了,最终按照https://www.cnblogs.com/wangpeng00700/p/13539856.html
这个博客进行安装

执行nacos-mysql.sql

使用Navicat链接Mysql

image.png

FAQ无法链接解决方案

关闭CentOS7的防火墙

[root@localhost conf]# systemctl stop firewalld

创建数据库

CREATE DATABASE `nacos_config` CHARACTER SET 'utf8' COLLATE 'utf8_general_ci';

执行SQL

配置文件位置
image.png
如果不想自己找的话,可以直接拿我这个,前提是版本一样
nacos-mysql.sql
执行就可以了
image.png
执行完成
image.png

修改Nacos的配置

备份application.properties

[root@192 conf]# cp application.properties application.properties.back

编辑application.properties配置数据库

spring.datasource.platform=mysql

db.num=1
db.url.0=jdbc:mysql://localhost:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=root
db.password=123456

image.png

配置集群配置文件(cluster.conf)

[root@192 conf]# cp cluster.conf.example cluster.conf

梳理出3台nacos集器的不同服务端口号,设置3个端口:
3333,4444,5555
内容

192.168.233.130:3333 192.168.233.130:4444 192.168.233.130:5555

注意,这个IP不能写127.0.0.1,必须是Linux命令hostname -i能够识别的IP
image.png
编辑配置文件
image.png

编辑Nacos的启动脚本startup.sh,使它能够接受不同的启动端口

配置文件
image.png
平时单机版的启动,都是./startup.sh即可

但是,集群启动,我们希望可以类似其它软件的shell命令,传递不同的端口号启动不同的nacos实例。
命令: ./startup.sh -p 3333表示启动端口号为3333的nacos服务器实例,和上一步的cluster.conf配置的一致。

修改之前先备份一下

[root@192 bin]# cp startup.sh startup.sh.back

修改内容

修改前 修改后
image.png image.png
修改前
image.png
修改后
image.png

脚本修改完成

安装Nginx

已经忘的差不多了,之后再学习一遍的时候把笔记补上吧
安装Nginx命令流程

# 安装gcc-c++编译器
yum install gcc-c++
# 安装openssl
yum install -y openssl openssl-devel
# 安装pcre
yum install -y pcre pcre-devel
# 安装zlib
yum install -y zlib zlib-devel
# 创建安装文件夹
mkdir /usr/local/nginx
# 下载安装包
wget https://nginx.org/download/nginx-1.19.9.tar.gz
# 解压
tar -zxvf nginx-1.19.9.tar.gz
# 进入
cd nginx-1.19.9
# 配置
./configure
# 编译
make
# 编译安装
make install
# 查找安装目录
whereis nginx
# 进入启动目录
cd /usr/local/nginx/sbin
# 启动
./nginx
# 查看服务
ps -ef|grep nginx
# 关闭防火墙
systemctl stop firewalld
# 查看IP
ip addr
# 外面访问
浏览器访问IP

image.png
安装完成

修改Nginx配置文件

修改nginx.conf
位置:nginx/conf/
修改后
image.png
配置完成后重启Nginx

cd /usr/local/nginx/sbin
./nginx -s reload

测试

  • 上面已经启动了mysql,nginx配置完成也完成了重启
  • 启动nacos

image.png

./startup.sh -p 3333
./startup.sh -p 4444
./startup.sh -p 5555
  • 检查Nacos
    • ps -ef|grep nacos|grep -v grep|wc -l
  • image.png
  • 执行完成之后我的居然是1?what,不应该是3吗?

    内存溢出问题解决

  • 我就知道,我的道路没有那么顺利排查问题从看日志开始

  • 查看启动日志
  • image.png
  • image.png
  • 很明显的内存溢出
  • 修改启动脚本
  • 原来配置
  • image.png
  • 修改后
  • image.png
  • 重新启动
  • 但是出现了新的问题
  • image.png
  • 提示在启动的过程中,新定义的对象内存大于现有内存,我丢,怪不得要设置2g,我直接改为512m,哎看来改内存的方式是实现不了了,那就调整一下虚拟机的内存吧
  • 编辑虚拟机配置
  • image.png
  • 1G内存直接调为4G
  • image.png
  • 启动再试一下
  • 查看start.out日志
  • image.png
  • 启动成功
  • 果然还是内存的事情
  • 访问尝试一下,确保三台实例的存活
  • 3333
  • image.png
  • 4444
  • image.png
  • 5555
  • image.png
  • ok了

    Nginx找不到favicon.ico问题解决

  • 应为重启了虚拟机,要重新启动Nginx

  • 启动并指定配置文件
  • image.png
  • 额,又报错了,提示没有找到文件或文件夹
  • 看一下error.log
  • image.png
  • 提示应该是没有找到favicon.ico图标
  • 网上说配置这个就可以了

    location = /favicon.ico {
      log_not_found off;
      access_log off;
    }
    
  • 但是我的配置完成后还是不行,无奈只能在html下创建一个favicon.ico的文件

    cd /usr/local/nginx/html
    vi favicon.ico
    

    重新启动

    cd /usr/local/nginx/sbin
    ./nginx -c /usr/local/nginx/conf/nginx.conf
    

    启动成功
    image.png

    测试

    访问Nginx
    image.png
    登录就可以了
    访问路劲:http://192.168.233.130:1111/nacos
    注意:携带nacos后缀
    到此Nacos集群搭建完成
    测试:
    新增一条配置文件
    image.png
    新增成功
    查看数据库
    image.png
    ok

    测试提供者入驻集群

    修改9002配置

    image.png

    启动9002

    image.png
    ok注册成功

    高可用小总结,流程图

    image.png
    Nacos到此完结,撒花花~~~