国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

詳細教程丨如何在Kubernetes上部署Redis集群

laoLiueizo / 3154人閱讀

摘要:集群中的每個成員,無論是主副本還是次級副本,都管理哈希槽的一個子集。在由三個主節點組成的最小的集群中,每個主節點都有一個從屬節點為了至少能保證最低程度的故障轉移,每個主節點分配一個范圍在至之間的哈希槽。

介 紹

Redis(REmote DIctionary Server的意思)是一個開源的內存數據存儲,通常用作數據庫、緩存以及消息代理。它可以存儲和操作高級的數據結構類型,比如lists、maps、sets以及排序sets。Redis接受多種格式的鍵,因此可以在服務器上執行操作,減少客戶端的工作負載。它將數據庫完全地保存在內存中,只使用磁盤進行持久化存儲。Redis是一種流行的數據存儲解決方案,受到了Github、Pinterest、Snapchat、Twitter、StackOverflow、Flickr等科技巨頭的青睞。

為什么要用Redis?

它非常快,它由ANSI C編寫,可以在Linux、Mac OS X和Solaris等POSIX系統上運行。

Reis經常被評為最流行的鍵值數據庫以及在容器上使用最流行的NoSQL數據庫。

它的緩存解決方案減少了對云數據庫后端的調用。

應用程序可以通過客戶端API庫訪問它。

所有流行的編程語言都支持Redis。

它開源且非常穩定的。

Redis的應用案例

Facebook的一些在線游戲中,游戲分數更新頻率非常高。當使用Redis排序set時,即使每分鐘有數百萬用戶和數百萬個新分數,執行這些操作都非常簡單。

Twitter在Redis集群中存儲了所有用戶的時間線。

Pinterest將用戶關注者圖存儲在Redis集群中,其中的數據分布在數百個實例中。

Github使用Redis作為隊列

什么是Redis集群?

Redis集群是一個多Redis實例的集合,用于通過對數據庫分區來擴展數據庫,使其更具有彈性。集群中的每個成員,無論是主副本還是次級副本,都管理哈希槽的一個子集。如果一個主服務器出現不能訪問的故障,那么它的從屬服務器會提升為主服務器。在由三個主節點組成的最小的Redis集群中,每個主節點都有一個從屬節點(為了至少能保證最低程度的故障轉移),每個主節點分配一個范圍在0至16383之間的哈希槽。節點A包含哈希槽范圍為從0到5000,節點B為5001到10000,節點C從10001到18383。集群內部的通信則通過內部總線進行,使用gossip協議來傳播關于集群的信息或者發現新節點。

在Kubernetes上部署Redis集群

在Kubernetes中部署Redis集群很有挑戰,因為每個Redis實例都依賴于一個配置文件,該文件跟蹤其他集群實例及其角色。為此,我們需要結合使用Kubernetes狀態集(StatefulSets)和持久卷(PersistentVolumes)。

前期準備

要完成此次的demo,我們需要有下列準備:

Rancher

Google云平臺或者其他云提供商賬號。下面的展示中使用了GKE,不過使用任何云提供商都是可以的,且操作方法大致相同。

啟動Rancher實例

如果你沒有Rancher的實例,可以參考這里的Quick Start文檔簡單快速地啟動一個:

https://rancher.com/quick-start/

用Rancher部署GKE集群

用Rancher啟動并配置你的Kubernetes集群,具體步驟可以參考文檔:

https://rancher.com/docs/ranc...

當集群準備就緒,我們可以通過kubectl指令檢查當前狀態

部署Redis

接著部署Redis集群,我們既可以通過kubectl來應用YAML文件,也可以將它們導入到Rancher UI中。下面列出了我們所有需要的YAML文件。

YAML內容如下:

redis-sts.yaml



redis-svc.yaml

驗證部署

檢查Redis節點是否啟動并運行:

下面的6個卷是我們創建的

$ kubectl get pv

NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE

pvc-ae61ad5c-f0a5-11e8-a6e0-42010aa40039 1Gi RWO Delete Bound default/data-redis-cluster-0 standard 7m

pvc-b74b6ef1-f0a5-11e8-a6e0-42010aa40039 1Gi RWO Delete Bound default/data-redis-cluster-1 standard 7m

pvc-c4f9b982-f0a5-11e8-a6e0-42010aa40039 1Gi RWO Delete Bound default/data-redis-cluster-2 standard 6m

pvc-cd7af12d-f0a5-11e8-a6e0-42010aa40039 1Gi RWO Delete Bound default/data-redis-cluster-3 standard 6m

