前言
Redis 是在開發(fā)過程中經(jīng)常用到的緩存中間件,為了考慮在生產(chǎn)環(huán)境中穩(wěn)定性和高可用,Redis通常采用集群模式的部署方式。
在制定Redis集群的部署策略時(shí),常規(guī)部署在虛擬機(jī)上的方式配置繁瑣并且需要手動(dòng)重啟節(jié)點(diǎn),相較之下,使用 PetaExpress 提供的
Kubernetes(k8s) 服務(wù) 進(jìn)行 Redis 集群的部署,則展現(xiàn)出了顯著的優(yōu)勢(shì):
1、安裝便捷:使用鏡像或者 yaml 配置文件即可一件安裝,極大地簡(jiǎn)化了安裝流程
2、縮擴(kuò)容方便:在 擴(kuò)容 、 縮容 方面的優(yōu)點(diǎn)一鍵伸縮,無需復(fù)雜的配置和繁瑣的步驟
3、智能自動(dòng)調(diào)度:容器意外掛掉后能夠迅速進(jìn)行自動(dòng)調(diào)度重啟和資源分配
4、高效且穩(wěn)定: Kubernetes 在整個(gè)集群上進(jìn)行調(diào)度,只要整個(gè)集群不掛掉總會(huì)調(diào)度到合適節(jié)點(diǎn)重啟容器服務(wù)
閱讀全文,后面告訴你怎么免費(fèi)白拿紅包
在 PetaExpress KubeSphere容器平臺(tái)部署 Kubernetes集群
在 Peta Express 中部署 Kubernetes 非常簡(jiǎn)單,直接使用 Peta Express 中內(nèi)置的 QKE 即可,登錄到 Peta Express 控制臺(tái),在產(chǎn)品與服務(wù)中找到 AppCenter 控制臺(tái) → 應(yīng)用中心。
找到 QKE 立即部署即可。
按照提示輸入名稱,選擇集群規(guī)模等信息,直接提交就行了。但需要注意集群的配置,如果是開發(fā)測(cè)試可以選擇 “基礎(chǔ)型開發(fā)環(huán)境” 或 “企業(yè)型測(cè)試環(huán)境”,如果是生產(chǎn)的話則可以選擇 “基礎(chǔ)型生產(chǎn)環(huán)境” 或 “企業(yè)型生產(chǎn)環(huán)境”,也可以自定義集群規(guī)模和HA。
根據(jù)集群的規(guī)模,部署時(shí)間大致2分鐘到10分鐘不等,還是非常快的。部署完 Kubernetes, 接下來我們就可以開始進(jìn)入正題 安裝 Redis 了。
安裝 Redis 集群
我這里新建了一個(gè) test-project 的項(xiàng)目空間來做 Redis 集群所有安裝資源的放置,后續(xù)在 DNS 上會(huì)用到項(xiàng)目空間名稱,會(huì)標(biāo)注這一部分,需要注意用自己的項(xiàng)目空間名。
Redis 集群的安裝流程大致分為以下幾個(gè)關(guān)鍵步驟:
①配置 redis.conf 字典;
②創(chuàng)建 redis 服務(wù);
③容器組配置;
④存儲(chǔ)設(shè)置;
⑤高級(jí)設(shè)置。
接下來,我們將從第一步開始,逐步完成 Redis 集群的安裝和配置過程。
配置 redis.conf 字典
在項(xiàng)目空間的 配置 → 配置字典 → 創(chuàng)建 進(jìn)行配置字典的創(chuàng)建。
名稱就叫 redis-conf 然后下一步 添加鍵值對(duì)數(shù)據(jù)。
key 值的內(nèi)容為 redis.conf , value 值為:
創(chuàng)建 Redis 服務(wù)
在項(xiàng)目空間的 應(yīng)用負(fù)載 → 工作負(fù)載 → 有狀態(tài)副本集 → 創(chuàng)建 進(jìn)行 Redis 服務(wù)的創(chuàng)建。
基本設(shè)置里名稱就叫 redis-cluster 然后進(jìn)行重頭戲,下一步的 容器組配置 。
容器組配置
這一步的核心就是配置 Redis 的容器,集群數(shù)量我們通常采用三主三從的集群配置,那容器的副本數(shù)量就是 6 個(gè),這樣的配置不僅保證了系統(tǒng)的穩(wěn)定性,也提升了數(shù)據(jù)的安全性。
容器組副本數(shù)量調(diào)到 6 個(gè),點(diǎn)擊添加容器。
鏡像選擇 docker hub 中 redis ,并選擇使用默認(rèn)端口,CPU 和內(nèi)存可以選擇性預(yù)留,如果不預(yù)留就是調(diào)度公共資源。
選擇 使用默認(rèn)端口 的話下面的端口設(shè)置就是如上圖一樣都會(huì)使用 6379 ,還有就是配置啟動(dòng)命令。
如上圖配置:
命令: redis-server
參數(shù): /etc/redis/redis.conf
參數(shù)指向的就是之前字典配置的內(nèi)容,但是需要下一步 存儲(chǔ)設(shè)置 里進(jìn)行配置字典才能使用。
其他內(nèi)容沒有什么需要配置的,選擇對(duì)勾完成容器配置。
更新策略就是推薦的 滾動(dòng)更新 ,其他也沒什么需要修改的,點(diǎn)擊下一步配置存儲(chǔ)設(shè)置 。
存儲(chǔ)設(shè)置
在這一步有兩個(gè)操作
添加存儲(chǔ)卷模板
掛載配置字典或保密字典
**添加存儲(chǔ)卷模板**
PVC 名稱前綴:redis-pvc
容量:10G
掛載路徑:
權(quán)限:讀寫
地址:/data
主要是掛載路徑選好,配置好后點(diǎn)擊對(duì)勾完成配置
掛載配置字典或保密字典
這一步是掛載我們之前配置的字典 redis-conf ,也是我們 redis 啟動(dòng)命令的參數(shù)內(nèi)容。
選擇 redis 的配置字典。
掛載權(quán)限為: 只讀 ,地址為: /etc/redis ;跟上面的命令參數(shù)的配置相對(duì)應(yīng)。
特定鍵選擇 redis.conf 后面同名 redis.conf ,完成后點(diǎn)擊對(duì)勾回到存儲(chǔ)設(shè)置。配置好后就入上圖,點(diǎn)擊下一步進(jìn)入最后的高級(jí)設(shè)置。
高級(jí)設(shè)置 里是一些額外配置,可以根據(jù)自己場(chǎng)景選擇調(diào)整配置,調(diào)成完成后點(diǎn)擊 創(chuàng)建 進(jìn)行 Redis 集群容器的創(chuàng)建。
初始化 Redis 集群
創(chuàng)建完 Redis 服務(wù)后 在項(xiàng)目空間的 應(yīng)用負(fù)載 → 服務(wù) → 指定redis服務(wù) 進(jìn)入 redis 服務(wù)詳情,詳情如下圖:
6 個(gè) redis 的容器組都啟動(dòng)成功了,接下來就是初始化集群;因?yàn)槲覀兣渲玫?redis 的服務(wù)是 有狀態(tài)服務(wù) (Headless) 所以訪問模式可以通過內(nèi)部 DNS,訪問格式是:(容器名稱).( 容器 DNS).svc.cluster.local。
按上圖示例 比如訪問集群 1 節(jié)點(diǎn)訪問地址就是 redis-cluster-v1-1 加 DNS 地址 redis-cluster.test-project 加svc.cluster.local ,完整地址如下:
1
redis-cluster-v1-
1
.redis-cluster.test-project.svc.cluster.local
2
在 redis 集群的非第一節(jié)點(diǎn)的其他節(jié)點(diǎn)終端內(nèi)通過這個(gè)地址進(jìn)行訪問驗(yàn)證他們是否互通,進(jìn)入 3 節(jié)點(diǎn)的終端,如下圖:
進(jìn)入終端,執(zhí)行命令:
如果能如下圖一樣跳轉(zhuǎn)到 v1-1 的節(jié)點(diǎn)上就代表這兩個(gè)節(jié)點(diǎn)互通。
1 redis-cli -h redis-cluster-v1-1.redis-cluster.test-project.svc.clusterredis.local
2
如果能如下圖一樣跳轉(zhuǎn)到 v1-1 的節(jié)點(diǎn)上就代表這兩個(gè)節(jié)點(diǎn)互通。
執(zhí)行命令: cluster info 查看節(jié)點(diǎn)的集群情況。
主要看上圖的這兩個(gè)參數(shù), nodes 為 1 表明當(dāng)前節(jié)點(diǎn)只有 1 個(gè), cluster_size 表明當(dāng)前沒有 master 節(jié)點(diǎn),所以目前還不是集群結(jié)構(gòu), info 屬性的詳解在此列出:
cluster_state :ok 狀態(tài)表示集群可以正常接受查詢請(qǐng)求。fail 狀態(tài)表示,至少有一個(gè)哈希槽沒有被綁定(說明有哈希槽沒有被綁定到
任意一個(gè)節(jié)點(diǎn)),或者在錯(cuò)誤的狀態(tài)(節(jié)點(diǎn)可以提供服務(wù)但是帶有 FAIL 標(biāo)記),或者該節(jié)點(diǎn)無法聯(lián)系到多數(shù) master 節(jié)點(diǎn)。
cluster_slots_assigned :已分配到集群節(jié)點(diǎn)的哈希槽數(shù)量(不是沒有被綁定的數(shù)量)。16384 個(gè)哈希槽全部被分配到集群節(jié)點(diǎn)是集群
正常運(yùn)行的必要條件。
cluster_slots_ok :哈希槽狀態(tài)不是 FAIL 和 PFAIL 的數(shù)量。
cluster_known_nodes :集群中節(jié)點(diǎn)數(shù)量,包括處于握手狀態(tài)還沒有成為集群正式成員的節(jié)點(diǎn)。
cluster_slots_pfail :哈希槽狀態(tài)是 PFAIL 的數(shù)量。只要哈希槽狀態(tài)沒有被升級(jí)到 FAIL 狀態(tài),這些哈希槽仍然可以被正常處理。
PFAIL 狀態(tài)表示我們當(dāng)前不能和節(jié)點(diǎn)進(jìn)行交互,但這種狀態(tài)只是臨時(shí)的錯(cuò)誤狀態(tài)。
cluster_slots_fail : 哈希槽狀態(tài)是 FAIL 的數(shù)量。如果值不是 0,那么集群節(jié)點(diǎn)將無法提供查詢服務(wù),除非 cluster-require-full
coverage 被設(shè)置為 no。
cluster_current_epoch :集群本地 Current Epoch 變量的值。這個(gè)值在節(jié)點(diǎn)故障轉(zhuǎn)移過程時(shí)有用,它總是遞增和唯一的。
cluster_my_epoch :當(dāng)前正在使用的節(jié)點(diǎn)的 Config Epoch 值。這個(gè)是關(guān)聯(lián)在本節(jié)點(diǎn)的版本值。
cluster_size :至少包含一個(gè)哈希槽且能夠提供服務(wù)的 master 節(jié)點(diǎn)數(shù)量。
cluster_stats_messages_sent :通過 node-to-node 二進(jìn)制總線發(fā)送的消息數(shù)量。
cluster_stats_messages_received :通過 node-to-node 二進(jìn)制總線接收的消息數(shù)量。
IP 地址初始化集群(初始化方案一)
先嘗試使用 ip + port 的方式初始化集群,但是在 Kubernetes( K8s) 中啟動(dòng)服務(wù) ip 都會(huì)變化,所以最終的結(jié)果還是要用 DNS 方式進(jìn)行集群初始化。
執(zhí)行本步后再想修改為 DNS 地址初始化需要從來一遍,如果不想麻煩的同學(xué)可以直接跳過。
記錄 redis 集群的所有 ip+port,初始化命令如下:
1redis-cli --cluster create 10.233.70.30:6379 10.233.70.32:6379 10.233.90.41:6379 10.233.90.43:6379 10.233.96.47:6
2
進(jìn)入 redis 集群隨意一個(gè)節(jié)點(diǎn)的 終端 執(zhí)行上面的命令。
如上圖集群初始化就完成了,再輸入命令 redis-cli 進(jìn)入命令端,再執(zhí)行 cluster info 查看集群信息。
現(xiàn)在我們的集群節(jié)點(diǎn)有了 6 個(gè), master 節(jié)點(diǎn)也有了三個(gè),集群建立完成,后面的操作選擇 master 節(jié)點(diǎn)進(jìn)行操作。
在對(duì)集群節(jié)點(diǎn)進(jìn)行驗(yàn)證的時(shí)候如果遇到上圖的錯(cuò)誤 (error) MOVED 2589 10.233.70.30:6379 是因?yàn)?redis-cli 沒有開啟集群模式,將命令修改為 redis-cli -c 就切換為集群模式了。
使用內(nèi)部 DNS 初始化(初始化方案二)
使用 ip 地址的方式在每次 K8s 調(diào)度 redis 后 ip 都會(huì)發(fā)生變化,所以在 K8s 集群中使用 ip 方式初始化集群并不太合適,但是如果使用內(nèi)部 DNS 直接跟上面一樣初始化集群會(huì)出現(xiàn)錯(cuò)誤,因?yàn)?redis 對(duì)域名的支持并不太好,所以這時(shí)候可以用 Redis-tribe 。
創(chuàng)建 Redis-tribe 服務(wù)
在項(xiàng)目空間的 應(yīng)用負(fù)載 → 工作負(fù)載 → 創(chuàng)建 → 編輯 YAML 進(jìn)行Redis-tribe服務(wù)的創(chuàng)建。
參數(shù)
namespace
就寫項(xiàng)目名稱:
具體 YAML 內(nèi)容如下:
創(chuàng)建好后在容器組內(nèi)找到 redis-cluster-tools 。
初始化集群
點(diǎn)擊容器名稱進(jìn)入容器詳情再進(jìn)入到終端里。
1apiVersion: apps/v1
2kind: Deployment
3metadata:
4namespace: test-project
5labels:
6app: redis-cluster-tools
7name: redis-cluster-tools
8spec:
9replicas: 1
10selector:
11matchLabels:
12app: redis-cluster-tools
13template:
14metadata:
15labels:
16app: redis-cluster-tools
17name: pos-redis
18spec:
19containers:
20- name: pos-redis
21image: sunnywang/redis-tools-ubuntu:v0.5.1
22imagePullPolicy: IfNotPresent
23args:
24- /bin/bash
25- -c
26- sleep 3600
27
創(chuàng)建好后在容器組內(nèi)找到 redis-cluster-tools 。
初始化集群
點(diǎn)擊容器名稱進(jìn)入容器詳情再進(jìn)入到終端里。
先執(zhí)行以下命令初始化 master 節(jié)點(diǎn),這時(shí)候之前的內(nèi)部 DNS 的域名就有用了。
1 redis-trib.py create dig +short redis-cluster-v1-0.redis-cluster.test-project.svc.cluster.local:6379 `dig +shor
2
執(zhí)行結(jié)果如下圖:
接下來給每個(gè) master 節(jié)點(diǎn)綁定對(duì)應(yīng)的副本節(jié)點(diǎn),總共三個(gè):
0 節(jié)點(diǎn)->3 節(jié)點(diǎn)
1redis-trib.py create dig +short redis-cluster-v1-0.redis-cluster.test-project.svc.cluster.local:6379 `dig +shor
2
1 節(jié)點(diǎn)->4 節(jié)點(diǎn)
1redis-trib.py replicate --master-addr `dig +short redis-cluster-v1-0.redis-cluster.test-project.svc.cluster.local
2
2 節(jié)點(diǎn)->5 節(jié)點(diǎn)
1redis-trib.py replicate --master-addr `dig +short redis-cluster-v1-1.redis-cluster.test-project.svc.cluster.loca
2
執(zhí)行結(jié)果如下:
驗(yàn)證
隨便進(jìn)入一個(gè)集群節(jié)點(diǎn)的終端,還是執(zhí)行 cluster info 命令,查看集群信息。
使用基礎(chǔ)命令進(jìn)行驗(yàn)證,驗(yàn)證集群模式的 redis-cli 需要加 -c 。
驗(yàn)證集群模式可以正常使用。
憑此文章可以去petaexpress官網(wǎng)發(fā)工單免費(fèi)白拿10美元紅包,數(shù)量有限先到先得。申領(lǐng)步驟:注冊(cè)→登錄→發(fā)工單回復(fù)“文章網(wǎng)址+文章標(biāo)題+申請(qǐng)獎(jiǎng)勵(lì)”
審核編輯 黃宇
-
Redis
+關(guān)注
關(guān)注
0文章
376瀏覽量
10878 -
kubesphere
+關(guān)注
關(guān)注
0文章
3瀏覽量
195
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論