当前位置: 移动技术网 > IT编程>软件设计>架构 > Spring Cloud Alibaba | Nacos集群部署

Spring Cloud Alibaba | Nacos集群部署

2019年07月17日  | 移动技术网IT编程  | 我要评论

spring cloud alibaba | nacos集群部署

1. nacos支持三种部署模式

  • 单机模式 - 用于测试和单机试用。
  • 集群模式 - 用于生产环境,确保高可用。
  • 多集群模式 - 用于多数据中心场景。

以上是官方提供的三种部署方式:单机模式对于企业来讲,仅可用于测试环境或者开发环境,不可用于生产环境;对于中小型企业来讲,生产环境选择集群模式已经足够,无需选择多集群模式,除非是做机房灾备,可以在两个机房部署两个集群。

单机模式的部署方式在前面的文章中已经介绍过,在0.7版本之前,在单机模式时nacos使用嵌入式数据库实现数据的存储,不方便观察数据存储的基本情况。0.7版本增加了支持mysql数据源能力,具体的操作步骤:

  • 准备一台mysql数据库,版本要求:5.6.5+
  • 初始化mysql数据库,数据库初始化文件:,或者如下:
/******************************************/
/*   数据库全名 = 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 ('nacos', '$2a$10$euwpzhzz32djn7jexm34moeyirddfazm2kuwj7veojhhzkdrxfvuu', true);

insert into roles (username, role) values ('nacos', 'role_admin');
  • 修改conf/application.properties文件,增加支持mysql数据源配置(目前只支持mysql),添加mysql数据源的url、用户名和密码。
spring.datasource.platform=mysql

db.num=1
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos?characterencoding=utf8&connecttimeout=1000&sockettimeout=3000&autoreconnect=true
db.user=root
db.password=password

2. 集群模式下部署nacos

2.1 架构图

2.2 下载源码或者安装包

从 github 上下载源码方式

unzip nacos-source.zip
cd nacos/
mvn -prelease-nacos clean install -u  
cd nacos/distribution/target/nacos-server-0.8.0/nacos/bin

下载编译后压缩包方式:

 unzip nacos-server-1.1.0.zip 或者 tar -xvf nacos-server-1.1.0.tar.gz
 cd nacos/bin

2.3 配置集群配置文件

在nacos的解压目录nacos/的conf目录下,有配置文件cluster.conf.example,请将名称修改为:cluster.conf,每行配置成ip:port。(请配置3个或3个以上节点)

#it is ip
#example
192.168.0.1
192.168.0.2
192.168.0.3

2.4 配置 mysql 数据库

生产使用建议至少主备模式,或者采用高可用数据库。

初始化语句和上面单机版保持一致。

application.properties 配置

# spring

server.contextpath=/nacos
server.servlet.contextpath=/nacos
server.port=8848

nacos.cmdb.dumptaskinterval=3600
nacos.cmdb.eventtaskinterval=10
nacos.cmdb.labeltaskinterval=300
nacos.cmdb.loaddataatstart=false


# metrics for prometheus
#management.endpoints.web.exposure.include=*

# metrics for elastic search
management.metrics.export.elastic.enabled=false
#management.metrics.export.elastic.host=http://localhost:9200

# metrics for influx
management.metrics.export.influx.enabled=false
#management.metrics.export.influx.db=springboot
#management.metrics.export.influx.uri=http://localhost:8086
#management.metrics.export.influx.auto-create-db=true
#management.metrics.export.influx.consistency=one
#management.metrics.export.influx.compressed=true

server.tomcat.accesslog.enabled=true
server.tomcat.accesslog.pattern=%h %l %u %t "%r" %s %b %d %{user-agent}i
# default current work dir
server.tomcat.basedir=

## spring security config
### turn off security
#spring.security.enabled=false
#management.security=false
#security.basic.enabled=false
#nacos.security.ignore.urls=/**

nacos.security.ignore.urls=/,/**/*.css,/**/*.js,/**/*.html,/**/*.map,/**/*.svg,/**/*.png,/**/*.ico,/console-fe/public/**,/v1/auth/login,/v1/console/health/**,/v1/cs/**,/v1/ns/**,/v1/cmdb/**,/actuator/**,/v1/console/server/**

# nacos.naming.distro.taskdispatchthreadcount=1
# nacos.naming.distro.taskdispatchperiod=200
# nacos.naming.distro.batchsynckeycount=1000
# nacos.naming.distro.initdataratio=0.9
# nacos.naming.distro.syncretrydelay=5000
# nacos.naming.data.warmup=true
# nacos.naming.expireinstance=true

spring.datasource.platform=mysql

db.num=1
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos?characterencoding=utf8&connecttimeout=1000&sockettimeout=3000&autoreconnect=true
db.user=root
db.password=password

2.5 启动服务

启动命令(在没有参数模式,是集群模式):

sh startup.sh

3. springcloud集成

先讲讲看网上的一些做法哈,修改application.yml的配置文件:

spring.cloud.nacos.config.server-addr=192.168.0.1:8848,192.168.0.2:8848,192.168.0.3:8848

这么写行不行能,我认为是可以的,但是有一点,就是如果nacos换了ip或者整体要做迁移,那么所有使用这个nacos的微服务的配置文件中的ip全都要进行更换,还需要重启,这对于整个微服务架构来讲耦合会非常大,违背了服务拆分的原则。

接下来就说我的方案了:

spring.cloud.nacos.config.server-addr=http://nacom.com:8848

这里我们使用域名去反向代理后面的nacos服务,如果后面nacos服务出现任何问题,我们只需要修改这个反向代理层即可,经过测试,这里的反向代理可以使用nginx,包括后面如果需要做扩容或者迁移,都不会影响到目前的服务集群。

多集群模式我们这里不做过多讨论,目前暂无实践经验。

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网