微服務(wù)管理平臺nacos虛擬ip負載均衡集群模式搭建

      網(wǎng)友投稿 781 2025-04-07

      一、Nacos簡介

      Nacos是用于微服務(wù)管理的平臺,其核心功能是服務(wù)注冊與發(fā)現(xiàn)、服務(wù)配置管理。

      Nacos作為服務(wù)注冊發(fā)現(xiàn)組件,可以替換Spring Cloud應(yīng)用中傳統(tǒng)的服務(wù)注冊于發(fā)現(xiàn)組件,如:Eureka、consul等,支持服務(wù)的健康檢查。

      Nacos作為服務(wù)配置中心,可以替換Spring Cloud Config。

      當(dāng)然Nacos作為一個微服務(wù)管理平臺,除了面向spring Cloud,還支持很多其他的微服務(wù)基礎(chǔ)設(shè)施,如:docker、dubbo、kubernetes等。除了核心的服務(wù)注冊與發(fā)現(xiàn)和配置管理功能,還提供了各種服務(wù)管理的功能特性,如:動態(tài)DNS、服務(wù)元數(shù)據(jù)管理等。

      二、Nacos單點部署

      Nacos支持單點部署的模式,搭建過程非常簡單,實際上nacos的standalone模式?jīng)]有所謂的安裝過程,就是下載和啟動。但是這種情況沒有高可用支持,所以只適合測試或?qū)W習(xí)使用。首先去nacos的github地址下載release安裝包。當(dāng)然你也可以自己下載源碼之后進行編譯打包,nacos是使用java開發(fā)的,使用maven進行編譯打包。這里我們就不自己打包了,使用release安裝包。-是:https://github.com/alibaba/nacos/releases。在linux系統(tǒng)下可以使用如下的命令下載和解壓縮。

      #下載nacos wget https://github.com/alibaba/nacos/releases/download/1.1.4/nacos-server-1.1.4.tar.gz; # 解壓nacos tar -xvf nacos-server-1.1.4.tar.gz

      進入到nacos/bin目錄下面,startup命令用于啟動nacos,shutdown命令用于停掉nacos。

      如果你是linux/unix系統(tǒng),使用sh startup.sh -m standalone腳本啟動方式。

      如果你是windows系統(tǒng),雙擊startup.cmd啟動nacos。

      nacos的默認服務(wù)端口是8848,啟動完成之后通過瀏覽器訪問nacos:http://ip:8848/nacos/。看到如下界面,需要登陸,默認的用戶名密碼都是nacos,登陸之后看到如下界面:

      如果你訪問不到上面的界面,請檢查你部署的主機操作系統(tǒng)的防火墻設(shè)置。以下是為CentOS7系統(tǒng)防火墻開放8848端口的命令,其他系統(tǒng)請自行解決。

      firewall-cmd --zone=public --add-port=8848/tcp --permanent firewall-cmd --reload

      三、查看主機網(wǎng)卡名稱

      使用ip addr命令查看linux主機的網(wǎng)卡。

      第一個lo網(wǎng)絡(luò)ip是回路ip,127.0.0.1,這個是標配

      第二個enp0s3網(wǎng)絡(luò)設(shè)備,ip是10.0.2.15,這個是因為我的服務(wù)器網(wǎng)絡(luò)使用了雙網(wǎng)卡:橋接 HostOnly模式。正常的服務(wù)器是沒有的。

      第三個enp0s8就是本服務(wù)器真正的使用到提供服務(wù)的網(wǎng)絡(luò)ip,如:192.168.161.4。

      第四個網(wǎng)絡(luò)設(shè)備是因為我在這臺虛擬機上安裝過docker,所以有一個docker0的網(wǎng)絡(luò)設(shè)備。

      因為較多的網(wǎng)絡(luò)設(shè)備,導(dǎo)致我在后續(xù)安裝過程出現(xiàn)問題。這里先賣個關(guān)子。

      四、配置nacos集群

      我們準備了三臺服務(wù)器(虛擬機),192.168.161.3、192.168.161.4、192.168.161.5。在三臺服務(wù)器上分別下載、解壓nacos,并開放8848端口。參考單點standalone部署的模式的操作。然后在conf/cluster.conf中加入三臺服務(wù)器的ip配置

      #ip:port 192.168.161.3:8848 192.168.161.4:8848 192.168.161.5:8848

      初始化 MySQL 數(shù)據(jù)庫,sql源文件是在nacos/conf解壓目錄下面的nacos-mysql.sql文件。sql語句源文件。并在nacos/conf/application.properties中增加mysql配置

      spring.datasource.platform=mysql db.num=1 db.url.0=jdbc:mysql://192.168.161.3:3306/testdb?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true db.user=test db.password=

      spring.datasource.platform說明支持數(shù)據(jù)持久化的數(shù)據(jù)庫類型,已知目前只支持mysql

      db.num數(shù)據(jù)庫的數(shù)量,我們實驗環(huán)境只有一個MySql數(shù)據(jù)庫,所以是1

      db.url.0表示第一個MySql數(shù)據(jù)庫的jdbc url連接。如果還有第二個、第三個,請增加db.url.n中的n。

      問題: 解決網(wǎng)卡獲取的不是我們希望綁定的網(wǎng)卡的問題:當(dāng)我們配置完成之后,使用startup.sh命令啟動。發(fā)現(xiàn)集群節(jié)點列表中并沒有任何記錄。而且后臺服務(wù)日志報錯,內(nèi)容如下:

      分析: 通過日志我們看到nacos程序自動獲取的是10.0.2.15這個ip,而我們配置的是192.168.161.x的ip。二者不一致,所以報錯。我們看一下獲取主機ip的程序源碼,如下:

      private static String getHostAddress() { String address = System.getProperty("nacos.server.ip"); if (StringUtils.isNotEmpty(address)) { return address; } else { address = "127.0.0.1"; } ... }

      解決方案: 看完源碼之后,ip是通過System.getProperty獲取的,所以我們完全可以通過JVM傳參指定ip。在startup.sh的啟動腳本中增加nacos.server.ip參數(shù)。

      #================================================================================= # JVM Configuration #================================================================================ # 單機模式對應(yīng)的啟動參數(shù) if [[ "${MODE}" == "standalone" ]]; then JAVA_OPT="${JAVA_OPT} -Xms512m -Xmx512m -Xmn256m" JAVA_OPT="${JAVA_OPT} -Dnacos.standalone=true" else # 集群模式對應(yīng)的啟動參數(shù) JAVA_OPT="${JAVA_OPT} -server -Xms2g -Xmx2g -Xmn1g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m" JAVA_OPT="${JAVA_OPT} -XX:-OmitStackTraceInFastThrow -XX: HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=${BASE_DIR}/logs/java_heapdump.hprof" JAVA_OPT="${JAVA_OPT} -XX:-UseLargePages" # 新增以下參數(shù)設(shè)置本機ip地址 JAVA_OPT="${JAVA_OPT} -Dnacos.server.ip=你的服務(wù)器的ip" fi

      當(dāng)以上工作都完成之后,我們通過瀏覽器分別訪問nacos服務(wù),看到如下界面。集群管理的節(jié)點列表里面已經(jīng)有三各節(jié)點,ip分別是192.168.161.3:8848、192.168.161.4:8848、192.168.161.5:8848。

      五、nacos集群架構(gòu)

      在完成nacos集群的配置之后,我們可以通過三個入口分別訪問集群內(nèi)的nacos服務(wù),那下面的問題就是如何將三個入口轉(zhuǎn)成一個入口。目前許多個人開發(fā)者寫的博客或教程中的方法就是在三個nacos服務(wù)的前端加一個負載均衡器,如:nginx、haproxy。然后號稱是生產(chǎn)級別的搭建方法,但這種方法是絕對不能用于生產(chǎn)的,因為你的nginx和haproxy是單點,一旦nginx掛了,整個服務(wù)就掛了。

      nacos官網(wǎng)推薦的方法是使用虛擬ip的方法,如下:

      最開始虛擬ip192.168.161.6可能與192.168.161.3的主機綁定在一起,通過這兩個ip都可以訪問192.168.161.3主機的nacos服務(wù)。

      一旦192.168.161.3主機宕機或者其他網(wǎng)絡(luò)故障,192.168.161.6會自動切換到與192.168.161.4或者192.168.161.5主機綁定在一起。這個過程被叫做虛擬ip的漂移。

      這種虛擬ip的方法就是沒有使用到負載均衡,訪問的仍然是某一個節(jié)點的nacos服務(wù),只不過形成了主從備份,提供了高可用。那既可以提供高可用,又可以提供負載均衡的辦法可能有的朋友已經(jīng)想到了,如下圖:

      在nacos服務(wù)的前端加上nginx或者haproxy的負載均衡器

      然后對負載均衡器使用虛擬ip,通過keepalived實現(xiàn)虛擬ip的漂移

      用戶訪問負載均衡器實現(xiàn)對nacos服務(wù)的訪問,主nginx掛掉,虛擬ip漂移到從nginx負載均衡提供服務(wù)

      六、nacos集群(虛擬ip漂移)

      我們就拿官網(wǎng)中推薦的方法,使用虛擬ip訪問nacos集群的方式做個例子講解一下。為什么不講第三種?一般系統(tǒng)架構(gòu)水平到了的人聽懂這種方式就知道第三種方式怎么做,水平不到的人聽了第三種仍然還是不懂。

      6.1.安裝配置keepalived

      在三臺服務(wù)器上分別安裝keepalived

      yum install -y keepalived

      在三臺服務(wù)器上分別修改/etc/keepalived/keepalived.conf

      vrrp_instance VI_1 { state MASTER interface enp0s8 virtual_router_id 51 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 123456 } virtual_ipaddress { 192.168.161.6 } }

      一臺服務(wù)器是MASTER,其他的服務(wù)器為BACKUP

      interface 配置為我們剛剛查看的網(wǎng)卡的名稱

      virtualrouterid 必須一致,表示這三臺服務(wù)器搶用一個虛擬ip。

      修改priority 優(yōu)先級,三臺服務(wù)器要不一樣,比如:100、101、102,優(yōu)先級最高的優(yōu)先使用虛擬ip。MASTER的優(yōu)先級一定要高于BACKUP主機

      advert_int 是幾臺服務(wù)器之間的同步檢查時間,1秒

      authentication 的設(shè)置必須一致,這樣這幾臺服務(wù)器才能通信

      修改virtual_ipaddress為三臺服務(wù)器所在網(wǎng)段內(nèi)未被占用的IP地址,比如:192.168.161.6

      6.2.修改防火墻CentOS7必須開放防火墻配置,否則三臺主機無法就虛擬ip的使用優(yōu)先級通信,將都是MASTER,都配置虛擬ip。

      firewall-cmd --direct --permanent --add-rule ipv4 filter INPUT 0 --protocol vrrp -j ACCEPT; firewall-cmd --reload;

      6.3.啟動keepalived服務(wù)

      微服務(wù)管理平臺nacos虛擬ip負載均衡集群模式搭建

      sudo systemctl restart keepalived.service

      期待您的關(guān)注

      向您推薦博主的系列文檔:《手摸手教您學(xué)習(xí)SpringBoot系列-16章97節(jié)》

      本文轉(zhuǎn)載注明出處(必須帶連接,不能只轉(zhuǎn)文字):字母哥博客。

      Docker 微服務(wù) 虛擬化 負載均衡緩存

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。

      上一篇:腳注/尾注橫線可以進行樣式修改嗎(怎么改腳注的樣式)
      下一篇:如何做虛線表格(制作虛線表格)
      相關(guān)文章
      亚洲国产成人91精品| 在线亚洲午夜理论AV大片| 色欲aⅴ亚洲情无码AV| 亚洲成AV人综合在线观看| 亚洲成在人天堂在线| 亚洲成av人片在线观看无码不卡| 久久精品亚洲乱码伦伦中文| 亚洲精品无码99在线观看| 337P日本欧洲亚洲大胆艺术图| 亚洲免费综合色在线视频| 亚洲AV日韩综合一区尤物| 亚洲中文字幕乱码熟女在线| 亚洲欧美日韩综合久久久久| 亚洲日产乱码一二三区别| 亚洲精品精华液一区二区| 亚洲国产区男人本色在线观看| 麻豆狠色伊人亚洲综合网站| 亚洲精品天堂在线观看| 亚洲成_人网站图片| 亚洲日韩国产二区无码| 亚洲AV永久无码精品网站在线观看| 亚洲av片在线观看| yy6080久久亚洲精品| 亚洲一级特黄无码片| 久久影视国产亚洲| 亚洲国产精品乱码一区二区| 无码乱人伦一区二区亚洲| 亚洲黄色片免费看| 亚洲色偷偷狠狠综合网| 亚洲成av人片天堂网老年人| 国产一区二区三区亚洲综合| 亚洲av综合日韩| 亚洲av无码乱码在线观看野外| 亚洲国产精品嫩草影院久久| 色噜噜亚洲精品中文字幕| 久久91亚洲人成电影网站| 亚洲图片一区二区| 亚洲乱码在线视频| 亚洲av永久无码一区二区三区| 亚洲高清成人一区二区三区| 日产国产精品亚洲系列|