Nacos单机&集群&持久化&Nginx代理配置
Nacos是什么
官方:一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。
本质:Nacos = Eureka+Config+Bus
可以替代原本SpringCloud中Eureka、Config、Bus组件
注册中心对比

环境搭建
环境准备
Nacos 依赖 Java 环境来运行。如果您是从代码开始构建并运行Nacos,还需要为此配置 Maven环境,请确保是在以下版本环境中安装使用:
- 64 bit OS,支持 Linux/Unix/Mac/Windows,推荐选用 Linux/Unix/Mac。
- 64 bit JDK 1.8+;[下载&配置]
Nacos下载
下载地址(2023/02/20最新稳定版为2.2.0)
运行单机测试

 sh startup.sh -m standalone
访问
http://10.20.30.227:8848/nacos
登录页面

帐号密码默认为nacos
特性一:注册中心
消费者项目
POM
<dependencies>
        <!-- https://mvnrepository.com/artifact/com.alibaba.cloud/spring-cloud-starter-alibaba-nacos-discovery -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            <version>2.2.0.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-actuator -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
            <version>3.0.2</version>
        </dependency>
    </dependencies>
YML
server:
  port: 8888
spring:
  application:
    name: service-consumer #注册到nacos的消费者名称
  cloud:
    nacos:
      discovery:
        server-addr: 10.20.30.227:8848
配置类
@Configuration
public class ApplicationContextBean
{
    @Bean
    @LoadBalanced
    public RestTemplate getRestTemplate()
    {
        return new RestTemplate();
    }
}
控制类
@RestController
public class CustomerController {
    public static final String URL = "http://service-provider";//生产者注册的服务名称
    @Autowired
    private RestTemplate restTemplate;
    @GetMapping("/customer/getMethod")
    public String getMethod(String val){
        String result = restTemplate.getForObject(URL+"/producer/getMethod?val="+val, String.class);//生产者暴漏的路径
        return result;
    }
}
启动类
@SpringBootApplication
@EnableDiscoveryClient
public class NacosCustomerApplication {
    public static void main(String[] args) {
        SpringApplication.run(NacosCustomerApplication.class,args);
    }
}
两个生产者项目
POM
<dependencies>
        <!-- https://mvnrepository.com/artifact/com.alibaba.cloud/spring-cloud-starter-alibaba-nacos-discovery -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            <version>2.2.0.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-actuator -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
            <version>3.0.2</version>
        </dependency>
    </dependencies>
YML
server:
  port: 6601 #一个生产者端口6601一个为6602
spring:
  application:
    name: service-provider #注册到nacos的生产者名称
  cloud:
    nacos:
      discovery:
        server-addr: 10.20.30.227:8848
控制类
@RestController
public class NacosProducerController {
    @GetMapping("/producer/getMethod")
    public String getMethod(String val){
        return "生产者6601"+val;
    }
}
启动类
@SpringBootApplication
@EnableDiscoveryClient
public class NacosProducer6601Application {
    public static void main(String[] args) {
        SpringApplication.run(NacosProducer6601Application.class,args);
    }
}
验证
启动三个项目,登录Nacos页面会查到相应的服务

并且消费者发出请求,默认负载均衡为轮询转发
特性二:配置中心
修改上面customer项目
YML
新增配置bootstrap.yml
spring:
  cloud:
    nacos:
      config:
        server-addr: 10.20.30.227:8848 #nacos配置中心
        file-extension: yaml #指定配置文件格式是yaml
POM
<!--新增坐标-->        
<dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
            <version>2.2.0.RELEASE</version>
        </dependency>
新增配置类
@RestController
@RequestMapping("/config")
@RefreshScope //@RefreshScope注解使当前类下的配置支持Nacos的动态刷新功能
public class ConfigController {
    @Value("${ip.name}")//要读取的配置
    private String ipName;
    @RequestMapping("/get")
    public String get() {
        return ipName;
    }
}
Nacos页面新增配置
- 
访问http://10.20.30.227:8848/
- 
配置管理->配置列表->创建配置![image-20230220174317030]() 
- 
内容如下![image-20230220174452985]() 
- 
DataID结构解析service-consumer-dev.yaml “service-consumer” 为上面配置的spring.application.name "dev"为上面配置的spring.profiles.active 附官方图: ![image-20230220174819820]() 
- 
每次提交配置,通过url查看,可发现配置自动更新了 
配置分组
- nacos页面添加配置时设置Group

