在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

SpringCloud Alibaba之Nacos集群部署+高可用保證

jf_ro2CN3Fa ? 來源:CSDN ? 2023-06-05 16:46 ? 次閱讀

Nacos 集群的工作原理

官方推薦用戶把所有服務列表放到一個vip下面,然后掛到一個域名下面。

域名 + SLB模式(內網SLB,不可暴露到公網,以免帶來安全風險),可讀性好,而且換ip方便,推薦模式:

c61a0a6a-037b-11ee-90ce-dac502259ad0.png

Nacos 集群架構的設計要點:

微服務并不是直接通過 IP 地址訪問后端服務,而是采用域名訪問。通過 DNS(域名解析服務)轉換為具體的 IP 地址,通過域名方式屏蔽后端容易產生變化的 IP 地址。

底層 Nacos 自帶集群間節點與數據同步方案,因此需要 Nacos 節點對外暴露 8848 與 7848 端口。其中 8848 端口的作用是對外暴露 API 與集群間數據同步,而 7848 端口則用于節點選舉來確定集群領袖(Leader)。同時 Nacos 在集群環境下需要持久化應用配置、用戶權限、歷史信息等內置數據,因此需要額外部署 MySQL 數據庫提供統一存儲。

在 Nacos 層面,每一臺服務器都有獨立的 IP。我們并不建議直接將物理 IP 對外暴露,而是額外增加 VIP(虛擬 IP),通過 DNS 服務綁定 VIP,這樣的好處是通過 VIP 屏蔽了Nacos集群實際的物理IP地址,同時為訪問者提供了統一的接入入口,使微服務的注冊接入和Nacos 集群實現細節彼此解耦,提高架構的維護性。

Nacos集群部署

Linux部署

第一步,環境準備。

Nacos 因為選舉算法的特殊性,要求最少三個節點才能組成一個有效的集群。一般選舉算法都建議奇數個節點,2個節點的數據一致性可能無法保障。

c63343ea-037b-11ee-90ce-dac502259ad0.png

Nacos 采用 Raft 選舉算法構成集群

配置需要:

c65919da-037b-11ee-90ce-dac502259ad0.png

官方建議最低運行內存:

準備三臺服務器(虛擬機),在這三個節點上安裝好 JDK1.8,并配置 JAVA_HOME 環境變量。

此外還需要額外部署一臺 MySQL 數據庫用于保存 Nacos 的配置管理、權限控制信息。這里推薦版本為 MySQL5.7 或者 MySQL 8.0。

第二步,下載安裝 Nacos。

下載 Nacos 2.0.2 版本,上傳到每一臺 CentOS 服務器的 /usr/data 目錄下,執行解壓縮命令,生成 Nacos 目錄

tar-xvfnacos-server-2.0.2.tar.gz

第三步,配置數據庫。

使用任意 MySQL 客戶端工具連接到 MySQL 數據庫服務器,創建名為nacos_config的數據庫,之后使用 MySQL 客戶端執行 /usr/data/nacos/conf/nacos-mysql.sql 文件,完成建表工作。

c695457c-037b-11ee-90ce-dac502259ad0.png

nacos_config 數據庫初始化腳本

c6c8c848-037b-11ee-90ce-dac502259ad0.png

nacos_config 表結構

相關表說明:

config_* :所有 config_ 開頭的表都是 Nacos 配置中心使用時保存應用配置的表。

users:系統用戶表,在集群環境下用戶信息保存在 users 表中,而非在配置文件中。

roles:系統角色表,Nacos 的權限基于 RBAC(基于角色的訪問控制)模型設計,此表保存角色數據。

permissions: 系統權限表,說明角色與系統使用權限的對應關系。

第四步,配置 Nacos 數據源。

依次打開 3 臺 Nacos 服務器中的核心配置文件 application.properties,文件路徑如下:

/usr/data/nacos/conf/application.properties

定位到 36 行 Count of DB “數據源”配置附近,默認數據源配置都被#號注釋,刪除注釋按下方示例配置數據源即可。

