使用Docker搭建Nacos集群

本次是在Mac的M1版本上使用Docker搭建Nacos集群的详细步骤,并记录了一些遇到的问题及解决方案。

搭建涉及:1个Nginx + 3个Nacos + 1个MySQL

使用版本:Nginx为1.22.0,Nacos为2.0.3,MySQL为8.0.30

一、创建虚拟网络

因为MySQL、Nacos和Nginx需要在同一个网络下互通,且MySQL和Nacos集群需要指定IP地址,所以需要创建虚拟网络,默认网络不能指定IP。

bash 复制代码
docker network create --subnet=172.19.0.0/16 mynet

注意:创建时,自定义网络的网段不能和已有的虚拟网段冲突,否则会报如下错误:

Error response from daemon: Pool overlaps with other one on this address space

可通过 docker network ls 查看都有哪些网络,并通过 docker network inspect 虚拟网络名 来查看对应所处的子网范围。新建网络时不和已有的虚拟网络处于同一个网段即可。

二、创建MySQL容器

bash 复制代码
cd /Users/songwj/lib/docker/mysql

# 创建名为mysql的容器,并指定网络mynet和IP地址
docker run -id \
--name=mysql \
--net mynet --ip 172.19.0.2 \
-p 3306:3306 \
-v $PWD/conf:/etc/mysql/conf.d \
-v $PWD/logs:/logs \
-v $PWD/data:/var/lib/mysql \
-v /etc/localtime:/etc/localtime \
-e MYSQL_ROOT_PASSWORD=123456 \
mysql

初始化数据库脚本:

到官网:Release 2.0.3 (July 28, 2021) · alibaba/nacos · GitHub,下载nacos-server-2.0.3.tar.gz,解压

创建数据库名为nacos_config,并刷脚本conf/nacos-mysql.sql

注意:刷的脚本得和nacos服务的版本一致,否则添加配置时可能报:发布失败。请检查参数是否正确。

三、创建Nacos容器

因为本次为Mac的M1版本,本次使用的镜像为:zhusaidong/nacos-server-m1:2.0.3,创建3个nacos容器:nacos01、nacos02和nacos03

bash 复制代码
docker run -id \
--name=nacos01 \
--net mynet --ip 172.19.0.3 \ # 指定网络和IP
-e PREFER_HOST_MODE=ip \
-e MODE=cluster \ # 启用集群模式
-e NACOS_SERVERS="172.19.0.4:8848 172.19.0.5:8848" \ # 指定另外两台的IP和端口
-e SPRING_DATASOURCE_PLATFORM=mysql \
-e MYSQL_SERVICE_HOST=172.19.0.2 \  # MySQL容器IP地址
-e MYSQL_SERVICE_PORT=3306 \
-e MYSQL_SERVICE_DB_NAME=nacos_config \
-e MYSQL_SERVICE_USER=root \
-e MYSQL_SERVICE_PASSWORD=123456 \
-p 3333:8848 \
zhusaidong/nacos-server-m1:2.0.3

docker run -id \
--name=nacos02 \
--net mynet --ip 172.19.0.4 \
-e PREFER_HOST_MODE=ip \
-e MODE=cluster \
-e NACOS_SERVERS="172.19.0.3:8848 172.19.0.5:8848" \
-e SPRING_DATASOURCE_PLATFORM=mysql \
-e MYSQL_SERVICE_HOST=172.19.0.2 \
-e MYSQL_SERVICE_PORT=3306 \
-e MYSQL_SERVICE_DB_NAME=nacos_config \
-e MYSQL_SERVICE_USER=root \
-e MYSQL_SERVICE_PASSWORD=123456 \
-p 4444:8848 \
zhusaidong/nacos-server-m1:2.0.3

docker run -id \
--name=nacos03 \
--net mynet --ip 172.19.0.5 \
-e PREFER_HOST_MODE=ip \
-e MODE=cluster \
-e NACOS_SERVERS="172.19.0.3:8848 172.19.0.4:8848" \
-e SPRING_DATASOURCE_PLATFORM=mysql \
-e MYSQL_SERVICE_HOST=172.19.0.2 \
-e MYSQL_SERVICE_PORT=3306 \
-e MYSQL_SERVICE_DB_NAME=nacos_config \
-e MYSQL_SERVICE_USER=root \
-e MYSQL_SERVICE_PASSWORD=123456 \
-p 5555:8848 \
zhusaidong/nacos-server-m1:2.0.3

四、创建Nginx容器

bash 复制代码
cd /Users/songwj/lib/docker/nginx

docker run -id \
--name=nginx \
--net mynet \ # 指定网络mynet
-p 1111:80 \
-v $PWD/conf.d:/etc/nginx/conf.d \
-v $PWD/html:/etc/nginx/html \
-v $PWD/log:/usr/log/nginx \
-v $PWD/nginx.conf:/etc/nginx/nginx.conf \
nginx:1.22.0

此处nginx.conf配置:

bash 复制代码
user  nginx;
worker_processes  auto;

error_log  /var/log/nginx/error.log notice;
pid        /var/run/nginx.pid;

events {
    worker_connections  1024;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    #include /etc/nginx/conf.d/*.conf;

    upstream nacosList {
        server 172.19.0.3:8848;
        server 172.19.0.4:8848;
        server 172.19.0.5:8848;
    }

    server {
        listen       80;
        server_name  172.19.0.6;

        location / {
            proxy_pass http://nacosList;
        }
    }
}

五、访问测试

http://localhost:1111/nacos

此时通过1111端口访问,可以自动负载均衡,新配置的数据正常写入MySQL。

相关推荐
计算机毕设指导63 分钟前
基于 SpringBoot 的作业管理系统【附源码】
java·vue.js·spring boot·后端·mysql·spring·intellij-idea
灼烧的疯狂41 分钟前
K8S + Jenkins 做CICD
容器·kubernetes·jenkins
wenyue11212 小时前
Revolutionize Your Kubernetes Experience with Easegress: Kubernetes Gateway API
容器·kubernetes·gateway
yunfanleo2 小时前
docker run m3e 配置网络,自动重启,GPU等 配置渠道要点
linux·运维·docker
打鱼又晒网2 小时前
【MySQL】数据库精细化讲解:内置函数知识穿透与深度学习解析
数据库·mysql
tatasix3 小时前
MySQL UPDATE语句执行链路解析
数据库·mysql
一元咖啡3 小时前
SpringCloud Gateway转发请求到同一个服务的不同端口
spring·spring cloud·gateway
天海华兮3 小时前
mysql 去重 补全 取出重复 变量 函数 和存储过程
数据库·mysql
梅见十柒3 小时前
wsl2中kali linux下的docker使用教程(教程总结)
linux·经验分享·docker·云原生