Nacos服务注册中心

什么是Nacos?

一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。

TOC

一、安装配置Nacos

单机部署使用nacos包,群集部署使用docker。

1.单机部署Nacos

★单机准备工作★

安装包:nacos-server-2.2.2.tar.gz
nacos官网地址:https://nacos.io/zh-cn/index.html
安装好jdk环境(需要1.8以上的)

[root@test ~]# java -version
java version "1.8.0_333"
Java(TM) SE Runtime Environment (build 1.8.0_333-b02)
Java HotSpot(TM) 64-Bit Server VM (build 25.333-b02, mixed mode)

搭建好mysql,创建好nacos库以及nacos所需要的账号的密码

create database nacos character set utf8 collate utf8_bin;
grant all privileges on nacos.* to nacos@% identified by 'nacos123456.';

安装部署Nacos

1.解压nacos包

tar zxf nacos-server-2.2.2.tar.gz

2.导入nacos初始化的sql文件到nacos库
sql文件在conf/mysql-schema.sql

mysql -uroot -p123456 nacos <  mysql-schema.sql

3.配置nacos的配置文件以mysql为数据源

vim conf/application.properties
-------------------------------------
spring.datasource.platform=mysql
### Count of DB:
db.num=1
### Connect URL of DB:
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=nacos
db.password.0=nacos123456.

4.启动服务,脚本在bin/startup.sh

./startup.sh -m standalone

5.访问nacos管理页面,默认端口为8848
访问地址为:\http://127.0.0.1:8848/nacos(如下图所示)
nacos.001

2.docker部署Nacos群集

★群集部署准备工作★

nacos镜像:nacos/nacos-server:latest
mysql镜像:mysql:5.7.44
安装好docker环境以及所需要的docker镜像

docker version
[root@server]~# docker images |egrep 'nacos|mysql'
nacos/nacos-server    latest         d3063c1db2bb   7 weeks ago     820MB
mysql                 5.7.44         5107333e08a8   5 months ago    501MB

创建所需docker网络

docker network create -d bridge nacos

部署mysql和nacos群集

编写docker compose(如下所示)

# docker-compose.yaml
version: '3'