>基于SpringBoot+MyBatisPlus+Vue&Element實現的后臺管理系統+用戶小程序,支持RBAC動態權限、多租戶、數據權限、工作流、三方登錄、支付、短信、商城等功能
>
>*項目地址:
>*視頻教程

#設置數據庫平臺為mysql
spring.datasource.platform=mysql

>基于SpringCloudAlibaba+Gateway+Nacos+RocketMQ+Vue&Element實現的后臺管理系統+用戶小程序,支持RBAC動態權限、多租戶、數據權限、工作流、三方登錄、支付、短信、商城等功能
>
>*項目地址:
>*視頻教程

#CountofDB:數據庫總數
db.num=1
#ConnectURLofDB:數據庫連接,根據你的實際情況調整
db.url.0=jdbc//xxx:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user=root
db.password=root

第五步,Nacos 集群節點配置

在 /nacos/config 目錄下提供了集群示例文件cluster.conf.example

c6f1b15e-037b-11ee-90ce-dac502259ad0.png

通過 cluster.conf.example 創建集群節點列表

首先利用復制命令創建 cluster.conf 文件。

cpcluster.conf.examplecluster.conf

之后打開 cluster.conf,添加所有 Nacos 集群節點 IP 及端口。

ip1:8848
ip2:8848
ip3:8848

每個nacos服務器上都需要設置cluster.conf文件,Nacos 通過 cluster.conf 了解集群節點的分布情況。

第六步,啟動 Nacos 服務器。

在 3 臺 Nacos 節點上分別執行下面的啟動命令。

sh/usr/local/nacos/bin/startup.sh

注意,集群模式下并不需要增加“-m”參數,默認就是以集群方式啟動。

啟動時可以通過 tail 命令觀察啟動過程。

tail-f/usr/local/nacos/logs/start.out

啟動日志關鍵內容如下:

#-Xms2g-Xmx2g默認運行時JVM要求2G可用內存
/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.275.b01-0.el7_9.x86_64/bin/java-server-Xms2g-Xmx2g...
...
#列出Nacos所有集群節點
INFOTheserverIPlistofNacosis[xxx1:8848,xxx2:8848,xxx3:8848]
...
#Nacos正在啟動
INFONacosisstarting...
...
#集群模式啟動成功,采用外置存儲MySQL數據庫
INFONacosstartedsuccessfullyinclustermode.useexternalstorage

當確保所有節點均啟動成功

登錄后便可看到集群列表。

c70c3e3e-037b-11ee-90ce-dac502259ad0.png

所有節點均已上線

UP 代表節點已就緒,DOWN 代表節點已離線,目前所有節點均已就緒。

第七步,微服務接入。

在開發好的微服務程序中,在 application.properties 配置 Nacos 集群的任意節點都可以完成接入工作,Nacos 內置的數據同步機制會保證各節點數據一致性。

#應用名稱,默認也是在微服務中注冊的微服務ID
spring.application.name=sample-service
#配置ip1/ip2/ip3都可以接入Nacos
spring.cloud.nacos.discovery.server-addr=ip1:8848,ip2:8848,ip3:8848
#連接Nacos服務器使用的用戶名、密碼,默認為nacos
spring.cloud.nacos.discovery.username=nacos
spring.cloud.nacos.discvery.password=nacos
#微服務提供Web服務的端口號
server.port=9000

啟動微服務后,訪問下面三個 URL,會發現服務列表的結果是一致的,這也證明集群模式下 Nacos 能夠保證各節點的數據同步。

http://ip1:8848/nacos/#/serviceManagement?dataId=&group=&appName=&namespace=
http://ip2:8848/nacos/#/serviceManagement?dataId=&group=&appName=&namespace=
http://ip3:8848/nacos/#/serviceManagement?dataId=&group=&appName=&namespace=

到這里 Nacos 集群的主體配置工作已完成,但僅會部署是遠不夠的,我們還需了解集群的內部運行機制。

docker部署(參考待驗證)

