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


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


一尿扯、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。

當然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安裝包。當然你也可以自己下載源碼之后進行編譯打包妇汗,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呛牲。

圖片: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擅羞,登陸之后看到如下界面:

圖片:瀏覽器訪問nacos

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

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

三、查看主機網(wǎng)卡設(shè)備

使用ip addr命令查看linux主機的網(wǎng)絡(luò)設(shè)備

圖片:主機網(wǎng)絡(luò)設(shè)備

  • 第一個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)卡的問題:當我們配置完成之后,使用startup.sh命令啟動婉商。發(fā)現(xiàn)集群節(jié)點列表中并沒有任何記錄渣叛。而且后臺服務(wù)日志報錯,內(nèi)容如下:

圖片:網(wǎng)卡獲取的不是我們希望綁定的網(wǎng)卡


分析: 通過日志我們看到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

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

圖片:nacos集群

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

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

圖片:nacos集群+負載均衡


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

圖片:nacos集群+虛擬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集群+負載均衡+虛擬ip

  • 在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)卡的名稱

  • virtual_router_id 必須一致并淋,表示這三臺服務(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ù)

sudo?systemctl?restart?keepalived.service

推薦:SpringBoot系列精品文章(16章97節(jié)),?http://springboot.zimug.com?
本號只做持續(xù)的知識輸出闯第,希望您能關(guān)注、評論填帽、轉(zhuǎn)發(fā)盲赊!您的支持是我不竭的創(chuàng)作動力敷扫!讓知識產(chǎn)生價值、讓程序員改變世界绘迁!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末缀台,一起剝皮案震驚了整個濱河市哮奇,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌哲身,老刑警劉巖贸伐,帶你破解...
    沈念sama閱讀 218,941評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件捉邢,死亡現(xiàn)場離奇詭異,居然都是意外死亡宠进,警方通過查閱死者的電腦和手機藐翎,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評論 3 395
  • 文/潘曉璐 我一進店門阱高,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人吼旧,你說我怎么就攤上這事未舟。” “怎么了员串?”我有些...
    開封第一講書人閱讀 165,345評論 0 356
  • 文/不壞的土叔 我叫張陵寸齐,是天一觀的道長渺鹦。 經(jīng)常有香客問我,道長毅厚,這世上最難降的妖魔是什么吸耿? 我笑而不...
    開封第一講書人閱讀 58,851評論 1 295
  • 正文 為了忘掉前任咽安,我火速辦了婚禮,結(jié)果婚禮上是偷,老公的妹妹穿的比我還像新娘募逞。我一直安慰自己,他們只是感情好刺啦,可當我...
    茶點故事閱讀 67,868評論 6 392
  • 文/花漫 我一把揭開白布玛瘸。 她就那樣靜靜地躺著苟蹈,像睡著了一般。 火紅的嫁衣襯著肌膚如雪渺绒。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,688評論 1 305
  • 那天,我揣著相機與錄音殷绍,去河邊找鬼。 笑死茶行,一個胖子當著我的面吹牛镰烧,可吹牛的內(nèi)容都是我干的怔鳖。 我是一名探鬼主播固蛾,決...
    沈念sama閱讀 40,414評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼艾凯,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了蜡感?” 一聲冷哼從身側(cè)響起恃泪,我...
    開封第一講書人閱讀 39,319評論 0 276
  • 序言:老撾萬榮一對情侶失蹤贝乎,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后却舀,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體锤灿,經(jīng)...
    沈念sama閱讀 45,775評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡但校,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了空执。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片穗椅。...
    茶點故事閱讀 40,096評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡匹表,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出默蚌,到底是詐尸還是另有隱情苇羡,我是刑警寧澤,帶...
    沈念sama閱讀 35,789評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站叉存,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏稿存。R本人自食惡果不足惜瞳秽,卻給世界環(huán)境...
    茶點故事閱讀 41,437評論 3 331
  • 文/蒙蒙 一寂诱、第九天 我趴在偏房一處隱蔽的房頂上張望痰洒。 院中可真熱鬧,春花似錦脯宿、人聲如沸泉粉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽歉井。三九已至,卻和暖如春躏嚎,著一層夾襖步出監(jiān)牢的瞬間菩貌,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評論 1 271
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留尾膊,地道東北人冈敛。 一個月前我還...
    沈念sama閱讀 48,308評論 3 372
  • 正文 我出身青樓鸣皂,卻偏偏與公主長得像寞缝,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子滩届,可洞房花燭夜當晚...
    茶點故事閱讀 45,037評論 2 355

推薦閱讀更多精彩內(nèi)容