目录
服务发现和服务健康监测
nacos主要用于服务发现和配置管理,Nacos提供了一些简单易用的特性集,帮助我们快速实现动态的服务发现、服务配置、服务元数据和流量管理。
nacos的关键特性主要包括服务发现和服务健康检测,支持dns和rpc的服务发现,提供对服务的实时监控,阻止向不健康的主机或服务实例发送请求。
nacos支持传输层(ping或tcp)和应用层(如http、mysql、用户自定义)的健康检查。
nacos还提供了统一的健康检查仪表盘,帮助您根据健康状态管理服务的可用性及流量。
动态配置
动态配置服务,可以让应用配置和服务配置,具备中心化、外部化、动态化,更方便管理。
动态配置消除了配置变更后,需要重新部署应用的问题,让应用可以在不重启的情况下,进行配置更新。
配置中心化管理让实现无状态服务变得更简单,让服务按需弹性扩展变得更容易。
nacos提供了可视化操作界面,配置参数可以实时看到,方便管理。提供了版本跟踪、版本对比,一键回滚。
动态DNS服务
动态dns服务支持权重路由,让您更容易地实现中间层负载均衡、更灵活的路由策略、流量控制以及数据中心内网的简单DNS解析服务。动态DNS服务还能让您更容易地实现从DNS协议为基础的服务发现。
下载与安装
nacos github地址是 https://github.com/alibaba/nacos/release
选择相应版本,我这里选择linux版本,解压即可。
启动
单机模式
进入bin目录,执行命令 sh startup.sh -m standalone ,这是单机模式下运行。
访问服务器8848端口,如果是阿里云服务器,注意要添加安全组端口,外网才能访问。
访问nacos,http://localhost:8848/nacos/
nacos默认登录账号和密码是nacos
集群模式
1.准备三台端口不同,配置一样的nacos
2.修改配置文件cluster.conf,修改集群ip
3.修改nacos的application.properties的数据库连接信息,这里只列举修改部分
server.servlet.contextPath=/nacos
spring.datasource.platform=mysql
db.num=1
db.url=jdbc:mysql://127.0.0.1:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC db.user=root db.password=123456
4.创建数据库,创建表
/**************/ /* 数据库全名 = nacos_config / / 表名称 = config_info */ /**************/ CREATE TABLE config_info
( id
bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id', data_id
varchar(255) NOT NULL COMMENT 'data_id', group_id
varchar(255) DEFAULT NULL, content
longtext NOT NULL COMMENT 'content', md5
varchar(32) DEFAULT NULL COMMENT 'md5', gmt_create
datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '创建时间', gmt_modified
datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '修改时间', src_user
text COMMENT 'source user', src_ip
varchar(20) DEFAULT NULL COMMENT 'source ip', app_name
varchar(128) DEFAULT NULL, tenant_id
varchar(128) DEFAULT '' COMMENT '租户字段', c_desc
varchar(256) DEFAULT NULL, c_use
varchar(64) DEFAULT NULL, effect
varchar(64) DEFAULT NULL, type
varchar(64) DEFAULT NULL, c_schema
text, PRIMARY KEY (id
), UNIQUE KEY uk_configinfo_datagrouptenant
(data_id
,group_id
,tenant_id
) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_info';
/**************/ /* 数据库全名 = nacos_config / / 表名称 = config_info_aggr */ /**************/ CREATE TABLE config_info_aggr
( id
bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id', data_id
varchar(255) NOT NULL COMMENT 'data_id', group_id
varchar(255) NOT NULL COMMENT 'group_id', datum_id
varchar(255) NOT NULL COMMENT 'datum_id', content
longtext NOT NULL COMMENT '内容', gmt_modified
datetime NOT NULL COMMENT '修改时间', app_name
varchar(128) DEFAULT NULL, tenant_id
varchar(128) DEFAULT '' COMMENT '租户字段', PRIMARY KEY (id
), UNIQUE KEY uk_configinfoaggr_datagrouptenantdatum
(data_id
,group_id
,tenant_id
,datum_id
) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='增加租户字段';
/**************/ /* 数据库全名 = nacos_config / / 表名称 = config_info_beta */ /**************/ CREATE TABLE config_info_beta
( id
bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id', data_id
varchar(255) NOT NULL COMMENT 'data_id', group_id
varchar(128) NOT NULL COMMENT 'group_id', app_name
varchar(128) DEFAULT NULL COMMENT 'app_name', content
longtext NOT NULL COMMENT 'content', beta_ips
varchar(1024) DEFAULT NULL COMMENT 'betaIps', md5
varchar(32) DEFAULT NULL COMMENT 'md5', gmt_create
datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '创建时间', gmt_modified
datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '修改时间', src_user
text COMMENT 'source user', src_ip
varchar(20) DEFAULT NULL COMMENT 'source ip', tenant_id
varchar(128) DEFAULT '' COMMENT '租户字段', PRIMARY KEY (id
), UNIQUE KEY uk_configinfobeta_datagrouptenant
(data_id
,group_id
,tenant_id
) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_info_beta';
/**************/ /* 数据库全名 = nacos_config / / 表名称 = config_info_tag */ /**************/ CREATE TABLE config_info_tag
( id
bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id', data_id
varchar(255) NOT NULL COMMENT 'data_id', group_id
varchar(128) NOT NULL COMMENT 'group_id', tenant_id
varchar(128) DEFAULT '' COMMENT 'tenant_id', tag_id
varchar(128) NOT NULL COMMENT 'tag_id', app_name
varchar(128) DEFAULT NULL COMMENT 'app_name', content
longtext NOT NULL COMMENT 'content', md5
varchar(32) DEFAULT NULL COMMENT 'md5', gmt_create
datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '创建时间', gmt_modified
datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '修改时间', src_user
text COMMENT 'source user', src_ip
varchar(20) DEFAULT NULL COMMENT 'source ip', PRIMARY KEY (id
), UNIQUE KEY uk_configinfotag_datagrouptenanttag
(data_id
,group_id
,tenant_id
,tag_id
) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_info_tag';
/**************/ /* 数据库全名 = nacos_config / / 表名称 = config_tags_relation */ /**************/ CREATE TABLE config_tags_relation
( id
bigint(20) NOT NULL COMMENT 'id', tag_name
varchar(128) NOT NULL COMMENT 'tag_name', tag_type
varchar(64) DEFAULT NULL COMMENT 'tag_type', data_id
varchar(255) NOT NULL COMMENT 'data_id', group_id
varchar(128) NOT NULL COMMENT 'group_id', tenant_id
varchar(128) DEFAULT '' COMMENT 'tenant_id', nid
bigint(20) NOT NULL AUTO_INCREMENT, PRIMARY KEY (nid
), UNIQUE KEY uk_configtagrelation_configidtag
(id
,tag_name
,tag_type
), KEY idx_tenant_id
(tenant_id
) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_tag_relation';
/**************/ /* 数据库全名 = nacos_config / / 表名称 = group_capacity */ /**************/ CREATE TABLE group_capacity
( id
bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID', group_id
varchar(128) NOT NULL DEFAULT '' COMMENT 'Group ID,空字符表示整个集群', quota
int(10) unsigned NOT NULL DEFAULT '0' COMMENT '配额,0表示使用默认值', usage
int(10) unsigned NOT NULL DEFAULT '0' COMMENT '使用量', max_size
int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个配置大小上限,单位为字节,0表示使用默认值', max_aggr_count
int(10) unsigned NOT NULL DEFAULT '0' COMMENT '聚合子配置最大个数,,0表示使用默认值', max_aggr_size
int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个聚合数据的子配置大小上限,单位为字节,0表示使用默认值', max_history_count
int(10) unsigned NOT NULL DEFAULT '0' COMMENT '最大变更历史数量', gmt_create
datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '创建时间', gmt_modified
datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '修改时间', PRIMARY KEY (id
), UNIQUE KEY uk_group_id
(group_id
) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='集群、各Group容量信息表';
/**************/ /* 数据库全名 = nacos_config / / 表名称 = his_config_info */ /**************/ CREATE TABLE his_config_info
( id
bigint(64) unsigned NOT NULL, nid
bigint(20) unsigned NOT NULL AUTO_INCREMENT, data_id
varchar(255) NOT NULL, group_id
varchar(128) NOT NULL, app_name
varchar(128) DEFAULT NULL COMMENT 'app_name', content
longtext NOT NULL, md5
varchar(32) DEFAULT NULL, gmt_create
datetime NOT NULL DEFAULT '2010-05-05 00:00:00', gmt_modified
datetime NOT NULL DEFAULT '2010-05-05 00:00:00', src_user
text, src_ip
varchar(20) DEFAULT NULL, op_type
char(10) DEFAULT NULL, tenant_id
varchar(128) DEFAULT '' COMMENT '租户字段', PRIMARY KEY (nid
), KEY idx_gmt_create
(gmt_create
), KEY idx_gmt_modified
(gmt_modified
), KEY idx_did
(data_id
) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='多租户改造';
/**************/ /* 数据库全名 = nacos_config / / 表名称 = tenant_capacity */ /**************/ CREATE TABLE tenant_capacity
( id
bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID', tenant_id
varchar(128) NOT NULL DEFAULT '' COMMENT 'Tenant ID', quota
int(10) unsigned NOT NULL DEFAULT '0' COMMENT '配额,0表示使用默认值', usage
int(10) unsigned NOT NULL DEFAULT '0' COMMENT '使用量', max_size
int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个配置大小上限,单位为字节,0表示使用默认值', max_aggr_count
int(10) unsigned NOT NULL DEFAULT '0' COMMENT '聚合子配置最大个数', max_aggr_size
int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个聚合数据的子配置大小上限,单位为字节,0表示使用默认值', max_history_count
int(10) unsigned NOT NULL DEFAULT '0' COMMENT '最大变更历史数量', gmt_create
datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '创建时间', gmt_modified
datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '修改时间', PRIMARY KEY (id
), UNIQUE KEY uk_tenant_id
(tenant_id
) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='租户容量信息表';
CREATE TABLE tenant_info
( id
bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id', kp
varchar(128) NOT NULL COMMENT 'kp', tenant_id
varchar(128) default '' COMMENT 'tenant_id', tenant_name
varchar(128) default '' COMMENT 'tenant_name', tenant_desc
varchar(256) DEFAULT NULL COMMENT 'tenant_desc', create_source
varchar(32) DEFAULT NULL COMMENT 'create_source', gmt_create
bigint(20) NOT NULL COMMENT '创建时间', gmt_modified
bigint(20) NOT NULL COMMENT '修改时间', PRIMARY KEY (id
), UNIQUE KEY uk_tenant_info_kptenantid
(kp
,tenant_id
), KEY idx_tenant_id
(tenant_id
) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='tenant_info';
CREATE TABLE users ( username varchar(50) NOT NULL PRIMARY KEY, password varchar(500) NOT NULL, enabled boolean NOT NULL );
CREATE TABLE roles ( username varchar(50) NOT NULL, role varchar(50) NOT NULL );
INSERT INTO users (username, password, enabled) VALUES ('admin', '$2a$10$HxtJtd59imujvbux.i55zOGewhnJiLVXX8D9AETDMV.XtBLDGOXtW', TRUE);
INSERT INTO roles (username, role) VALUES ('admin', 'ROLE_ADMIN');
5.访问nacos主页,添加配置数据
6.springcloud代码集成,记住nacos启动命令sh start.sh,不要用单机启动命令
server:
port: 8080
spring:
cloud:
nacos:
config:
server-addr: 127.0.0.1:8848,127.0.0.1:8480,127.0.0.1:8580
file-extension: yml
discovery:
server-addr: 127.0.0.1:8848,127.0.0.1:8480,127.0.0.1:8580
application:
name: demo
profiles:
active: dev
7.接口测试
@RestController
@RequestMapping("/demo")
public class DemoController {
@Value("${person.name}")
private String name;
@Autowired
private ConfigurableApplicationContext configurableApplicationContext;
@GetMapping("/demo")
public String test(){
return "domain is:"+name;
}
以上演示的是集群模式,也是把配置存储到mysql里,这样我们可以通过页面直接配置,存储到mysql里。