SpringCloud----nacos配置注册中心基于docker部署

一、nacos简介

详情见:https://nacos.io/zh-cn/docs/what-is-nacos.html

Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。

Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。

服务(Service)是 Nacos 世界的一等公民。Nacos 支持几乎所有主流类型的“服务”的发现、配置和管理:

  • Kubernetes Service
  • gRPC & Dubbo RPC Service
  • Spring Cloud RESTful Service

Nacos的关键特性包括:

  • 服务发现和服务健康监测

    Nacos 支持基于 DNS 和基于 RPC 的服务发现。服务提供者使用 原生SDK、OpenAPI、或一个独立的Agent TODO注册 Service 后,服务消费者可以使用DNS TODO 或HTTP&API查找和发现服务。

    Nacos 提供对服务的实时的健康检查,阻止向不健康的主机或服务实例发送请求。Nacos 支持传输层 (PING 或 TCP)和应用层 (如 HTTP、MySQL、用户自定义)的健康检查。 对于复杂的云环境和网络拓扑环境中(如 VPC、边缘网络等)服务的健康检查,Nacos 提供了 agent 上报模式和服务端主动检测2种健康检查模式。Nacos 还提供了统一的健康检查仪表盘,帮助您根据健康状态管理服务的可用性及流量。

  • 动态配置服务

    动态配置服务可以让您以中心化、外部化和动态化的方式管理所有环境的应用配置和服务配置。

    动态配置消除了配置变更时重新部署应用和服务的需要,让配置管理变得更加高效和敏捷。

    配置中心化管理让实现无状态服务变得更简单,让服务按需弹性扩展变得更容易。

    Nacos 提供了一个简洁易用的UI (控制台样例 Demo) 帮助您管理所有的服务和应用的配置。Nacos 还提供包括配置版本跟踪、金丝雀发布、一键回滚配置以及客户端配置更新状态跟踪在内的一系列开箱即用的配置管理特性,帮助您更安全地在生产环境中管理配置变更和降低配置变更带来的风险。

  • 动态 DNS 服务

    动态 DNS 服务支持权重路由,让您更容易地实现中间层负载均衡、更灵活的路由策略、流量控制以及数据中心内网的简单DNS解析服务。动态DNS服务还能让您更容易地实现以 DNS 协议为基础的服务发现,以帮助您消除耦合到厂商私有服务发现 API 上的风险。

    Nacos 提供了一些简单的 DNS APIs TODO 帮助您管理服务的关联域名和可用的 IP:PORT 列表.

  • 服务及其元数据管理

    Nacos 能让您从微服务平台建设的视角管理数据中心的所有服务及元数据,包括管理服务的描述、生命周期、服务的静态依赖分析、服务的健康状态、服务的流量管理、路由及安全策略、服务的 SLA 以及最首要的 metrics 统计数据。

二、nacos单机部署

2.1、使用嵌入式数据库derby

主机ip:192.168.99.242

配置文件

mkdir -p /root/nacos/config

custom.properties

cat > /root/nacos/config/custom.properties <<-EOF
#spring.security.enabled=false
#management.security=false
#security.basic.enabled=false
#nacos.security.ignore.urls=/**
#management.metrics.export.elastic.host=http://localhost:9200
# 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
EOF

启动命令

docker run -d --name nacos --hostname nacos -p 8848:8848 \
-e PREFER_HOST_MODE=hostname \
-e MODE=standalone \
-v /root/nacos/logs:/home/nacos/logs \
-v /root/nacos/config/custom.properties:/home/nacos/init.d/custom.properties \
nacos/nacos-server:1.1.4

访问:http://192.168.99.242:8848/nacos

用户密码:nacos/nacos

2.2、单机模式支持mysql

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

  1. 安装数据库,版本要求:5.6.5+
  2. 初始化mysql数据库,数据库初始化文件:nacos-mysql.sql
  3. 修改conf/application.properties文件,增加支持mysql数据源配置(目前只支持mysql),添加mysql数据源的url、用户名和密码。

mysql数据搭建

主机ip:192.168.99.242

