Spring Cloud Alibaba(7)---docker-compose搭建nacos1.4.0叢集

雨點的名字發表於2021-05-07

docker-compose搭建nacos1.4.0叢集

有關Nacos之前寫過四篇文章。

Spring Cloud Alibaba(3)---Nacos概述

Spring Cloud Alibaba(4)---Nacos(註冊中心)

Spring Cloud Alibaba(5)---Nacos(配置中心)

Spring Cloud Alibaba(6)---Nacos持久化Mysql8.0版本

一、專案概述

1、技術選型

專案總體技術選型

CentOS 7.6 + Nacos 1.4.0 + MYSQL 8.0.22 + docker-compose 1.24.1 + docker 1.13.1

2、伺服器配置

Spring Cloud Alibaba(7)---docker-compose搭建nacos1.4.0叢集

因為自己只有兩臺阿里雲伺服器,所以這裡Nacos叢集數就兩個。Mysql主從之前就搭建好了,這裡就不描述搭建的過程。

3、流程圖

Spring Cloud Alibaba(7)---docker-compose搭建nacos1.4.0叢集

有關 微服務和Nginx叢集 也不再這篇講述。這篇就是搭建好Nacos叢集。

4、叢集方式

其實叢集的方式有兩種,一種是單機叢集,一種是多機叢集

單機叢集: 在同一臺伺服器上,啟動多個Nacos,組成叢集。他們的Ip地址是一樣的,只是埠號不一樣(192.168.1.1:8848,192.168.1.1:8849,192.168.1.1:8850)
多機叢集: 在不同伺服器上,每臺伺服器啟動一個nacos,組成叢集。他們的Ip地址是不一樣的,但埠號可以一樣(192.168.1.1:8848,192.168.1.2:8848,192.168.1.3:8848)

我們這邊採用的是第二種方式(多機叢集),其實第一種可以理解成偽叢集,第二種才是真叢集。

5、和官方docker-compose搭建nacos叢集差異

其實官方對 docker-compose搭建nacos叢集 有提供專案拿來即用。官方地址:Nacos Docker

如果你只想在一臺伺服器上部署叢集,那麼跟著上面的教程,非常方便的就可以搭建單機叢集,甚至mysql和nginx 官方提供的 docker-compose.yaml 都一併構建好了。

我這邊和官方提供的主要區別在於

1、我們這邊是多機叢集,所以每臺伺服器上都需要一個 docker-compose.yaml,而且每臺伺服器只會啟動一個nacos。
2、有關mysql和nginx 我這邊是不需要通過 docker-compose.yaml生成對於容器,而是獨立出來重新搭建,在docker-compose.yaml配置中只是新增連線Mysql配置資料就可以了。

5、專案目錄

因為是通過docker-compose搭建nacos叢集,所以這裡只需要我們編寫好docker-compose.yml 檔案就好。它其實就相當於一個指令碼,下面是專案目錄,具體檔案我會放在

Github上,文章下方會提供地址。

nacos-docker
├── init.d
│   └── custom.properties
├── nacos-1
│   └── docker-compose-nacos-1.yml
└── nacos-2
    └── docker-compose-nacos-2.yml

目錄說明

init.d/custom.properties - 官方提供的自選功能配置檔案,Nacos節點均包含此目錄
nacos-1/docker-compose-nacos-1.yml - 第一個Nacos節點的Docker-compose配置檔案
nacos-2/docker-compose-nacos-2.yml - 第二個Nacos節點的Docker-compose配置檔案

二、配置檔案詳解

通過三面目錄可以看出,一共就三個檔案,這裡詳解展示下檔案具體配置

1、custom.properties

這個是每個nacos公用的,跟官方保持一致即可

#spring.security.enabled=false
#management.security=false
#security.basic.enabled=false
#nacos.security.ignore.urls=/**
#management.metrics.export.elastic.host=http://localhost:9200
# metrics for prometheus
management.endpoints.web.exposure.include=*

# metrics for elastic search
#management.metrics.export.elastic.enabled=false
#management.metrics.export.elastic.host=http://localhost:9200

# metrics for influx
#management.metrics.export.influx.enabled=false
#management.metrics.export.influx.db=springboot
#management.metrics.export.influx.uri=http://localhost:8086
#management.metrics.export.influx.auto-create-db=true
#management.metrics.export.influx.consistency=one
#management.metrics.export.influx.compressed=true

2、docker-compose-nacos-1.yml

這裡將docker-compose-nacos-1.yml在 47.19.203.55上啟動。

version: '3' 
services:
  # nacos-server服務註冊與發現,配置中心服務    
  docker-nacos-server:
    image: nacos/nacos-server:1.4.0
    container_name: nacos-server-1
    ports:
      - "8848:8848"
      - "9555:9555"
    networks: 
      - nacos_net
    restart: on-failure
    privileged: true
    environment:
      PREFER_HOST_MODE: ip #如果支援主機名可以使用hostname,否則使用ip,預設也是ip
      SPRING_DATASOURCE_PLATFORM: mysql #資料來源平臺 僅支援mysql或不儲存empty
      NACOS_SERVER_IP: 47.19.203.55 #多網路卡情況下,指定ip或網路卡
      NACOS_SERVERS: 47.19.203.55:8848 118.11.224.65:8848 #叢集中其它節點[ip1:port ip2:port ip3:port]
      MYSQL_SERVICE_HOST: 47.19.203.55
      MYSQL_SERVICE_PORT: 3306
      MYSQL_SERVICE_USER: root
      MYSQL_SERVICE_PASSWORD: root
      MYSQL_SERVICE_DB_NAME: nacos
      MYSQL_SERVICE_DB_PARAM: characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&allowPublicKeyRetrieval=true&serverTimezone=GMT%2B8
      #JVM調優引數
      JVM_XMS:  128m
      JVM_XMX:  128m
      JVM_XMN:  128m
      #JVM_MS:   #-XX:MetaspaceSize default :128m
      #JVM_MMS:  #-XX:MaxMetaspaceSize default :320m
      #NACOS_DEBUG: n #是否開啟遠端debug,y/n,預設n
      #TOMCAT_ACCESSLOG_ENABLED: true #是否開始tomcat訪問日誌的記錄,預設false
    volumes:
      - ./cluster-logs/nacos1:/home/nacos/logs #日誌輸出目錄
      - ../init.d/custom.properties:/home/nacos/init.d/custom.properties #../init.d/custom.properties內包含很多自定義配置,可按需配置

