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.html