docker run -d --name mysql-nacos -p 3306:3306 \
-e MYSQL_USER=nacos \
-e MYSQL_PASSWORD=nacos@123456 \
-e MYSQL_DATABASE=nacos \
-e MYSQL_ROOT_PASSWORD=admin@123456 \
-v /root/mysql/data:/var/lib/mysql \
mysql:5.7

去github上下载对应版本的:https://github.com/alibaba/nacos/releases

解压后得到nacos-mysql.sql,导入mysql数据库

nacos-mysql.sql

/******************************************/
/*   数据库全名 = 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');

单机nacos部署

custom.properties配置如上

环境变量的配置可以见application.properties

# spring
server.servlet.contextPath=${SERVER_SERVLET_CONTEXTPATH:/nacos}
server.contextPath=/nacos
server.port=${NACOS_SERVER_PORT:8848}
spring.datasource.platform=${SPRING_DATASOURCE_PLATFORM:""}
nacos.cmdb.dumpTaskInterval=3600
nacos.cmdb.eventTaskInterval=10
nacos.cmdb.labelTaskInterval=300
nacos.cmdb.loadDataAtStart=false
db.num=${MYSQL_DATABASE_NUM:2}
db.url.0=jdbc:mysql://${MYSQL_MASTER_SERVICE_HOST}:${MYSQL_MASTER_SERVICE_PORT:3306}/${MYSQL_MASTER_SERVICE_DB_NAME}?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.url.1=jdbc:mysql://${MYSQL_SLAVE_SERVICE_HOST}:${MYSQL_SLAVE_SERVICE_PORT:3306}/${MYSQL_MASTER_SERVICE_DB_NAME}?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=${MYSQL_MASTER_SERVICE_USER}
db.password=${MYSQL_MASTER_SERVICE_PASSWORD}
server.tomcat.accesslog.enabled=${TOMCAT_ACCESSLOG_ENABLED:false}
server.tomcat.accesslog.pattern=%h %l %u %t "%r" %s %b %D
# default current work dir
server.tomcat.basedir=
## spring security config
### turn off security

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/**
# metrics for elastic search
management.metrics.export.elastic.enabled=false
management.metrics.export.influx.enabled=false

nacos.naming.distro.taskDispatchThreadCount=10
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

启动命令

docker run -d --name nacos --hostname nacos -p 8848:8848 \
-e PREFER_HOST_MODE=hostname \
-e MODE=standalone \
-e SPRING_DATASOURCE_PLATFORM=mysql \
-e MYSQL_MASTER_SERVICE_HOST=192.168.99.242 \
-e MYSQL_MASTER_SERVICE_PORT=3306 \
-e MYSQL_MASTER_SERVICE_DB_NAME=nacos \
-e MYSQL_MASTER_SERVICE_USER=nacos \
-e MYSQL_MASTER_SERVICE_PASSWORD=nacos@123456 \
-e MYSQL_DATABASE_NUM=1 \
-v /root/nacos/logs:/home/nacos/logs \
-v /root/nacos/config/custom.properties:/home/nacos/init.d/custom.properties \
nacos/nacos-server:1.1.4

访问:http://192.168.99.242:8848/nacos

用户密码:nacos/nacos

随便创建一个配置,查看数据库config_info表是否存有数据

三、nacos集群部署

虚拟机准备:

主机名ip用途
master192.168.99.240mysql-master,nacos1,nginx,keepalived
worker1192.168.99.241mysql-slave,nacos2,nginx,keepalived
worker2192.168.99.242nacos3

3.1、mysql主从搭建(基于docker)

配置文件准备

master,worker1做如下操作:

mkdir -p /root/mysql
docker run -d --name mysql --rm -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7
cd /root/mysql
docker cp mysql:/etc/mysql .
mv mysql config
docker stop mysql

config目录结构如下:

config/
├── conf.d
│   ├── docker.cnf
│   ├── mysql.cnf
│   └── mysqldump.cnf
├── my.cnf -> /etc/alternatives/my.cnf
├── my.cnf.fallback
├── mysql.cnf
└── mysql.conf.d
    └── mysqld.cnf

master修改mysql.conf.d目录下的mysqld.cnf配置如下:

cat >> /root/mysql/config/mysql.conf.d/mysqld.cnf <<-EOF
server-id=1
log-bin=/var/lib/mysql/mysql-bin
binlog_format=ROW
gtid_mode=on
enforce_gtid_consistency=on
EOF

worker1修改mysql.conf.d目录下的mysqld.cnf配置如下:

cat >> /root/mysql/config/mysql.conf.d/mysqld.cnf <<-EOF
server-id=2
log-bin=/var/lib/mysql/mysql-bin
binlog_format=ROW
gtid_mode=on
enforce_gtid_consistency=on
EOF

启动mysql主库和从库

主库:

# 启动命令
docker run -d --name mysql-master -p 3306:3306 \
-e MYSQL_USER=nacos \
-e MYSQL_PASSWORD=nacos@123456 \
-e MYSQL_DATABASE=nacos \
-e MYSQL_ROOT_PASSWORD=admin@123456 \
-v /root/mysql/config/:/etc/mysql \
-v /root/mysql/data:/var/lib/mysql \
mysql:5.7

# 验证
[root@master mysql]# docker exec -it mysql-master mysql -unacos -pnacos@123456 -e "show databases;"
mysql: [Warning] Using a password on the command line interface can be insecure.
+--------------------+
| Database           |
+--------------------+
| information_schema |
| nacos              |
+--------------------+

# 创建复制账户
docker exec -it mysql-master mysql -uroot -padmin@123456 -e "grant replication slave on *.* to repl@'192.168.99.%' identified by 'repl@123456';"

# 查看master位点
[root@master mysql]# docker exec -it mysql-master mysql -uroot -padmin@123456 -e "show master status;"
mysql: [Warning] Using a password on the command line interface can be insecure.
+------------------+----------+--------------+------------------+-------------------------------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set                         |
+------------------+----------+--------------+------------------+-------------------------------------------+
| mysql-bin.000004 |      488 |              |                  | 45177db9-0b9a-11eb-82c5-0242ac110002:1-11 |
+------------------+----------+--------------+------------------+-------------------------------------------+

从库:

# 启动命令
docker run -d --name mysql-slave -p 3306:3306 \
-e MYSQL_USER=nacos \
-e MYSQL_PASSWORD=nacos@123456 \
-e MYSQL_DATABASE=nacos \
-e MYSQL_ROOT_PASSWORD=admin@123456 \
-v /root/mysql/config/:/etc/mysql \
-v /root/mysql/data:/var/lib/mysql \
mysql:5.7

# 根据master位点建立主从
docker exec -it mysql-slave mysql -uroot -padmin@123456 -e "stop slave;"
docker exec -it mysql-slave mysql -uroot -padmin@123456 -e "stop slave;"
docker exec -it mysql-slave mysql -uroot -padmin@123456 -e "change master to master_user='repl', master_password='repl@123456', master_host='192.168.99.240', master_port=3306, master_log_file='mysql-bin.000004', master_log_pos=488;"
docker exec -it mysql-slave mysql -uroot -padmin@123456 -e "start slave;"
docker exec -it mysql-slave mysql -uroot -padmin@123456 -e "show slave status\G"

# 如下均为yes即可
# Slave_IO_Running: Yes
# Slave_SQL_Running: Yes

再次验证主从

# 主库创建数据test
docker exec -it mysql-master mysql -uroot -padmin@123456 -e "create database test;"

# 查看从库是否含有test
docker exec -it mysql-slave mysql -uroot -padmin@123456 -e "show databases;"

[root@worker1 ~]# docker exec -it mysql-slave mysql -uroot -padmin@123456 -e "show databases;"
mysql: [Warning] Using a password on the command line interface can be insecure.
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| nacos              |
| performance_schema |
| sys                |
| test               |
+--------------------+

sql文件导入

如单机模式导入nacos-mysql.sql文件

3.2、nacos集群搭建

配置文件准备

custom.properties

mkdir -p /root/nacos/config

cat > /root/nacos/config/custom.properties <<-EOF
#spring.security.enabled=false
#management.security=false
#security.basic.enabled=false
#nacos.security.ignore.urls=/**
#management.metrics.export.elastic.host=http://localhost:9200
# 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
EOF

启动nacos集群

# nacos1
docker run -d --name nacos1 --hostname nacos1 -p 8848:8848 \
--add-host nacos1:192.168.99.240 \
--add-host nacos2:192.168.99.241 \
--add-host nacos3:192.168.99.242 \
-e PREFER_HOST_MODE=hostname \
-e NACOS_SERVERS="nacos1:8848 nacos2:8848 nacos3:8848" \
-e MYSQL_MASTER_SERVICE_HOST=192.168.99.240 \
-e MYSQL_MASTER_SERVICE_DB_NAME=nacos \
-e MYSQL_MASTER_SERVICE_USER=nacos \
-e MYSQL_MASTER_SERVICE_PASSWORD=nacos@123456 \
-e MYSQL_MASTER_SERVICE_PORT=3306 \
-e MYSQL_SLAVE_SERVICE_HOST=192.168.99.241 \
-e MYSQL_SLAVE_SERVICE_PORT=3306 \
-v /root/nacos/config/custom.properties:/home/nacos/init.d/custom.properties \
-v /root/nacos/logs:/home/nacos/logs \
nacos/nacos-server:1.1.4

# nacos2
docker run -d --name nacos2 --hostname nacos2 -p 8848:8848 \
--add-host nacos1:192.168.99.240 \
--add-host nacos2:192.168.99.241 \
--add-host nacos3:192.168.99.242 \
-e PREFER_HOST_MODE=hostname \
-e NACOS_SERVERS="nacos1:8848 nacos2:8848 nacos3:8848" \
-e MYSQL_MASTER_SERVICE_HOST=192.168.99.240 \
-e MYSQL_MASTER_SERVICE_DB_NAME=nacos \
-e MYSQL_MASTER_SERVICE_USER=nacos \
-e MYSQL_MASTER_SERVICE_PASSWORD=nacos@123456 \
-e MYSQL_MASTER_SERVICE_PORT=3306 \
-e MYSQL_SLAVE_SERVICE_HOST=192.168.99.241 \
-e MYSQL_SLAVE_SERVICE_PORT=3306 \
-v /root/nacos/config/custom.properties:/home/nacos/init.d/custom.properties \
-v /root/nacos/logs:/home/nacos/logs \
nacos/nacos-server:1.1.4

# nacos3
docker run -d --name nacos3 --hostname nacos3 -p 8848:8848 \
--add-host nacos1:192.168.99.240 \
--add-host nacos2:192.168.99.241 \
--add-host nacos3:192.168.99.242 \
-e PREFER_HOST_MODE=hostname \
-e NACOS_SERVERS="nacos1:8848 nacos2:8848 nacos3:8848" \
-e MYSQL_MASTER_SERVICE_HOST=192.168.99.240 \
-e MYSQL_MASTER_SERVICE_DB_NAME=nacos \
-e MYSQL_MASTER_SERVICE_USER=nacos \
-e MYSQL_MASTER_SERVICE_PASSWORD=nacos@123456 \
-e MYSQL_MASTER_SERVICE_PORT=3306 \
-e MYSQL_SLAVE_SERVICE_HOST=192.168.99.241 \
-e MYSQL_SLAVE_SERVICE_PORT=3306 \
-v /root/nacos/config/custom.properties:/home/nacos/init.d/custom.properties \
-v /root/nacos/logs:/home/nacos/logs \
nacos/nacos-server:1.1.4

查看集群状态

访问:http://192.168.99.240:8488/nacos

默认用户密码:nacos/nacos

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Z3LCFYiZ-1604731352700)(img/nacos-cluster.png)]

3.3、nginx高可用配置

基于nginx负载均衡keepalived高可用

nginx配置

mkdir -p /root/nginx
cd /root/nginx
docker run -d --rm --name nginx nginx:1.18.0
docker cp nginx:/etc/nginx/nginx.conf
docker stop nginx

添加如下配置到nginx.conf

cat >> /root/nginx/nginx.conf <<-EOF
stream {
    upstream nacos {
        server 192.168.99.240:8848;
        server 192.168.99.241:8848;
        server 192.168.99.242:8848;
    }
    server {
        listen 8000;
        proxy_pass nacos;
    }
}
EOF

启动nginx:

docker run -d --name nginx-nacos -p 8000:8000 -v /root/nginx/nginx.conf:/etc/nginx/nginx.conf nginx:1.18.0

keepalived配置

下载

yum install -y keepalived

主:keepalived.conf

global_defs {
   router_id LVS_DEVEL
}

vrrp_script chk_http_port {
    script "/root/nginx_check.sh"
    interval 2
    weight 2
}

vrrp_instance VI_1 {
    state MASTER
    interface enp0s8
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.99.24
    }
    track_script {
        chk_http_port
    }
}

备:keepalived.conf

global_defs {
   router_id LVS_DEVEL
}

vrrp_script chk_http_port {
    script "/root/nginx_check.sh"
    interval 2
    weight 2
}

vrrp_instance VI_1 {
    state BACKUP
    interface enp0s8
    virtual_router_id 51
    priority 80
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.99.24
    }
    track_script {
        chk_http_port
    }
}

nginx_check.sh

#!/bin/bash
A=`ps -C nginx --no-header | wc -l`
if [ $A -eq 0 ];then
	docker restart nginx-nacos
        sleep 2
	if [ `ps -C nginx --no-header | wc -l` -eq 0 ];then
		killall keepalived
	fi
fi

修改检测脚本权限

chmod a+x nginx_check.sh

启动keepalived

systemctl start keepalived.service && systemctl enable keepalived.service

访问:http://192.168.99.24:8000/nacos

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,以下是在 Docker部署 Nacos 并初始化配置的步骤: 1. 首先安装 Docker,可以参考 Docker 官方文档进行安装。 2. 从 Docker Hub 上拉取 Nacos 镜像,并运行容器。运行以下命令: ``` docker run --name nacos -e MODE=standalone -p 8848:8848 -d nacos/nacos-server:latest ``` 这里我们指定容器名称为 nacos,使用 standalone 模式运行,将容器内部的 8848 端口映射到宿主机的 8848 端口上,并且以后台模式运行。 3. 打开浏览器,访问 http://localhost:8848/nacos,进入 Nacos 界面。 4. 首先创建一个命名空间。在 Nacos 界面上方的导航栏中,点击「命名空间」,然后点击「新建」按钮,输入命名空间名称和描述,并点击「提交」按钮。 5. 然后创建一个配置。在 Nacos 界面上方的导航栏中,点击「配置管理」,然后点击「新建配置」按钮,输入配置信息,包括 Data ID、Group、命名空间、配置内容等。例如,可以输入以下配置信息: ``` Data ID: example Group: DEFAULT_GROUP 命名空间: dev 配置内容: hello world ``` 然后点击「发布」按钮,将配置发布到 Nacos 中。 6. 最后,在应用程序中读取 Nacos 配置。可以使用 Nacos 客户端 SDK 或者 Spring Cloud Alibaba Nacos 集成来读取配置。这里以 Nacos 客户端 SDK 为例,使用以下代码来获取刚才发布的配置: ``` import com.alibaba.nacos.api.NacosFactory; import com.alibaba.nacos.api.config.ConfigService; public class NacosExample { public static void main(String[] args) throws Exception { String serverAddr = "localhost:8848"; String dataId = "example"; String group = "DEFAULT_GROUP"; String namespace = "dev"; Properties properties = new Properties(); properties.put("serverAddr", serverAddr); properties.put("namespace", namespace); ConfigService configService = NacosFactory.createConfigService(properties); String content = configService.getConfig(dataId, group, 5000); System.out.println(content); } } ``` 运行以上代码,就可以获取到从 Nacos 中读取的配置内容。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值