AVt天堂网 手机版,亚洲va久久久噜噜噜久久4399,天天综合亚洲色在线精品,亚洲一级Av无码毛片久久精品

當前位置:首頁 > 科技  > 軟件

Kubernetes Lease 及分布式選主

來源: 責編: 時間:2024-01-02 09:28:55 211觀看
導讀分布式選主在分布式系統中,應用服務常常會通過多個節點(或實例)的方式來保證高可用。然而在某些場景下,有些數據或者任務無法被并行操作,此時就需要由一個特定的節點來執行這些特殊的任務(或者進行協調及決策),這個特定的節點

分布式選主

在分布式系統中,應用服務常常會通過多個節點(或實例)的方式來保證高可用。然而在某些場景下,有些數據或者任務無法被并行操作,此時就需要由一個特定的節點來執行這些特殊的任務(或者進行協調及決策),這個特定的節點也就是領導者(Leader),而在多個節點中選擇領導者的機制也就是分布式選主(Leader Election)。MlO28資訊網——每日最新資訊28at.com

MlO28資訊網——每日最新資訊28at.com

如今諸多知名項目也都使用了分布式選主,例如:MlO28資訊網——每日最新資訊28at.com

  • Etcd
  • Kafka
  • Elasticsearch
  • Zookeeper

常用算法包括:MlO28資訊網——每日最新資訊28at.com

  • Paxos:一種著名的分布式共識算法,原理和實現較為復雜(此算法基本就是共識理論的奠基之作,曾有人說:"世界上只有一種共識協議,就是 Paxos,其他所有共識算法都是 Paxos 的退化版本")。
  • Raft:目前最廣泛使用的分布式共識算法之一,Etcd 使用的就是 Raft,Elasticsearch 和 Kafka 在后來的版本中也都拋棄了早期的算法并轉向了 Raft。
  • ZAB(Zookeeper Atomic Broadcast):Zookeeper 使用的一致性協議,也包括選主機制。

Kubernetes Lease

在 Kubernetes 中,諸如 kube-scheduler 和 kube-controller-manager 等核心組件也需要使用分布式選主,因為其需要確保任一時刻只有一個調度器在做出調度決策,同一時間只有一個控制管理器在處理資源對象。MlO28資訊網——每日最新資訊28at.com

然而,除了核心組件,用戶的應用服務很可能也有類似分布式選主的需求,為了滿足這種通用需求,kubernetes 提供了 Lease(翻譯為“租約”)這樣一個特殊的資源對象。MlO28資訊網——每日最新資訊28at.com

MlO28資訊網——每日最新資訊28at.com

如上圖所示,在 k8s 中選主是通過爭搶一個分布式鎖(Lease)來實現的,搶到鎖的實例成為 leader,為了確認自己持續存活,leader 需要不斷的續簽這個鎖(Lease),一旦 leader 掛掉,則鎖被釋放,其他候選人便可以競爭成為新的 leader。MlO28資訊網——每日最新資訊28at.com

Lease 的結構也很簡單:MlO28資訊網——每日最新資訊28at.com

apiVersion: coordination.k8s.io/v1kind: Leasemetadata:  # objectspec:  acquireTime: # 當前租約被獲取的時間  holderIdentity: # 當前租約持有者的身份信息  leaseDurationSeconds: # 租約候選者需要等待才能強制獲取它的持續時間  leaseTransitions: # 租約換了多少次持有者  renewTime: # 當前租約持有者最后一次更新租約的時間

Lease 本質上與其它資源并無區別,除了 Lease,其實也可以用 configmap 或者 endpoint 作為分布式鎖,因為在底層都是 k8s 通過資源對象的 resourceVersion 字段進行 compare-and-swap,也就是通過這個字段實現的樂觀鎖。當然在實際使用中,建議還是用 Lease。MlO28資訊網——每日最新資訊28at.com

使用示例

使用 Lease 進行分布式選主的示例如下:MlO28資訊網——每日最新資訊28at.com

