K8S學習教程(二):在 PetaExpress KubeSphere容器平臺部署高可用 Redis 集群

前言

Redis 是在開發過程中經常用到的緩存中間件,為了考慮在生產環境中穩定性和高可用,Redis通常采用集群模式的部署方式。

在制定Redis集群的部署策略時,常規部署在虛擬機上的方式配置繁瑣并且需要手動重啟節點,相較之下,使用 PetaExpress 提供的

Kubernetes(k8s) 服務 進行 Redis 集群的部署,則展現出了顯著的優勢:

1、安裝便捷:使用鏡像或者 yaml 配置文件即可一件安裝,極大地簡化了安裝流程

2、縮擴容方便:在 擴容 、 縮容 方面的優點一鍵伸縮,無需復雜的配置和繁瑣的步驟

3、智能自動調度:容器意外掛掉后能夠迅速進行自動調度重啟和資源分配

4、高效且穩定: Kubernetes 在整個集群上進行調度,只要整個集群不掛掉總會調度到合適節點重啟容器服務

閱讀全文,后面告訴你怎么免費白拿紅包

在 PetaExpress KubeSphere容器平臺部署 Kubernetes集群

在 Peta Express 中部署 Kubernetes 非常簡單,直接使用 Peta Express 中內置的 QKE 即可,登錄到 Peta Express 控制臺,在產品與服務中找到 AppCenter 控制臺 → 應用中心。

找到 QKE 立即部署即可。

按照提示輸入名稱,選擇集群規模等信息,直接提交就行了。但需要注意集群的配置,如果是開發測試可以選擇 “基礎型開發環境” 或 “企業型測試環境”,如果是生產的話則可以選擇 “基礎型生產環境” 或 “企業型生產環境”,也可以自定義集群規模和HA。

根據集群的規模,部署時間大致2分鐘到10分鐘不等,還是非常快的。部署完 Kubernetes, 接下來我們就可以開始進入正題 安裝 Redis 了。

安裝 Redis 集群

我這里新建了一個 test-project 的項目空間來做 Redis 集群所有安裝資源的放置,后續在 DNS 上會用到項目空間名稱,會標注這一部分,需要注意用自己的項目空間名。

Redis 集群的安裝流程大致分為以下幾個關鍵步驟:

①配置 redis.conf 字典;

②創建 redis 服務;

③容器組配置;

④存儲設置;

⑤高級設置。

接下來,我們將從第一步開始,逐步完成 Redis 集群的安裝和配置過程。

配置 redis.conf 字典

在項目空間的 配置 → 配置字典 → 創建 進行配置字典的創建。

名稱就叫 redis-conf 然后下一步 添加鍵值對數據。

key 值的內容為 redis.conf , value 值為:

創建 Redis 服務

在項目空間的 應用負載 → 工作負載 → 有狀態副本集 → 創建 進行 Redis 服務的創建。

基本設置里名稱就叫 redis-cluster 然后進行重頭戲,下一步的 容器組配置 。

容器組配置

這一步的核心就是配置 Redis 的容器,集群數量我們通常采用三主三從的集群配置,那容器的副本數量就是 6 個,這樣的配置不僅保證了系統的穩定性,也提升了數據的安全性。

容器組副本數量調到 6 個,點擊添加容器。
?


鏡像選擇 docker hub 中 redis ,并選擇使用默認端口,CPU 和內存可以選擇性預留,如果不預留就是調度公共資源。

選擇 使用默認端口 的話下面的端口設置就是如上圖一樣都會使用 6379 ,還有就是配置啟動命令。

如上圖配置:

命令: redis-server

參數: /etc/redis/redis.conf

參數指向的就是之前字典配置的內容,但是需要下一步 存儲設置 里進行配置字典才能使用。

其他內容沒有什么需要配置的,選擇對勾完成容器配置。

更新策略就是推薦的 滾動更新 ,其他也沒什么需要修改的,點擊下一步配置存儲設置 。
  存儲設置

在這一步有兩個操作

添加存儲卷模板

掛載配置字典或保密字典

 **添加存儲卷模板**

PVC 名稱前綴:redis-pvc

容量:10G

掛載路徑:

權限:讀寫

地址:/data

主要是掛載路徑選好,配置好后點擊對勾完成配置

掛載配置字典或保密字典

這一步是掛載我們之前配置的字典 redis-conf ,也是我們 redis 啟動命令的參數內容。

選擇 redis 的配置字典。

掛載權限為: 只讀 ,地址為: /etc/redis ;跟上面的命令參數的配置相對應。

特定鍵選擇 redis.conf 后面同名 redis.conf ,完成后點擊對勾回到存儲設置。配置好后就入上圖,點擊下一步進入最后的高級設置。

