nacos

141 阅读3分钟

源码安装

下载源码包

github.com/alibaba/nac…

解压进入根目录,执行命令构建

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

启动项目测试

  1. 启动Spring Boot项目,调用http://127.0.0.1:8080/discovery?serviceName=example去nacos服务器上查询服务名称example所对应的地址信息,此时nacos server并没有example的服务实例,返回一个空的JSON数组[]。
  2. 通过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'
  3. 再次访问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

下载安装包进行解压

集群配置

进入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控制台,在集群管理-节点列表下可以看到如图信息,表示当前集群由那些节点组成及节点的状态。

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"