当前位置:网站首页>【Nacos云原生】阅读源码第一步,本地启动Nacos
【Nacos云原生】阅读源码第一步,本地启动Nacos
2022-07-05 12:38:00 【石臻臻的杂货铺】
前言
在我们去阅读Nacos源码之前,我们得先了解Nacos是干嘛的,以及怎么用,这样有利于我们更容易去理解源码;
查看Nacos的官方文档,我们知道Naocs主要有以下特性:
- 配置中心
- 服务注册与发现
- …
Nacos有给我们提供管理界面,用来方便配置数据;我们先把整个Nacos源码克隆下来,本地启动;熟悉一下如何使用它
启动Nacos项目
1.克隆Nacos源码
git clone https://github.com/alibaba/nacos.git
导入到Idea中
2.配置Mysql数据源
Nacos内置嵌入式derby数据库,但是它只适合开发测试中使用,也不利于我们观察数据;所以我们更改一下数据库为Mysql
在使用Mysql之前,需要先建立nacos_config的数据库sql文件在模块 distribution
中的conf/nacos-mysql.sql
; 执行一下这个文件;
在模块 nacos/distribution
中添加Mysql的配置文件
## 数据库为mysql
spring.datasource.platform=mysql
## 数据库编号 因为可能配置有多数据源 主从
db.num=1
db.url.0=jdbc:mysql://XX.XX.XXX.XX:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user.0=name
db.password.0=password
3.将项目打包发布
执行打包命令
mvn -Prelease-nacos clean install -U -Dmaven.test.skip=true
打包完毕,执行启动脚本
sh distribution/target/nacos-server-{version}/nacos/bin/startup.sh -m standalone
这里 -m standalon
e 表示单机模式启动,还有其他可选的参数有:
-f [config/naming]
启动模式 支持只启动某一个模块,config:配置中心; naming:服务注册与发现,不设置时所有模块都会启动-s 后面接服务包名字; 默认值是
nacos-server
就是可以指定启动的Jar包名;
检查启动是否成功
启动成功之后,就可以访问管理后台了
http://localhost:8848/nacos/index.html 登陆账户密码都是: nacos
登陆之后的管理后台
如果刚刚启动的时候加了参数 -f config
那么现在看到的只有配置管理和命名空间两个菜单栏了
使用的详细解释可以参考官方文档 控制台手册
Nacos配置中心数据库表结构说明
tenant_info 租户信息表(命名空间表)
Nacos 基于Namespace 帮助用户逻辑隔离多个命名空间,这可以帮助用户更好的管理测试、预发、生产等多环境服务和配置,让每个环境的同一个配置(如数据库数据源)可以定义不同的值。
这个命名空间的数据就是存在表 tenant_info
中
tenant_info
字段 | 备注 |
---|---|
id | 主键自增 |
kp | 定值1 |
tenant_id | 命名空间id,是一个UUID字符串 |
tenant_name | 命名空间名字 |
tenant_desc | 命名空间描述 |
create_source | 创建人 |
gmt_create | 创建时间 |
gmt_modified | 修改时间 |
(kp
,tenant_id
) 组成唯一约束
config_info 配置信息表
所有配置的数据都存在这个表中;
字段 | 描述 |
---|---|
id | 自增主键 |
data_id | 数据ID |
group_id | 组ID,默认DEFAULT_GROUP |
content | 配置内容,是一个longtext类型 |
md5 | content的md5 |
tenant_id | 租户ID,对应tenant_ino中的tenant_id |
app_name | 归属App名字 |
type | json、properties、text、xml等等格式 |
gmt_create | 创建时间 |
gmt_modified | 修改时间 |
c_desc | 描述 |
config_info_beta 灰度配置信息
Nacos中的灰度发布功能,如果点击了灰度发布,并且填写灰度发布的服务器Ip;信息会存储在这里;
字段 | 描述 |
---|---|
id | 主键自增 |
data_id | 数据id |
group_id | 组id |
app_name | 应用名称 |
content | 配置内容 |
beta_ips | 需要灰度发布的机器,如果ip在这里面,则会获取到这里面的配置信息 |
md5 | content的md5 |
tenant_id | 租户ID,就是不同的命名空间 |
gmt_create | 创建时间 |
gmt_modified | 修改时间 |
(data_id
,group_id
,tenant_id
) 组成唯一约束
config_tags_relation tag关系表
每个配置文件都可以打上tag标签; 这张表记录的是配置文件与tag的绑定关系
字段 | 描述 |
---|---|
id | 主键。 |
tag_name | 标签名字 |
tag_type | 标签类型 |
data_id | 数据id |
group_id | 组id |
tenant_id | 租户ID,就是不同的命名空间 |
nid | 主键自增长 |
(id
,tag_name
,tag_type
) 组成唯一约束
his_config_info 历史配置表
Nacos会把历史配置都会记录下来,用来方便回滚配置; 默认情况超过30天的记录会被删除;
字段 | 描述 |
---|---|
id | id |
nid | 主键,自增 |
data_id | 数据id |
group_id | 组id |
app_name | 应用名称 |
content | 配置内容 |
md5 | content的md5 |
tenant_id | 租户ID,就是不同的命名空间 |
gmt_create | 创建时间 |
gmt_modified | 修改时间 |
op_type | I、U、D 操作类型,增改删 |
如何本地调试Jar包方式启动的源码
由于上面的启动方式,我们可能不能进行本地Debug;但是我们可以在启动的时候开启Debug端口,通过远程监听Debug端口来进行Debug;
那么我们先修改一下启动脚本,打开调试端口修改
文件 distribution/target/nacos-server-{version}/nacos/bin/startup.sh
# 加入调试端口 6666调试端口随意设置
JAVA_DEBUG_OPTS="-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,address=6666,server=y,suspend=n"
echo "$JAVA ${JAVA_DEBUG_OPTS} ${JAVA_OPT} " > ${
BASE_DIR}/logs/start.out 2>&1 &
nohup $JAVA ${
JAVA_DEBUG_OPTS} ${
JAVA_OPT} nacos.nacos >> ${
BASE_DIR}/logs/start.out 2>&1 &
重新启动
先把项目停止sh distribution/target/nacos-server-{version}/nacos/bin/shutdown.sh
然后重新启动sh distribution/target/nacos-server-1.1.3/nacos/bin/startup.sh -m standalone
启动成功,检查调试端口是否打开
已经有一个6666的端口在LISTEN中了;
配置调试
在Idea中新建一个remote启动;
启动调试
启动调试; 打一个断点,然后管理后端操作一下;看下效果
调试成功
项目启动了,也调试成功了; 那么我们就可以方便的开始阅读源码了!
边栏推荐
- Simply take stock reading notes (1/8)
- Constructing expression binary tree with prefix expression
- Learn JVM garbage collection 05 - root node enumeration, security points, and security zones (hotspot)
- UNIX socket advanced learning diary -ipv4-ipv6 interoperability
- Master-slave mode of redis cluster
- Pytoch loads the initialization V3 pre training model and reports an error
- Implementing Yang Hui triangle with cyclic queue C language
- Using MySQL in docker
- Storage Basics
- Redis master-slave configuration and sentinel mode
猜你喜欢
Add a new cloud disk to Huawei virtual machine
Average lookup length when hash table lookup fails
Pytoch loads the initialization V3 pre training model and reports an error
About cache exceptions: solutions for cache avalanche, breakdown, and penetration
I met Tencent in the morning and took out 38K, which showed me the basic smallpox
stm32和电机开发(从架构图到文档编写)
How to connect the API interface of Taobao open platform (super detailed)
The relationship between the size change of characteristic graph and various parameters before and after DL convolution operation
Migrate data from Mysql to neo4j database
Comprehensive upgrade of Taobao short video photosynthetic platform
随机推荐
Kotlin function
Resnet+attention project complete code learning
Resnet18 actual battle Baoke dream spirit
Taobao order amount check error, avoid capital loss API
Pytoch counts the number of the same elements in the tensor
Docker configures redis and redis clusters
Implementing Yang Hui triangle with cyclic queue C language
Learning items
Distributed cache architecture - cache avalanche & penetration & hit rate
Detailed steps for upgrading window mysql5.5 to 5.7.36
Redis clean cache
Knowledge representation (KR)
上午面了个腾讯拿 38K 出来的,让我见识到了基础的天花
View and terminate the executing thread in MySQL
HiEngine:可媲美本地的云原生内存数据库引擎
Leetcode-1. Sum of two numbers (Application of hash table)
Pytoch implements tf Functions of the gather() function
MySQL log module of InnoDB engine
Learn the memory management of JVM 03 - Method area and meta space of JVM
Pytoch uses torchnet Classerrormeter in meter