services:
  mysql-nacos:
    image: mysql:5.7.44
    container_name: mysql
    restart: unless-stopped
    ports:
      - 3306:3306
    command: --character-set-server=utf8mb4 --collation-server=utf8mb4_general_ci --explicit_defaults_for_timestamp=true --lower_case_table_names=1 --max_allowed_packet=128M
    environment:
      - "TZ=Asia/Shanghai"
      - "MYSQL_ROOT_PASSWORD=WC85roj5IfwOhIEK"
      - "MYSQL_DATABASE=nacos"
      - "MYSQL_USER=nacos"
      - "MYSQL_PASSWORD=3VHHbpPQa6b1o0i5"
    volumes:
      - "./mysql/data:/var/lib/mysql"
      - "./mysql/init:/docker-entrypoint-initdb.d"

  nacos-1:
    hostname: nacos-1
    image: nacos/nacos-server:latest
    ports:
      - "7848:7848"
      - "8848:8848"
      - "9848:9848"
      - "9849:9849"
    volumes:
      # - /etc/localtime:/etc/localtime:ro
      - ./logs/nacos1:/home/nacos/logs
      #- ./conf:/home/nacos/conf
    environment:
      - MODE=cluster
      - "NACOS_SERVERS=nacos-1:8848 nacos-2:8848 nacos-3:8848"
      - JVM_XMS=256m
      - JVM_XMX=512m
      - PREFER_HOST_MODE=hostname
      - SPRING_DATASOURCE_PLATFORM=mysql
      - MYSQL_SERVICE_HOST=mysql-nacos
      - MYSQL_SERVICE_PORT=3306
      - MYSQL_SERVICE_USER=nacos
      - MYSQL_SERVICE_PASSWORD=3VHHbpPQa6b1o0i5
      - MYSQL_SERVICE_DB_NAME=nacos
      - MYSQL_SERVICE_DB_PARAM=characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false&allowPublicKeyRetrieval=true
      - NACOS_AUTH_IDENTITY_KEY=test
      - NACOS_AUTH_IDENTITY_VALUE=Tr+mspxuzWBLC80StngpwUr6e13KwpBkMq4v6ab+Cu8=
      - NACOS_AUTH_TOKEN=SecretKey012345678901234567890123456789012345678901234567890123456789
    depends_on:
      - mysql-nacos
    restart: always

  nacos-2:
    hostname: nacos-2
    image: nacos/nacos-server:latest
    ports:
      - "7858:7848"
      - "8858:8848"
      - "9858:9848"
      - "9859:9849"
    volumes:
      # - /etc/localtime:/etc/localtime:ro
      - ./logs/nacos2:/home/nacos/logs
      #- ./conf:/home/nacos/conf
    environment:
      - MODE=cluster
      - "NACOS_SERVERS=nacos-1:8848 nacos-2:8848 nacos-3:8848"
      - JVM_XMS=256m
      - JVM_XMX=512m
      - PREFER_HOST_MODE=hostname
      - SPRING_DATASOURCE_PLATFORM=mysql
      - MYSQL_SERVICE_HOST=mysql-nacos
      - MYSQL_SERVICE_PORT=3306
      - MYSQL_SERVICE_USER=nacos
      - MYSQL_SERVICE_PASSWORD=3VHHbpPQa6b1o0i5
      - MYSQL_SERVICE_DB_NAME=nacos
      - MYSQL_SERVICE_DB_PARAM=characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false&allowPublicKeyRetrieval=true
      - NACOS_AUTH_IDENTITY_KEY=test
      - NACOS_AUTH_IDENTITY_VALUE=Tr+mspxuzWBLC80StngpwUr6e13KwpBkMq4v6ab+Cu8=
      - NACOS_AUTH_TOKEN=SecretKey012345678901234567890123456789012345678901234567890123456789
    depends_on:
      - mysql-nacos
    restart: always

  nacos-3:
    hostname: nacos-3
    image: nacos/nacos-server:latest
    ports:
      - "7868:7848"
      - "8868:8848"
      - "9868:9848"
      - "9869:9849"
    volumes:
      # - /etc/localtime:/etc/localtime:ro
      - ./logs/nacos3:/home/nacos/logs
      #- ./conf:/home/nacos/conf
    environment:
      - MODE=cluster
      - "NACOS_SERVERS=nacos-1:8848 nacos-2:8848 nacos-3:8848"
      - JVM_XMS=256m
      - JVM_XMX=512m
      - PREFER_HOST_MODE=hostname
      - SPRING_DATASOURCE_PLATFORM=mysql
      - MYSQL_SERVICE_HOST=mysql-nacos
      - MYSQL_SERVICE_PORT=3306
      - MYSQL_SERVICE_USER=nacos
      - MYSQL_SERVICE_PASSWORD=3VHHbpPQa6b1o0i5
      - MYSQL_SERVICE_DB_NAME=nacos
      - MYSQL_SERVICE_DB_PARAM=characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false&allowPublicKeyRetrieval=true
      - NACOS_AUTH_IDENTITY_KEY=test
      - NACOS_AUTH_IDENTITY_VALUE=Tr+mspxuzWBLC80StngpwUr6e13KwpBkMq4v6ab+Cu8=
      - NACOS_AUTH_TOKEN=SecretKey012345678901234567890123456789012345678901234567890123456789
    depends_on:
      - mysql-nacos
    restart: always

networks:
  default:
    name: nacos
    external: true

启动并导入所需初始化数据

docker compose up -d
mysql -unacos -p3VHHbpPQa6b1o0i5 nacos <  mysql-schema.sql

测试阶段

访问任何一个节点地址即可,访问http://127.0.0.1:8848/nacos,在群集管理里面可以查看节点信息(如下图所示)
nacos.002
我们创建一个配置测试一下
nacos.003
nacos.004
创建成功之后我们去mysql查看数据

SELECT data_id,group_id,content,gmt_create,gmt_modified,c_desc,type FROM config_info;

可以发现数据已经写进mysql(如下图所示)
nacos.005
我们换成nacos-2节点也就是本地的8858端口访问,发现也有显示创建的配置(如下图所示)
nacos.006
这里说明我们部署Nacos群集成功!!!