Nacos 集群的工作原理

Nacos 集群中 Leader 節點是如何產生的

Nacos 集群采用 Raft 算法實現。它是一種比較簡單的選舉算法,用于選舉出 Nacos 集群中最重要的 Leader(領導)節點。

c72d3b5c-037b-11ee-90ce-dac502259ad0.png

在 Nacos 集群中,每個節點都擁有以下三種角色中的一種。

Leader :領導者,集群中最重要的角色,用于向其他節點下達指令。

Candidate :參選者,參與競選 Leader 的節點。

Follower :跟隨者,用于接收來自 Leader 或者 Candidate 的請求并進行處理。

在集群中選舉出 Leader 是最重要的工作,產生選舉的時機有三個:

在 Nacos 節點啟動后,還沒有產生Leader時選舉;

集群成員總量變更時重新選舉;

當 Leader 停止服務后重新選舉。

在開始介紹選舉過程前,先理解任期(Term)的含義:

Raft 算法將時間劃分成為任意不同長度的任期(Term)。任期用連續的數字進行表示。每一個任期的開始都是一次選舉(Election),一個或多個候選人會試圖成為 Leader。

為了便于理解,我們使用文字+表格的形式說明選舉過程。

1.當最開始的時候,所有 Nacos 節點都沒有啟動。角色默認為 Follower(跟隨者),任期都是 0。

節點 角色 任期 狀態
ip1 Follower 0 down
ip2 Follower 0 down
ip3 Follower 0 down

2.當第一個節點(ip1)啟動后,節點角色會變為 Candidate(參選者),ip1 節點在每一個任期開始時便會嘗試向其他節點發出投票請求,征求自己能否成為 Leader(領導者)節點。只有算上自己獲得超過半數的選票,這個 Candidate 才能轉正為 Leader。

在當前案例,因為 ip1 發起選舉投票,但 ip2/ip3 兩個節點不在線,盡管 ip1 會投自己一票,但在總 3 票中未過半數,因此無法成為 Leader。因為第一次選舉沒有產生 Leader,過段時間在下一個任期開始時,ip1 任期自增加 1,同時會再次向其他節點發起投票請求爭取其他節點同意,直到同意票過半。

節點 角色 任期 狀態
ip1 Candidate 10 up
ip2 Follower 0 down
ip3 Follower 0 down

3.在 Raft 算法中,成為 Leader 的必要條件是某個 Candidate 獲得過半選票,如果 ip2 節點上線,遇到 ip1 再次發起投票。

ip2 投票給 ip1 節點,ip1 獲得兩票超過半數就會成為 Leader,ip2 節點自動成為 Follower(跟隨者)。之后 ip3 節點上線,因為集群中已有 Leader,因此自動成為 Follower。

節點 角色 任期 狀態
ip1 Leader 11 up
ip2 Follower 5 up
ip3 Follower 0 up

4.當 Leader 節點宕機或停止服務,會在剩余 2 個 Nacos 節點中產生新的 Leader。如下所示ip3獲得兩票成為 Leader,ip2 成為 Follower,ip1已經下線但角色暫時仍為 Leader。

節點 角色 任期 狀態
ip1 Leader 11 down
ip2 Follower 12 up
ip3 Leader 12 up

之后 ip1 恢復上線,但此時 Nacos 集群已有 Leader 存在,ip1 自動變為 Follower,且任期歸0。

節點 角色 任期 狀態
ip1 Follower 0 up
ip2 Follower 12 up
ip3 Leader 12 up

對于 Nacos 集群來說,只要 UP 狀態節點不少于"1+N/2",集群就能正常運行。但少于“1+N/2”,集群仍然可以提供基本服務,但已無法保證 Nacos 各節點數據一致性。

以上就是 Nacos 基于 Raft 算法的 Leader 選舉過程,確定 Leader 是維持 Nacos 集群數據一致的最重要前提,下面咱們來講解在微服務注冊時 Nacos 集群節點信息同步的過程。

Nacos 節點間的數據同步過程

