天天看點

Docker安裝配置nacos叢集

作者:Iliuhu

Nacos2.0版本部署

  • Nacos2.0版本相比1.X新增了gRPC的通信方式,是以需要增加2個端口。新增端口是在配置的主端口(server.port)基礎上,進行一定偏移量自動生成。
端口 與主端口的偏移量 描述
8848 【服務主端口】,預設8848,java程式注冊中心、配置中心、服務注冊等使用該端口
9848 +1000 用戶端gRPC請求服務端端口,用于TCP長連接配接和請求,無需手動配置,已經內建了 就是【服務主端口】+ 1000
7848 -1000 jRaft服務節點之間資料同步協定端口,無需手動配置,已經內建了 就是【服務主端口】- 1000
9849 +1001 gRPC服務節點之間資料同步協定端口,無需手動配置,已經內建了 就是【服務主端口】+ 1001

Docker 安裝nacos容器

# 搜尋可以使用的鏡像
docker search nacos
# 拉取鏡像
docker pull nacos/nacos-server           

建立挂載目錄

mkdir -p /home/nacos/logs
mkdir -p /home/nacos/conf           

編輯檔案

vim /home/nacos/conf/application.properties

spring.datasource.platform=mysql

### Count of DB:
db.num=1

### Connect URL of DB:
db.url.0=jdbc:mysql://192.168.XXX.222:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=Asia/Shanghai
db.user.0=root
db.password.0=root           
vim /home/nacos/conf/cluster.conf

#2023-02-15T23:15:42.791581
192.168.XXX.222:8840
192.168.XXX.222:8850
192.168.XXX.222:8860           

第一種運作nacos容器的方法

docker  run -d \
--name nacos  \
-p 8848:8848 \
--privileged=true \
--restart=always \
-e JVM_XMS=256m \
-e JVM_XMX=256m \
-e JVM_XMN=256m \
-e MODE=standalone \
-e PREFER_HOST_MODE=hostname \
-v /data/nacos/logs:/home/nacos/logs \
-v /data/nacos/conf:/home/nacos/conf \
-v /data/nacos/conf/application.properties:/home/nacos/conf/application.properties \
nacos/nacos-server

# (不推薦,因為不能連接配接資料庫,進行持久化)           

第二種運作nacos容器的方法

#推薦使用這種方式,可以連接配接自己的資料庫
docker run -d
--name nacos \
--restart=always \
-e PREFER_HOST_MODE=hostname \
-e NACOS_APPLICATION_PORT=8848 \
-e MODE=standalone \
-e JVM_XMS=256m \
-e JVM_XMX=256m \
-e JVM_XMN=256m \
-e SPRING_DATASOURCE_PLATFORM=mysql \
-e MYSQL_SERVICE_HOST=192.168.0.12 \
-e MYSQL_SERVICE_PORT=3306 \
-e MYSQL_SERVICE_DB_NAME=nacos_config \
-e MYSQL_SERVICE_USER=root \
-e MYSQL_SERVICE_PASSWORD=root \
-p 8848:8848 \
-p 9848:9848 \
-p 9849:9849 \
nacos/nacos-server           

操作nacos容器

#進入nacos
docker exec -it nacos /bin/bash

#把nacos的配置檔案複制到主機上面,進行檢視日志之類的操作
docker cp -a nacos:/home/nacos /home/docker/
  
#删除複制的檔案
rm -rf /home/docker/nacos

#如果需要強制删除nacos容器,執行下面的指令
docker rm -f nacos           

搭建nacos叢集

機器 ip
node1 10.19.11.215
node2 10.19.11.217
node3 10.19.23.114
  • 模闆1
docker run -d \
--name nacos_cluster_1 \
--restart=always \
-e PREFER_HOST_MODE=hostname \
-e MODE=cluster \
#此節點的端口
-e NACOS_APPLICATION_PORT=8848 \
#叢集所有的ip
-e NACOS_SERVERS="10.19.11.215:8848 10.19.11.217:8848 10.19.23.114:8848" \
#使用mysql存儲
-e SPRING_DATASOURCE_PLATFORM=mysql \
#mysql的位址
-e MYSQL_SERVICE_HOST=11.22.33.44 \
#mysql端口
-e MYSQL_SERVICE_PORT=3306 \
#mysql使用者名
-e MYSQL_SERVICE_USER=root \
#mysql密碼
-e MYSQL_SERVICE_PASSWORD=root \
#nacos庫名字
-e MYSQL_SERVICE_DB_NAME=nacos_config \
#此節點的内網ip,每個節點的ip都不一樣
-e NACOS_SERVER_IP=10.19.11.215 \
#挂載的端口,nacos2.0新增了9848,9849端口
-p 8848:8848 \
-p 9848:9848 \
-p 9849:9849 \
nacos/nacos-server:v2.0.4           
  • 模闆2
docker run -d \
--name nacos_cluster_2 \
--restart=always \
-e PREFER_HOST_MODE=hostname \
-e MODE=cluster \
#此節點的端口
-e NACOS_APPLICATION_PORT=8848 \
#叢集所有的ip
-e NACOS_SERVERS="10.19.11.215:8848 10.19.11.217:8848 10.19.23.114:8848" \
#使用mysql存儲
-e SPRING_DATASOURCE_PLATFORM=mysql \
#mysql的位址
-e MYSQL_SERVICE_HOST=11.22.33.44 \
#mysql端口
-e MYSQL_SERVICE_PORT=3306 \
#mysql使用者名
-e MYSQL_SERVICE_USER=nacos_mysql \
#mysql密碼
-e MYSQL_SERVICE_PASSWORD=nacos_pwd \
#nacos庫名字
-e MYSQL_SERVICE_DB_NAME=cloud_nacos \
#此節點的内網ip,每個節點的ip都不一樣
-e NACOS_SERVER_IP=10.19.11.217 \
#挂載的端口,nacos2.0新增了9848,9849端口
-p 8848:8848 \
-p 9848:9848 \
-p 9849:9849 \
nacos/nacos-server:v2.0.4           
  • 模闆3
