展开
拓展 关闭
订阅号推广码
GitHub
视频
公告栏 关闭

Nacos

<!--Spring cloud Hoxton.SR1-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-dependencies</artifactId>
    <version>${spring.cloud.version}</version>
    <type>pom</type>
    <scope>import</scope>
</dependency>
<!--Spring cloud alibaba 2.1.0.RELEASE-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-alibaba-dependencies</artifactId>
    <version>${spring.cloud.alibaba.version}</version>
    <type>pom</type>
    <scope>import</scope>
</dependency>

在之前的父工程中已经引入了cloud的依赖和cloud alibaba的依赖,这样既可以使用cloud的配置,也可以使用alibaba的配置

nacos等同于eureka+config+bus,可用来做服务注册中心、服务配置中心;具有AP特性,确保系统可用性
  • Nacos安装:
1.本地需jdk1.8+ 和maven3.2x+
2.下载后直接解压,进入bin目录打开cmd,输入startup.cmd启动;启动时报错需修改bin\strartup.cmd文件,详情查看:https://www.cnblogs.com/rookiemzl/p/13814919.html
3.访问http://localhost:8848/nacos,用户名、密码是nacos,进入nacos页面
  • 服务注册中心案例:
新建module:cloudalibaba-provicer-payment9001支付模块作为服务提供者,父工程pom引入cloud alibaba的依赖,9001的pom引入nacos的依赖(nacos集成了ribbon,等同于集成了负载均衡和RestTemplate)
yml中配置端口、服务名、nacos的ip+端口、暴露监控信息;启动类添加注解@EnableDiscoveryClient;编写业务类用于测试
测试:启动nacos、9001,可在nacos中看到9001服务
新建module:cloudalibaba-provicer-payment9002,除了端口外和9001相同,9001、9002作为服务提供者集群
新建module:cloudalibaba-consumer-nacos-order83订单模块,pom中引入nacos依赖,yml中配置端口、服务名、nacos的ip+端口、要访问的服务集群的名称
启动类添加注解@EnableDiscoveryClient;配置类注入RestTemplate,配置类添加注解@LoadBalanced
编写控制层,通过restTemplate调用支付模块集群的方法
测试:启动nacos、9001、9002、83,通过83的接口访问,可在nacos中查看到负载均衡访问支付集群

  • nacos有两种模式:AP、CP
切换:curl -X PUT '$NACOS SERVER:8848/nacos/v1/ns/operator/switches?entry=serverMode&value=CP'
  • 服务配置中心案例:
1. 新建cloudalibaba-config-nacos-client3377作为配置中心客户端,pom中拉取nacos-config依赖
2. 新建bootstrap.yml和application.yml,前者优先级高于后者;在bootstrap.yml中配置端口、服务名、nacos的ip+端口、指定配置文件后缀
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格式的配置
在application.yml中配置
Spring:
    profiles:
        active:  dev         # 开发环境
# 结合这两个yml配置,表示去localhost:8848配置中心服务端找nacos-config-client-dev.yaml

3. 启动类添加注解@EnableDiscoveryClient;编写一个业务接口用于测试,同时添加注解@RefreshScope用于动态刷新
4. 3377是配置客户端,nacos是配置服务端,在nacos页面中添加配置
4.1 新建配置文件

4.2 配置id,选择格式,具体配置内容

4.3 id的格式

4.4 错误

5. 测试,启动nacos、3377,3377可获取到nacos中的配置
  • nacos隔离方案
nacos的默认命名空间是public,如果有多个配置环境,可新建多个命名空间用于隔离
一个分组包含多个DataID,另一个分组中包含多个相同的DataID,这两个分组是两个集群可部署到不同的地区来容灾

DataID方案:默认命名空间+默认分组+多个DataID
Group方案:默认命名空间+多个分组中相同的DataID;3377获取时要配置group

Namespace方案:新建命令空间+不同组+不同DataID;3377获取时需配置namespace流水号、分组

Nacos默认自带的嵌入式数据库derby,所以我们在nacos上新建了yaml配置,重启后依然存在
  • Win10上nacos切换使用MySQL:
