源码安装
下载源码包
解压进入根目录,执行命令构建
mvn -Prelease-nacos clean install -U -Dmaven.test.skip=true
进入启动目录
cd distribution/target/nacos-server-2.0.3/nacos/bin
启动服务
sh startup.sh -m standalone
访问
http://localhost:8848/nacos 默认用户名密码为nacos
nacos集成Spring Boot实现服务注册与发现
创建一个Spring Boot web项目
添加maven依赖
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>nacos-discovery-spring-boot-starter</artifactId>
<version>0.2.4</version>
</dependency>
创建DiscoveryController类
通过@NacosInjected注解注入nacos得NamingService,并提供discovery方法,可以根据服务名称获得注册到nacos上的服务地址。
@RestController
public class DiscoveryController {
@NacosInjected
private NamingService namingService;
@GetMapping("/discovery")
public List<Instance> discovery(@RequestParam String serviceName) throws NacosException {
return namingService.getAllInstances(serviceName);
}
}
在application.properties中添加nacos服务地址的配置
nacos.discovery.server-addr=127.0.0.1:8848
启动项目测试
- 启动Spring Boot项目,调用
http://127.0.0.1:8080/discovery?serviceName=example去nacos服务器上查询服务名称example所对应的地址信息,此时nacos server并没有example的服务实例,返回一个空的JSON数组[]。 - 通过nacos提供的open api,向nacos server注册一个名字为example的服务。 curl -X POST 'http://127.0.0.1:8848/nacos/v1/ns/instance?serviceName=example&ip=127.0.0.1&port=8080'
- 再次访问
http://127.0.0.1:8080/discovery?serviceName=example,将返回如下信息
[
{
"instanceId": "127.0.0.1#8080#DEFAULT#DEFAULT_GROUP@@example",
"ip": "127.0.0.1",
"port": 8080,
"weight": 1.0,
"healthy": false,
"enabled": true,
"ephemeral": true,
"clusterName": "DEFAULT",
"serviceName": "DEFAULT_GROUP@@example",
"metadata": {
},
"instanceHeartBeatInterval": 5000,
"instanceHeartBeatTimeOut": 15000,
"ipDeleteTimeout": 30000,
"instanceIdGenerator": "simple"
}
]
nacos的高可用部署
nacos提供了类似于zookeeper的集群架构,包含一个leader节点和多个follower节点,和zookeeper不同的是,他的数据一致性算法采用的是Raft,同样采用该算法的中间件有Redis Sentinel的Leader选举,Etcd等。
安装环境
- 使用系统CentOS7.6
- JDK1.8及以上
- mysql 数据库
- 3个服务器,IP为 172.29.32.11 pnamenode11 172.29.32.12 pnamenode12 172.29.32.13 pdatanode13
下载安装包进行解压
- 此处使用
172.29.32.11服务器,下载zip安装包 wget github.com/alibaba/nac… - 解压 unzip nacos-server-2.0.3.zip
集群配置
进入conf目录cd nacos/conf/,包含以下文件:
- application.properties:Spring Boot项目默认的配置文件
- cluster.conf.example:集群配置样例文件
- nacos-mysql.sql:Mysql数据库脚本。nacos支持Derby和Mysql两种持久化机制,默认采用Derby数据库。如果使用Mysql,需要运行该脚本创建数据库和表。
- nacos-logback.xml:nacos日志配置文件。
配置nacos集群需要用过cluster.conf文件,使用cp cluster.conf.example cluster.conf复制提供的example文件,修改配置信息如下:
172.29.32.11:8848
172.29.32.12:8848
172.29.32.13:8848
配置Mysql数据库
Derby数据库是一种文件类型的数据库,在使用时会存在一定的局限性。比如他无法支持多用户同时操作,在数据量大、连接数多的情况下会产生大量连接的积压。所以在生产环境中,可以用Mysql替换。
- 执行nacos-mysql.sql初始化:此处我使用172.29.32.21上mysql数据库,新建nacos_config库后,运行该sql文件。
- 修改
application.properties文件,增加Mysql的配置如下:
spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://172.29.32.21:3306/nacos_config
db.user=root
db.password=123456
文件分发到另外俩台机器
把nacos文件夹分发到另外俩台服务器
scp -r /home/nacos root@172.29.32.12:/home/nacos
scp -r /home/nacos root@172.29.32.13:/home/nacos
启动nacos服务
进入bin目录,执行sh startup.sh命令启动服务。
服务启动成功后,可以在log目录下start.out获取启动日志
通过http://172.29.32.11:8848/nacos访问nacos控制台,在集群管理-节点列表下可以看到如图信息,表示当前集群由那些节点组成及节点的状态。
dubbo使用nacos实现注册中心
curl -X POST "http://172.29.32.11:8848/nacos/v1/cs/configs?dataId=example&group=DEFAULT_GROUP&content-info=Nacos Server Data:Hello World"