- docker-compse nacos集群
- 创建网桥
- 创建目录
- 使用内置mysql数据库
- 编写compose文件
- 启动服务
- 测试验证
- 使用外部mysql数据库
- 创建数据库
- 导入nacos脚本数据
- 编写compose模版文件
- 启动服务
- 测试验证
Docker镜像官网:https://github.com/nacos-group/nacos-docker
nacos官网:https://github.com/alibaba/nacos
Nacos中文:https://nacos.io/zh-cn/docs/what-is-nacos.html
Nacos官网代码:https://github.com/nacos-group/nacos-docker.git
需要注意:nacos在1.x版本使用参数和以前不同,具体原因参考:https://github.com/nacos-group/nacos-docker/wiki/%E7%A7%BB%E9%99%A4%E6%95%B0%E6%8D%AE%E5%BA%93%E4%B8%BB%E4%BB%8E%E9%95%9C%E5%83%8F%E9%85%8D%E7%BD%AE
这里以最新版本nacos-2.0.3进行集群测试。
由于使用的是集群模式,可能是多台不同的服务器,默认docker0是不支持扩服务器的容器进行通信,故这里使用自定义网桥,该网桥支持通过域名、ip、服务名等链接,具体网络区别及使用自行百度。
sudo docker network create -d bridge mynet创建目录
创建数据、日志、配置文件存储目录,编写custom.properties文件内容
for i in $(seq 1 3);
do
mkdir -p /home/data/nacos${i}/logs/
mkdir -p /home/data/nacos${i}/init.d/
echo "management.endpoints.web.exposure.include=*" >/home/data/nacos${i}/init.d/custom.properties
done
使用内置mysql数据库
编写compose文件
1、创建 nacos-cluster.yaml
进入/home/data目录下,创建nacos-cluster.yaml文件。
vim nacos-cluster.yaml
version: "3"
services:
nacos1:
hostname: nacos1
container_name: nacos1
image: nacos/nacos-server:${NACOS_VERSION}
restart: always
volumes:
- /home/data/nacos1:/home/nacos/logs
- /home/data/nacos1/init.d/custom.properties:/home/nacos/init.d/custom.properties
ports:
- "8848:8848"
- "9848:9848"
- "9555:9555"
env_file:
- /home/data/nacos-hostname.env
depends_on:
- mysql
networks:
- mynet
nacos2:
hostname: nacos2
image: nacos/nacos-server:${NACOS_VERSION}
container_name: nacos2
restart: always
volumes:
- /home/data/nacos2:/home/nacos/logs
- /home/data/nacos2/init.d/custom.properties:/home/nacos/init.d/custom.properties
ports:
- "8849:8848"
- "9849:9848"
env_file:
- /home/data/nacos-hostname.env
depends_on:
- mysql
networks:
- mynet
nacos3:
hostname: nacos3
image: nacos/nacos-server:${NACOS_VERSION}
container_name: nacos3
restart: always
volumes:
- /home/data/nacos2:/home/nacos/logs
- /home/data/nacos2/init.d/custom.properties:/home/nacos/init.d/custom.properties
ports:
- "8850:8848"
- "9850:9848"
env_file:
- /home/data/nacos-hostname.env
depends_on:
- mysql
networks:
- mynet
#数据库
mysql:
container_name: mysql
image: nacos/nacos-mysql:5.7
env_file:
- ./mysql.env
volumes:
- ./mysql:/var/lib/mysql
ports:
- "3306:3306"
networks:
- mynet
networks:
mynet:
external: true
2、创建nacos-hostname.env
由于以上nacos使用了配置文件加载环境变量。故需要创建 nacos-hostname.env文件,内容如下:
vim nacos-hostname.env #nacos dev env #nacos版本号 NACOS_VERSION=2.0.3 #系统启动方式: 集群/单机,cluster/standalone默认 cluster MODE=cluster #支持IP还是域名模式 PREFER_HOST_MODE=hostname #集群地址 p1:port1空格ip2:port2 空格ip3:port3 NACOS_SERVERS=nacos1:8848 nacos2:8848 nacos3:8848 #数据库连接地址 MYSQL_SERVICE_HOST=mysql #数据库端口 MYSQL_SERVICE_PORT=3306 #数据库库名 MYSQL_SERVICE_DB_NAME=nacos_config #数据库用户名,密码 MYSQL_SERVICE_USER=root MYSQL_SERVICE_PASSWORD=root #数据库数量,默认 :1 MYSQL_DATAbase_NUM=1 #数据库连接参数,default : characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false MYSQL_SERVICE_DB_PARAM=characterEncoding=utf8&connectTimeout=60000&socketTimeout=300000&autoReconnect=true&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC JVM_XMS=512m JVM_MMS=320m
3、创建.env文件
vim .env NACOS_VERSION=2.0.3
3、创建mysql.env文件
vim mysql.env MYSQL_ROOT_PASSWORD=root MYSQL_DATAbase=nacos_devtest MYSQL_USER=nacos MYSQL_PASSWORD=nacos
4、查看创建文件
后台启动:sudo docker-compose -f nacos-cluster.yaml up -d [root@izwz9bpj7oo7xblpos8vfvz data]# [root@izwz9bpj7oo7xblpos8vfvz data]# sudo docker-compose -f nacos-cluster.yaml up -d Starting mysql ... done Starting nacos1 ... done Starting nacos3 ... done Starting nacos2 ... done [root@izwz9bpj7oo7xblpos8vfvz data]# 查看启动服务:sudo docker ps [root@izwz9bpj7oo7xblpos8vfvz data]# sudo docker ps ConTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES b78ba660c3d6 nacos/nacos-server:2.0.3 "bin/docker-startup.…" 27 minutes ago Up 3 seconds 0.0.0.0:8848->8848/tcp, 0.0.0.0:9555->9555/tcp, 0.0.0.0:9848->9848/tcp nacos1 606052050d07 nacos/nacos-server:2.0.3 "bin/docker-startup.…" 27 minutes ago Up 3 seconds 0.0.0.0:8850->8848/tcp, 0.0.0.0:9850->9848/tcp nacos3 f552f4bd337f nacos/nacos-server:2.0.3 "bin/docker-startup.…" 27 minutes ago Up 3 seconds 0.0.0.0:8849->8848/tcp, 0.0.0.0:9849->9848/tcp nacos2 8e157fb8a12f nacos/nacos-mysql:5.7 "docker-entrypoint.s…" 27 minutes ago Up 4 seconds 0.0.0.0:3306->3306/tcp, 33060/tcp mysql [root@izwz9bpj7oo7xblpos8vfvz data]#
可以看到以上nacos服务全部启动成功,status状态为up,如果状态不为up,在需要排查问题。
测试验证浏览器访问:http://192.268.0.80:8848/nacos/#/login, 登录账号密码默认为 nacos nacos
查看集群节点:
可以看到启动了3个节点。如果增加服务节点,则只需要在compose配置文件中在增加一个服务即可。
在使用外部数据库时,需要先将准备工作处理完成后才能启动nacos,具体如下
创建数据库1、通过命令行登录已经存在的数据库创建:
docker exec -it 547a4b2c9e3f /bin/bash mysql -h192.168.0.85 -P3306 -uroot -pDs20Pwd@ show databases; CREATE DATAbase IF NOT EXISTS nacos_config default charset utf8 COLLATE utf8_general_ci;
2、通过mysql客户端工具(例如navicat、sqlyang等等)
登录mysql客户端,创建nacos_config数据库。
数据库脚本下载:https://github.com/alibaba/nacos/blob/develop/distribution/conf/nacos-mysql.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,
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';
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='增加租户字段';
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 '租户字段',
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';
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';
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';
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容量信息表';
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 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 '租户字段',
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='多租户改造';
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');
编写compose模版文件
1、创建.env文件
vim .env NACOS_VERSION=2.0.3
2、创建nacos-hostname.env文件
vim nacos-hostname.env #nacos dev env #nacos版本号 NACOS_VERSION=2.0.3 #系统启动方式: 集群/单机,cluster/standalone默认 cluster MODE=cluster #支持IP还是域名模式 PREFER_HOST_MODE=hostname #集群地址 p1:port1空格ip2:port2 空格ip3:port3 NACOS_SERVERS=nacos1:8848 nacos2:8848 nacos3:8848 #数据库连接地址 MYSQL_SERVICE_HOST=mysql #数据库端口 MYSQL_SERVICE_PORT=3306 #数据库库名 MYSQL_SERVICE_DB_NAME=nacos_config #数据库用户名,密码 MYSQL_SERVICE_USER=root MYSQL_SERVICE_PASSWORD=root #数据库数量,默认 :1 MYSQL_DATAbase_NUM=1 #数据库连接参数,default : characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false MYSQL_SERVICE_DB_PARAM=characterEncoding=utf8&connectTimeout=60000&socketTimeout=300000&autoReconnect=true&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC JVM_XMS=512m JVM_MMS=320m
3、创建nacos-cluster.yml文件
vim nacos-cluster.yml
version: "3"
services:
nacos1:
hostname: nacos1
container_name: nacos1
image: nacos/nacos-server:${NACOS_VERSION}
restart: always
volumes:
- /home/data/nacos1:/home/nacos/logs
- /home/data/nacos1/init.d/custom.properties:/home/nacos/init.d/custom.properties
ports:
- "8848:8848"
- "9848:9848"
- "9555:9555"
env_file:
- /home/data/nacos-hostname.env
networks:
- mynet
nacos2:
hostname: nacos2
image: nacos/nacos-server:${NACOS_VERSION}
container_name: nacos2
restart: always
volumes:
- /home/data/nacos2:/home/nacos/logs
- /home/data/nacos2/init.d/custom.properties:/home/nacos/init.d/custom.properties
ports:
- "8849:8848"
- "9849:9848"
env_file:
- /home/data/nacos-hostname.env
networks:
- mynet
nacos3:
hostname: nacos3
image: nacos/nacos-server:${NACOS_VERSION}
container_name: nacos3
restart: always
volumes:
- /home/data/nacos2:/home/nacos/logs
- /home/data/nacos2/init.d/custom.properties:/home/nacos/init.d/custom.properties
ports:
- "8850:8848"
- "9850:9848"
env_file:
- /home/data/nacos-hostname.env
networks:
- mynet
networks:
mynet:
external: true
4、授权
sudo chmod 777 -R /home/data
sudo docker-compose -f nacos-cluster.yaml up -d sudo docker ps测试验证
浏览器访问:http://192.268.0.80:8848/nacos/#/login, 登录账号密码默认为 nacos nacos
注意: 如果使用多台不同的机器分别部署ancos进行集群,则需要修改nacos属性配置 NACOS_SERVERS ,将服务名修改为对应机器的ip地址即可。



