av激情亚洲男人的天堂国语,日韩欧美精品一中文字幕,无码av一区二区三区无码,国产又色又爽又刺激的a片,国产又色又爽又刺激的a片

KubernetesLease及分布式選主

分布式選主

在分布式系統(tǒng)中,應(yīng)用服務(wù)常常會(huì)通過(guò)多個(gè)節(jié)點(diǎn)(或?qū)嵗┑姆绞絹?lái)保證高可用。然而在某些場(chǎng)景下,有些數(shù)據(jù)或者任務(wù)無(wú)法被并行操作,此時(shí)就需要由一個(gè)特定的節(jié)點(diǎn)來(lái)執(zhí)行這些特殊的任務(wù)(或者進(jìn)行協(xié)調(diào)及決策),這個(gè)特定的節(jié)點(diǎn)也就是領(lǐng)導(dǎo)者(Leader),而在多個(gè)節(jié)點(diǎn)中選擇領(lǐng)導(dǎo)者的機(jī)制也就是分布式選主(Leader Election)。

10余年的陽(yáng)東網(wǎng)站建設(shè)經(jīng)驗(yàn),針對(duì)設(shè)計(jì)、前端、開發(fā)、售后、文案、推廣等六對(duì)一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。全網(wǎng)營(yíng)銷推廣的優(yōu)勢(shì)是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整陽(yáng)東建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無(wú)論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。創(chuàng)新互聯(lián)從事“陽(yáng)東網(wǎng)站設(shè)計(jì)”,“陽(yáng)東網(wǎng)站推廣”以來(lái),每個(gè)客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。

如今諸多知名項(xiàng)目也都使用了分布式選主,例如:

  • Etcd
  • Kafka
  • Elasticsearch
  • Zookeeper

常用算法包括:

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

Kubernetes Lease

在 Kubernetes 中,諸如 kube-scheduler 和 kube-controller-manager 等核心組件也需要使用分布式選主,因?yàn)槠湫枰_保任一時(shí)刻只有一個(gè)調(diào)度器在做出調(diào)度決策,同一時(shí)間只有一個(gè)控制管理器在處理資源對(duì)象。

然而,除了核心組件,用戶的應(yīng)用服務(wù)很可能也有類似分布式選主的需求,為了滿足這種通用需求,kubernetes 提供了 Lease(翻譯為“租約”)這樣一個(gè)特殊的資源對(duì)象。

如上圖所示,在 k8s 中選主是通過(guò)爭(zhēng)搶一個(gè)分布式鎖(Lease)來(lái)實(shí)現(xiàn)的,搶到鎖的實(shí)例成為 leader,為了確認(rèn)自己持續(xù)存活,leader 需要不斷的續(xù)簽這個(gè)鎖(Lease),一旦 leader 掛掉,則鎖被釋放,其他候選人便可以競(jìng)爭(zhēng)成為新的 leader。

Lease 的結(jié)構(gòu)也很簡(jiǎn)單:

apiVersion: coordination.k8s.io/v1
kind: Lease
metadata:
  # object
spec:
  acquireTime: # 當(dāng)前租約被獲取的時(shí)間
  holderIdentity: # 當(dāng)前租約持有者的身份信息
  leaseDurationSeconds: # 租約候選者需要等待才能強(qiáng)制獲取它的持續(xù)時(shí)間
  leaseTransitions: # 租約換了多少次持有者
  renewTime: # 當(dāng)前租約持有者最后一次更新租約的時(shí)間

Lease 本質(zhì)上與其它資源并無(wú)區(qū)別,除了 Lease,其實(shí)也可以用 configmap 或者 endpoint 作為分布式鎖,因?yàn)樵诘讓佣际?k8s 通過(guò)資源對(duì)象的 resourceVersion 字段進(jìn)行 compare-and-swap,也就是通過(guò)這個(gè)字段實(shí)現(xiàn)的樂(lè)觀鎖。當(dāng)然在實(shí)際使用中,建議還是用 Lease。

使用示例

使用 Lease 進(jìn)行分布式選主的示例如下:

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 參數(shù)
    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) {
                // 當(dāng)前實(shí)例成為 Leader
                // 在這里執(zhí)行 Leader 專屬的邏輯
            },
            OnStoppedLeading: func() {
                // 當(dāng)前實(shí)例失去 Leader 地位
                // 可以在這里執(zhí)行清理工作
            },
            OnNewLeader: func(identity string) {
                // 有新的 Leader 產(chǎn)生
            }
        },
    }

    leaderElector, err := leaderelection.NewLeaderElector(leaderElectionConfig)
    if err != nil {
        panic(err.Error())
    }

    // 開始 Leader Election
    ctx := context.Background()
    leaderElector.Run(ctx)
}

參考資料:

  • https://kubernetes.io/docs/concepts/architecture/leases/
  • https://kubernetes.io/docs/reference/kubernetes-api/cluster-resources/lease-v1/
  • https://pkg.go.dev/k8s.io/[email protected]/tools/leaderelection

文章題目:KubernetesLease及分布式選主
網(wǎng)站地址:http://uogjgqi.cn/article/coijpgc.html
掃二維碼與項(xiàng)目經(jīng)理溝通

我們?cè)谖⑿派?4小時(shí)期待你的聲音

解答本文疑問(wèn)/技術(shù)咨詢/運(yùn)營(yíng)咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流