41、nacos单机以及集群配置

nacos单机以及集群配置

    • 安装准备
    • 一、前言
    • 二、单机模式(standalone)
    • 三、集群搭建(cluster)
    • 四、添加配置文件
    • 五、添加配置文件

安装准备

1、下载库
从Github 上拉取Nacos Github最新版(地址:https://github.com/alibaba/nacos)。

2、本地解压

tar -zxvf nacos-server-1.1.3.tar.gz

解压后目录说明如下:

  • List item
  • bin目录主要是运行的脚本
  • conf是配置文件
  • data是数据存储的地方,之后会替换mysql来持久配置数据
  • logs是日志输出
  • plugins是插件
  • target包括了主要的jar包

3、本地安装jdk环境
只需要下载JDK,然后配置JDK解压路径即可

tar -zxvf jdk-8u161-linux-x64.tar.gz -C /usr/local/
ln -s /usr/local/jdk1.8.0_161/ /usr/local/java
vim /etc/profile

添加内容

export JAVA_HOME=/usr/local/java/
export JRE_HOME=${JAVA_HOME}/jre
export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin

使用环境变量配置

source /etc/profile

一、前言

Nacos支持三种部署模式

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

二、单机模式(standalone)

进入解压后目录bin。
windows使用命令行启动或双击启动即可

startup.cmd

41、nacos单机以及集群配置_第1张图片
linux下使用sh启动startup.sh,注意添加standalone非集群启动参数

bash startup.sh -m standalone

linux查看启动进程

jps

在这里插入图片描述
浏览器测试
41、nacos单机以及集群配置_第2张图片
如果启动错误,请查看启动日志(解压所在目录/logs)

cat ../logs/start.out

启动后打开浏览器访问对应主页

http://localhost:8848/nacos/index.html

默认的用户名和面都是:nacos
41、nacos单机以及集群配置_第3张图片

三、集群搭建(cluster)

这里的集群环境为:

192.168.12.113
192.168.12.114
192.168.12.115

保持默认端口8848即可,根据官方文档的介绍,Nacos的集群架构大致如下图所示(省略了集中化存储信息的MySQL)
41、nacos单机以及集群配置_第4张图片
(1)安装配置
同理,解压nacos,进入conf目录进行集群配置

cd /opt/nacos/conf
cp cluster.conf.example cluster.conf
vim cluster.conf

添加内容

192.168.12.113:8848
192.168.12.114:8848
192.168.12.115:8848

41、nacos单机以及集群配置_第5张图片
其他机器做同样处理(当然以上做真实的集群环境,如果在一台机器上做伪分布是集群可以端口不一致,默认端口8848)

(2)创建nacos数据库
首先在我们nacos存储信息的数据库中创建对应数据库nacos_config,如下所示
41、nacos单机以及集群配置_第6张图片
然后在conf目录下找到nacos-mysql.sql文件,在对应数据库中执行该脚本41、nacos单机以及集群配置_第7张图片
执行完成后生成对应表信息
41、nacos单机以及集群配置_第8张图片
配置conf/application.properties文件(该文件是配置nacos服务的启动信息,包括端口、数据库信息-其实就是一个典型的springboot项目),增加数据库配置(所有机器)

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

(3)启动三台nacos后台服务

bash startup.sh

(4)关闭防火墙或打开8848端口

systemctl stop firewalld
systemctl enable firewalld

四、添加配置文件

(1)浏览器输入地址

http://服务器地址:8848/nacos/index.html

个人研究过很多方案,目前使用的是通过namespace来分隔环境的配置方式,就是创建多套namespace,进入nacos后台服务配置页面,点击右侧的新建配置按钮
41、nacos单机以及集群配置_第9张图片
在弹出的新建配置中填写默认参数
41、nacos单机以及集群配置_第10张图片
默认会添加到默认存在的public命名空间中
41、nacos单机以及集群配置_第11张图片
我们也可以新建自己的命名空间,来区分不同的环境的配置,如开发环境、生产环境以及测试环境等,选择:服务管理-命令空间–新建命名空间
41、nacos单机以及集群配置_第12张图片
新建如下所示
41、nacos单机以及集群配置_第13张图片
最终创建列表如下
41、nacos单机以及集群配置_第14张图片
配置文件列表多了3个命令空间,我们可以往对应命令空间创建对应配置文件
41、nacos单机以及集群配置_第15张图片
此时我们查看113、114、115三台机器的nacos,都可以看到对应的命令空间记录
41、nacos单机以及集群配置_第16张图片
41、nacos单机以及集群配置_第17张图片
对应数据库记录也可以查看得到
41、nacos单机以及集群配置_第18张图片
此时bootstrap.properties(yml)文件指定命名空间如下

#服务器地址
spring.cloud.nacos.config.server-addr=127.0.01:8848
#namespace 注意这里是nacos生成的字符串而不是dev
spring.cloud.nacos.config.namespace=c2b7d8a1-8ac7-4ebe-8511-e3bd4d976989

#第一组配置(common配置是公共属性 数据库、redis、mq等,dev全局一套)
spring.cloud.nacos.config.ext-config[0].data-id=dys-develop.yaml
spring.cloud.nacos.config.ext-config[0].group=common-config

#业务模块配置(独立配置属性)
spring.cloud.nacos.config.ext-config[1].data-id=member.yaml
spring.cloud.nacos.config.ext-config[1].group=member-config

#动态刷新
spring.cloud.nacos.config.ext-config[1].refresh=true

(2)配置nginx
由于113、114、115都是集群的终端节点,为了解决单点故障问题,我们必须配置nginx进行负载和解决单点,这里的nginx的安装我不在讲述(只需要解压,添加环境变量即可),主要进行nginx的配置,nginx的常用命令如下

nginx  #启动nginx
nginx -s quit  #快速停止nginx
nginx -V #查看版本,以及配置文件地址
nginx -v #查看版本
nginx -s reload|reopen|stop|quit   #重新加载配置|重启|快速停止|安全关闭nginx
nginx -h #帮助

修改配置

vim /usr/local/etc/nginx/nginx.conf

配置反向代理

upstream nacosserver{
    server 192.168.12.113:8848;
    server 192.168.12.114:8848;
    server 192.168.12.115:8848;
}

server{
    listen        8080;
    server_name    localhost;
    
    location / {
        root    html;
        index    index.html index.htm;
    }
    
    location /nacos/ {
        proxy_pass    http://nacosserver/nacos/;
    }
    
}

执行 nginx -s reload 重新加载配置运行,再次访问

http://localhost:8080/nacos/#/login

即可访问Nacos服务

五、添加配置文件

(1)基于dataid为properties的文件扩展名的配置方式
启动好Nacos之后,在Nacos添加如下的配置

Data ID: nacos-config.properties
Group : DEFAULT_GROUP
配置格式: Properties
配置内容: user.name=nacos-config-properties
user.age=90

41、nacos单机以及集群配置_第19张图片
如果要在您的项目中使用 Nacos 来实现应用的外部化配置,使用 group ID 为 com.alibaba.cloud 和 artifact ID 为 spring-cloud-starter-alibaba-nacos-config 的 starter。


	com.alibaba.cloud
	spring-cloud-starter-alibaba-nacos-config

现在就可以创建一个标准的 Spring Boot 应用

@SpringBootApplicationpublic class ProviderApplication {

public static void main(String[] args) {
    	ConfigurableApplicationContext applicationContext = SpringApplication.run(ProviderApplication.class, args);
    	String userName = applicationContext.getEnvironment().getProperty("user.name");
    	String userAge = applicationContext.getEnvironment().getProperty("user.age");
    	System.err.println("user name :"+userName+"; age: "+userAge);
    }
}

在运行此 Example 之前, 必须使用 bootstrap.properties 配置文件来配置Nacos Server 地址,例如bootstrap.properties:

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

注意: 当你使用域名的方式来访问 Nacos 时,spring.cloud.nacos.config.server-addr 配置的方式为
域名:port。 例如 Nacos 的域名为abc.com.nacos,监听的端口为 80,则
spring.cloud.nacos.config.server-addr=abc.com.nacos:80。 注意 80 端口不能省略

(2)基于dataid 为 yaml 的文件扩展名配置方式
spring-cloud-starter-alibaba-nacos-config 对于 yaml 格式也是完美支持的。这个时候只需要完成以下两步:
A、在应用的 bootstrap.properties 配置文件中显示的声明 dataid 文件扩展名。如下所示bootstrap.properties

spring.cloud.nacos.config.file-extension=yaml

B、在 Nacos 的控制台新增一个dataid为yaml为扩展名的配置,如下所示:

Data ID: nacos-config.yaml
Group : DEFAULT_GROUP
配置格式: YAML
配置内容: user.name: nacos-config-yaml
user.age: 68

41、nacos单机以及集群配置_第20张图片
注意配置内容中的“=”变为了“:”

(3)支持配置的动态更新
spring-cloud-starter-alibaba-nacos-config 也支持配置的动态更新,启动 Spring Boot 应用测试的代码如下:

@SpringBootApplicationpublic class ProviderApplication {

public static void main(String[] args) {
	ConfigurableApplicationContext applicationContext = SpringApplication.run(ProviderApplication.class, args);
	while(true) {
		//当动态配置刷新时,会更新到 Enviroment中,因此这里每隔一秒中从Enviroment中获取配置
		String userName = applicationContext.getEnvironment().getProperty("user.name");
		String userAge = applicationContext.getEnvironment().getProperty("user.age");
		System.err.println("user name :" + userName + "; age: " + userAge);
		TimeUnit.SECONDS.sleep(1);
  	}
}
}

如下所示,当变更user.name时,应用程序中能够获取到最新的值:

user name :nacos-config-yaml; age: 68
user name :nacos-config-yaml; age: 68
user name :nacos-config-yaml; age: 68
2018-11-02 15:04:25.069 INFO 32957 --- [-127.0.0.1:8848] o.s.boot.SpringApplication : Started application in 0.144 seconds (JVM running for 71.752)
2018-11-02 15:04:25.070 INFO 32957 --- [-127.0.0.1:8848] s.c.a.AnnotationConfigApplicationContext : Closing org.springframework.context.annotation.AnnotationConfigApplicationContext@10c89124: startup date [Fri Nov 02 15:04:25 CST 2018]; parent: org.springframework.context.annotation.AnnotationConfigApplicationContext@6520af7
2018-11-02 15:04:25.071 INFO 32957 --- [-127.0.0.1:8848] s.c.a.AnnotationConfigApplicationContext : Closing org.springframework.context.annotation.AnnotationConfigApplicationContext@6520af7: startup date [Fri Nov 02 15:04:24 CST 2018]; root of context hierarchy
//从 Enviroment 中 读取到更改后的值
user name :nacos-config-yaml-update; age: 68
user name :nacos-config-yaml-update; age: 68

注意:你可以通过配置 spring.cloud.nacos.config.refresh.enabled=false 来关闭动态刷新

(4)可支持profile粒度的配置
spring-cloud-starter-alibaba-nacos-config 在加载配置的时候,不仅仅加载了以 dataid 为
s p r i n g . a p p l i c a t i o n . n a m e . {spring.application.name}. spring.application.name.{file-extension:properties}
为前缀的基础配置,还加载了dataid为
s p r i n g . a p p l i c a t i o n . n a m e − {spring.application.name}- spring.application.name{profile}.${file-extension:properties}
的基础配置。在日常开发中如果遇到多套环境下的不同配置,可以通过Spring 提供的 ${spring.profiles.active} 这个配置项来配置。

spring.profiles.active=develop

注意:${spring.profiles.active} 当通过配置文件来指定时必须放在 bootstrap.properties 文件中。
Nacos 上新增一个dataid为:nacos-config-develop.yaml的基础配置,如下所示:

Data ID: nacos-config-develop.yaml
Group : DEFAULT_GROUP
配置格式: YAML
配置内容: current.env: develop-env

启动 Spring Boot 应用测试的代码如下:

@SpringBootApplicationpublic class ProviderApplication {

public static void main(String[] args) {
	ConfigurableApplicationContext applicationContext = SpringApplication.run(ProviderApplication.class, args);
	while(true) {
		String userName = applicationContext.getEnvironment().getProperty("user.name");
		String userAge = applicationContext.getEnvironment().getProperty("user.age");
		//获取当前部署的环境
		String currentEnv = applicationContext.getEnvironment().getProperty("current.env");
		System.err.println("in "+currentEnv+" enviroment; "+"user name :" + userName + "; age: " + userAge);
		TimeUnit.SECONDS.sleep(1);
	}
  }
}

启动后,可见控制台的输出结果:

in develop-env enviroment; user name :nacos-config-yaml-update; age: 68
2018-11-02 15:34:25.013 INFO 33014 --- [ Thread-11] ConfigServletWebServerApplicationContext : Closing org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@6f1c29b7: startup date [Fri Nov 02 15:33:57 CST 2018]; parent: org.springframework.context.annotation.AnnotationConfigApplicationContext@63355449

注意:这里应用程序的名称为:spring.application.name=nacos-config,所以命中配置文件:nacos-config-develop.yaml

如果需要切换到生产环境,只需要更改 ${spring.profiles.active} 参数配置即可。如下所示:

spring.profiles.active=product

同时生产环境上 Nacos 需要添加对应 dataid 的基础配置。例如,在生成环境下的 Naocs 添加了dataid为:nacos-config-product.yaml的配置:

Data ID: nacos-config-product.yaml
Group : DEFAULT_GROUP
配置格式: YAML
配置内容: current.env: product-env

注意: 此案例中我们通过 spring.profiles.active=
的方式写死在配置文件中,而在真正的项目实施过程中这个变量的值是需要不同环境而有不同的值。这个时候通常的做法是通过 -Dspring.profiles.active= 参数指定其配置来达到环境间灵活的切换。

(5)支持自定义 namespace 的配置
首先看一下 Nacos 的 Namespace 的概念

用于进行租户粒度的配置隔离。不同的命名空间下,可以存在相同的 Group 或 Data ID 的配置。Namespace 的常用场景之一是不同环境的配置的区分隔离,例如开发测试环境和生产环境的资源(如配置、服务)隔离等。

在没有明确指定 ${spring.cloud.nacos.config.namespace} 配置的情况下, 默认使用的是 Nacos 上 Public 这个namespae。如果需要使用自定义的命名空间,可以通过以下配置来实现:

spring.cloud.nacos.config.namespace=b3404bc0-d7dc-4855-b519-570ed34b62d7

注意:
该配置必须放在 bootstrap.properties 文件中。此外
spring.cloud.nacos.config.namespace 的值是 namespace 对应的 id,id 值可以在 Nacos的控制台获取。并且在添加配置时注意不要选择其他的 namespae,否则将会导致读取不到正确的配置。

(6)支持自定义 Group 的配置
在没有明确指定 ${spring.cloud.nacos.config.group} 配置的情况下, 默认使用的是 DEFAULT_GROUP 。如果需要自定义自己的 Group,可以通过以下配置来实现:

spring.cloud.nacos.config.group=DEVELOP_GROUP

注意: 该配置必须放在 bootstrap.properties 文件中。并且在添加配置时 Group 的值一定要和
spring.cloud.nacos.config.group 的配置值一致。

(7)支持自定义扩展的 Data Id 配置
Spring Cloud Alibaba Nacos Config 从 0.2.1 版本后,可支持自定义 Data Id 的配置。关于这部分详细的设计可参考 这里。 一个完整的配置案例如下所示:

pring.application.name=opensource-service-provider
spring.cloud.nacos.config.server-addr=127.0.0.1:8848

# config external configuration# 1、Data Id 在默认的组 DEFAULT_GROUP,不支持配置的动态刷新
spring.cloud.nacos.config.ext-config[0].data-id=ext-config-common01.properties

# 2、Data Id 不在默认的组,不支持动态刷新
spring.cloud.nacos.config.ext-config[1].data-id=ext-config-common02.properties
spring.cloud.nacos.config.ext-config[1].group=GLOBALE_GROUP

# 3、Data Id 既不在默认的组,也支持动态刷新
spring.cloud.nacos.config.ext-config[2].data-id=ext-config-common03.properties
spring.cloud.nacos.config.ext-config[2].group=REFRESH_GROUP
spring.cloud.nacos.config.ext-config[2].refresh=true

可以看到:

  • 通过 spring.cloud.nacos.config.ext-config[n].data-id 的配置方式来支持多个 Data Id 的配置。
  • 通过 spring.cloud.nacos.config.ext-config[n].group 的配置方式自定义 Data Id 所在的组,不明确配置的话,默认是 DEFAULT_GROUP。
  • 通过 spring.cloud.nacos.config.ext-config[n].refresh 的配置方式来控制该 Data Id 在配置变更时,是否支持应用中可动态刷新, 感知到最新的配置值。默认是不支持的。

注意:
(1)多个 Data Id 同时配置时,他的优先级关系是 spring.cloud.nacos.config.ext-config[n].data-id 其中 n 的值越大,优先级越高。
(2)spring.cloud.nacos.config.ext-config[n].data-id 的值必须带文件扩展名,文件扩展名既可支持 properties,又可以支持 yaml/yml。 此时 spring.cloud.nacos.config.file-extension 的配置对自定义扩展配置的 Data Id 文件扩展名没有影响。
(3)通过自定义扩展的 Data Id 配置,既可以解决多个应用间配置共享的问题,又可以支持一个应用有多个配置文件。

为了更加清晰的在多个应用间配置共享的 Data Id ,你可以通过以下的方式来配置:

#同时配置多个配置文件
spring.cloud.nacos.config.shared-dataids=bootstrap-common.properties,all-common.properties
#指定哪些需要刷新通知
spring.cloud.nacos.config.refreshable-dataids=bootstrap-common.properties

可以看到:

  • 通过 spring.cloud.nacos.config.shared-dataids 来支持多个共享 Data Id 的配置,多个之间用逗号隔开。
  • 通过 spring.cloud.nacos.config.refreshable-dataids 来支持哪些共享配置的 Data Id 在配置变化时,应用中是否可动态刷新, 感知到最新的配置值,多个 Data Id 之间用逗号隔开。如果没有明确配置,默认情况下所有共享配置的 Data Id 都不支持动态刷新。

注意:
A、通过 spring.cloud.nacos.config.shared-dataids 来支持多个共享配置的 Data Id 时, 多个共享配置间的一个优先级的关系我们约定:按照配置出现的先后顺序,即后面的优先级要高于前面。
B、通过 spring.cloud.nacos.config.shared-dataids 来配置时,Data Id 必须带文件扩展名,文件扩展名既可支持 properties,也可以支持 yaml/yml。 此时 spring.cloud.nacos.config.file-extension 的配置对自定义扩展配置的 Data Id 文件扩展名没有影响。
C、spring.cloud.nacos.config.refreshable-dataids 给出哪些需要支持动态刷新时,Data Id 的值也必须明确给出文件扩展名

(8)配置的优先级
Spring Cloud Alibaba Nacos Config 目前提供了三种配置能力从 Nacos 拉取相关的配置。

  • A: 通过 spring.cloud.nacos.config.shared-dataids 支持多个共享 Data Id 的配置
  • B: 通过 spring.cloud.nacos.config.ext-config[n].data-id 的方式支持多个扩展 Data Id 的配置
  • C: 通过内部相关规则(应用名、应用名+ Profile )自动生成相关的 Data Id 配置
    当三种方式共同使用时,他们的一个优先级关系是:A < B < C

(9)完全关闭配置
通过设置 如下标识来完全关闭 Spring Cloud Nacos Config

spring.cloud.nacos.config.enabled = false

你可能感兴趣的:(大数据)