Nacos的集群搭建 和 服务配置中心的 使用
1. Nacos集群部署模式架构
在这里我们 搭建三台nacos作为nacos服务集群,一台nginx作反向代理,以及一台mysql作为集中式存储
2.搭建Nacos集群
在这里使用的是一台centos7 作为服务器
首先下载nacos linux版本,在这里我们用的是1.1.4版本
下载完解压即可
运行环境
注意!!!!! 记得把我们所用到的端口开放,虚拟机的话直接关闭防火墙也可以
2.1 配置mysql
mysql的安装 这里就不赘述了,如果未安装,自行百度。
思考一个问题,我们的三台nacos搭建的集群怎么保证数据都是一致的?
没台nacos都连接一个自己的数据库?添加数据时,每个数据库都添加数据?
假设此时一台nacos挂掉了,数据就无法写进他的数据库,那么数据还一致吗?
这样做,答案肯定是不一致的,好在nacos早就为我们处理好了这些可能遇到的问题,那就是上面我们提到的使用mysql集群作为集中式存储(在这里我们就使用一台mysql),此时我们的nacos集群的数据交给mysql集群即可,nacos暂时只支持Mysql数据库作为集中式存储
2.1.1Nacos 配置mysql为数据源
进入解压完的nacos 会看到这样的目录结构
我们进入conf文件夹 修改 application.properties
在下面添加 我们的mysql配置
db.url.0配置
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=Asia/Shanghai
注意 db.url中的数据库名称一定要为nacos_config
保存退出
2.1.2恢复nacos_config数据库
此时我们再conf目录下发现有个 nacos-mysql.sql
SQL脚本,这个就是我们需要恢复进我们mysql数据库的sql脚本,记住数据库名一定要为nacos_config
为什么?
我们来查看这个脚本
在sql文件中,已经给我们提示了,所以我们老老实实的按照要求来取数据库的名
下面的表名不用管,因为你恢复完数据库后发现 这张表已经存在了
2.2创建集群配置
在conf目录下,我们会看到一个cluster.conf.example
文件
我们复制 一份并且重命名为 cluster.conf
因为集群环境,nacos读取的是cluster.conf
文件
修改cluster.conf
在这里我们的三台nacos 端口分别是3333 4444 5555
前面不能填写127.0.0.1
前面填写的是你的hostname,在linux下输入hostname -i
即可查看
2.3修改启动脚本
找到 nacos的bin目录
因为默认不支持 不同端口 同时启动(默认8848端口)
我们需要修改启动脚本,可以做到不同端口同时启动
修改 startup.sh
(修改两处)
修改前1
修改后1
修改前2
修改后2
保存退出
2.4 启动集群
我们为了观察每次启动日志中的信息,我们新建复制xshell(在这里我使用的是xshell连接的centos7)会话,
找到nacos目录下的logs
目录
输入命令tail -f start.out
此时,我们可以在新建的会话中观察到nacos启动时的日志
接下来我们启动 3333端口的nacos,在我们第一个会话窗口中,找到nacos的bin目录,输入命令./startup.sh -p 3333
观察两侧变化
此时我们的3333端口nacos 就启动成功了
如果没有成功可以看下上面的配置那一步配错了
我们可以访问 这个端口的nacos测试下效果
在这里我的ip为 192.168.1.103, 所以访问 http://192.168.1.103:3333/nacos/
看到这个界面表示我们的3333端口nacos创建成功
那么4444 和 5555端口也一样
分别输入命令 ./startup.sh -p 4444
./startup.sh -p 5555
即可
等待我我们监视的日志提示成功 浏览器访问4444 5555的nacos成功 就ok啦
如果此时报错,有可能是内存分配不足,如果是在虚拟机跑的nacos 可以先关闭虚拟机,然后调大内存,我的虚拟机设置的内存是2G
此时,我们再思考一个问题:
集群搭建完毕了,但是我们的服务访问nacos时 需要根据每台nacos实例的ip来访问,这样做合理吗?
答案当然是不合理,既然做了集群,我们当然要做到负载均衡
所以,此时我们就可以使用nginx
做负载均衡啦~
2.5 配置Nginx
进入我们的nginx文件夹,找到conf
文件夹中的nginx.conf
文件,接下来我们就拿它开刀~
修改nginx.conf
(至于nginx负载均衡为什么这么写,学过nginx肯定知道,如果不明白就先翻阅下资料,在这里就不赘述了)
可以看到这里我们配的端口是 1111
如此,我们的nginx负载均衡搭建完毕!
接下来就是见证奇迹的时刻了,我们首先启动nginx
进入nginx的sbin目录,执行命令./nginx
在这里我的centos7 IP为 192.168.1.103
所以访问 http://192.168.1.103:1111/nacos/ 即可
看到如上页面,还不能完全确定我们搭建的nacos集群完全无误,我们登陆nacos控制台,账号密码默认都是nacos
如此,我们的nacos集群搭建正式结束~!
Nacos集群搭建好了,如何创建配置文件,其他微服务如何实时获取配置信息呢??
3.创建Nacos配置文件
这是我们的配置文件存放的地方,
我们思考两个问题:
那么我们得注意下Nacos的控制台界面了,
Namespace+group+data ID三者关系?为什么这么设计?
接下来创建我们的配置文件了,
我们假设 namespace分为 dev(开发) test(测试)
创建命名空间
此时呢,在每个namespace下存在DEV_GROUP 和 PROD_GROUP 两个组
选择dev命名空间,点➕号创建配置文件
配置文件文件的Data-id会在下面创建服务时讲解
此时我们再创建test命名空间的 PORD_GROUP分组的配置文件
4.创建 nacos-config-client 服务
4.1 搭建项目基础
pom
在这里springcloud-alibaba
使用的是2.1.0.RELEASE
版本,spring-boot
使用的是2.2.2.RELEASE
版本
<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>
yml
特别注意 在这里我们会创建两个配置文件bootstrap.yml
和 application.yml
bootstrap.yml
的优先级高于 application.yml
所以一般bootstrap.yml
用来获取配置中心的数据,而application.yml
配置的是该服务自己的数据
bootstrap配置
# nacos配置
server:
port: 3377
spring:
application:
name: nacos-config-client
cloud:
nacos:
discovery:
server-addr: 192.168.1.103:1111 #Nacos服务注册中心地址
config:
server-addr: 192.168.1.103:1111 #Nacos作为配置中心地址
file-extension: yaml #指定yaml格式的配置
namespace: 16575f36-b379-4a45-9a5d-fdd87a02631e #命名空间唯一标识符
group: DEV_GROUP
application.yml配置
spring:
profiles:
active: dev #加载配置文件的环境,这就是我们的Data-id 服务名后面跟的dev 两者相互对应
Data-id 的组成
${spring.application.name}-${spring.profile.active}.${spring.cloud.nacos.config.file-extension}
nacos-config-client-dev.yaml
主启动类
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
/**
* @author Xkuna
* @date 2020/8/14 15:37.
*/
@SpringBootApplication
@EnableDiscoveryClient
public class NacosConfigClientMain3377 {
public static void main(String[] args) {
SpringApplication.run(NacosConfigClientMain3377.class, args) ;
}
}
4.2 创建controller
注意添加 @RefreshScope才能保证服务不重启,配置实时刷新
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;
/**
* @author Xkuna
* @date 2020/8/14 15:39.
*/
@RestController
@RefreshScope
public class ConfigController {
@Value("${info}")
private String version ;
@GetMapping("/getConfig")
public String getConfig() {
return version ;
}
}
4.3 启动
查看Nacos控制台
访问 http://localhost:3377/getConfig
成功获取到 配置
此时我们不重启服务,修改下配置文件
version修改为2,我们重新访问 http://localhost:3377/getConfig
发现配置实时刷新了,一切ok~~
此时如果想获取我们test 命名空间的PROD_GROUP组的nacos-config-client-info.yaml
-
修改
bootstrap.yml
修改namespace 唯一标识符,修改grop为PROD_GROUP -
修改
application.yml
spring: profiles: active: info
我们再次访问 http://localhost:3377/getConfig
成功!
到这里,Nacos集群搭建以及服务实时获取配置文件 就完成了~~ ????
5. Linux版本的Nacos单机版启动注意事项
Nacos的Windows版本和 Nacos版本单机版启动是有区别的
-
windows版本启动默认单机版 直接启动即可 端口默认8848
-
linux版本启动默认是集群启动,自动读取Nacos目录下conf目录中的
cluster.conf
文件,默认这个文件不存在,所以会文件找不到的错误,如果想单机启动,输入命令./startup.sh -m standalone
即可, 端口默认8848
6.结束语
Nacos的使用上来看,搭建和配置相比Eureka,Hystrix 以及 springcloud-config和Bus 更加的方便
默默的说一句:Ali NB!!! ????????
Nacos服务注册在这里????:Nacos服务注册
上一篇: JMS之ActiveMQ(二):简单学习
下一篇: Nacos作为服务注册中心&配置中心实战