docker run -d \
--name nacos_cluster_3 \
--restart=always \
-e PREFER_HOST_MODE=hostname \
-e MODE=cluster \
#此節點的端口
-e NACOS_APPLICATION_PORT=8848 \
#叢集所有的ip
-e NACOS_SERVERS="10.19.11.215:8848 10.19.11.217:8848 10.19.23.114:8848" \
#使用mysql存儲
-e SPRING_DATASOURCE_PLATFORM=mysql \
#mysql的位址
-e MYSQL_SERVICE_HOST=11.22.33.44 \
#mysql端口
-e MYSQL_SERVICE_PORT=3306 \
#mysql使用者名
-e MYSQL_SERVICE_USER=nacos_mysql \
#mysql密碼
-e MYSQL_SERVICE_PASSWORD=nacos_pwd \
#nacos庫名字
-e MYSQL_SERVICE_DB_NAME=cloud_nacos \
#此節點的内網ip,每個節點的ip都不一樣
-e NACOS_SERVER_IP=10.19.23.114 \
#挂載的端口,nacos2.0新增了9848,9849端口
-p 8848:8848 \
-p 9848:9848 \
-p 9849:9849 \
nacos/nacos-server:v2.0.4           
  • 通路端口
10.19.11.215:8848  node1
10.19.11.217:8848  node2
10.19.23.114:8848  node3           
  • nacos1
docker run -itd \
    --name nacos-server-01 \
    -e PREFER_HOST_MODE=hostname \
    -e MODE=cluster \
    -e SPRING_DATASOURCE_PLATFORM=mysql \
    -e MYSQL_SERVICE_HOST=192.168.XXX.222 \
    -e MYSQL_SERVICE_PORT=3306 \
    -e MYSQL_SERVICE_USER=root \
    -e MYSQL_SERVICE_PASSWORD=root \
    -e MYSQL_SERVICE_DB_NAME=nacos_config \
    -e NACOS_SERVER_PORT=8848 \
		-e NACOS_APPLICATION_PORT=8846 \
    -e NACOS_SERVERS="192.168.XXX.222:8846 192.168.XXX.222:8847 192.168.XXX.222:8848" \
    -e JVM_XMS=256m \
		-e JVM_XMX=256m \
    -e JVM_XMN=256m \
    --network host \
    --restart=always \
    -p 8846:8848 \
    nacos/nacos-server           
  • nacos2
docker run -itd \
    --name nacos-server-02 \
		-e PREFER_HOST_MODE=hostname \
    -e MODE=cluster \
    -e SPRING_DATASOURCE_PLATFORM=mysql \
    -e MYSQL_SERVICE_HOST=192.168.XXX.222 \
    -e MYSQL_SERVICE_PORT=3306 \
    -e MYSQL_SERVICE_USER=root \
    -e MYSQL_SERVICE_PASSWORD=root \
    -e MYSQL_SERVICE_DB_NAME=nacos_config \
    -e NACOS_SERVER_PORT=8848 \
	  -e NACOS_APPLICATION_PORT=8847 \
    -e NACOS_SERVERS="192.168.XXX.222:8846 192.168.XXX.222:8847 192.168.XXX.222:8848" \
    -e JVM_XMS=256m \
		-e JVM_XMX=256m \
    -e JVM_XMN=256m \
    --network host \
    --restart=always \
    -p 8847:8848 \
    nacos/nacos-server           
  • nacos3
docker run -itd \
    --name nacos-server-03 \
		-e PREFER_HOST_MODE=hostname \
    -e MODE=cluster \
    -e SPRING_DATASOURCE_PLATFORM=mysql \
    -e MYSQL_SERVICE_HOST=192.168.XXX.222 \
    -e MYSQL_SERVICE_PORT=3306 \
    -e MYSQL_SERVICE_USER=root \
    -e MYSQL_SERVICE_PASSWORD=Peng2022 \
    -e MYSQL_SERVICE_DB_NAME=nacos_config \
    -e NACOS_SERVER_PORT=8848 \
		-e NACOS_APPLICATION_PORT=8848 \
    -e NACOS_SERVERS="192.168.XXX.222:8846 192.168.XXX.222:8847 192.168.XXX.222:8848" \
    -e JVM_XMS=256m \
		-e JVM_XMX=256m \
    -e JVM_XMN=256m \
    --network host \
    --restart=always \
    -p 8848:8848 \
    nacos/nacos-server
           

nginx配置負載均衡

  • 編輯nginx.conf檔案
stream {
	#用戶端gRPC請求服務端端口,用于用戶端向服務端發起連接配接和請求
    upstream nacosGrpc {
        server 10.19.11.215:9848;
        server 10.19.11.217:9848;
        server 10.19.23.114:9848;
    }

    server {
    	#nginx暴露的grpc端口
        listen 9848;
        proxy_pass nacosGrpc;
    }
}

events {
    worker_connections  1024;
}

http {
	#nacos UI 8848端口
   upstream nacosClu {
        server 10.19.11.215:8848;
        server 10.19.11.217:8848;
        server 10.19.23.114:8848;
    }

    server {
        listen       8848;
        # 需要通路nacos UI的Ip
        server_name  127.0.0.1;

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