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文件,文件修改完成后显示如下:

<mirror>

        <id>alimaven</id>

        <mirrorOf>central</mirrorOf>

        <name>aliyun maven</name>

        <url>http://maven.aliyun.com/nexus/content/groups/public</url>

    </mirror>

</mirrors>

第七步,配置环境变量。

配置文件/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安装、配置及启动(每个nacos节点都需要)

第一步,下载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:”+当天的日期。

多台服务器集群虚拟化 多台服务器集群搭建_多台服务器集群虚拟化_02

多台服务器集群虚拟化 多台服务器集群搭建_linux_03

6)当所有信息填写完成,点击右下角的“发布”,就会在首页显示已经新建了一个配置。

多台服务器集群虚拟化 多台服务器集群搭建_nacos_04

 7)点击“集群管理—节点列表”,可以发现所有的节点状态都是“UP”。

 

多台服务器集群虚拟化 多台服务器集群搭建_linux_05