SpringCloudAlibaba服务治理-Nacos

Nacos简介

Nacos是SpringCloudAlibaba的一个组件,主要提供服务注册发现和配置管理等服务,等效于注册中心+配置中心

Nacos安装

从官网下载Nacos-1.2.0,解压后直接运行bin目录下的startup.cmd,命令运行成功后直接访问http://localhost:8848/nacos

image.png

默认的账户名和密码都是nacos

Nacos作为注册中心

1.引入依赖
pom.xml

        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>

2.在启动类上添加@EnableDiscoveryClient注解

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

3.配置yml
application.yml

server:
  port: 8001
spring:
  application:
    name: sword-provider
  cloud:
    nacos:
      discovery:
        # 添加nacos的注册地址
        server-addr: 127.0.0.1:8848

启动服务,刷新nacos页面


image.png

可以看到nacos服务列表中我们的微服务已经注册上去了

Nacos支持AP模式和CP模式的切换

AP:高可用和分区容忍性,如果不需要存储服务级别的信息,且服务实例都是通过nacos-client端注册,并且能够保持心跳的上报,那么选择AP模式
CP:强一致性和分区容忍性,如果需要在服务级别编辑和存储配置信息,那么CP是必须的,K8s服务和DNS服务适用于CP模式,该模式下注册实例之前必须先注册服务,如果服务不存在则报错
使用命令切换并启动nacos

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

Nacos作为配置中心

1.在pom.xml中添加依赖

        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>

2.在resource文件夹下创建bootstrap.yml
原因:在项目初始化时,先要从配置中心拉取配置才能保证程序正常启动,而SpringBoot中的配置文件是有加载顺序的,bootstrap先于application
bootstrap.yml

server:
  port: 8001
spring:
  application:
    name: sword-provider
  cloud:
    nacos:
      discovery:
        # 作为服务注册中心地址
        server-addr: 127.0.0.1:8848
      config:
        # 作为服务配置中心地址
        server-addr: 127.0.0.1:8848
        # 指定文件的扩展名为yaml
        file-extension: yaml

3.在application.yml中指定配置环境
application.yml

# 指定配置的环境
spring:
  profiles:
    active: dev

4.启动类配置

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

5.在naco的可视化界面中进行相关配置
dataId配置规则:

${pring.application.name}-${spring.profiles.active}.${file-extension}

参考如上规则,需要配置的文件名为sword-provider-dev.yaml,配置如下


image.png

点击提交即可
6.测试,我们可以在Controller中写一个方法来测试配置是否准确
其实服务能够启动成功,就说明配置应该就没有什么问题了,这里来测试能否获取到nacos中配置文件的值
ProviderController .java

    @Value("${info.name}")
    private String info;
    @GetMapping("info")
    public String getInfo(){
        return info;
    }

访问接口http://localhost:8001/provider/info,得到如下结果

image.png

7.服务配置的动态刷新
在上面一步中,我们已经能够获取到远程配置的值,但是此时如果更改了远程配置中的值,我们获取到的还是原来的值,说明当前情况下,我们无法获取到更新的配置,此时可以利用SpringCloud的@RefreshScope来实现配置自动更新

@RestController
@RequestMapping("provider")
@RefreshScope
public class ProviderController {
    @Value("${info.name}")
    private String info;
    @GetMapping("info")
    public String getInfo(){
        return info;
    }
}

重启服务后在nacos可视化配置界面更新info.name的值,再次访问接口,就能够及时获取到更新


image.png

Nacos中配置中心的命名空间、Group、和Data Id之间的关系

  • NameSpace:NameSpace默认的命名空间是public,主要用作开发环境之间的隔离,比如现在有三个环境:开发、测试、生产,那么就可以创建三个命名空间
  • Group:默认为DEFAULT_GROUP,可以把同一生产环境的不同微服务划分到一个组
  • Data Id:指向具体的配置名称
  • 归属应用:指定该配置归属于哪一个应用

通过NameSpace、Group、Data Id查找配置文件

1.在nacos配置中新增一个名为test的命名空间
2.然后在test命名空间下创建yaml配置,并且同时指定group

image.png

bootstrap.yml

server:
  port: 8001
spring:
  application:
    name: sword-provider
  cloud:
    nacos:
      discovery:
        # 作为服务注册中心地址
        server-addr: 127.0.0.1:8848
      config:
        # 作为服务配置中心地址
        server-addr: 127.0.0.1:8848
        # 指定文件的扩展名为yaml
        file-extension: yaml
        # 指定命名空间
        namespace: 9f6bb237-906c-4fbe-8698-4af61c973951
        # 指定组名
        group: TEST_GROUP

application.yml

# 指定配置的环境
spring:
  profiles:
    active: test

再次启动服务,通过接口可以查看到对应的配置信息

Nacos集群和持久化配置

Nacos使用嵌入式数据库实现数据存储,但支持mysql的集中存储,在生产过程中常使用nacos集群部署,来保证nacos的高可用

环境准备

Nginx集群+Nacos集群+Mysql主从(生产)
这里主要演示Nacos集群的搭建,所以就不再演示Nginx集群和Mysql主从搭建了

搭建Nginx

参考Nginx-主备集群搭建

搭建Mysql

参考Mysql-主从复制

搭建Nacos集群

1.下载安装nacos

cd /opt
# 下载
wget https://github.com/alibaba/nacos/releases/download/1.3.0/nacos-server-1.3.0.tar.gz
# 解压
tar -xvf nacos-server-1.3.0.tar.gz

2.mysql配置
去nacos/conf目录下找到nacos提供的nacos-mysql.sql文件
去mysql中执行sql脚本,完成相应的库表创建

3.application.properties配置(切换数据库)

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

4.nacos集群配置
最好先配置主机的hostname

vi /etc/hostname

编辑nacos/conf目录下的cluster.conf文件

192.168.10.251 8845
192.168.10.251 8846
192.168.10.251 8847

5.编辑启动脚本,使其可以根据不同的端口启动
进入到到nacos/bin目录下,编辑startup.sh,添加条件

image.png

调整内存大小
image.png

启动时设置端口
image.png

启动时通过-q参数指定端口

./startup.sh -q 8845
./startup.sh -q 8846
./startup.sh -q 8847

6.nginx负载均衡配置

image.png

更改完成后重启nginx
访问:http://192.168.10.251:8848/nacos/#/login
image.png

能够访问,说明Nacos集群搭建成功

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,128评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,316评论 3 388
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,737评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,283评论 1 287
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,384评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,458评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,467评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,251评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,688评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,980评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,155评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,818评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,492评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,142评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,382评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,020评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,044评论 2 352