Docker - Docker 离线搭建单机 Nacos 集群

Docker 离线搭建单机 Nacos 集群

安装Docker

安装MySQL

注意:安装完MySQL之后,要执行nacos官方给的初始化sql文件。

安装Nacos

注册网段

因为 docker 搭建的单机 nacos 需要用 docker 内网进行交互,所以先注册一个 docker 内部网段:

docker network create --driver bridge --subnet=172.19.0.0/16 --gateway=172.19.0.1 nacos_network

如果有报错如下:

ERROR: Pool overlaps with other one on this address space

则可以通过如下命令流程删除掉冲突的网段(当然也可以直接使用已存在的网段,但我还是选择了删除重新注册)

# 查看docker网卡
docker network ls

# 查看docker网卡的相关详细信息  确认是自己创建的ip段 然后在删除相应的网卡
docker network inspect 【NETWORK ID】

# 删除docker网卡 docker network
rm 【NETWORK ID】

 如果不注册网段的话,可能会出现,虽然三个Nacos节点都成功启动,但选举不出leader,且微服务注册报如下错误的情况:

Caused by: ErrCode:500, ErrMsg:Nacos cluster is running with 1.X mode, can't accept gRPC request temporarily. Please check the server status or close Double write to force open 2.0 mode. Detail https://nacos.io/en-us/docs/2.0.0-upgrading.html.
    at com.alibaba.nacos.client.naming.remote.gprc.NamingGrpcClientProxy.requestToServer(NamingGrpcClientProxy.java:271)
    ... 20 more

搭建Nacos集群

创建文件夹并分配权限

sudo mkdir -p /helios/nacos.2.0.4
sudo chmod 777 /helios/nacos.2.0.4

将docker镜像文件包nacos-server.2.0.4.tar放至/helios/nacos.2.0.4路径下,然后加载本地文件到镜像

sudo docker load</helios/nacos.2.0.4/nacos-server.2.0.4.tar

先通过以下命令启动单机版nacos

sudo docker run --name nacos-server -e MODE=standalone -p 8848:8848 -p 9849:9849 -p 9848:9848 -d nacos/nacos-server:v2.0.4

创建node-01路径并分配权限

sudo mkdir -p /helios/nacos.2.0.4/node-01/basedir/
sudo chmod 777 /helios/nacos.2.0.4/node-01
sudo chmod 777 /helios/nacos.2.0.4/node-01/basedir

从单机容器中拷贝配置文件到宿主机

sudo docker cp nacos-server:/home/nacos/conf /helios/nacos.2.0.4/node-01/basedir/
sudo docker cp nacos-server:/home/nacos/logs /helios/nacos.2.0.4/node-01/basedir/
sudo docker cp nacos-server:/home/nacos/bin  /helios/nacos.2.0.4/node-01/basedir/
sudo docker cp nacos-server:/home/nacos/data /helios/nacos.2.0.4/node-01/basedir/

创建node-02和node-3路径

sudo mkdir -p /helios/nacos.2.0.4/node-02
sudo mkdir -p /helios/nacos.2.0.4/node-03

sudo cp -r /helios/nacos.2.0.4/node-01/basedir/ /helios/nacos.2.0.4/node-02
sudo cp -r /helios/nacos.2.0.4/node-01/basedir/ /helios/nacos.2.0.4/node-03

sudo chmod 777 /helios/nacos.2.0.4/node-02
sudo chmod 777 /helios/nacos.2.0.4/node-02/basedir
sudo chmod 777 /helios/nacos.2.0.4/node-03
sudo chmod 777 /helios/nacos.2.0.4/node-03/basedir

创建并编辑nacos-docker启动脚本nacoscluster.sh

sudo vim /helios/nacos.2.0.4/node-01/nacoscluster.sh
sudo vim /helios/nacos.2.0.4/node-02/nacoscluster.sh
sudo vim /helios/nacos.2.0.4/node-03/nacoscluster.sh

以下为脚本内容:

01脚本