高級設置 里是一些額外配置,可以根據自己場景選擇調整配置,調成完成后點擊 創建 進行 Redis 集群容器的創建。

初始化 Redis 集群

創建完 Redis 服務后 在項目空間的 應用負載 → 服務 → 指定redis服務 進入 redis 服務詳情,詳情如下圖:

6 個 redis 的容器組都啟動成功了,接下來就是初始化集群;因為我們配置的 redis 的服務是 有狀態服務 (Headless) 所以訪問模式可以通過內部 DNS,訪問格式是:(容器名稱).( 容器 DNS).svc.cluster.local。

按上圖示例 比如訪問集群 1 節點訪問地址就是 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 集群的非第一節點的其他節點終端內通過這個地址進行訪問驗證他們是否互通,進入 3 節點的終端,如下圖:

進入終端,執行命令:

如果能如下圖一樣跳轉到 v1-1 的節點上就代表這兩個節點互通。

1 redis-cli -h redis-cluster-v1-1.redis-cluster.test-project.svc.clusterredis.local

2

如果能如下圖一樣跳轉到 v1-1 的節點上就代表這兩個節點互通。

執行命令: cluster info 查看節點的集群情況。

主要看上圖的這兩個參數, nodes 為 1 表明當前節點只有 1 個, cluster_size 表明當前沒有 master 節點,所以目前還不是集群結構, info 屬性的詳解在此列出:

cluster_state :ok 狀態表示集群可以正常接受查詢請求。fail 狀態表示,至少有一個哈希槽沒有被綁定(說明有哈希槽沒有被綁定到

任意一個節點),或者在錯誤的狀態(節點可以提供服務但是帶有 FAIL 標記),或者該節點無法聯系到多數 master 節點。

cluster_slots_assigned :已分配到集群節點的哈希槽數量(不是沒有被綁定的數量)。16384 個哈希槽全部被分配到集群節點是集群

正常運行的必要條件。

cluster_slots_ok :哈希槽狀態不是 FAIL 和 PFAIL 的數量。

cluster_known_nodes :集群中節點數量,包括處于握手狀態還沒有成為集群正式成員的節點。

cluster_slots_pfail :哈希槽狀態是 PFAIL 的數量。只要哈希槽狀態沒有被升級到 FAIL 狀態,這些哈希槽仍然可以被正常處理。

PFAIL 狀態表示我們當前不能和節點進行交互,但這種狀態只是臨時的錯誤狀態。

cluster_slots_fail : 哈希槽狀態是 FAIL 的數量。如果值不是 0,那么集群節點將無法提供查詢服務,除非 cluster-require-full

coverage 被設置為 no。

cluster_current_epoch :集群本地 Current Epoch 變量的值。這個值在節點故障轉移過程時有用,它總是遞增和唯一的。

cluster_my_epoch :當前正在使用的節點的 Config Epoch 值。這個是關聯在本節點的版本值。

cluster_size :至少包含一個哈希槽且能夠提供服務的 master 節點數量。

cluster_stats_messages_sent :通過 node-to-node 二進制總線發送的消息數量。

cluster_stats_messages_received :通過 node-to-node 二進制總線接收的消息數量。

IP 地址初始化集群(初始化方案一)

先嘗試使用 ip + port 的方式初始化集群,但是在 Kubernetes( K8s) 中啟動服務 ip 都會變化,所以最終的結果還是要用 DNS 方式進行集群初始化。

執行本步后再想修改為 DNS 地址初始化需要從來一遍,如果不想麻煩的同學可以直接跳過。

記錄 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

進入 redis 集群隨意一個節點的 終端 執行上面的命令。
?

如上圖集群初始化就完成了,再輸入命令 redis-cli 進入命令端,再執行 cluster info 查看集群信息。
?


  現在我們的集群節點有了 6 個, master 節點也有了三個,集群建立完成,后面的操作選擇 master 節點進行操作。

在對集群節點進行驗證的時候如果遇到上圖的錯誤 (error) MOVED 2589 10.233.70.30:6379 是因為 redis-cli 沒有開啟集群模式,將命令修改為 redis-cli -c 就切換為集群模式了。

 使用內部 DNS 初始化(初始化方案二)

使用 ip 地址的方式在每次 K8s 調度 redis 后 ip 都會發生變化,所以在 K8s 集群中使用 ip 方式初始化集群并不太合適,但是如果使用內部 DNS 直接跟上面一樣初始化集群會出現錯誤,因為 redis 對域名的支持并不太好,所以這時候可以用 Redis-tribe 。

 創建 Redis-tribe 服務

在項目空間的 應用負載 → 工作負載 → 創建 → 編輯 YAML 進行Redis-tribe服務的創建。

參數 namespace 就寫項目名稱:

具體 YAML 內容如下:

