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、服務器配置

因為自己只有兩台阿里雲服務器,所以這里Nacos集群數就兩個。Mysql主從之前就搭建好了,這里就不描述搭建的過程。
3、流程圖

有關 微服務和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_XMS 和 JVM_XMX 需要 2g,對我來講太大了,所以這里改了小點,這樣就不會內存溢出。
2、從Nacos 1.3.1版本開始,數據庫存儲已經升級到8.0,並且它向下兼容,所以我們不需要對於mysql8配置做特別處理了。
3、這里只需要配置master的mysql,不需要配置slave的mysql。這個官方也做了很好的解釋。移除數據庫主從鏡像配置
后續所有鏡像都會移除主從鏡像相關屬性,具體移除和替換屬性如下:

三、部署到服務器
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

從圖中看出,集群已經配置成功。而這個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 #文件拓展格式
discovery: #服務中心地址
server-addr: 47.19.203.55:8848,118.11.224.65:8848
Github地址
:nacos-docker
參考
2、Nacos高可用集群解決方案-Docker版本,基於Nacos 1.0.1
少說多做,句句都會得到別人的重視;多說少做,句句都會受到別人的忽視。(7)