pvc-d5bd0ad3-f0a5-11e8-a6e0-42010aa40039 1Gi RWO Delete Bound default/data-redis-cluster-4 standard 6m

我們可以檢查任何一個pod,看看它添加的卷:

$ kubectl describe pods redis-cluster-0 | grep pvc

 Normal  SuccessfulAttachVolume  29m   attachdetach-controller                          AttachVolume.Attach succeeded for volume "pvc-ae61ad5c-f0a5-11e8-a6e0-42010aa40039"
 
 
 

同樣的數據還可以在Rancher UI上看到

部署Redis集群

下一步就是創建Redis集群了。為此,我們需要運行以下命令,輸入yes接受配置。前三個節點成為主節點,最后三個節點設置為從屬節點。

$ kubectl exec -it redis-cluster-0 -- redis-cli --cluster create --cluster-replicas 1 $(kubectl get pods -l app=redis-cluster -o jsonpath="{range.items[*]}{.status.podIP}:6379 ")

以下是完整的輸出命令:

>>> Performing hash slots allocation on 6 nodes...

Master[0] -> Slots 0 - 5460

Master[1] -> Slots 5461 - 10922

Master[2] -> Slots 10923 - 16383

Adding replica 10.60.1.13:6379 to 10.60.2.12:6379

Adding replica 10.60.2.14:6379 to 10.60.1.12:6379

Adding replica 10.60.1.14:6379 to 10.60.2.13:6379

M: 2847de6f6e7c8aaa8b0d2f204cf3ff6e8562a75b 10.60.2.12:6379

slots:[0-5460] (5461 slots) master

M: 3f119dcdd4a33aab0107409524a633e0d22bac1a 10.60.1.12:6379

slots:[5461-10922] (5462 slots) master

M: 754823247cf28af9a2a82f61a8caaa63702275a0 10.60.2.13:6379

slots:[10923-16383] (5461 slots) master

S: 47efe749c97073822cbef9a212a7971a0df8aecd 10.60.1.13:6379

replicates 2847de6f6e7c8aaa8b0d2f204cf3ff6e8562a75b

S: e40ae789995dc6b0dbb5bb18bd243722451d2e95 10.60.2.14:6379

replicates 3f119dcdd4a33aab0107409524a633e0d22bac1a

S: 8d627e43d8a7a2142f9f16c2d66b1010fb472079 10.60.1.14:6379

replicates 754823247cf28af9a2a82f61a8caaa63702275a0

Can I set the above configuration? (type "yes" to accept): yes

>>> Nodes configuration updated

>>> Assign a different config epoch to each node

>>> Sending CLUSTER MEET messages to join the cluster

Waiting for the cluster to join

....

>>> Performing Cluster Check (using node 10.60.2.12:6379)

M: 2847de6f6e7c8aaa8b0d2f204cf3ff6e8562a75b 10.60.2.12:6379

slots:[0-5460] (5461 slots) master

1 additional replica(s)

S: 47efe749c97073822cbef9a212a7971a0df8aecd 10.60.1.13:6379

slots: (0 slots) slave

replicates 2847de6f6e7c8aaa8b0d2f204cf3ff6e8562a75b

M: 754823247cf28af9a2a82f61a8caaa63702275a0 10.60.2.13:6379

slots:[10923-16383] (5461 slots) master

1 additional replica(s)

M: 3f119dcdd4a33aab0107409524a633e0d22bac1a 10.60.1.12:6379

slots:[5461-10922] (5462 slots) master

1 additional replica(s)

S: e40ae789995dc6b0dbb5bb18bd243722451d2e95 10.60.2.14:6379

slots: (0 slots) slave

replicates 3f119dcdd4a33aab0107409524a633e0d22bac1a

S: 8d627e43d8a7a2142f9f16c2d66b1010fb472079 10.60.1.14:6379

slots: (0 slots) slave

replicates 754823247cf28af9a2a82f61a8caaa63702275a0

[OK] All nodes agree about slots configuration.

>>> Check for open slots...

>>> Check slots coverage...

[OK] All 16384 slots covered.

驗證集群部署

檢查集群細節以及每個成員的角色

測試Redis集群

我們希望使用集群并且模擬節點故障。對于前一個任務,我們將部署一個簡單的python應用程序,而后一個任務,我們將刪除一個節點來觀察集群行為。

部署Hit Counter應用

我們將在集群中部署一個簡單的應用程序,并在其之前放置一個負載均衡器。該應用程序的目的是在將計數器的值作為HTTP響應返回值返回之前,增加計數器的值,并將值存到Redis集群上。