創建好后在容器組內找到 redis-cluster-tools 。

初始化集群

點擊容器名稱進入容器詳情再進入到終端里。

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

創建好后在容器組內找到 redis-cluster-tools 。

初始化集群

點擊容器名稱進入容器詳情再進入到終端里。

先執行以下命令初始化 master 節點,這時候之前的內部 DNS 的域名就有用了。

1 redis-trib.py create?dig +short redis-cluster-v1-0.redis-cluster.test-project.svc.cluster.local:6379 `dig +shor

2

執行結果如下圖:

接下來給每個 master 節點綁定對應的副本節點,總共三個:

0 節點->3 節點

1redis-trib.py create?dig +short redis-cluster-v1-0.redis-cluster.test-project.svc.cluster.local:6379 `dig +shor

2

1 節點->4 節點

1redis-trib.py replicate --master-addr `dig +short redis-cluster-v1-0.redis-cluster.test-project.svc.cluster.local

2

2 節點->5 節點

1redis-trib.py replicate --master-addr `dig +short redis-cluster-v1-1.redis-cluster.test-project.svc.cluster.loca

2

執行結果如下:

驗證

隨便進入一個集群節點的終端,還是執行 cluster info 命令,查看集群信息。

使用基礎命令進行驗證,驗證集群模式的 redis-cli 需要加 -c 。

驗證集群模式可以正常使用。

憑此文章可以去petaexpress官網發工單免費白拿10美元紅包,數量有限先到先得。申領步驟:注冊→登錄→發工單回復“文章網址+文章標題+申請獎勵”
?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/40337.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/40337.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/40337.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

十款絢麗的前端 CSS 菜單導航動畫

CSS漢堡菜單是一種非常流行的PC端和移動端web菜單風格,特別是移動端,這種風格的菜單應用更為廣泛。這款菜單便非常適合在手機App上使用,它的特點是當頂部菜單彈出時,頁面內容將會配合菜單出現適當的聯動,讓整個頁面變得…

關于linux捕捉鼠標事件的方法

