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