c77b3776-037b-11ee-90ce-dac502259ad0.png

Nacos 節點間的數據同步過程:

在 Raft 算法中,只有 Leader 才擁有數據處理與信息分發的權利。因此當微服務啟動時,假如注冊中心指定為 Follower 節點,則步驟如下:

第一步,Follower 會自動將注冊心跳包轉給 Leader 節點;

第二步,Leader 節點完成實質的注冊登記工作;

第三步,完成注冊后向其他 Follower 節點發起“同步注冊日志”的指令;

第四步,所有可用的 Follower 在收到指令后進行“ack應答”,通知 Leader 消息已收到;

第五步,當 Leader 接收過半數 Follower 節點的 “ack 應答”后,返回給微服務“注冊成功”的響應信息。

此外,對于其他無效的 Follower 節點,Leader 仍會不斷重新發送,直到所有 Follower 的狀態與 Leader 保持同步。





審核編輯:劉清

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • JAVA
    +關注

    關注

    19

    文章

    2967

    瀏覽量

    104759
  • URL
    URL
    +關注

    關注

    0

    文章

    139

    瀏覽量

    15342
  • 虛擬機
    +關注

    關注

    1

    文章

    917

    瀏覽量

    28202
  • RBAC
    +關注

    關注

    0

    文章

    44

    瀏覽量

    9970
  • MYSQL數據庫
    +關注

    關注

    0

    文章

    96

    瀏覽量

    9391

原文標題:SpringCloud Alibaba 之 Nacos 集群部署+高可用保證

