Nacos高可用叢集解決方案-Docker版本
文章主旨
本文目的是配置高可用的Nacos叢集
架構圖
整體架構為:Nginx + 3 x Nacos +高可用MySQL
高可用MySQL使用主從複製結構的可以參考Docker搭建MySQL主從叢集,基於GTID
文中對應的配置檔案已經上傳Github,地址:https://github.com/hellxz/nacos-cluster-docker
測試環境
伺服器OS | 主機IP | Docker版本 |
---|---|---|
Ubuntu Server 18.04 LTS | 192.168.87.133 | 18.09.6 |
Ubuntu Server 18.04 LTS | 192.168.87.139 | 18.09.7 |
Ubuntu Desktop 18.04 LTS | 192.168.87.135 | 18.09.7 |
為了實現Nacos的高可用,至少需要三臺負載較小的伺服器,可以與其它服務共存
注意事項
- 這裡演示高可用MySQL地址為:
10.2.7.29:3340
,10.2.7.29:3341
,請自行替換- 這裡的
10.2.7.29
是區域網,192.168.*
是虛擬機器網路,通過虛擬機器是可以訪問區域網的- Nacos初始化SQL這塊使用官方的即可,配置檔案中不提供,預設認為高可用MySQL已經執行了初始化nacos.sql,這個SQL請移步nacos.sql Github
配置檔案目錄結構與說明
目錄說明
- init.d/custom.properties - 官方提供的自選功能配置檔案,Nacos節點均包含此目錄
- nacos-1/docker-compose-nacos1.yml - 第一個Nacos節點的Docker-compose配置檔案
- nacos-2/docker-compose-nacos1.yml - 第二個Nacos節點的Docker-compose配置檔案
- nacos-3/docker-compose-nacos1.yml - 第三個Nacos節點的Docker-compose配置檔案
除些之外,在每個nacos-*
目錄下邊,使用docker-compose命令啟動容器後,會創建出cluster-logs
我認為最常用的應該是nacos.log
配置檔案內容
133伺服器的docker-compose-nacos1.yml
version: '3'
services:
# nacos-server服務註冊與發現,配置中心服務
docker-nacos-server:
image: nacos/nacos-server:1.0.1
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: 192.168.87.133 #多網絡卡情況下,指定ip或網絡卡
NACOS_SERVERS: 192.168.87.133:8848 192.168.87.139:8848 192.168.87.135:8848 #叢集中其它節點[ip1:port ip2:port ip3:port]
MYSQL_MASTER_SERVICE_HOST: 10.2.7.29 #mysql配置,Master為主節點,Slave為從節點
MYSQL_MASTER_SERVICE_PORT: 3340
MYSQL_MASTER_SERVICE_DB_NAME: nacos
MYSQL_MASTER_SERVICE_USER: root
MYSQL_MASTER_SERVICE_PASSWORD: password
MYSQL_SLAVE_SERVICE_HOST: 10.2.7.29
MYSQL_SLAVE_SERVICE_PORT: 3341
#JVM調優引數
#JVM_XMS: #-Xms default :2g
#JVM_XMX: #-Xmx default :2g
#JVM_XMN: #-Xmn default :1g
#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
139伺服器的docker-compose-nacos2.yml
version: '3'
services:
# nacos-server服務註冊與發現,配置中心服務
docker-nacos-server:
image: nacos/nacos-server:1.0.1
container_name: nacos-server-2
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: 192.168.87.139 #多網絡卡情況下,指定ip或網絡卡
NACOS_SERVERS: 192.168.87.133:8848 192.168.87.139:8848 192.168.87.135:8848 #叢集中其它節點[ip1:port ip2:port ip3:port]
MYSQL_MASTER_SERVICE_HOST: 10.2.7.29 #mysql配置,Master為主節點,Slave為從節點
MYSQL_MASTER_SERVICE_PORT: 3340
MYSQL_MASTER_SERVICE_DB_NAME: nacos
MYSQL_MASTER_SERVICE_USER: root
MYSQL_MASTER_SERVICE_PASSWORD: password
MYSQL_SLAVE_SERVICE_HOST: 10.2.7.29
MYSQL_SLAVE_SERVICE_PORT: 3341
#JVM調優引數
#JVM_XMS: #-Xms default :2g
#JVM_XMX: #-Xmx default :2g
#JVM_XMN: #-Xmn default :1g
#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/nacos2:/home/nacos/logs #日誌輸出目錄
- ../init.d/custom.properties:/home/nacos/init.d/custom.properties #../init.d/custom.properties內包含很多自定義配置,可按需配置
networks:
nacos_net:
driver: bridge
135伺服器的docker-compose-nacos3.yml
version: '3'
services:
# nacos-server服務註冊與發現,配置中心服務
docker-nacos-server:
image: nacos/nacos-server:1.0.1
container_name: nacos-server-3
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: 192.168.87.135 #多網絡卡情況下,指定ip或網絡卡
NACOS_SERVERS: 192.168.87.133:8848 192.168.87.139:8848 192.168.87.135:8848 #叢集中其它節點[ip1:port ip2:port ip3:port]
MYSQL_MASTER_SERVICE_HOST: 10.2.7.29 #mysql配置,Master為主節點,Slave為從節點
MYSQL_MASTER_SERVICE_PORT: 3340
MYSQL_MASTER_SERVICE_DB_NAME: nacos
MYSQL_MASTER_SERVICE_USER: root
MYSQL_MASTER_SERVICE_PASSWORD: password
MYSQL_SLAVE_SERVICE_HOST: 10.2.7.29
MYSQL_SLAVE_SERVICE_PORT: 3341
#JVM調優引數
#JVM_XMS: #-Xms default :2g
#JVM_XMX: #-Xmx default :2g
#JVM_XMN: #-Xmn default :1g
#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/nacos3:/home/nacos/logs #日誌輸出目錄
- ../init.d/custom.properties:/home/nacos/init.d/custom.properties #../init.d/custom.properties內包含很多自定義配置,可按需配置
networks:
nacos_net:
driver: bridge
Nacos共用的init.d/custom.properties
,與官方保持一致,按需使用
#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
由於現在把所有的配置檔案放在一起,並且每個Nacos節點都需要一份
init.d
目錄,這裡就不單獨為每個nacos-*
複製了,直接把資料夾整個複製過來就可以了
啟動Nacos叢集
複製配置檔案
複製nacos-cluster-docker
目錄到以上三臺主機,上邊的配置檔案已經修改好了
其對應關係為:
- 192.168.87.133 對應 nacos-1
- 192.168.87.139 對應 nacos-2
- 192.168.87.135 對應 nacos-3
啟動容器
分別在各主機上進入各自對應的nacos目錄中,啟動容器,命令如下:
133伺服器
$ cd nacos-cluster-docker/nacos-1
$ docker-compose -f docker-compose-nacos1.yml up -d
139伺服器
$ cd nacos-cluster-docker/nacos-2
$ docker-compose -f docker-compose-nacos2.yml up -d
135伺服器
$ cd nacos-cluster-docker/nacos-3
$ docker-compose -f docker-compose-nacos3.yml up -d
檢視日誌
檢視日誌分別在對應的nacos-*目錄下,執行
tail -f tail -f cluster-logs/nacos*/nacos.log
訪問Nacos UI介面
這裡使用133伺服器頁面進行展示下,
訪問http://192.168.87.133:8848/nacos
,進入登入頁面,預設的使用者名稱與密碼都是nacos
我這裡還原的sql是平時測試用的,這裡打下碼,我們的關注點在 叢集管理 > 節點列表 這裡
這裡我們看到Nacos叢集各節點已經正常了,LEADER與FOLLOWER已經選出,一切正常了
配置Nginx
除了Nacos叢集配置外,我們在Spring Boot或Spring Cloud專案中使用的時候,只能指定一個URL指向Nacos服務端,這裡使用Nginx進行代理負載均衡
如果可以的話,生產環境最佳實踐是使用一個域名指向Nginx,之後就算換Nginx主機,客戶端也無需修改配置檔案,只需要使用域名指向一個新的Nginx的IP
列出最主要的配置
http{
upstream nacos-cluster {
server 192.168.87.133:8848;
server 192.168.87.139:8848;
server 192.168.87.135:8848;
}
server {
listen 8848;
location /{
proxy_pass http://nacos-cluster;
}
}
}
啟動Nginx,使用程式碼進行測試連線當前的Nginx所在主機IP:8848
這裡已經可以看到服務正常註冊到叢集中了
遇到的問題
客戶端無法註冊到叢集中
如果遇到有客戶端服務無法連線到Nacos叢集中,請著重檢查下Nacos的堆記憶體與虛擬機器的設定,最初我使用的預設的2G最大堆記憶體,虛擬機器也分的2G記憶體,然後啟動服務時還能正常一小會,然後就開始有的服務顯示節點,有的不顯示列表,使用客戶端進行連線也無法正常連線,提示Down Server response
之類 的提示
解決辦法:修改虛擬機器記憶體大小,或修改Nacos堆記憶體配置
本文到此結束,如果對你有幫助,歡迎評論、推薦、關注三連 :happy:
本文系Hellxz學習與實踐文章,禁止布布扣、碼迷、愛碼網等第三方爬蟲網站爬取,轉載請在醒目位置註明出處:https://www.cnblogs.com/hellxz/p/nacos-cluster-docker.h