本文学习nacos基于docker的集群部署
1. 新增mysql8 Dockerfile文件
// online/shenjian/nacos/nacosCluster/image/mysql
FROM mysql:8.0.30
ADD https://raw.githubusercontent.com/alibaba/nacos/develop/distribution/conf/mysql-schema.sql /docker-entrypoint-initdb.d/nacos-mysql.sql
RUN chown -R mysql:mysql /docker-entrypoint-initdb.d/nacos-mysql.sql
EXPOSE 3306
CMD ["mysqld", "--character-set-server=utf8mb4", "--collation-server=utf8mb4_unicode_ci"]
2. 新增环境配置
- 新建mysql.env文件
// online/shenjian/nacos/nacosCluster/env
TZ=Asia/Shanghai
MYSQL_ROOT_HOST=%
MYSQL_ROOT_PASSWORD=root
MYSQL_DATABASE=nacos_config
MYSQL_USER=nacos
MYSQL_PASSWORD=nacos
- 新建nacos.env文件
// online/shenjian/nacos/nacosCluster/env
TZ=Asia/Shanghai
// 基于hostname域名模式
PREFER_HOST_MODE=hostname
NACOS_AUTH_ENABLE=true
MODE=cluster
NACOS_SERVERS=nacos1:8848 nacos2:8848 nacos3:8848
MYSQL_SERVICE_HOST=mysql
MYSQL_SERVICE_DB_NAME=nacos_config
MYSQL_SERVICE_PORT=3306
MYSQL_SERVICE_USER=nacos
MYSQL_SERVICE_PASSWORD=nacos
MYSQL_SERVICE_DB_PARAM=characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false&allowPublicKeyRetrieval=true
3. 新增nacos-cluster.yaml
我们在yaml文件中采用了tags标签,请确认docker客户端是否支持,不支持请升级,欢迎关注算法小生公众号与我互动
version: '3.8'
services:
mysql:
container_name: mysql
build:
context: .
dockerfile: ./image/mysql/Dockerfile
tags:
- "example/mysql:8.0.30"
image: example/mysql:8.0.30
env_file:
- env/mysql.env
ports:
- "3306:3306"
healthcheck:
test: [ "CMD", "mysqladmin" ,"ping", "-h", "localhost" ]
interval: 5s
timeout: 10s
retries: 10
nacos1:
hostname: nacos1
container_name: nacos1
image: nacos/nacos-server:2.0.3
ports:
- "8848:8848"
- "9848:9848"
env_file:
- env/nacos.env
restart: always
depends_on:
mysql:
condition: service_healthy
nacos2:
hostname: nacos2
image: nacos/nacos-server:2.0.3
container_name: nacos2
ports:
- "8849:8848"
- "9849:9848"
env_file:
- env/nacos.env
restart: always
depends_on:
mysql:
condition: service_healthy
nacos3:
hostname: nacos3
image: nacos/nacos-server:2.0.3
container_name: nacos3
ports:
- "8850:8848"
- "9850:9848"
env_file:
- env/nacos.env
restart: always
depends_on:
mysql:
condition: service_healthy
4. 运行并验证集群
docker-compose -f nacos-cluster.yaml up -d
- 在docker客户端我们看到容器全部启动成功
- 进入到任一nacos,我们在集群模式->节点列表中可以看到三台节点信息
-
点击节点元数据,我们可以看到采用Raft算法7848端口进行选举,并且当前leader主节点为nacos1
-
我们在看下数据源连接127.0.0.1用户名root密码root连接mysql,数据库nacos_config及下面表已创建
5. 额外的话
在实际部署的时候,对应数据库个人建议实体机器部署,我们在线上发现K8S部署nacos集群会出现mysql超时抖动问题,自从mysql迁移到实体机器后,并未出现该问题
- 7848端口:nacos采用Raft算法选举主节点通信用
- 8848端口:客户端连接用
- 9848端口:nacos2及其以后,客户端gRPC请求服务端用
- 9849端口:服务端gRPC请求服务端端口,用于服务间同步