網上找了很多方法,都比較雜亂。這篇文章專注于讀取鼠標的動作:左鍵、右鍵、中鍵、滾輪。 linux的設備都以文件形式存放,要讀取鼠標,有兩種方法,一種是通過/dev/input/mice,一種是通過/dev/input/eventx (x…

探索線程安全:HashMap 的四種使用技巧

這篇文章,我們聊聊線程安全使用 HashMap 的四種技巧。 1 方法內部:每個線程使用單獨的 HashMap 如下圖,tomcat 接收到到請求后,依次調用控制器 Controller、服務層 Service 、數據庫訪問層的相關方法。 每次訪問服務層方法 serv…

vue H5頁面video 視頻流自動播放, 解決ios不能自動播放問題

視頻組件 <videostyle"width: 100%; height: 100%;object-fit: fill"class"player"refplayer_big_boxcontrolspreloadautoplay //自動播放muted //是否靜音playsinline"true"x5-playsinline""webkit-playsinline"tru…

[Linux安全運維] Linux用戶以及權限管理

Linux用戶以及權限管理 Linux用戶和組 用戶信息文件pasawd /etc/passwd文件用于存儲用戶的信息 :用于分割不同的字段信息 字段示例&#xff08;第一行&#xff09;含義說明1root用戶名2x密碼占位符x代表用戶有密碼存儲在shadow文件中無內容代表用戶登錄系統不需要密碼30UID…

梧桐數據庫:存算分離和存算一體架構的分布式數據庫技術分析

摘要&#xff1a; 隨著數據量的不斷增長和對數據處理性能的要求越來越高&#xff0c;分布式數據庫技術成為了數據存儲和處理的重要解決方案。存算分離和存算一體是兩種常見的分布式數據庫架構&#xff0c;它們在數據存儲和計算方面有著不同的特點和優勢。本文將對存算分離和存算…

Spring源碼(一) 如何閱讀 Spring 源碼

學習 Spring 的源碼&#xff0c;也可以通過 SpringBoot 搭環境。 不管是什么源碼&#xff0c;最好寫個 demo&#xff0c;跑起來&#xff0c;然后從常用的類和方法入手&#xff0c;跟蹤調試。 配置對象 新建一個 SpringBoot 的項目&#xff0c; 詳情見&#xff1a; https://b…

FreeRTOS 中 vListInsertEnd 函數詳解

在 FreeRTOS 中&#xff0c;vListInsertEnd 函數用于將新項插入到指定列表的尾部&#xff08;但實際行為是插入到一個特定的索引位置之前&#xff09;。FreeRTOS 使用雙向鏈表&#xff08;doubly linked list&#xff09;來管理任務和其他系統對象&#xff0c;這樣可以高效地插…

前端三件套開發模版——產品介紹頁面

今天有空&#xff0c;使用前端三件套html、css、js制作了一個非常簡單的產品制作頁面&#xff0c;與大家分享&#xff0c;希望可以滿足大家應急的需求。本頁面可以對產品進行“搶購”、對產品進行介紹&#xff0c;同時可以安排一張產品的高清大圖&#xff0c;我也加入了頁面的背…

JAVA實現二分查找,斐波那契數列,深度優先搜索詳情教程【包含代碼】

本人詳解 作者:王文峰,參加過 CSDN 2020年度博客之星,《Java王大師王天師》 公眾號:JAVA開發王大師,專注于天道酬勤的 Java 開發問題中國國學、傳統文化和代碼愛好者的程序人生,期待你的關注和支持!本人外號:神秘小峯 山峯 轉載說明:務必注明來源(注明:作者:王文峰…

react+ts+antd項目搭建

前言&#xff1a; 基于ts語言創建react項目&#xff0c;node版本是v16.14.2 一、 腳手架創建項目 全局安裝 npm install -g creacte-react-app創建項目file-management&#xff0c;ts需要添加–template typescript npx create-react-app file-management --template typesc…

Ubuntu查看opencv版本c++

?命令行中直接輸入&#xff1a; pkg-config --modversion opencv?命令行中直接輸入&#xff1a; pkg-config --modversion opencv4注解&#xff1a;附上在markdown中打勾&#xff0c;對號和打叉。使用時將&和#之間的空格去掉&#xff0c;這里只是為了不讓CSDN自動轉換才…

Ubuntu20.04 c++程序 涉及opencv問題記錄

頭文件更改 默認的頭文件引用是 #include <opencv2/core/core.hpp> #include <opencv2/imgproc/imgproc.hpp> #include <opencv2/highgui/highgui.hpp>但是在ubuntu20中/usr/include中默認的是opencv4&#xff0c;他文件夾里面才是opencv2&#xff0c;需要…

vue3單個頁面進行防抖節流

防抖 <template><button id"submitButton" ref"submitButton">GET</button> </template><script lang"ts" setup> import { ref, onMounted } from vue;// 防抖函數 function debounce(func: () > void, dela…

【mybatis】mybatis-plus中Wrapper(查詢條件構造器)簡介_常用方法

1、簡介 MyBatis-Plus 是一個 MyBatis 的增強工具&#xff0c;在 MyBatis 的基礎上只做增強不做改變&#xff0c;為簡化開發、提高效率而生。MyBatis-Plus 提供了強大的條件構造器&#xff08;Wrapper&#xff09;&#xff0c;用于構建復雜的 SQL 查詢條件&#xff0c;使得我們…

溝通方法和技巧

0 Preface/Foreword 1 溝通對象 溝通維度&#xff1a; upward&#xff0c;向上溝通&#xff0c;直接上級downward&#xff0c;向下溝通&#xff0c;直接下級horizontal&#xff0c;橫向溝通&#xff0c;同部門/跨部門同事 2 溝通方式&#xff08;5W2H&#xff09; 對于開會和…

小白嘗試某程機票信息爬取

實訓課需要機票數據集&#xff0c;網上沒有&#xff0c;所以我選擇爬取數據 此過程可謂經歷的九九八十一難&#xff0c;也參考了不少大佬的文章&#xff0c;在此特別記錄一下 彎路不多說&#xff0c;我直接講成功的方法 找到請求url 通過控制臺&#xff0c;最后確認下面的 …

在WordPress中獲取10天之內的文章更新數

要在WordPress中獲取10天之內的文章更新數&#xff0c;您可以使用以下代碼片段。這段代碼將顯示在過去10天內更新的文章數量。 <?php // 獲取當前時間戳 $now time();// 計算10天前的時間戳 $ten_days_ago $now - (10 * 24 * 60 * 60);// 設置查詢參數 $args array(pos…

【Spring Boot AOP中切入表達式格式介紹】

文章目錄 一、切入表達式簡介二、切入表達式的語法1. 方法匹配符示例&#xff1a; 2. 類型匹配符示例&#xff1a; 一、切入表達式簡介 切入表達式&#xff08;Pointcut Expression&#xff09;是AOP中定義切入點&#xff08;Pointcut&#xff09;的一種方式。它定義了在哪些連…

基于Java中的SSM框架實現物流管理系統項目【項目源碼+論文說明】

基于Java中的SSM框架實現物流管理系統演示 摘要 企業的發展離不開物流的運輸&#xff0c;在一個大型的企業中&#xff0c;商品的生產和建設&#xff0c;推廣只是前期的一些工作&#xff0c;在后期的商品銷售和物流方面的建立&#xff0c;才能讓一個企業得到大力的發展。 企業…