文章出處:【微信號:芋道源碼,微信公眾號:芋道源碼】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    LinuxHA可用集群知識,學到就是賺到

    HA(High Availability)可用集群,其特點為根據實際需求為前端Diretor,后端RS-server,數據庫服務器,共享存儲等集群節點做一個從備份服務器或者多個服務器
    的頭像 發表于 12-23 07:10 ?6399次閱讀

    Kubernetes Ingress 可靠部署最佳實踐

    摘要: 在Kubernetes集群中,Ingress作為集群流量接入層,Ingress的高可靠性顯得尤為重要,今天我們主要探討如何部署一套高性能可靠的Ingress接入層。簡介
    發表于 04-17 14:35

    Hadoop的集群環境部署說明

    或者是相同,指令多、步驟繁瑣。有的時候覺得不免覺得很奇怪,這些發行商為什么不對hadoop的集群環境部署做一下優化呢?幸運的是總算是讓我找到了一個hadoop發行版集群環境搭建簡單易用。這里使用的是一款
    發表于 10-12 15:51

    結合場景談一談微服務配置

    的機房發生不可抗的災難(如地震)時,我們需要有動態調度流量的能力,最好能秒級得將流量從區域 A 調度到另外可用的區域的集群上。這正是 Nacos 配置管理大有作為的地方,將用戶 ID 的分片和對應的路由
    發表于 12-12 15:53

    基于kafka和zookeeper可用集群的shell腳本使用步驟

    kafka+zookeeper可用集群搭建shell腳本使用教程
    發表于 03-11 16:50

    Flink集群部署方法

    Flink集群部署詳細步驟
    發表于 04-23 11:45

    redis集群的如何部署

    redis集群部署(偽分布式)
    發表于 05-29 17:13

    構建ARM64版本nacos docker鏡像

    在適配過程中有大量合作伙伴用到nacos且采用容器化部署,dockerhub未提供官方鏡像,因此需要在鯤鵬服務器自定義構建。構建前提:Docker已部署構建步驟:1、下載包含構建所需的腳本下載完成
    發表于 06-16 14:29

    淺談Kubernetes集群可用方案

    整個Kubernetes集群中處于中心數據庫的地位,為保證Kubernetes集群可用性,首先需要
    發表于 10-11 10:04 ?1次下載
    淺談Kubernetes<b class='flag-5'>集群</b>的<b class='flag-5'>高</b><b class='flag-5'>可用</b>方案

    Eureka的集群搭建方法-保證可用

    在微服務架構中,注冊中心是一個必不可少的組件 前面我們搭建的注冊中心只適合本地開發使用,在生產環境必須搭建一個集群保證可用 Eureka的集群
    發表于 11-29 10:41 ?7552次閱讀
    Eureka的<b class='flag-5'>集群</b>搭建方法-<b class='flag-5'>保證</b><b class='flag-5'>高</b><b class='flag-5'>可用</b>

    Nacos、OpenFeign、Ribbon組件協調工作的原理

    ? ? Nacos 如何進行服務自動注冊? Ribbon OpenFeign 總結 前幾天有個大兄弟問了我一個問題,注冊中心要集成SpringCloud,想實現SpringCloud的負載均衡,需要
    的頭像 發表于 05-22 10:46 ?1036次閱讀
    <b class='flag-5'>Nacos</b>、OpenFeign、Ribbon組件協調工作的原理

    如何搭建可用集群

    、Kubernetes 6、總結 1、可用 2、關于CP還是AP的選擇 3、技術體系 4、產品的活躍度 1、前言 微服務的注冊中心目前主流的有以下五種: Zookeeper Eureka Consul
    的頭像 發表于 05-25 11:03 ?592次閱讀
    如何搭建<b class='flag-5'>高</b><b class='flag-5'>可用</b><b class='flag-5'>集群</b>

    Nacos實現原理:SpringCloud集成Nacos的實現過程

    Protocol是一致性協議,用來實現Nacos集群節點的數據同步,這里使用的是Raft算法(Etcd、Redis哨兵選舉)
    發表于 10-09 16:08 ?1085次閱讀
    <b class='flag-5'>Nacos</b>實現原理:<b class='flag-5'>SpringCloud</b>集成<b class='flag-5'>Nacos</b>的實現過程

    springcloud alibaba 五大組件

    Spring Cloud Alibaba是Spring Cloud的一個子項目,該項目致力于為構建分布式應用提供一站式解決方案。它基于阿里巴巴的底層Java開源框架,主要包含以下五大組件: 服務注冊
    的頭像 發表于 12-03 16:30 ?2w次閱讀

    K8S學習教程(二):在 PetaExpress KubeSphere容器平臺部署可用 Redis 集群

    前言 Redis 是在開發過程中經常用到的緩存中間件,為了考慮在生產環境中穩定性和可用,Redis通常采用集群模式的部署方式。 在制定Redis
    的頭像 發表于 07-03 15:30 ?764次閱讀
    K8S學習教程(二):在 PetaExpress KubeSphere容器平臺<b class='flag-5'>部署</b><b class='flag-5'>高</b><b class='flag-5'>可用</b> Redis <b class='flag-5'>集群</b>
    主站蜘蛛池模板: 日本污视频网站| 欧美a在线播放| 欧美日本一区二区三区道| 国产裸体美女视频全黄| 久久久久久久久久免观看| 日本边添边爱边摸边做边爱| 色秀视频免费网站在线观看| 高清一级做a爱视频免费| 精品视频69v精品视频| 成人免费的性色视频| 国产精品理论| 亚洲国产日韩精品怡红院| 国产三级网| 1024你懂的在线播放欧日韩| 一个色在线| xxx86日本人| 午夜小网站| 婷婷在线免费观看| 又污又黄的网站| 国产美女精品在线| 国产高清在线观看| 口述他拿舌头进去我下面好爽| 日本特黄特色视频| 最近2018中文字幕免费看手机| 黄色片网站大全| 天天干夜夜骑| 好色亚洲| 第四色激情网| 亚洲影视一区二区| 六月丁香婷婷激情国产| 国产午夜在线观看视频播放| 婷婷综合久久| 黄色免费毛片| 久久影视一区| 婷婷免费高清视频在线观看| 亚洲午夜网站| 国产成人综合日韩精品婷婷九月| 国内精品伊人久久大香线焦| 男人操女人免费视频| 免费在线黄视频| 在线观看免费黄视频|