主頁 >  其他 > 在 KubeSphere 中部署高可用 Redis 集群

在 KubeSphere 中部署高可用 Redis 集群

2022-09-27 08:25:56 其他

作者:余生大大,大資料開發工程師,云原生愛好者,KubeSphere 社區用戶,

前言

Redis 是在開發程序中經常用到的快取中間件,在生產環境中為了考慮穩定性高可用一般為集群模式的部署,

常規部署在虛擬機上的方式配置繁瑣并且需要手動重啟節點,而使用 K8s 進行 Redis 集群的部署有以下優點:

  • 安裝便捷:使用鏡像或者 yaml 組態檔即可一件安裝
  • 自動調度:容器掛掉后會自動調度重啟和資源分配
  • 縮擴容方便:在 擴容縮容 方面的優點無需多說,一鍵伸縮
  • 穩定高效K8s 在整個集群上進行調度,只要整個集群不掛掉總會調度到合適節點重啟容器服務

安裝 Redis 集群

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

安裝集群大概分為以下幾步:

  1. 配置 redis.conf 字典;
  2. 創建 redis 服務;
  3. 容器組配置;
  4. 存盤設定;
  5. 高級設定,

現在從第一步開始,

1.1 配置 redis.conf 字典

在專案空間的 配置配置字典創建 進行配置字典的創建,

名稱就叫 redis-conf 然后下一步 添加鍵值對資料,

key 值的內容為 redis.confvalue 值為:

cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
cluster-require-full-coverage no
cluster-migration-barrier 1
appendonly yes

創建 Redis 服務

在專案空間的 應用負載服務創建 進行 Redis 服務的創建,

選擇有狀態服務,需要資料存盤的服務基本都是有狀態的服務,

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

容器組配置

這一步的核心就是配置 Redis 的容器,集群數量就選擇常規的三主三從,那容器的副本數量就是 6 個,

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

鏡像選擇 docker hubredis6.2.3 版本,并選擇使用默認埠,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-1DNS 地址 redis-cluster.test-projectsvc.cluster.local,完整地址如下:

redis-cluster-v1-1.redis-cluster.test-project.svc.cluster.local

在 redis 集群的非第一節點的其他節點終端內通過這個地址進行訪問驗證他們是否互通,進入 3 節點的終端,如下圖:

進入終端,執行命令:

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

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

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

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

  • cluster_state:ok 狀態表示集群可以正常接受查詢請求,fail 狀態表示,至少有一個哈希槽沒有被系結(說明有哈希槽沒有被系結到任意一個節點),或者在錯誤的狀態(節點可以提供服務但是帶有 FAIL 標記),或者該節點無法聯系到多數 master 節點,
  • cluster_slots_assigned:已分配到集群節點的哈希槽數量(不是沒有被系結的數量),16384 個哈希槽全部被分配到集群節點是集群正常運行的必要條件,
  • cluster_slots_ok:哈希槽狀態不是 FAIL 和 PFAIL 的數量,
  • cluster_slots_pfail:哈希槽狀態是 PFAIL 的數量,只要哈希槽狀態沒有被升級到 FAIL 狀態,這些哈希槽仍然可以被正常處理,PFAIL 狀態表示我們當前不能和節點進行互動,但這種狀態只是臨時的錯誤狀態,
  • cluster_slots_fail: 哈希槽狀態是 FAIL 的數量,如果值不是 0,那么集群節點將無法提供查詢服務,除非 cluster-require-full-coverage 被設定為 no,
  • cluster_known_nodes:集群中節點數量,包括處于握手狀態還沒有成為集群正式成員的節點,
  • cluster_size:至少包含一個哈希槽且能夠提供服務的 master 節點數量,
  • cluster_current_epoch:集群本地 Current Epoch 變數的值,這個值在節點故障轉移程序時有用,它總是遞增和唯一的,
  • cluster_my_epoch:當前正在使用的節點的 Config Epoch 值,這個是關聯在本節點的版本值,
  • cluster_stats_messages_sent:通過 node-to-node 二進制總線發送的訊息數量,
  • cluster_stats_messages_received:通過 node-to-node 二進制總線接收的訊息數量,

IP 地址初始化集群

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

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


記錄 redis 集群的所有 ip+port,初始化命令如下:

redis-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:6379 10.233.96.50:6379 --cluster-replicas 1

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


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

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

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

使用內部 DNS 初始化

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

創建 Redis-tribe 服務

創建自定義服務,選擇編輯 YAML

引數 namespace 就寫專案名稱:

具體 YAML 內容如下:

apiVersion: apps/v1
kind: Deployment
metadata:
  namespace: test-project
  labels:
    app: redis-cluster-tools
  name: redis-cluster-tools
spec:
  replicas: 1
  selector:
    matchLabels:
      app: redis-cluster-tools
  template:
    metadata:
      labels:
        app: redis-cluster-tools
      name: pos-redis
    spec:
     containers:
     - name: pos-redis
       image: sunnywang/redis-tools-ubuntu:v0.5.1
       imagePullPolicy: IfNotPresent
       args:
       - /bin/bash
       - -c
       - sleep 3600

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

初始化集群

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

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

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

執行結果如下圖:

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

0 節點->3 節點

redis-trib.py replicate --master-addr `dig +short redis-cluster-v1-0.redis-cluster.test-project.svc.cluster.local`:6379 --slave-addr `dig +short redis-cluster-v1-3.redis-cluster.test-project.svc.cluster.local`:6379

1 節點->4 節點

redis-trib.py replicate  --master-addr `dig +short redis-cluster-v1-1.redis-cluster.test-project.svc.cluster.local`:6379 --slave-addr `dig +short redis-cluster-v1-4.redis-cluster.test-project.svc.cluster.local`:6379

2 節點->5 節點

redis-trib.py replicate --master-addr `dig +short redis-cluster-v1-2.redis-cluster.test-project.svc.cluster.local`:6379 --slave-addr `dig +short redis-cluster-v1-5.redis-cluster.test-project.svc.cluster.local`:6379

執行結果如下:

驗證

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

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

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

本文由博客一文多發平臺 OpenWrite 發布!

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/509601.html

標籤:其他

上一篇:「浙江理工大學ACM入隊200題系列」問題 J: 零基礎學C/C++83——寧寧的奧數路

下一篇:App Deploy as Code! SAE & Terraform 實作 IaC 式部署應用

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 2023年最新微信小程式抓包教程

    01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

    uj5u.com 2023-04-20 08:48:24 more
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:47:46 more
  • vulnhub_Earth

    前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

    uj5u.com 2023-04-20 07:46:20 more
  • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

    清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

    uj5u.com 2023-04-20 07:44:00 more
  • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

    🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

    uj5u.com 2023-04-20 07:43:36 more
  • 漫談前端自動化測驗演進之路及測驗工具分析

    隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

    uj5u.com 2023-04-20 07:43:16 more
  • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

    摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

    uj5u.com 2023-04-20 07:43:03 more
  • msf學習

    msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

    uj5u.com 2023-04-20 07:42:59 more
  • Halcon軟體安裝與界面簡介

    1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

    uj5u.com 2023-04-20 07:42:17 more
  • 在MacOS下使用Unity3D開發游戲

    第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

    uj5u.com 2023-04-20 07:40:19 more