D:\Program Files\nacos\conf\nacos-mysql.sql          # 进入nacos的安装目录找到sql脚本,导入到MySQL

D:\Program Files\nacos\conf\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=root

重启nacos,这时使用的mysql数据库了
实际生产中通常会有多个nacos组成一个集群,服务注册或要获取nacos中的yaml,先通过nginx(负载、转发、高可用),再到nacos,最后数据存储到一个mysql数据库
环境配置:Linux、nginx、jdk、maven、nacos、mysql

  • 集群配置:Linux安装nacos
1. 本地已经安装好了jdk、maven
2. 将zip包解压到/usr/local/nacos目录
3. acos切换MySQL:
    nacos/conf/nacos-mysql.sql        # Linux启动并登录mysql,创建数据库nacos_config,找到该sql脚本,导入到mysql
    nacos/conf/application.properties        # 找到该配置文件,备份后修改,同样是添加数据源
    详情参考:https://blog.csdn.net/dagedeshu/article/details/109209157

4. 设置开机自启
vim /lib/systemd/system/nacos.service     # 创建并编辑 nacos.service 文件,添加内容如下:
[Unit]
Description=nacos
After=network.target
[Service]
Type=forking
ExecStart=/usr/local/nacos/bin/startup.sh -m standalone           # 注意这里是nacos命令所在路径
ExecReload=/usr/local/nacos/bin/shutdown.sh
ExecStop=/usr/local/nacos/bin/shutdown.sh
PrivateTmp=true
[Install]
WantedBy=multi-user.target

5. /usr/local/nacos/bin/startup.sh            # 找到改文件,使用文本编辑器打开,添加jdk路径;输入:$JAVA_HOME查看路径

6. 使配置生效
systemctl daemon-reload         # 重新加载所有service服务
systemctl enable nacos.service           # 开机启动nacos.service
systemctl is-enabled nacos.service           # 查看该service是否开机启用
systemctl start nacos.service           # 启动该服务
sh startup.sh -m standalone             # /nacos/bin   进入该目录,使用单例模式启动
systemctl status nacos.service            # 查看服务状态

7. 对外开放8848端口

8. 启动后在windows浏览器访问http://ip:8848/nacos/  进入nacos登录页面;若无法访问,关闭防火墙,使用单例模式启动,访问url写完整
安装详情可参考:https://blog.csdn.net/wangooo/article/details/109173780
  • 集群配置:梳理3台nacos,配置不同的端口号
1. hostname -i          # 查看当前ip

2. /nacos/conf/cluster.conf         # 找到该配置文件,备份后修改,注释原内容,新内容如下
ip:3333
ip:4444
ip:5555

3. 配置nacos启动脚本startup.sh,使能够启动不同端口
3.1 /nacos/bin/startup.sh     # 找到该配置文件

3.2 添加$JAVA -Dserver.port=${ PORT}

3.3 启动不同端口:./startup.sh -p 3333
  • 集群配置:nginx配置
/nginx/conf/nginx.conf         # 找到该配置文件
#gzip  on;
upstream cluster{        # 转发的地址,这里转发到3台nacos
    server 127.0.0.1:3333;
    server 127.0.0.1:4444;
    server 127.0.0.1:5555;
}
server {
    listen       1111;          # 对外暴露的端口
    server_name  localhost;
    location / {
        proxy_pass http://cluster;         # 转发地址的名称
    }
  • 集群配置:测试
nacos作为配置中心
    启动nginx,启动3台nacos
    ps -ef | grep nacos | grep -v grep|wc -l       # 查看nacos进程
    window浏览器访问:https://Linux系统的ip:1111/nacos         # 进入nacos页面
    新建一个配置,此时在Linux系统的mysql中,nacos-mysql库可查看到该配置

nacos作为服务注册中心
    例如9002模块注册进nacos集群
    修改9002模块的yml:server-addr: linux系统的ip:1111
    启动9002,可在nacos页面中显示注册进来的9002
  • 集群配置:业务逻辑
posted @ 2022-07-27 13:50  DogLeftover  阅读(45)  评论(0编辑  收藏  举报