閱讀目錄
關於nacos 集群部署,網上的示例往往不全或不可用,而官方的教程太簡單了。官方也提供了乙個 docker + nacos 的偽集群的 部署示例。但畢竟是 偽, 不能實際生產使用。
全網就幾乎就沒有乙個 完整的教程???!!!
怎麼辦呢? 自己動手吧。
資料庫用了 mysql, 其實nacos 也是支援mysql 主從集群的,不過簡單起見, 這裡就只用了乙個 mysql 節點。 mysql 是需要自己事先安裝 配置的(需要執行 nacos 提供的 conf/nacos-mysql.sql 指令碼)
這個其實很簡單。schema 名字不重要,重要的是 執行 nacos 的sql 指令碼就好了。
一般集群需要至少3個節點。我們先準備3臺機器: 192.168.11.200、192.168.11.196、192.168.11.126
nacos 的預設服務埠是 8848 ,但是由於 我們的機器上還有其他nacos 服務正在作用,所以, 我們這裡把埠改為 8748, 如下:
192.168.11.200:8748
192.168.11.196:8748
192.168.11.126:8748
執行下面的 shell (需要3個節點上都要執行!!):
unzip nacos-server-1.1.0.zip -d nacos-cluster && cd nacos-cluster/nacos && cp conf/cluster.conf.example conf/cluster.conf &&
spring.datasource.platform=mysql
上面的指令碼,需要按照情況修改, 主要是其中的 埠、 資料庫配置。 上面的指令碼 包括了 啟動 nacos。
如果 3個節點都能正常訪問了,那麼就表明集群部署基本正常了,如果有問題, 那麼可以檢視nacos 的日誌, 位於 logs目錄, 主要 是下面幾個日誌檔案:
3個節點都正常啟動之後, 可以分別登入 各個web 介面檢視 集群的節點、健康狀態:
最開始的時候, 所有節點都沒有啟動, 集群任期 應該都是0
(看到這個, 說明 3個節點都正常啟動了, 否則請檢查是否有步驟遺漏了!)
如果我們只啟動乙個節點,那麼它的狀態會是 candidate:
處於candidate 狀態的 集群會一直進行選舉, 從而任期也會一直增加:
最先啟動的節點, 一般就是 leader , 但這個時候還只是 準leader,需要至少多數節點都啟動了, 才能做乙個決斷。如下面的 126:
在沒有leader 產生之前, 集群會進行多次的選舉。 每次的選舉 任期會加1。 從而 最後會進行大概 2次的選舉, 從而 126 的任期是2;最後加入的 節點已經沒有了選舉的機會, 故直接作為 follower 加入, 其任期預設是0;
如果某乙個或某幾個節點都掛了, 只要剩餘節點不少於 1+ 1/n ,那麼 集群仍然能夠正常執行; 掛掉的節點重新加入集群後,如果此時集群已經有了leader, 那麼它的角色一般是follower, 它的任期是0( 就跟乙個新節點一樣的);
當然,如果集群的剩餘節點少於 1+ 1/n,集群仍然是可以工作的,只是已經無法保證 高可用了。
任期低節點一般是沒有資格參與選舉的,leader 一般是在 任期高的幾個節點之中產生(至少會有2個節點)。
如果把126 的nacos 殺掉,我們會觀察到 多個leader,其實這個時候的 126 已經死了, 至少集群保留它之前的狀態。同時 集群會重新選舉,如下,我們看到200 被選舉為 leader,126 的狀態被保留(其實他已經死掉了), 同時任期 +1:
在已經存在leader 的集群中,如果掛掉的節點不是 leader,那麼不會重新進行選舉。 掛掉的節點雖不可用(其狀態會一直保留直到重啟), 不會影響集群的使用。
如果我們又把 126 啟動起來, 那麼它的角色會是 follower,任期是0:
我們再把 200 的nacos 殺掉, 那麼又會產生新的 leader:
nacos 官方 有提供docker 的映象:nacos/nacos-server,我們拿來用即可:
docker run --name nacos --net=host --env mode=cluster --env nacos_servers="192.168.11.126:8748 192.168.11.196:8748 192.168.11.200:8748" --env mysql_database_num=1 --env mysql_master_service_host=192.168.11.200 --env mysql_master_service_port=3316 --env mysql_master_service_db_name=test3 --env mysql_master_service_user=root --env mysql_master_service_password=123456 --env nacos_server_port=8848 -d -p 8748:8848 nacos/nacos-server
上面的語句即啟動了 docker nacos ,同時通過env 設定了所有的相關的引數 比如資料庫、埠等。 特別需要注意的是, 網路模式是 host,也就是使用直接宿主機的網路, 這個是最簡單的nacos +docker 集群,否則我們可能需要做比較多的docker網路配置。 另外注意, --net=host 應該放在命令的前面, 不能放最後, 否則不會生效。
nacos_servers 是所有的節點+埠 配置,目前只能寫死, nacos 不提供自動擴容等功能。
如果配置有誤,我們只能刪除nacos 容器,重新配置 : docker stop nacos && docker rm nacos 。
3個節點都執行上面的命令之後,我們的nacos 集群就做好了!
http://ip1:port/openapi 直連ip模式,機器掛則需要修改ip才可以使用。
http://vip:port/openapi 掛載vip模式,直連vip即可,下面掛server真實ip,可讀性不好。
網域名稱 + vip模式,可讀性好,而且換ip方便,推薦模式
網域名稱的方式比較麻煩,暫不考慮。vip 的方式也稍稍麻煩。 這裡我使用 nginx 的方式。 nginx 做集群很簡單, 只要 nginx.conf 做如下的配置就好了:
upstream nacos_server
server
}8648 的nginx 提供的 nacos 服務介面,可以自定義。 我們訪問
,就可以看到:
我們可以簡單測試一下,殺掉 126 或 196 上的 nacos ,看服務是否正常。 後面,我們對微服務提供nacos服務的時候,只要配置這個nginx 埠就好了!!
### turn off security
spring.security.enabled=false
management.security=false
security.basic.enabled=false
nacos.security.ignore.urls=/**
#nacos.security.ignore.urls=/,/**/*.css,/**/*.js,/**/*.html,/**/*.map,/**/*.svg,/**/*.png,/**/*.ico,/console-fe/public/**,/v1/auth/login,/v1/console/health/**,/v1/cs/**,/v1/ns/**,/v1/cmdb/**,/actuator/**,/v1/console/server/**
另外,我們發現 nacos 的日誌實在增長太快, 可以tomcat.accesslog 關閉:
server.tomcat.accesslog.enabled=true – 改為false
另外,我們可以把 日誌級別調整一下,修改 conf/nacos-logback.xml 即可。
參考:
Nacos 集群部署
3個或3個以上nacos節點才能構成集群 ip port。請配置3個或3個以上節點 ip port 127.0.0.1 8848 127.0.0.1 8849 127.0.0.1 8850 例如 server.port 8850 nacos.inetutils.ip address 127.0.0....
Nacos 集群部署
資料庫用了 mysql,其實 nacos 也是支援 mysql 主從集群的,不過簡單起見,這裡就只用了乙個 mysql 節點。mysql 是需要自己事先安裝配置的 需要執行 nacos 提供的conf nacos mysql.sql指令碼 這個其實很簡單。schema 名字不重要,重要的是執行 na...
Nacos 集群部署
server1 192.168.103.98 8848 server2 192.168.103.99 8848 server3 192.168.103.100 8848 dbserver mysql 192.168.100.69 1.上傳nacos server 1.4.2 snapshot.tar...