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脚本可以看下面内容。
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 &