使用kubectl或者Rancher UI部署:

YAML內容如下:

app-deployment-service.yaml


Rancher展示了我們創建的資源:一個包含python應用的pod,以及LoadBalancer類型的服務。該服務的詳細信息內,將顯示其公共IP地址:

到了這一步,我們可以用瀏覽器訪問IP,生成hit counter的值:

模擬節點故障

我們可以通過刪除pod(使用kubectl或Rancher UI)來模擬集群成員的故障。當我們刪除原先是master的redis-cluster-0時,我們看到Kubernetes將redis-cluster-3提升為master,而當redis-cluster-0重新回來時,redis-cluster-3會重新恢復從屬身份。

之 前

之 后

我們可以看到redis-cluster-0的IP發生了變化,那么集群是如何恢復的呢?

在創建集群時,我們創建了ConfigMap,該ConfigMap又在/conf/update-node.sh處創建了一個腳本,容器在啟動時調用該腳本。該腳本使用本地節點的新IP地址更新Redis配置。有了confic中的新IP,集群就可以在新的pod中以不同的IP地址啟動并恢復。

在這個過程中,如果我們繼續加載頁面,計數器仍會繼續增加,在集群收斂之后,我們會看到沒有丟失任何數據。

結 論

Redis是一個強大的數據存儲和緩存工具。因為Redis存儲數據的方式,Redis集群更是能通過提供分片、相關性能優勢、線性擴展和高可用性,來進一步擴展其功能。數據在多個節點之間自動分割,即使節點的子集出現故障或者不能和集群其他部分通信,操作仍然能夠繼續。

有關Redis集群的更多信息,請訪問教程(https://redis.io/topics/clust...)或者文檔(https://redis.io/topics/clust...)。

有關Rancher的更多信息,請訪問我們的主頁(https://www.cnrancher.com)或者部署文檔(https://www.cnrancher.com/doc...)。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/32914.html

相關文章

  • SegmentFault 技術周刊 Vol.5 - DockerBuild, Ship, Run,

    摘要:此刻的后手指依舊飛速地敲打鍵盤,絲毫沒有要停不下來意思。閱讀本期技術周刊,你不光能弄明白什么是,使用的意義何在,還將被傳授秘籍,以達的境界。周刊篩選的每篇內容,是作者的獨到見解,踩坑總結和經驗分享。 showImg(https://segmentfault.com/img/bVC5qJ?w=900&h=385); 啪嗒啪嗒,啪嗒啪嗒,聽到后排動感十足的清脆鍵盤響,我就能猜到公司程序員定...

    Panda 評論0 收藏0
  • CloudBest:年度復盤盤點2020無處不的「云原生」

    摘要:華為云華為云在云原生這場游戲中,最具競爭力的玩家之一。年,金山云在云原生領域推出了三款重磅產品星曜裸金屬服務器云服務器和云盤。在線上智博會上,浪潮云發布了經過全新迭代升級的浪潮云,進一步提升平臺云原生服務能力。面對數字時代復雜系統的不確定性,傳統的 IT 應用架構研發交付周期長、維護成本高、創新升級難,煙囪式架構,開放性差、組件復用度低,這些都成為了企業業務快速增長的瓶頸。而云原生以其敏捷、...

    Tecode 評論0 收藏0
  • GitLab Auto DevOps功能與Kubernetes集成教程

    摘要:從開始,部署管理的集群時,默認情況下會啟用授權群集端點功能。我們將首先在中創建一個新項目,該項目將使用功能與我們的集群集成。完成后單擊創建項目。這不僅意味著已被設為默認值,還能夠觸發構建。例如,負載均衡選項卡顯示已部署的以及創建的主機名。 介 紹 在這篇文章中,我們將介紹如何將GitLab的Auto DevOps功能與Rancher管理的Kubernetes集群連接起來,利用Ranch...

    GraphQuery 評論0 收藏0
  • ubuntu部署Kubernetes管理docker集群示例

    摘要:部署環境及架構操作系統版本版本版本服務器信息在詳細介紹部署集群前,先給大家展示下集群的邏輯架構。其他操作更新刪除查看刪除除此之外,你可以刪除,如刪除上的格式為服務名字,不必關心從哪個上刪除了。 本文通過實際操作來演示Kubernetes的使用,因為環境有限,集群部署在本地3個ubuntu上,主要包括如下內容: 部署環境介紹,以及Kubernetes集群邏輯架構 安裝部署Open v...

    BingqiChen 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<