nacos集群搭建在公网IP分别为x.x.x.x,y.y.y.y和u.u.u.u的服务器上。
mysql-boost-5.7.37和nginx-1.18.0安装在公网IP为w.w.w.w的服务器上。
在安装nacos之前,必须在服务器中安装一些软件,以确保nacos安装完成后可以正常使用。
1)需要3台或3台以上服务器来搭建nacos集群。
2)在每台服务器推荐使用centos8版本的Linux系统。
3)在每个nacos节点下载、安装及配置jdk1.8.0_202。
4)在每个nacos节点下载、安装及配置maven-3.6.3。
5)在公网IP为w.w.w.w的服务器上下载、源码安装及配置mysql-boost-5.7.37。
6)在公网IP为w.w.w.w的服务器上下载、安装及配置nginx-1.18.0。
第一步,下载server-jre-8u202-linux-x64.tar.gz安装包。
登录地址:https://www.oracle.com/java/technologies/javase/javase8-archive-downloads.html下载server-jre-8u202-linux-x64.tar.gz安装包,然后使用WinSCP将安装包上传到/usr/local/src文件夹中。也可以使用wget命令下载。
命令:cd /usr/local/src
wget https://www.oracle.com/java/technologies/javase/javase8-archive-downloads.html/jre-8u202-linux-x64.tar.gz
第二步,解压server-jre-8u202-linux-x64.tar.gz安装包。
命令:cd /usr/local/src
tar -zxvf server-jre-8u202-linux-x64.tar.gz -C /usr/local
第三步,配置环境变量。
配置/etc/profile文件,在文件添加下面的代码:
export JAVA_HOME=/usr/local/jdk1.8.0_202
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib:$JRE_HOME/lib/rt.jar:$JRE_HOME/lib/ext:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
# 刷新profile文件
命令:source /etc/profile
第四步,测试server-jre是否配置成功。
# 查看jdk版本
命令:java -version
若结果显示server-jre的版本,则说明server-jre配置成功。
第五步,安装maven。
# 下载maven安装包
命令:cd /usr/local/src
wget https://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz
# 解压maven安装包
命令:tar -zxvf apache-maven-3.6.3-bin.tar.gz
第六步,配置maven。
配置/usr/local/src/apache-maven-3.6.3/conf/setting.xml文件,文件修改完成后显示如下:
alimaven
central
aliyun maven
http://maven.aliyun.com/nexus/content/groups/public
第七步,配置环境变量。
配置文件/etc/profile,在文件最下面添加下面的代码:
export MAVEN_HOME=/usr/local/src/apache-maven-3.6.3
export PATH=${PATH}:${MAVEN_HOME}/bin
# 刷新profile文件
命令:source /etc/profile
第八步,验证maven。
命令:mvn -v
若结果显示“Apache Maven 3.6.3”,则maven配置成功。
第九步,源码安装版本在5.7以上的mysql数据库。
nacos中使用的默认数据源是内置数据源,是存在于内存中的,当启动nacos集群时内存中的数据就不能进行共享,到那时数据进行注册的话就会注册到各自的nacos服务器中,这也必然会导致数据不一致。为了保证数据一致性,那么就需要将nacos中使用的默认数据源改为数据库。因此,需要先在公网IP为w.w.w.w的服务器上安装mysql-boost-5.7.37.tar.gz。
第十步,安装nginx-1.18.0.tar.gz。
由于需要3台或3台以上服务器来搭建nacos集群,因此,需要在公网IP为w.w.w.w的服务器上安装nginx-1.18.0.tar.gz来进行负载均衡。
第一步,下载nacos-server-2.1.2.tar.gz安装包。
登录网址:https://github.com/alibaba/nacos/releases下载nacos-server-2.1.2.tar.gz安装包,然后使用WinSCP将安装包上传到/usr/local/src文件夹中。
第二步,解压nacos-server-2.1.2.tar.gz安装包。
命令:cd /usr/local/src
tar -zxvf nacos-server-2.1.2.tar.gz -C /usr/local
# 修改nacos目录,目录名结尾添加一个端口号
命令:cd /usr/local
mv nacos nacos8888
第三步,在/usr/local/nacos8888/conf目录下新建cluster.conf文件。
新建文件cluster.conf,在文件添加下面的代码:
# 配置各个nacos节点的IP和端口
x.x.x.x:8888
y.y.y.y:8888
u.u.u.u:8888
第四步,确定数据源,将数据源配置成mysql数据库。
在公网IP为w.w.w.w的服务器上安装mysql-boost-5.7.37之后,就可以先创建nacos数据库,接着把在公网IP为x.x.x.x的服务器中的/usr/local/nacos8888/conf/mysql-schema.sql脚本上传到公网IP为w.w.w.w的服务器中的/usr/local/src文件夹,然后在nacos数据库中执行/usr/local/src/mysql-schema.sql脚本(只是一些建表命令)。
# 创建nacos数据库
命令:mysql -uroot -p123456
mysql> create database nacos;
# 运行/usr/local/src/mysql-schema.sql脚本中的所有SQL语句创建表格
mysql> use nacos;
mysql> source /usr/local/src/mysql-schema.sql;
mysql> show tables;
或者使用下面的方法创建表格
# 先在Navicat中连接公网IP为x.x.x.x的服务器,然后双击nacos数据库,接着双击“查询”,点击“新建查询”,将/usr/local/nacos8888/conf/mysql-schema.sql脚本中的所有SQL语句复制粘贴,最后点击运行即可创建表格。
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(50) 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,
`encrypted_data_key` text NOT NULL COMMENT '秘钥',
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(50) DEFAULT NULL COMMENT 'source ip',
`tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段',
`encrypted_data_key` text NOT NULL 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(50) 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(20) 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(50) DEFAULT NULL,
`op_type` char(10) DEFAULT NULL,
`tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段',
`encrypted_data_key` text NOT NULL 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(255) 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');
第五步,编辑在/usr/local/nacos8888/conf目录下的application.properties文件。
进行修改的代码如下:
# 端口号修改成集群对应的端口号
“server.port=8848”改成“server.port=8888”;
“# spring.datasource.platform=mysql”改成“spring.datasource.platform=mysql”;
“# db.num=1”改成“db.num=1”;
“# 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=nacos”改成
“db.url.0=jdbc:mysql://w.w.w.w:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=root
db.password.0=123456”。
第六步,修改在/usr/local/nacos8888/bin目录下的启动脚本startup.sh。
若以集群的方式启动,nacos默认占用的内存是2G,则可以把占用的内存适当改小。如果服务器的内存足够大,那么可以不进行修改。
“JAVA_OPT="${JAVA_OPT} -server -Xms2g -Xmx2g -Xmn1g”改成
“JAVA_OPT="${JAVA_OPT} -server -Xms1g -Xmx1g -Xmn1g”。
第七步,启动nacos服务。
# 执行在/usr/local/nacos8888/bin目录下的启动脚本
命令:cd /usr/local/nacos8888/bin
./startup.sh
注意:结果的最后一行“nacos is starting,you can check the /usr/local/nacos8888/logs/start.out”提示可以去查看日志文件。
第八步,编辑配置文件/etc/nginx/nginx.conf。
nginx成功安装,就可以对配置文件nginx.conf进行如下修改:
# 定义upstream和别名,再定义要进行负载均衡的IP和端口
upstream nacoscluster {
server x.x.x.x:8888;
server y.y.y.y:8888;
server u.u.u.u:8888;
}
server {
listen 8088;
server_name localhost;
# nacos服务启动的conf/application.peoperties文件中指定的一个默认访问前缀
location /nacos/ {
proxy_pass http://nacoscluster/nacos/;
}
}
第九步,测试效果。
1)先启动nginx服务,然后依次启动集群的各个nacos节点服务。
2)关闭linux本地的防火墙或者开放linux上需要被访问的对应端口号。
3)由于Nginx服务器IP是w.w.w.w,因此在Windows上访问http://w.w.w.w:8088/nacos,若成功访问nacos管理界面,则说明配置成功。
4)使用用户名:nacos,密码:nacos登录nacos管理界面。
5)在nacos管理界面中新建配置信息。
在首页点击右上角的“+”,就可以进行新建配置信息。
“Data ID”填写自己需要的文件名称(需要带上后缀名)。
“配置格式”选择自己需要的格式。
“配置内容”一般填写“mydata:”+当天的日期。
6)当所有信息填写完成,点击右下角的“发布”,就会在首页显示已经新建了一个配置。
7)点击“集群管理—节点列表”,可以发现所有的节点状态都是“UP”。