import (    "context"    "time"    "k8s.io/client-go/kubernetes"    "k8s.io/client-go/rest"    "k8s.io/client-go/tools/leaderelection"    "k8s.io/client-go/tools/leaderelection/resourcelock")func main() {    config, err := rest.InClusterConfig()    if err != nil {        panic(err.Error())    }    clientset, err := kubernetes.NewForConfig(config)    if err != nil {        panic(err.Error())    }    // 配置 Lease 參數    leaseLock := &resourcelock.LeaseLock{        LeaseMeta: metav1.ObjectMeta{            Name:      "my-lease",            Namespace: "default",        },        Client: clientset.CoordinationV1(),        LockConfig: resourcelock.ResourceLockConfig{            Identity: "my-identity",        },    }    // 配置 Leader Election    leaderElectionConfig := leaderelection.LeaderElectionConfig{        Lock:          leaseLock,        LeaseDuration: 15 * time.Second,        RenewDeadline: 10 * time.Second,        RetryPeriod:   2 * time.Second,        Callbacks: leaderelection.LeaderCallbacks{            OnStartedLeading: func(ctx context.Context) {                // 當前實例成為 Leader                // 在這里執行 Leader 專屬的邏輯            },            OnStoppedLeading: func() {                // 當前實例失去 Leader 地位                // 可以在這里執行清理工作            },            OnNewLeader: func(identity string) {                // 有新的 Leader 產生            }        },    }    leaderElector, err := leaderelection.NewLeaderElector(leaderElectionConfig)    if err != nil {        panic(err.Error())    }    // 開始 Leader Election    ctx := context.Background()    leaderElector.Run(ctx)}

參考資料:MlO28資訊網——每日最新資訊28at.com

  • https://kubernetes.io/docs/concepts/architecture/leases/
  • https://kubernetes.io/docs/reference/kubernetes-api/cluster-resources/lease-v1/
  • https://pkg.go.dev/k8s.io/client-go@v0.29.0/tools/leaderelection

MlO28資訊網——每日最新資訊28at.com

本文鏈接:http://www.tebozhan.com/showinfo-26-55015-0.htmlKubernetes Lease 及分布式選主

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 五個用于構建Web應用程序的Go Web框架

下一篇: C++ module編程升級指南,子模塊與分區全解析

標簽:
  • 熱門焦點
  • K60至尊版剛預熱 一加Ace2 Pro正面硬剛

    Redmi這邊剛如火如荼的宣傳了K60 Ultra的各種技術和硬件配置,作為競品的一加也坐不住了。一加中國區總裁李杰發布了兩條微博,表示在自家的一加Ace2上早就已經采用了和PixelWo
  • 石頭自清潔掃拖機器人G10S評測:多年黑科技集大成之作 懶人終極福音

    科技圈經常能看到一個詞叫“縫合怪”,用來形容那些把好多功能或者外觀結合在一起的產品,通常這樣的詞是貶義詞,但如果真的是產品縫合的好、縫合的實用的話,那它就成了中性詞,今
  • 六大權益!華為8月服務日開啟:手機免費貼膜、維修免人工費

    8月5日消息,一年一度的華為開發者大會2023(Together)日前在松山湖拉開帷幕,與此同時,華為8月服務日也式開啟,到店可享六大專屬權益。華為用戶可在華為商城Ap
  • Rust中的高吞吐量流處理

    作者 | Noz編譯 | 王瑞平本篇文章主要介紹了Rust中流處理的概念、方法和優化。作者不僅介紹了流處理的基本概念以及Rust中常用的流處理庫,還使用這些庫實現了一個流處理程序
  • 企業采用CRM系統的11個好處

    客戶關系管理(CRM)軟件可以為企業提供很多的好處,從客戶保留到提高生產力。  CRM軟件用于企業收集客戶互動,以改善客戶體驗和滿意度。  CRM軟件市場規模如今超過580
  • Python異步IO編程的進程/線程通信實現

    這篇文章再講3種方式,同時講4中進程間通信的方式一、 Python 中線程間通信的實現方式共享變量共享變量是多個線程可以共同訪問的變量。在Python中,可以使用threading模塊中的L
  • JVM優化:實戰OutOfMemoryError異常

    一、Java堆溢出堆內存中主要存放對象、數組等,只要不斷地創建這些對象,并且保證 GC Roots 到對象之間有可達路徑來避免垃 圾收集回收機制清除這些對象,當這些對象所占空間超過
  • 為什么你不應該使用Div作為可點擊元素

    按鈕是為任何網絡應用程序提供交互性的最常見方式。但我們經常傾向于使用其他HTML元素,如 div span 等作為 clickable 元素。但通過這樣做,我們錯過了許多內置瀏覽器的功能。
  • 蘋果MacBook Pro 2021測試:仍不支持平滑滾動

    據10月30日9to5 Mac 消息報道,蘋果新的 14 英寸和 16 英寸 MacBook Pro 2021 上市后獲得了不錯的評價,亮點包括行業領先的性能,令人印象深刻的電池續航,精美豐
Top