#!/bin/sh
sudo docker run \
--name nacos-1 -d \
--ip 172.19.0.2 \
--privileged=true \
--restart=always \
--net=nacos_network \
-p 8848:8848 \
-p 9848:9848 \
-p 9849:9849 \
-e MODE=cluster \
-e PREFER_HOST_MODE=hostname \
-e NACOS_SERVER_IP=172.19.0.2 \
-e NACOS_SERVERS="172.19.0.2:8848 172.19.0.3:8848 172.19.0.4:8848" \
-e SPRING_DATASOURCE_PLATFORM=mysql \
-e MYSQL_SERVICE_HOST=数据库所在ip \
-e MYSQL_SERVICE_PORT=3306 \
-e MYSQL_SERVICE_USER=用户名 \
-e MYSQL_SERVICE_PASSWORD=密码 \
-e MYSQL_SERVICE_DB_NAME=nacos_config(这里的db名要看执行完nacos给的初始化sql之后究竟是什么) \
-v /helios/nacos.2.0.4/node-01/basedir/logs:/home/nacos/logs \
-v /helios/nacos.2.0.4/node-01/basedir/data:/home/nacos/data \
-v /helios/nacos.2.0.4/node-01/basedir/conf:/home/nacos/conf \
-v /helios/nacos.2.0.4/node-01/basedir/bin:/home/nacos/bin \
nacos/nacos-server:v2.0.4

02脚本

#!/bin/sh
sudo docker run \
--name nacos-2 -d \
--ip 172.19.0.3 \
--privileged=true \
--restart=always \
--net=nacos_network \
-p 8858:8848 \
-p 9858:9848 \
-p 9859:9849 \
-e MODE=cluster \
-e PREFER_HOST_MODE=hostname \
-e NACOS_SERVER_IP=172.19.0.3 \
-e NACOS_SERVERS="172.19.0.2:8848 172.19.0.3:8848 172.19.0.4:8848" \
-e SPRING_DATASOURCE_PLATFORM=mysql \
-e MYSQL_SERVICE_HOST=数据库所在ip \
-e MYSQL_SERVICE_PORT=3306 \
-e MYSQL_SERVICE_USER=用户名 \
-e MYSQL_SERVICE_PASSWORD=密码 \
-e MYSQL_SERVICE_DB_NAME=nacos_config(这里的db名要看执行完nacos给的初始化sql之后究竟是什么) \
-v /helios/nacos.2.0.4/node-02/basedir/logs:/home/nacos/logs \
-v /helios/nacos.2.0.4/node-02/basedir/data:/home/nacos/data \
-v /helios/nacos.2.0.4/node-02/basedir/conf:/home/nacos/conf \
-v /helios/nacos.2.0.4/node-02/basedir/bin:/home/nacos/bin \
nacos/nacos-server:v2.0.4

03脚本

#!/bin/sh
sudo docker run \
--name nacos-3 -d \
--ip 172.19.0.4 \
--privileged=true \
--restart=always \
--net=nacos_network \
-p 8868:8848 \
-p 9868:9848 \
-p 9869:9849 \
-e MODE=cluster \
-e PREFER_HOST_MODE=hostname \
-e NACOS_SERVER_IP=172.19.0.4 \
-e NACOS_SERVERS="172.19.0.2:8848 172.19.0.3:8848 172.19.0.4:8848" \
-e SPRING_DATASOURCE_PLATFORM=mysql \
-e MYSQL_SERVICE_HOST=数据库所在ip \
-e MYSQL_SERVICE_PORT=3306 \
-e MYSQL_SERVICE_USER=用户名 \
-e MYSQL_SERVICE_PASSWORD=密码 \
-e MYSQL_SERVICE_DB_NAME=nacos_config(这里的db名要看执行完nacos给的初始化sql之后究竟是什么) \
-v /helios/nacos.2.0.4/node-03/basedir/logs:/home/nacos/logs \
-v /helios/nacos.2.0.4/node-03/basedir/data:/home/nacos/data \
-v /helios/nacos.2.0.4/node-03/basedir/conf:/home/nacos/conf \
-v /helios/nacos.2.0.4/node-03/basedir/bin:/home/nacos/bin \
nacos/nacos-server:v2.0.4

为脚本文件分配权限

sudo chmod u+x /helios/nacos.2.0.4/node-01/nacoscluster.sh
sudo chmod u+x /helios/nacos.2.0.4/node-02/nacoscluster.sh
sudo chmod u+x /helios/nacos.2.0.4/node-03/nacoscluster.sh

移除旧的docker容器

sudo docker stop nacos-server && sudo docker rm nacos-server

启动新的docker容器实例

sudo sh /helios/nacos.2.0.4/node-01/nacoscluster.sh
sudo sh /helios/nacos.2.0.4/node-02/nacoscluster.sh
sudo sh /helios/nacos.2.0.4/node-03/nacoscluster.sh

检查启动状态

sudo docker ps

 

posted @ 2023-01-31 16:26  Helios_Fz  阅读(576)  评论(0编辑  收藏  举报