Spring Cloud2024.x实战 | nacos系列 | 第1篇:centos7.x下docker安装nacos2.5.1集群(3台物理机真实集群)

centos7.x下docker安装nacos2.5.1集群(3台物理机真实集群)

1 引言

	Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service的首字母简称,一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。旨在帮助开发者更轻松地构建、部署和管理分布式系统,特别是在微服务架构中‌‌,Nacos的主要作用和意义包括以下几个方面:

1‌.服务注册与发现‌:微服务启动时会自动将自身信息(如IP、端口、健康状态)注册到Nacos。服务消费者可以通过Nacos动态发现其他服务的实例,实现服务间的通信。Nacos支持基于DNS和基于RPC的服务发现,并提供实时的健康检查,确保服务的可用性‌;
2.动态配置管理‌:Nacos允许以中心化、外部化和动态化的方式管理所有环境的应用配置和服务配置。配置更新后,Nacos会实时推送到客户端,无需重启应用,大大提高了配置管理的效率和灵活性。Nacos还支持配置版本管理、灰度发布和一键回滚等功能‌;
3.健康检查‌:Nacos会定期检查服务实例的健康状态,自动剔除不健康的实例。它支持传输层和应用层的健康检查,适用于复杂的云环境和网络拓扑结构‌;
4‌.多环境支持‌:Nacos支持多环境(如开发、测试、生产)的配置隔离,方便在不同环境中使用不同的配置。这有助于在不同阶段快速切换和部署应用‌;
5.元数据管理和流量管理‌:Nacos支持为服务实例添加自定义元数据(如版本号、环境信息),并提供基于权重的流量分配和路由策略。这有助于实现精细化的流量管理和服务治理‌‌;
6.社区支持和持续迭代‌:Nacos由阿里巴巴内部项目发展而来,并于2018年首次开源。它经历了多个版本的迭代和优化,逐渐形成了成熟的产品形态,广泛应用于各种业务场景‌。
通过这些功能,Nacos极大地简化了微服务架构中的服务管理和配置工作,提高了系统的可靠性和可维护性,是现代分布式系统不可或缺的工具。

2 环境准备

准备5台服务器,2台安装nginx和mysql,另3台做集群使用。

IP 服务 操作系统
172.16.250.84 Mysql CentOS 7.4
172.16.250.92 Nginx CentOS 7.4
172.16.250.93 nacos-1 CentOS 7.4
172.16.250.95 nacos-2 CentOS 7.4
172.16.250.96 nacos-3 CentOS 7.4

另外centos7.4系统服务器上要求安装上docker(docker-compose可选安装)(可以参看我的博客《docker&docker-compose实战 | docker&docker-compose自身安装系列 | 第一篇:centos7.x下docker & docker-compose安装》)。mysql选用8.0.11 需要提前安装(可以参看我的博客《docker&docker-compose实战 | docker&docker-compose安装基础中间件系列 | 第一篇:centos7.x下docker安装mysql8.x》),并且部署nacos数据库脚本,nacos脚本可以看下面内容。
图片[1] - Spring Cloud2024.x实战 | nacos系列 | 第1篇:centos7.x下docker安装nacos2.5.1集群(3台物理机真实集群) - 宋马
图片[2] - Spring Cloud2024.x实战 | nacos系列 | 第1篇:centos7.x下docker安装nacos2.5.1集群(3台物理机真实集群) - 宋马

3 部署nacos集群

3.1 拉取nacos镜像

三台服务器都需要执行

docker pull nacos/nacos-server:v2.5.1

3.2 创建宿主机nacos数据、配置和日志存储目录

三台服务器都需要执行

mkdir -p /data/soft/nacos/{
            conf,logs,data}

3.3 复制容器默认配置文件到宿主机

docker run -d --name nacos nacos/nacos-server:v2.5.1
docker cp nacos:/home/nacos/conf/. /data/soft/nacos/conf/
docker rm -f nacos

3.4 创建数据库并表初始化

在172.12.250.84机器的mysql数据库中创建

创建nacos251数据库:

可执行如下脚本:

CREATE DATABASE my_database CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

示例:
CREATE DATABASE `nacos251` CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

导入/data/soft/nacos/conf/mysql-schema.sql文件
下载地址:nacos2.5.1