- 
修改上面项目的bootstrap.yml spring: cloud: nacos: config: server-addr: 10.20.30.227:8848 #nacos配置中心 file-extension: yaml #指定配置文件格式是yaml group: MY_GROUP1 #设置的分组名
配置命名空间
- 
nacos页面添加配置时设置NameSpace ![image-20230220180051871]() 
- 
nacos页面在新的命名空间下添加配置 ![image-20230220180128974]() 
- 
修改上面项目的bootstrap.yml spring: cloud: nacos: config: server-addr: 10.20.30.227:8848 #nacos配置中心 file-extension: yaml #指定配置文件格式是yaml group: MY_GROUP1 #设置的分组名 namespace: 7ec90e54-85e3-4c04-b345-bf91fc26394f #设置的命名空间ID,此IP命名空间添加后自动生成或者指定
Nacos数据持久化
环境要求
MySQL5.6.5+
为什么要修改持久化
Nacos自带数据库为derby,如果单机使用没问题,如果集群部署,那么就涉及到数据一致性问题,所以需要将内置derby修改为外部数据库MySQL
创建数据库
数据库sql脚本在下载的Nacos包中,具体路径见下图

修改Nacos配置
修改解压后目录/usr/local/nacos/nacos/conf/application.properties文件中如下配置
### If use MySQL as datasource:
spring.datasource.platform=mysql
### Count of DB:
db.num=1
### Connect URL of DB:
db.url.0=jdbc:mysql://10.20.30.13:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=www
db.password.0=123456
### Connection pool configuration: hikariCP
db.pool.config.connectionTimeout=30000
db.pool.config.validationTimeout=10000
db.pool.config.maximumPoolSize=20
db.pool.config.minimumIdle=2

验证
- 
启动Nacos 
- 
创建一个配置文件 ![image-20230221162128779]() 
- 
去MySQL中查询,配置已经存储到外部数据库 

Nacos服务高可用(集群部署)
集群架构图

环境要求
请确保是在环境中安装使用:
- 64 bit OS Linux/Unix/Mac,推荐使用Linux系统。
- 64 bit JDK 1.8+;[下载&配置]
- Maven 3.2.x+;下载.配置。
- 3个或3个以上Nacos节点才能构成集群。
集群搭建前准备
- 
预计搭建后架构样子 1个Nginx+3个Nacos注册中心 
- 
定义端口号 正常是多台物理机,用虚拟机就一台虚拟三个Nacos服务 8848、8748、8648 
复制解压出的nacos文件夹到下面三个目录中
重命名为Nacos8848\Nacos8748\Nacos8748,表示我要启动三个Nacos做集群
(就是上面单机版解压缩后的文件夹)
修改每个文件夹中Nacos配置文件
- 
将/usr/local/nacos/conf/cluster.conf.example复制一份,起名为cluster.conf 
- 
修改cluster.conf,配置内容如下(三个都) 注意:我是本机搭建三台Nacos模拟集群,所以此处端口号不可设置为8848\8847\8846等连号,因为Nacos集群使用grpc来通信,启动会默认占用三个端口,例如:8848启动后会默认启动8848、9848、9849 10.20.30.227:8848 10.20.30.227:8748 10.20.30.227:8648注意:配置ip必须是通过hostname -i可查到的 

- 
修改application.properties 注意:server.port要更改,并且要和第二步cluster.conf配置中的一致 ### Default web server port: server.port=8848 ### If use MySQL as datasource: spring.datasource.platform=mysql ### Count of DB: db.num=1 ### Connect URL of DB: db.url.0=jdbc:mysql://10.20.30.13:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC db.user.0=www db.password.0=123456
Nacos以集群模式启动
sh startup.sh
下图为官方文档说明

验证集群验证结果
- 
打开Nacos页面 
- 
查看集群管理->节点列表 ![image-20230222113114006]() 
Nginx代理Nacos集群
Nginx配置文件
    #此处配置上面集群Nacos地址
    upstream nacos_cluster{
        server 10.20.30.227:8848;
        server 10.20.30.227:8748;
        server 10.20.30.227:8648;
    }
    server {
        listen       9999;
        server_name  localhost;
        #charset koi8-r;
        #access_log  logs/host.access.log  main;
        location / {
	       proxy_set_header Host $http_host;
            #root   html;
            #index  index.html index.htm;
            proxy_pass http://nacos_cluster;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
访问Nginx验证代理结果
http://10.20.30.227:9999/nacos
将服务通过Nginx代理注册进Nacos
修改项目Yml文件,如下:
server:
  port: 8888
spring:
  profiles:
    active: dev #读取dev的配置
  application:
    name: service-consumer #注册到nacos的消费者名称
  cloud:
    nacos:
      discovery:
        server-addr: 10.20.30.227:9999 #修改为Nginx代理地址
 
                    
                     
                    
                 
                    
                
 







 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号