中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

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

發布時間:2020-04-02 10:22:21 來源:網絡 閱讀:515 作者:RancherLabs 欄目:云計算

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

 

介 紹

 

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集群

 

在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/rancher/v2.x/en/cluster-provisioning/hosted-kubernetes-clusters/gke/

 

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

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

 

接著部署Redis集群,我們既可以通過kubectl來應用YAML文件,也可以將它們導入到Rancher UI中。下面列出了我們所有需要的YAML文件。
 
詳細教程丨如何在Kubernetes上部署Redis集群
 
YAML內容如下:
 
redis-sts.yaml

詳細教程丨如何在Kubernetes上部署Redis集群
詳細教程丨如何在Kubernetes上部署Redis集群
詳細教程丨如何在Kubernetes上部署Redis集群
 
redis-svc.yaml

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

 
檢查Redis節點是否啟動并運行:
 
詳細教程丨如何在Kubernetes上部署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上看到
 
詳細教程丨如何在Kubernetes上部署Redis集群

詳細教程丨如何在Kubernetes上部署Redis集群
 
部署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.

 
驗證集群部署

 

檢查集群細節以及每個成員的角色
 
詳細教程丨如何在Kubernetes上部署Redis集群
 
測試Redis集群

 

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

 
部署Hit Counter應用

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

 
使用kubectl或者Rancher UI部署:
 
詳細教程丨如何在Kubernetes上部署Redis集群
 
YAML內容如下:

 

app-deployment-service.yaml
 
詳細教程丨如何在Kubernetes上部署Redis集群
詳細教程丨如何在Kubernetes上部署Redis集群
 
Rancher展示了我們創建的資源:一個包含python應用的pod,以及LoadBalancer類型的服務。該服務的詳細信息內,將顯示其公共IP地址:
 
詳細教程丨如何在Kubernetes上部署Redis集群

詳細教程丨如何在Kubernetes上部署Redis集群
 
到了這一步,我們可以用瀏覽器訪問IP,生成hit counter的值:
 
詳細教程丨如何在Kubernetes上部署Redis集群
 
模擬節點故障

 

我們可以通過刪除pod(使用kubectl或Rancher UI)來模擬集群成員的故障。當我們刪除原先是master的redis-cluster-0時,我們看到Kubernetes將redis-cluster-3提升為master,而當redis-cluster-0重新回來時,redis-cluster-3會重新恢復從屬身份。
 
詳細教程丨如何在Kubernetes上部署Redis集群
 
之 前
 
詳細教程丨如何在Kubernetes上部署Redis集群
 
之 后
 
詳細教程丨如何在Kubernetes上部署Redis集群
 
我們可以看到redis-cluster-0的IP發生了變化,那么集群是如何恢復的呢?
 

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

 

在這個過程中,如果我們繼續加載頁面,計數器仍會繼續增加,在集群收斂之后,我們會看到沒有丟失任何數據。
 
詳細教程丨如何在Kubernetes上部署Redis集群
 
結 論

 

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

 

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

 

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

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

乌拉特前旗| 敖汉旗| 娱乐| 岫岩| 勐海县| 彭州市| 长寿区| 芦山县| 石狮市| 沙田区| 瑞昌市| 新乐市| 徐州市| 卢氏县| 安西县| 沁水县| 无棣县| 襄樊市| 乐业县| 和田市| 阿拉善右旗| 眉山市| 凤冈县| 丹寨县| 盐亭县| 光山县| 乐平市| 敖汉旗| 宁陕县| 蒲城县| 紫阳县| 招远市| 古交市| 镇原县| 昌邑市| 米易县| 滁州市| 台南市| 莱州市| 白朗县| 浙江省|