使用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。

相关推荐
张青贤1 小时前
K8s中的containerPort与port、targetPort、nodePort的关系:
云原生·容器·kubernetes
云攀登者-望正茂3 小时前
AKS 支持 Kata Container容器沙盒 -预览阶段
容器·azure
惊起白鸽4504 小时前
MySQL全量,增量备份与恢复
数据库·mysql
暮雨疏桐5 小时前
MySQL SQL Mode及其说明
数据库·sql·mysql·sql mode
Tangcan-5 小时前
【MySQL】数据库基础
数据库·mysql
撸码到无法自拔5 小时前
docker常见命令
java·spring cloud·docker·容器·eureka
π大星星️5 小时前
HAProxy + Keepalived + Nginx 高可用负载均衡系统
运维·nginx·负载均衡
蔡蓝5 小时前
Mysql的索引,慢查询和数据库表的设计以及乐观锁和悲观锁
数据库·mysql
钢铁男儿7 小时前
C# 方法(可选参数)
数据库·mysql·c#
陆少枫7 小时前
MySQL基础关键_013_常用 DBA 命令
数据库·mysql