networks:
  nacos_net:
    driver: bridge

3、docker-compose-nacos-2.yml

這裡將docker-compose-nacos-2.yml在 118.11.224.65上啟動。

version: '3' 
services:
  # nacos-server服務註冊與發現,配置中心服務    
  docker-nacos-server:
    image: nacos/nacos-server:1.4.0
    container_name: nacos-server-1
    ports:
      - "8848:8848"
      - "9555:9555"
    networks: 
      - nacos_net
    restart: on-failure
    privileged: true
    environment:
      PREFER_HOST_MODE: ip #如果支援主機名可以使用hostname,否則使用ip,預設也是ip
      SPRING_DATASOURCE_PLATFORM: mysql #資料來源平臺 僅支援mysql或不儲存empty
      NACOS_SERVER_IP: 118.11.224.65 #多網路卡情況下,指定ip或網路卡
      NACOS_SERVERS: 47.19.203.55:8848 118.11.224.65:8848 #叢集中其它節點[ip1:port ip2:port ip3:port]
      MYSQL_SERVICE_HOST: 47.19.203.55
      MYSQL_SERVICE_PORT: 3306
      MYSQL_SERVICE_USER: root
      MYSQL_SERVICE_PASSWORD: root
      MYSQL_SERVICE_DB_NAME: nacos
      MYSQL_SERVICE_DB_PARAM: characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&allowPublicKeyRetrieval=true&serverTimezone=GMT%2B8
      #JVM調優引數
      JVM_XMS:  128m
      JVM_XMX:  128m
      JVM_XMN:  128m
      #JVM_MS:   #-XX:MetaspaceSize default :128m
      #JVM_MMS:  #-XX:MaxMetaspaceSize default :320m
      #NACOS_DEBUG: n #是否開啟遠端debug,y/n,預設n
      #TOMCAT_ACCESSLOG_ENABLED: true #是否開始tomcat訪問日誌的記錄,預設false
    volumes:
      - ./cluster-logs/nacos1:/home/nacos/logs #日誌輸出目錄
      - ../init.d/custom.properties:/home/nacos/init.d/custom.properties #../init.d/custom.properties內包含很多自定義配置,可按需配置

networks:
  nacos_net:
    driver: bridge

4、總結配置

1、這裡需要注意的是,預設 JVM_XMSJVM_XMX 需要 2g,對我來講太大了,所以這裡改了小點,這樣就不會記憶體溢位。

2、從Nacos 1.3.1版本開始,資料庫儲存已經升級到8.0,並且它向下相容,所以我們不需要對於mysql8配置做特別處理了。

3、這裡只需要配置master的mysql,不需要配置slave的mysql。這個官方也做了很好的解釋。移除資料庫主從映象配置

後續所有映象都會移除主從映象相關屬性,具體移除和替換屬性如下:

Spring Cloud Alibaba(7)---docker-compose搭建nacos1.4.0叢集

三、部署到伺服器

1、上傳檔案伺服器

我先在本地把上面檔案建立好並壓縮,然後將壓縮打包到伺服器中

scp  nacos-docker.zip root@47.19.203.55:
scp  nacos-docker.zip root@118.11.224.65:

兩臺伺服器,都上傳同一份檔案,只是啟動的docker-compose.yml不是同一個

#解壓
unzip nacos-docker.zip
#移動到指定位置
cp -r nacos-docker /usr/local/nacos

2、啟動容器

分別在各主機上進入各自對應的nacos目錄中,啟動容器,命令如下:

47.19.203.55伺服器

$ cd nacos-docker/nacos-1
$ docker-compose -f docker-compose-nacos-1.yml up -d

118.11.224.65伺服器

$ cd nacos-docker/nacos-2
$ docker-compose -f docker-compose-nacos-2.yml up -d

啟動後訪問(記得放開8848埠)

47.19.203.55:8848/nacos
118.11.224.65:8848/nacos

如果訪問失敗,那麼對日誌中檢視錯誤日誌

tail -f cluster-logs/nacos*/nacos.log

四、測試

1、訪問客戶端

訪問 下面 任意一個。

47.19.203.55:8848/nacos
118.11.224.65:8848/nacos
Spring Cloud Alibaba(7)---docker-compose搭建nacos1.4.0叢集

從圖中看出,叢集已經配置成功。而這個47.19.203.55:8848其實是主節點。

2、微服務配置

這裡微服務配置也需要稍微改動下

spring:
  cloud:
    nacos:
      config:
        server-addr: 47.19.203.55:8848,118.11.224.65:8848 #Nacos配置中心地址
        file-extension: yaml #檔案擴充格式

Github地址:nacos-docker


參考

1、官方Nacos Docker

2、Nacos高可用叢集解決方案-Docker版本,基於Nacos 1.0.1

3、docker搭建nacos server叢集



少說多做,句句都會得到別人的重視;多說少做,句句都會受到別人的忽視。(7)

相關文章