本地Java8 + Maven环境已经OK
Nacos=Eureka + Config + Bus
安装并运行nacos
https://pan.baidu.com/share/init?surl=186nmlqPGows9gUZKAx8Zw 提取码rest解压安装包,直接运行bin目录下的cmd startup.cmd
linux版本:sh startup.sh
单机模式
sh startup.sh -m standalone
命令运行成功后直接访问http://localhost:8848/nacos
默认账户密码都是nacos
Nacos作为服务注册中心演示
先创建maven父子项目
1.先创建一个maven父项目,删除src的代码部分,然后修改pom文件
pom 这个要牢记
4.0.0 com.atguigu.springcloud cloud2020 1.0-SNAPSHOT pom cloudalibaba-provider-payment9002 UTF-8 1.8 1.8 4.12 1.2.17 1.16.18 5.1.47 1.1.16 1.3.0 org.springframework.boot spring-boot-dependencies 2.2.2.RELEASE pom import org.springframework.cloud spring-cloud-dependencies Hoxton.SR1 pom import com.alibaba.cloud spring-cloud-alibaba-dependencies 2.1.0.RELEASE pom import org.mybatis.spring.boot mybatis-spring-boot-starter ${mybatis.spring.boot.version} junit junit ${junit.version} log4j log4j ${log4j.version} org.springframework.boot spring-boot-maven-plugin true true 创建基于Nacos的服务提供者
新建Module
cloudalibaba-provider-payment9001
POM
本模块POM
cloud2020 com.atguigu.springcloud 1.0-SNAPSHOT 4.0.0 cloudalibaba-provider-payment9002 com.alibaba.cloud spring-cloud-starter-alibaba-nacos-discovery org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-actuator org.springframework.boot spring-boot-devtools runtime true org.projectlombok lombok true org.springframework.boot spring-boot-starter-test test
com.alibaba.cloud spring-cloud-starter-alibaba-nacos-discovery
YMLserver: port: 9001 spring: application: name: nacos-payment-provider cloud: nacos: discovery: server-addr: 192.168.1.10:8848 #配置Nacos地址 #server-addr: 192.168.1.10:1111 #使用nginx负载均衡注册服务,1111是nginx设置的监听端口号 management: endpoints: web: exposure: include: '*'
主启动package com.atguigu.springcloud.providerpayment9001; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; /** * */ @SpringBootApplication @EnableDiscoveryClient public class CloudalibabaProviderPayment9001Application { public static void main(String[] args) { SpringApplication.run(CloudalibabaProviderPayment9001Application.class, args); } }
@EnableDiscoveryClient 表示这个项目是一个nacos客户端
业务类package com.atguigu.springcloud.providerpayment9001.controller; import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RestController; @RestController public class PaymentController { @Value("${server.port}") private String serverPort; @GetMapping(value = "/payment/nacos/{id}") public String getPayment(@PathVariable("id") Integer id) { return "nacos registry, serverPort: "+ serverPort+"\t id"+id; } }
测试
http://localhost:9001/payment/nacos/31
nacos控制台
nacos服务注册中心+服务提供者9001都ok了
为了下一章节演示Nacos的负载均衡,参照9001新建9002
这里如果名字取错了还暴力删除导致创建的工程没有source标志的,那是因为父工程的.idea文件没有更新,记得关掉项目删除.idea,再重新导入项目即可cloudalibaba-provider-payment9002
取巧的方法是,直接拷贝虚拟端口映射
基于Nacos的服务消费者
新建Module
cloudalibaba-consumer-nacos-order83
POM
cloud2020 com.atguigu.springcloud 1.0-SNAPSHOT 4.0.0 cloudalibaba-consumer-nacos-order83 com.alibaba.cloud spring-cloud-starter-alibaba-nacos-discovery org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-actuator org.springframework.boot spring-boot-devtools runtime true org.projectlombok lombok true org.springframework.boot spring-boot-starter-test test 为什么nacos支持负载均衡
nacos内置了ribbon
YML消费者也会把自己注册进nacos
server: port: 83 spring: application: name: nacos-order-consumer cloud: nacos: discovery: server-addr: 192.168.1.10:8848 #消费者将要去访问的微服务名称(注册成功进nacos的微服务提供者) service-url: nacos-user-service: http://nacos-payment-provider
主启动类
package com.atguigu.springcloud.consumernacosorder83; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; /** * nacos整合了ribbon天生具有负载均衡功能 */ @EnableDiscoveryClient @SpringBootApplication public class CloudalibabaConsumerNacosOrder83Application { public static void main(String[] args) { SpringApplication.run(CloudalibabaConsumerNacosOrder83Application.class, args); } }
业务类
ApplicationContextConfigpackage com.atguigu.springcloud.consumernacosorder83.config; import org.springframework.cloud.client.loadbalancer.LoadBalanced; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.client.RestTemplate; /** * RestTemplate如果访问集群服务器必须加上@LoadBalanced要不然不知道该访问哪一个服务器而报错 */ @Configuration public class ApplicationContextConfig { // @Bean // @LoadBalanced // public RestTemplate getRestTemplate() // { // return new RestTemplate(); // } @Bean @LoadBalanced public RestTemplate getRestTemplate(){ return new RestTemplate(); } }
OrderNacosController
package com.atguigu.springcloud.consumernacosorder83.controller; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.client.RestTemplate; import javax.annotation.Resource; @RestController @Slf4j public class OrderNacosController { @Resource private RestTemplate restTemplate; @Value("${service-url.nacos-user-service}") private String serverURL; @GetMapping(value = "/consumer/payment/nacos/{id}") public String paymentInfo(@PathVariable("id") Long id) { //return restTemplate.getForObject(serverURL+"/payment/nacos/"+id,String.class); return restTemplate.getForObject(serverURL+"/payment/nacos/"+id,String.class); } }
测试
http://localhost:83/consumer/payment/nacos/31
各种注册中心对比
Nacos和CAP
基础配置
创建model cloudalibaba-config-nacos-client3377
引入pom
com.alibaba.cloud spring-cloud-starter-alibaba-nacos-config 完整 POM
cloud2020 com.atguigu.springcloud 1.0-SNAPSHOT 4.0.0 cloudalibaba-config-nacos-client3377 com.alibaba.cloud spring-cloud-starter-alibaba-nacos-config com.alibaba.cloud spring-cloud-starter-alibaba-nacos-discovery org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-actuator org.springframework.boot spring-boot-devtools runtime true org.projectlombok lombok true org.springframework.boot spring-boot-starter-test test
YML
bootstrap# nacos配置 server: port: 3377 spring: application: name: nacos-config-client cloud: nacos: discovery: server-addr: 192.168.1.10:8848 #Nacos服务注册中心地址 config: server-addr: 192.168.1.10:8848 #Nacos作为配置中心地址 file-extension: yaml #指定yaml格式的配置 group: DEV_GROUP namespace: 2929f517-1af6-4e74-8aa4-89dfdaf76dc0 # namespace: 7d8f0f5a-6a53-4785-9686-dd460158e5d4 #先在nacos中创建名字符合命名规则的配置然后启动程序后才能使用配置 # ${spring.application.name}-${spring.profile.active}.${spring.cloud.nacos.config.file-extension} # nacos-config-client-dev.yaml # nacos-config-client-test.yaml ----> config.info
必须属性:
spring: application: name: nacos-config-client spring: cloud: config: server-addr: 192.168.1.10:8848 #Nacos作为配置中心地址
如果nacos配置中心配置文件的后缀名是properties则不用添加file-extension属性,系统默认选择properties配置文件,如果不是properties配置文件则必须添加file-extension属性
application
spring: profiles: #active: dev # 表示开发环境 #active: test # 表示测试环境 active: info
why配置两个
package com.atguigu.springcloud.confignacosclient3377; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; @SpringBootApplication @EnableDiscoveryClient public class CloudalibabaConfigNacosClient3377Application { public static void main(String[] args) { SpringApplication.run(CloudalibabaConfigNacosClient3377Application.class, args); } }
业务类
ConfigClientControllerpackage com.atguigu.springcloud.confignacosclient3377.controller; import org.springframework.beans.factory.annotation.Value; import org.springframework.cloud.context.config.annotation.RefreshScope; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController @RefreshScope //支持Nacos的动态刷新功能。 public class ConfigClientController { //这个值是从nacos的配置中心获取的 @Value("${config.info}") private String configInfo; @GetMapping("/config/info") public String getConfigInfo() { return configInfo; } }
@RefreshScope会动态刷新配置中心的配置,动态刷新
Nacos中的匹配规则
理论
Nacos中dataid的组成格式及SpringBoot配置文件中的匹配规则
实操
配置新增
Nacos界面配置对应
设置DataId
公式
${spring.application.name}-${spring.profile.active}.${file-extension}
prefix默认为spring.application.name的值
spring.profile.active 即为当前环境对应的profile,可以通过配置项 spring.profile.active来配置
file-exetension为配置内容的数据格式,可以通过配置项spring.cloud.nacos.config.file-extension来配置
小总结说明
测试
启动前需要在nacos客户端-配置管理-配置管理栏目下有对应的yaml配置文件
运行cloud-config-nacos-client3377的主启动类
调用接口查看配置信息
http://localhost:3377/config/info
自带动态刷新
修改下Nacos中的yaml配置文件,再次调用查看配置的接口,就会发现配置已经刷新Nacos作为配置中心-分类配置
多环境多项目管理
Namespace + Group + DataID 三者关系?为什么这么设计?类似Java里面的package名和类名 最外面的namespace是可以用于区分部署环境的,Group和DataID逻辑上区分两个目标对象。
默认情况:
Namespace=public ,Group=DEFAULT_GROUP,默认Cluster是DEFAULT
DataID方案 类似于文件名
指定spring.profile.active和配置文件的DataID来使不同环境下读取不同的配置
默认空间+默认分组+新建dev和test两个DataID
新建dev配置DataID
新建test配置DataID
通过spring.profile.active属性就能进行多环境下配置文件的读取spring: profiles: #active: dev # 表示开发环境 #active: test # 表示测试环境 active: info
这个与springcloud config其实是一样的,只是配置文件是配置在Nacos中而不是Github了
测试
http://localhost:3377/config/info
配置什么就加载什么Group方案
通过Group实现环境区别
新建Group
在nacos图形界面控制台上面新建配置文件DataID
bootstrap + application在config下增加一条group的配置即可,可配置为DEV_GROUP或TEST_GROUP
Namespace方案 namespace作用是配置隔离,默认读取public
可以基于环境进行配置隔离:创建prop,dev,test命名空间
也可以基于微服务进行配置隔离:每个微服务创建一个命名空间
新建dev/test的Namespacespring: cloud: config: group: DEV_GROUP namespace: 2929f517-1af6-4e74-8aa4-89dfdaf76dc0
nacos作为配置中心拉取公共配置 两种方式
wms-config-3377-dev.yaml,是拉取的公共配置,wms-provider-dev.yaml是自己的配置
pom
com.alibaba.cloud spring-cloud-starter-alibaba-nacos-config 方式一
shared-dataids
spring: application: name: wms-provider cloud: nacos: discovery: server-addr: 192.168.1.131:8848 #配置Nacos地址 #server-addr: 192.168.1.131:1111 #使用nginx负载均衡注册服务,1111是nginx设置的监听端口号 config: server-addr: 192.168.1.131:8848 #Nacos作为配置中心地址 file-extension: yaml #指定yaml格式的配置 shared-dataids: wms-config-3377-dev.yaml #,wms-provider-dev.yaml refreshable-dataids: wms-config-3377-dev.yaml ,wms-provider-dev.yaml
shared-dataids:拉取共享配置文件
refreshable-dataids:
自动刷新配置文件(不起作用,建议使用@RefreshScope)业务类
@RestController public class ProviderController { @Value("${server.port}") String serverPort; @Value("${config.info}") String config; @Value("${config.info1}") String config1; @GetMapping("/provider/{id}") public String getServerPort(@PathVariable("id") Integer id){ return serverPort+":"+id+":"+config+":"+config1; } }
http://localhost:9002/provider/1
9002:1:this is wms-config-3377-dev.yaml:this is wms-provider-dev.yaml
获取到了两个配置文件的值
方式二ext-config
spring: cloud: config: server-addr: 192.168.1.131:8848 #Nacos作为配置中心地址 file-extension: yaml #指定yaml格式的配置 #group: DEV_GROUP #namespace: 2929f517-1af6-4e74-8aa4-89dfdaf76dc0 ext-config: - data-id: wms-provider-dev.properties group: DEFAULT_GROUP refresh: true
以前springboot任何方法从配置文件中获取值,都能使用,配置中心有的优先使用配置中心
Nacos默认自带的是嵌入式数据库derby
derby到mysql切换配置步骤,目前只能用mysql作为持久化配置nacos-server-1.1.4\nacos\conf目录下找到sql脚本
nacos-mysql.sq/******************************************/ /* 数据库全名 = 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 CURRENT_TIMESTAMP COMMENT '创建时间', `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP 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 CURRENT_TIMESTAMP COMMENT '创建时间', `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP 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 CURRENT_TIMESTAMP COMMENT '创建时间', `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP 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 CURRENT_TIMESTAMP COMMENT '创建时间', `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP 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 CURRENT_TIMESTAMP, `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, `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 CURRENT_TIMESTAMP COMMENT '创建时间', `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP 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, UNIQUE INDEX `idx_user_role` (`username` ASC, `role` ASC) USING BTREE ); CREATE TABLE `permissions` ( `role` varchar(50) NOT NULL, `resource` varchar(512) NOT NULL, `action` varchar(8) NOT NULL, UNIQUE INDEX `uk_role_permission` (`role`,`resource`,`action`) USING BTREE ); INSERT INTO users (username, password, enabled) VALUES ('nacos', '$2a$10$EuWPZHzz32dJN7jexM34MOeYirDdFAZm2kuWj7VEOJhhZkDrxfvUu', TRUE); INSERT INTO roles (username, role) VALUES ('nacos', 'ROLE_ADMIN');
执行脚本
这里说一下具体操作,你自己新建一个nacos_config的数据库,将对应的sql文件打开,复制命令执行即可
nacos-server-1.1.4\nacos\conf目录下找到application.properties
根据你的数据库名称和密码修改下面的代码,新增到application.properties中 spring.datasource.platform=mysql db.num=1 db.url.0=jdbc:mysql://127.0.0.1:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true db.user=root db.password=root
这就代表后续我们新建的各种配置列表都会存入你设定的mysql数据库中,而不是存入自带的derby
启动Nacos,可以看到是个全新的空记录界面,以前是记录进derby
Linux版Nacos+MySQL生产环境配置
预计需要,1个Nginx+3个nacos注册中心+1个mysql
Nacos下载Linux版
集群配置步骤(重点)
1、Linux服务器上mysql数据库配置
sql脚本还是在nacos/conf文件夹下
nacos-mysql.sql
自己Linux机器上的Mysql上粘贴
2、application.properties配置
和windows配置一样
3、Linux服务器上nacos的集群配置cluster.conf
梳理出3台nacos集群的不同服务端口号
这里设为8848,8849,8850
复制出cluster.conf
内容
这个ip不写127.0.0.1 必须是Linux命令hostname -i能识别的IP192.168.1.10:8848 192.168.1.10:8849 192.168.1.10:8850
4、编辑Nacos的启动脚本startup.sh,使它能够接受不同的启动端
/opt/nacos/bin 目录下有startup.sh
在什么地方,修改什么,怎么修改
思考export SERVER="nacos-server" export MODE="cluster" export FUNCTION_MODE="all" while getopts ":m:f:s:p:" opt do case $opt in m) MODE=$OPTARG;; f) FUNCTION_MODE=$OPTARG;; s) SERVER=$OPTARG;; p) PORT=$OPTARG;; ?) echo "Unknown parameter" exit 1;; esac done
# start echo "$JAVA ${JAVA_OPT}" > ${BASE_DIR}/logs/start.out 2>&1 & nohup $JAVA -Dserver.port=${PORT} ${JAVA_OPT} nacos.nacos >> ${BASE_DIR}/logs/start.out 2>&1 &
执行方式
5、Nginx的配置,由它作为负载均衡器
修改nignx的配置文件#gzip on; upstream cluster{ server 127.0.0.1:8848; server 127.0.0.1:8849; server 127.0.0.1:8850; } server { listen 1111; server_name localhost; #charset koi8-r; #access_log logs/host.access.log main; location / { # root html; # index index.html index.htm; proxy_pass http://cluster; }
集群的地址也可以改为实际ip地址
upstream cluster{ server 192.168.1.10:8848; server 192.168.1.10:8849; server 192.168.1.10:8850; }
按照指定启动
6、截止到此处,1个Nginx+3个nacos注册中心+1个mysql
测试通过nginx访问nacos
http://你的ip:1111/nacos/#/login
新建一个配置测试
Linux服务器的mysql插入一条记录
测试
微服务 cloudalibaba-provider-payment9002启动注册进nacos集群YML
server: port: 9001 spring: application: name: nacos-payment-provider cloud: nacos: discovery: #server-addr: 192.168.1.10:8848 #配置Nacos地址 server-addr: 192.168.1.10:1111 #使用nginx负载均衡注册服务,1111是nginx设置的监听端口号 management: endpoints: web: exposure: include: '*'
高可用总结