/*
 * Copyright 1999-2018 Alibaba Group Holding Ltd.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

/******************************************/
/*   表名称 = 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(128) DEFAULT NULL COMMENT 'group_id',
                               `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 COMMENT 'app_name',
                               `tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段',
                               `c_desc` varchar(256) DEFAULT NULL COMMENT 'configuration description',
                               `c_use` varchar(64) DEFAULT NULL COMMENT 'configuration usage',
                               `effect` varchar(64) DEFAULT NULL COMMENT '配置生效的描述',
                               `type` varchar(64) DEFAULT NULL COMMENT '配置的类型',
                               `c_schema` text COMMENT '配置的模式',
                               `encrypted_data_key` varchar(1024) NOT NULL DEFAULT '' 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';

/******************************************/
/*   表名称 = config_info  since 2.5.0                */
/******************************************/
CREATE TABLE `config_info_gray` (
                                    `id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT 'id',
                                    `data_id` varchar(255) NOT NULL COMMENT 'data_id',
                                    `group_id` varchar(128) NOT NULL COMMENT 'group_id',
                                    `content` longtext NOT NULL COMMENT 'content',
                                    `md5` varchar(32) DEFAULT NULL COMMENT 'md5',
                                    `src_user` text COMMENT 'src_user',
                                    `src_ip` varchar(100) DEFAULT NULL COMMENT 'src_ip',
                                    `gmt_create` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT 'gmt_create',
                                    `gmt_modified` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT 'gmt_modified',
                                    `app_name` varchar(128) DEFAULT NULL COMMENT 'app_name',
                                    `tenant_id` varchar(128) DEFAULT '' COMMENT 'tenant_id',
                                    `gray_name` varchar(128) NOT NULL COMMENT 'gray_name',
                                    `gray_rule` text NOT NULL COMMENT 'gray_rule',
                                    `encrypted_data_key` varchar(256) NOT NULL DEFAULT '' COMMENT 'encrypted_data_key',
                                    PRIMARY KEY (`id`),
                                    UNIQUE KEY `uk_configinfogray_datagrouptenantgray` (`data_id`,`group_id`,`tenant_id`,`gray_name`),
                                    KEY `idx_dataid_gmt_modified` (`data_id`,`gmt_modified`),
                                    KEY `idx_gmt_modified` (`gmt_modified`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='config_info_gray';

/******************************************/
/*   表名称 = 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 COMMENT 'nid, 自增长标识',
                                        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';

/******************************************/
/*   表名称 = 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容量信息表';

/******************************************/
/*   表名称 = his_config_info              */
/******************************************/
CREATE TABLE `his_config_info` (
                                   `id` bigint(20) unsigned NOT NULL COMMENT 'id',
                                   `nid` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT 'nid, 自增标识',
                                   `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',
                                   `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',
                                   `op_type` char(10) DEFAULT NULL COMMENT 'operation type',
                                   `tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段',
                                   `encrypted_data_key` varchar(1024) NOT NULL DEFAULT '' COMMENT '密钥',
                                   `publish_type` varchar(50)  DEFAULT 'formal' COMMENT 'publish type gray or formal',
                                   `gray_name` varchar(50)  DEFAULT NULL COMMENT 'gray name',
                                   `ext_info`  longtext DEFAULT NULL COMMENT 'ext info',
                                   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='多租户改造';


/******************************************/
/*   表名称 = 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 COMMENT 'username',
                         `password` varchar(500) NOT NULL COMMENT 'password',
                         `enabled` boolean NOT NULL COMMENT 'enabled'
);

CREATE TABLE `roles` (
                         `username` varchar(50) NOT NULL COMMENT 'username',
                         `role` varchar(50) NOT NULL COMMENT 'role',
                         UNIQUE INDEX `idx_user_role` (`username` ASC, `role` ASC) USING BTREE
);

CREATE TABLE `permissions` (
                               `role` varchar(50) NOT NULL COMMENT 'role',
                               `resource` varchar(128) NOT NULL COMMENT 'resource',
                               `action` varchar(8) NOT NULL COMMENT 'action',
                               UNIQUE INDEX `uk_role_permission` (`role`,`resource`,`action`) USING BTREE
);

创建账号密码nacos/nacos

可执行如下脚本:

-- 创建账号设置密码 WITH mysql_native_password 指定密码加密模式
create user '用户名'@'域' IDENTIFIED WITH mysql_native_password by '密码';
 
-- 示例1  % 表示允许所有地点远程连接登录
create user 'user1'@'%' IDENTIFIED WITH mysql_native_password by '123456';
 
-- 示例2  localhost 表示只允许同服务器本地登录
create user 'user1'@'localhost' IDENTIFIED WITH mysql_native_password by '123456';
 
-- 示例3  指定具体IP时,表示只允许IP来源为指定IP 的客户端登录
create user 'user1'@'xxx.xxx.xxx.xxx' IDENTIFIED WITH mysql_native_password by '123456';

示例4:
CREATE USER 'nacos'@'%' IDENTIFIED WITH mysql_native_password BY 'nacos';

设置数据库权限

可执行如下脚本:

-- 将指定数据库中所有表 的所有权限发给指定 用户和域
grant all privileges on `数据库名`.* to '用户名'@'%';
 
-- 如果给所有数据库所有表 的所有权限
grant all privileges on *.* to '用户名'@'%';
 
-- 也可以指定具体的表
grant all privileges on `数据库名`.`tableName` to '用户名'@'%';

示例:
GRANT ALL PRIVILEGES ON `nacos251`.* TO 'nacos'@'%';

刷新权限生效

-- 使修改的用户权限立刻生效
flush privileges;

3.5 编辑配置文件

编辑宿主机配置文件 /data/soft/nacos/conf/application.properties,例如:

### The default token:
# Base64加密前密码  lecher.S#Ea%b.-JAa2f63.5-TZ+G_WC
# Base64加密后密码  bGVjaGVyLlMjRWElYi4tSkFhMmY2My41LVRaK0dfV0M=
# 加密网站:https://www.qqxiuzi.cn/bianma/base64.htm
# 自定义密钥,在自定义密钥时,推荐将配置项设置为Base64编码的字符串,且原始密钥长度不得低于32字符。同nacos.core.auth.plugin.nacos.token.secret.key

# 默认鉴权插件用于生成用户登陆临时accessToken所使用的密钥,在2.2.0.1后无默认值,必须执行此变更,否则无法启动;其他版本为建议设置。
nacos.core.auth.plugin.nacos.token.secret.key=${NACOS_AUTH_TOKEN:}
### Turn on/off caching of auth information. By turning on this switch, the update of auth information would have a 15 seconds delay.
nacos.core.auth.caching.enabled=${NACOS_AUTH_CACHE_ENABLE:false}
nacos.core.auth.enable.userAgentAuthWhite=${NACOS_AUTH_USER_AGENT_AUTH_WHITE_ENABLE:false}
# 用于替换useragent白名单的身份识别key,不可为空,2.2.1后无默认值
nacos.core.auth.server.identity.key=${NACOS_AUTH_IDENTITY_KEY:}
# 用于替换useragent白名单的身份识别value,不可为空,2.2.1后无默认值
nacos.core.auth.server.identity.value=${NACOS_AUTH_IDENTITY_VALUE:}

3.6 运行容器(完整文件映射)

nacos1(172.16.250.93)docker执行命令

docker run -d 
  --name nacos 
  -p 7848:7848 
  -p 8848:8848 
  -p 9848:9848 
  -p 9849:9849 
  -e MODE=cluster 
  -e NACOS_AUTH_ENABLE=true 
  -e PREFER_HOST_MODE=ip 
  -e NACOS_SERVER_PORT=8848 
  -e NACOS_SERVERS="172.16.250.93:8848 172.16.250.95:8848 172.16.250.96:8848" 
  -e NACOS_AUTH_TOKEN=bGVjaGVyLlMjRWElYi4tSkFhMmY2My41LVRaK0dfV0M= 
  -e NACOS_AUTH_IDENTITY_KEY=nacosKey 
  -e NACOS_AUTH_IDENTITY_VALUE=nacosValue 
  -e NACOS_SERVER_IP=172.16.250.93 
  -e SPRING_DATASOURCE_PLATFORM=mysql 
  -e MYSQL_SERVICE_HOST=172.16.250.84 
  -e MYSQL_SERVICE_PORT=3306 
  -e MYSQL_SERVICE_DB_NAME=nacos251 
  -e MYSQL_SERVICE_USER=nacos 
  -e MYSQL_SERVICE_PASSWORD=nacos 
  -e MYSQL_SERVICE_DB_PARAM="characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false&allowPublicKeyRetrieval=true" 
  -v /data/soft/nacos/conf:/home/nacos/conf 
  -v /data/soft/nacos/logs:/home/nacos/logs 
  -v /data/soft/nacos/data:/home/nacos/data 
  --restart=always 
  --privileged=true 
  nacos/nacos-server:v2.5.1

nacos2(172.16.250.95)docker执行命令

docker run -d 
  --name nacos 
  -p 7848:7848 
  -p 8848:8848 
  -p 9848:9848 
  -p 9849:9849 
  -e MODE=cluster 
  -e NACOS_AUTH_ENABLE=true 
  -e PREFER_HOST_MODE=ip 
  -e NACOS_SERVER_PORT=8848 
  -e NACOS_SERVERS="172.16.250.93:8848 172.16.250.95:8848 172.16.250.96:8848" 
  -e NACOS_AUTH_TOKEN=bGVjaGVyLlMjRWElYi4tSkFhMmY2My41LVRaK0dfV0M= 
  -e NACOS_AUTH_IDENTITY_KEY=nacosKey 
  -e NACOS_AUTH_IDENTITY_VALUE=nacosValue 
  -e NACOS_SERVER_IP=172.16.250.95 
  -e SPRING_DATASOURCE_PLATFORM=mysql 
  -e MYSQL_SERVICE_HOST=172.16.250.84 
  -e MYSQL_SERVICE_PORT=3306 
  -e MYSQL_SERVICE_DB_NAME=nacos251 
  -e MYSQL_SERVICE_USER=nacos 
  -e MYSQL_SERVICE_PASSWORD=nacos 
  -e MYSQL_SERVICE_DB_PARAM="characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false&allowPublicKeyRetrieval=true" 
  -v /data/soft/nacos/conf:/home/nacos/conf 
  -v /data/soft/nacos/logs:/home/nacos/logs 
  -v /data/soft/nacos/data:/home/nacos/data 
  --restart=always 
  --privileged=true 
  nacos/nacos-server:v2.5.1

nacos3(172.16.250.96)docker执行命令

docker run -d 
  --name nacos 
  -p 7848:7848 
  -p 8848:8848 
  -p 9848:9848 
  -p 9849:9849 
  -e MODE=cluster 
  -e NACOS_AUTH_ENABLE=true 
  -e PREFER_HOST_MODE=ip 
  -e NACOS_SERVER_PORT=8848 
  -e NACOS_SERVERS="172.16.250.93:8848 172.16.250.95:8848 172.16.250.96:8848" 
  -e NACOS_AUTH_TOKEN=bGVjaGVyLlMjRWElYi4tSkFhMmY2My41LVRaK0dfV0M= 
  -e NACOS_AUTH_IDENTITY_KEY=nacosKey 
  -e NACOS_AUTH_IDENTITY_VALUE=nacosValue 
  -e NACOS_SERVER_IP=172.16.250.96 
  -e SPRING_DATASOURCE_PLATFORM=mysql 
  -e MYSQL_SERVICE_HOST=172.16.250.84 
  -e MYSQL_SERVICE_PORT=3306 
  -e MYSQL_SERVICE_DB_NAME=nacos251 
  -e MYSQL_SERVICE_USER=nacos 
  -e MYSQL_SERVICE_PASSWORD=nacos 
  -e MYSQL_SERVICE_DB_PARAM="characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false&allowPublicKeyRetrieval=true" 
  -v /data/soft/nacos/conf:/home/nacos/conf 
  -v /data/soft/nacos/logs:/home/nacos/logs 
  -v /data/soft/nacos/data:/home/nacos/data 
  --restart=always 
  --privileged=true 
  nacos/nacos-server:v2.5.1

参数说明:

-d                                                    支持后台运行模式
-p 8848:8848                                          把容器内的端口8848挂载到宿主机8848上面
-p 9848:9848                                          把容器内的端口9848挂载到宿主机9848上面
-e NACOS_AUTH_ENABLE=true                             开启 Nacos server 的注册鉴权:(需配合配置文件中 nacos.core.auth.enabled=true)
-e JVM_XMS=128m                                       为jvm启动时分配的内存
-e JVM_XMX=128m                                       为jvm运行过程中分配的最大内存
-e JVM_XMN=128m                                       为jvm设置年轻代的大小
-e PREFER_HOST_MODE=ip                                是否支持hostname,可选项:hostname/ip,默认值ip
-e MODE=cluster
集群模式或者单独模式, 可选项:cluster/standalone,默认值cluster
-e NACOS_SERVER_PORT=8848                             nacos服务端口
-e NACOS_SERVERS="172.16.250.93:8848 172.16.250.95:8848 172.16.250.96:8848"
nacos集群地址
-e SPRING_DATASOURCE_PLATFORM=mysql                   以mysql为nacos做数据持久化
-e MYSQL_SERVICE_HOST=172.16.250.84                   mysql地址
-e MYSQL_SERVICE_PORT=3306                           mysql访问地址
-e MYSQL_SERVICE_USER=root                            mysql账号
-e MYSQL_SERVICE_PASSWORD=Ftprint#3548*Wtk            mysql密码
-e MYSQL_SERVICE_DB_NAME=nacos_conf                   mysql使用库
-e MYSQL_SERVICE_DB_PARAM='characterEncoding=utf8&connectTimeout=10000&socketTimeout=30000&autoReconnect=true&useSSL=false'
mysql常用连接参数
-e NACOS_SERVER_IP=172.16.250.93                      nacos单机注册地址
-v /usr/local/software/nacos/logs:/home/nacos/logs    挂在nacos运行日志
-v /root/docker/nacos/conf							  映射配置文件目录(必须提前复制容器内默认配置,否则容器无法启动)
-v /root/docker/nacos/data							  持久化数据文件(配置、服务信息等)
--privileged=true                                     使用root权限运行容器
--restart=always                                      容器自动运行
--name nacos3                                         容器名字
nacos/nacos-server:2.5.1                              使用docker镜像

注意:如果是单机版安装,可以只在1台机器上执行如下命令:

docker run -d 
  --name nacos 
  -p 7848:7848 
  -p 8848:8848 
  -p 9848:9848 
  -p 9849:9849 
  -e MODE=standalone 
  -e NACOS_AUTH_ENABLE=true 
  -e PREFER_HOST_MODE=ip 
  -e NACOS_SERVER_PORT=8848 
  -e NACOS_AUTH_TOKEN=bGVjaGVyLlMjRWElYi4tSkFhMmY2My41LVRaK0dfV0M= 
  -e NACOS_AUTH_IDENTITY_KEY=nacosKey 
  -e NACOS_AUTH_IDENTITY_VALUE=nacosValue 
  -e NACOS_SERVER_IP=172.16.250.96 
  -e SPRING_DATASOURCE_PLATFORM=mysql 
  -e MYSQL_SERVICE_HOST=172.16.250.84 
  -e MYSQL_SERVICE_PORT=3306 
  -e MYSQL_SERVICE_DB_NAME=nacos223 
  -e MYSQL_SERVICE_USER=nacos 
  -e MYSQL_SERVICE_PASSWORD=nacos 
  -e MYSQL_SERVICE_DB_PARAM="characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false&allowPublicKeyRetrieval=true" 
  -v /data/soft/nacos/conf:/home/nacos/conf 
  -v /data/soft/nacos/logs:/home/nacos/logs 
  -v /data/soft/nacos/data:/home/nacos/data 
  --restart=always 
  --privileged=true 
  nacos/nacos-server:v2.2.3

3.7 查看容器运行状态

检查宿主机目录是否生成文件:

ls /root/docker/nacos/conf # 应看到 application.properties
ls /root/docker/nacos/logs # 应看到启动日志
ls /root/docker/nacos/data # 应看到数据库文件(如使用内置Derby)

图片[3] - Spring Cloud2024.x实战 | nacos系列 | 第1篇:centos7.x下docker安装nacos2.5.1集群(3台物理机真实集群) - 宋马
图片[4] - Spring Cloud2024.x实战 | nacos系列 | 第1篇:centos7.x下docker安装nacos2.5.1集群(3台物理机真实集群) - 宋马

访问页面查看是否运行成功:IP:8848/nacos。登录账号:nacos/nacos(正式运行的时候别忘了改密码)

4 安装nginx做nacos负载均衡

在172.16.250.92机器上安装nginx

4.1 拉取nginx镜像

docker pull nginx:1.26

4.2 创建Nginx挂载目录

大家都知道Nginx需要频繁的修改,所以将需要的文件挂载出来最合适

mkdir -p /data/soft/nginx/{
            conf,html,logs}

4.3 将所需文件在容器中复制出来

因为挂载时,如果宿主机挂载目录为空,则可能会将容器中挂载的目录给覆盖。

4.3.1 先创建nginx容器
// 列出镜像
[root@192 nginx]# docker images
// 启动容器 注意 -d 镜像名称:版本
[root@192 nginx]# docker run --name nginx -d docker.io/nginx:1.26

4.3.2 获取挂载文件
mkdir -p /data/soft/nginx/{
            conf,logs,html}
//将容器nginx.conf文件复制到宿主机
[root@192 nginx]# docker cp nginx:/etc/nginx/nginx.conf /data/soft/nginx/conf/nginx.conf
//将容器conf.d文件夹复制到宿主机
[root@192 nginx]# docker cp nginx:/etc/nginx/conf.d /data/soft/nginx/conf
//将容器静态文件夹html复制到宿主机
[root@192 html]# docker cp nginx:/usr/share/nginx/html/ /data/soft/nginx

4.3.3 停止并删除容器
// 停止容器,ce869a为容器id
[root@192 html]# docker stop 容器id
//删除容器
[root@192 html]# docker rm 容器id
或者直接执行下面一个命令:
[root@192 html]# docker rm -f 容器id

4.4 启动Nginx容器

docker run -d -p 80:80 -p 7848:7848 -p 8848:8848 -p 9848:9848 -p 9849:9849 --name nginx --privileged --restart always -v /data/soft/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /data/soft/nginx/conf/conf.d:/etc/nginx/conf.d -v /data/soft/nginx/html:/usr/share/nginx/html -v /data/soft/nginx/logs:/var/log/nginx docker.io/nginx:1.26

命令说明:

-d:后台运行
-p:将主机80端口和容器80端绑定,
–name:容器命名
–privileged:容器获得对主机上设备的直接访问权限
–restart always:设置自动昂重启
-v:挂载目录,格式 主机目录 :容器目录

4.5 测试访问

总结:

当有新的项目需要部署时,可直接操作宿主机对应的目录即可,因为容器的目录跟宿主机进行绑定了,宿主机修改,容器也会跟着修改。

4.6 添加nacos负载均衡配置

在/data/soft/nginx/conf/conf.d目录下创建nacos.conf配置文件

vim /data/soft/nginx/conf/conf.d/nacos.conf

配置内容如下:

upstream nacos8848 {
            
	server 172.16.250.93:8848;
	server 172.16.250.95:8848;
	server 172.16.250.96:8848;
}

server {
            
	listen 8848;
	location / {
            
		proxy_pass http://nacos8848;
	}
	location /nacos/ {
            
		proxy_pass http://nacos8848/nacos/;
	}
}

修改nginx.conf文件,在文件末尾新增如下配置:

# nacos的grpc协议配置
stream {
            
	# 负载均衡配置(TCP长连接配置),端口号在前面的端口号前要进行偏置1000
	upstream nacos9848 {
            
		server 172.16.250.93:9848;
		server 172.16.250.95:9848;
		server 172.16.250.96:9848;
	}

	# 监听端口号在前面的端口号前要进行偏置1000
	server {
            
		listen 9848;
		proxy_pass nacos9848;
	}
}

重启nginx

docker restart nginx

5 测试nginx和nacos是否部署成功

nacos 集群部署成功。接下来,参阅《Spring Cloud2024.x实战 | nacos系列 | 第2篇: springcloud整合配置中心nacos2.5.1》和《Spring Cloud2024.x实战 | nacos系列 | 第3篇:springcloud整合注册中心nacos2.5.1》。

© 版权声明
THE END
如果内容对您有所帮助,就支持一下吧!
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容