【深入學習Redis丨第二篇】Redis集群部署詳解

文章目錄

  • Redis集群部署
  • Redis4 Cluster部署

在這里插入圖片描述

Redis集群部署

1 Redis各節點部署

使用源碼安裝各節點,不過與非cluster方式不同的是,配置文件中需啟動cluster相關的配置。

因本次為偽分布式部署,生產環境部署時建議至少3臺機器部署(其中每臺機器1主1從)



ipport
192.168.56.1017000
192.168.56.1017001
192.168.56.1017002
192.168.56.1017003
192.168.56.1017004
192.168.56.1017005

1.1 啟動cluster各節點

創建數據目錄

mkdir -p  /data/redis/cluster/{7000,7001,7002,7003,7004,7005}

配置文件中主要修改如下內容,其他的可按需調整,也可保持默認值,各節點中注意修改對應的端口號

bind 192.168.56.101
port 7000
daemonize yes
pidfile /data/redis/cluster/7000/redis_7000.pid
logfile "/data/redis/cluster/7000/redis_7000.log"
appendonly yes
appendfilename "appendonly.aof"
appendfsync everysec
cluster-enabled yes
cluster-config-file nodes-7000.conf     #注意此文件自動生成,且初始化時不要有和此重名的文件
cluster-node-timeout 5000
cluster-slave-validity-factor 10
cluster-migration-barrier 1
cluster-require-full-coverage yes
cluster-slave-no-failover no

啟動各節點,建議用redis用戶啟動

useradd redis
chown -R  redis:redis  /data/redis/
su - redis
cd /data/redis/cluster/7001
cp /data/redis/cluster/7000/redis.conf . 
sed -i "s#7000#7001#g" redis.conf
redis-server redis.conf

其他節點和7001類似啟動,啟動后進程中會標記redis節點以cluster模式啟動

在這里插入圖片描述

2. 按照依賴

因redis5之前版本前cluster安裝依賴ruby,且版本要求比較苛刻,本次安裝的版本redis4.0.14,依賴的ruby版本為>=ruby2.4,因此大家安裝時可以安裝高版本的ruby,本次使用的是ruby2.7.5版本

2.1 編譯安裝ruby

下載ruby,建議從官網下載源碼進行編譯安裝
https://www.ruby-lang.org/en/downloads/

tar -zxvf  ruby-2.7.5.tar.gz
cd ruby-2.7.5 
./configure
make  
make install

安裝完畢后,檢查ruby以及gem版本

2.2 安裝openssl-devel及zlib-devel

安裝完ruby后,使用gem安裝redis包,此時如果沒有安裝openssl 則回報如下錯誤

gem install  redis
ERROR:  Loading command: install (LoadError)cannot load such file -- openssl
ERROR:  While executing gem ... (NoMethodError)undefined method `invoke_with_build_args' for nil:NilClass

按照過程如下:

yum方式先安裝openssl

 yum install openssl-devel -y

再進入ruby源碼目錄中的ext目錄下,找到openssl目錄,進入后進行安裝

cd ruby-2.7.5/ext/openssl
ruby extconf.rb 
make
make install

zlib-devel包如報錯,也可同上方式處理。

在執行make,若出現如下報錯:

 make: *** 沒有規則可以創建“ossl_asn1.o”需要的目標“/include/ruby.h” 停止。

可以在Makefile頂部中的增加 top_srcdir = …/…

再次執行 make && make install

2.3 gem安裝redis

 gem install redis

3. 初始化redis集群

相關依賴安裝完成后,即可初始化redis集群,命令及過程如下:

[redis@localhost redis-4.0.14]$ src/redis-trib.rb create --replicas 1 192.168.56.101:7000 192.168.56.101:7001 192.168.56.101:7002 192.168.56.101:7003 192.168.56.101:7004 192.168.56.101:7005
>>> Creating cluster
>>> Performing hash slots allocation on 6 nodes...
Using 3 masters:
192.168.56.101:7000
192.168.56.101:7001
192.168.56.101:7002
Adding replica 192.168.56.101:7004 to 192.168.56.101:7000
Adding replica 192.168.56.101:7005 to 192.168.56.101:7001
Adding replica 192.168.56.101:7003 to 192.168.56.101:7002
>>> Trying to optimize slaves allocation for anti-affinity
[WARNING] Some slaves are in the same host as their master
M: cd6663924f0c31e6b60b815dca9cb7ea863f5573 192.168.56.101:7000slots:0-5460 (5461 slots) master
M: abc1f43c9a4e8813e9da15433ac66cd185dc39fe 192.168.56.101:7001slots:5461-10922 (5462 slots) master
M: 43fa53cec1ae164f784e5d439aaf80ee2f7e35af 192.168.56.101:7002slots:10923-16383 (5461 slots) master
S: 6ffcd16f1d445b0091c6239bc0988fb8a77fac96 192.168.56.101:7003replicates cd6663924f0c31e6b60b815dca9cb7ea863f5573
S: c523846d491f8df0bc97033b025b0d24375a13f8 192.168.56.101:7004replicates abc1f43c9a4e8813e9da15433ac66cd185dc39fe
S: 905dc9de7e074c282aab44b4ed5680a2020bcf4c 192.168.56.101:7005replicates 43fa53cec1ae164f784e5d439aaf80ee2f7e35af
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 192.168.56.101:7000)
M: cd6663924f0c31e6b60b815dca9cb7ea863f5573 192.168.56.101:7000slots:0-5460 (5461 slots) master1 additional replica(s)
M: 43fa53cec1ae164f784e5d439aaf80ee2f7e35af 192.168.56.101:7002slots:10923-16383 (5461 slots) master1 additional replica(s)
S: c523846d491f8df0bc97033b025b0d24375a13f8 192.168.56.101:7004slots: (0 slots) slavereplicates abc1f43c9a4e8813e9da15433ac66cd185dc39fe
S: 6ffcd16f1d445b0091c6239bc0988fb8a77fac96 192.168.56.101:7003slots: (0 slots) slavereplicates cd6663924f0c31e6b60b815dca9cb7ea863f5573
M: abc1f43c9a4e8813e9da15433ac66cd185dc39fe 192.168.56.101:7001slots:5461-10922 (5462 slots) master1 additional replica(s)
S: 905dc9de7e074c282aab44b4ed5680a2020bcf4c 192.168.56.101:7005slots: (0 slots) slavereplicates 43fa53cec1ae164f784e5d439aaf80ee2f7e35af
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

至此,redis集群初始化完畢,各節點slot范圍及角色也打印出來了

Redis4 Cluster部署

1、安裝redis集群節點

因本次為偽分布式部署,生產環境部署時建議至少3臺機器部署(其中每臺機器1主1從),依舊和redis4.0.14的方式一樣部署



**ip ****port **
192.168.56.1017000
192.168.56.1017001
192.168.56.1017002
192.168.56.1017003
192.168.56.1017004
192.168.56.1017005

1.1 啟動cluster各節點

創建數據目錄

mkdir -p  /data/redis/cluster/{7000,7001,7002,7003,7004,7005}

配置文件中主要修改如下內容,其他的可按需調整,也可保持默認值,各節點中注意修改對應的端口號

bind 192.168.56.103
port 7000
daemonize yes
pidfile /data/redis/cluster/7000/redis_7000.pid
logfile "/data/redis/cluster/7000/redis_7000.log"
appendonly yes
appendfilename "appendonly.aof"
appendfsync everysec
cluster-enabled yes
cluster-config-file nodes-7000.conf     #注意此文件自動生成,且初始化時不要有和此重名的文件
cluster-node-timeout 5000
cluster-slave-validity-factor 10
cluster-migration-barrier 1
cluster-require-full-coverage yes
cluster-slave-no-failover no

啟動各節點,建議用redis用戶啟動

useradd redis
chown -R  redis:redis  /data/redis/
su - redis
cd /data/redis/cluster/7001
cp /data/redis/cluster/7000/redis.conf . 
sed -i "s#7000#7001#g" redis.conf
redis-server redis.conf

其他節點和7001類似啟動,啟動后進程中會標記redis節點以cluster模式啟動

在這里插入圖片描述

2. 初始化集群

redis5.x之后的版本初始化集群相當便捷,命令及過程如下

redis-cli --cluster create --cluster-replicas 1 192.168.56.103:7000 192.168.56.103:7001 192.168.56.103:7002 192.168.56.103:7003 192.168.56.103:7004 192.168.56.103:7005
>>> Performing hash slots allocation on 6 nodes...
Master[0] -> Slots 0 - 5460
Master[1] -> Slots 5461 - 10922
Master[2] -> Slots 10923 - 16383
Adding replica 192.168.56.103:7004 to 192.168.56.103:7000
Adding replica 192.168.56.103:7005 to 192.168.56.103:7001
Adding replica 192.168.56.103:7003 to 192.168.56.103:7002
>>> Trying to optimize slaves allocation for anti-affinity
[WARNING] Some slaves are in the same host as their master
M: 84ea774c08450db01bf5a518e3b9e55fd26d4d34 192.168.56.103:7000slots:[0-5460] (5461 slots) master
M: eb98e53273fd348deb5eabcc6bfffc20484749b1 192.168.56.103:7001slots:[5461-10922] (5462 slots) master
M: e059d418c11401189558d0f33bd5658297c10939 192.168.56.103:7002slots:[10923-16383] (5461 slots) master
S: 23eed1c27ad11c685e5a226e2f82d5c0b6384c79 192.168.56.103:7003replicates e059d418c11401189558d0f33bd5658297c10939
S: cfa2549ea7782bb4f0ed6d45e9e3704a7d38d540 192.168.56.103:7004replicates 84ea774c08450db01bf5a518e3b9e55fd26d4d34
S: c3e14c4139bfa88af03ea97679715f051a122806 192.168.56.103:7005replicates eb98e53273fd348deb5eabcc6bfffc20484749b1
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 192.168.56.103:7000)
M: 84ea774c08450db01bf5a518e3b9e55fd26d4d34 192.168.56.103:7000slots:[0-5460] (5461 slots) master1 additional replica(s)
S: 23eed1c27ad11c685e5a226e2f82d5c0b6384c79 192.168.56.103:7003slots: (0 slots) slavereplicates e059d418c11401189558d0f33bd5658297c10939
M: eb98e53273fd348deb5eabcc6bfffc20484749b1 192.168.56.103:7001slots:[5461-10922] (5462 slots) master1 additional replica(s)
S: c3e14c4139bfa88af03ea97679715f051a122806 192.168.56.103:7005slots: (0 slots) slavereplicates eb98e53273fd348deb5eabcc6bfffc20484749b1
S: cfa2549ea7782bb4f0ed6d45e9e3704a7d38d540 192.168.56.103:7004slots: (0 slots) slavereplicates 84ea774c08450db01bf5a518e3b9e55fd26d4d34
M: e059d418c11401189558d0f33bd5658297c10939 192.168.56.103:7002slots:[10923-16383] (5461 slots) master1 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

看到如下結果,代表成功配置并分配slot完成

在這里插入圖片描述

查看各節點信息也可以用如下命令

[redis@localhost 7005]$ redis-cli -h 192.168.56.103 -p 7000 cluster nodes
23eed1c27ad11c685e5a226e2f82d5c0b6384c79 192.168.56.103:7003@17003 slave e059d418c11401189558d0f33bd5658297c10939 0 1646118171000 4 connected
eb98e53273fd348deb5eabcc6bfffc20484749b1 192.168.56.103:7001@17001 master - 0 1646118171604 2 connected 5461-10922
c3e14c4139bfa88af03ea97679715f051a122806 192.168.56.103:7005@17005 slave eb98e53273fd348deb5eabcc6bfffc20484749b1 0 1646118171000 6 connected
cfa2549ea7782bb4f0ed6d45e9e3704a7d38d540 192.168.56.103:7004@17004 slave 84ea774c08450db01bf5a518e3b9e55fd26d4d34 0 1646118170000 5 connected
e059d418c11401189558d0f33bd5658297c10939 192.168.56.103:7002@17002 master - 0 1646118169590 3 connected 10923-16383
84ea774c08450db01bf5a518e3b9e55fd26d4d34 192.168.56.103:7000@17000 myself,master - 0 1646118171000 1 connected 0-5460

在這里插入圖片描述

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

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

相關文章

列表和列表項

一、列表和列表項簡介 列表是 FreeRTOS 中的一個數據結構,列表被用來跟蹤 FreeRTOS中的任務(任務當前的狀態),列表項就是存放在列表中的項目 列表相當于鏈表,列表項相當于節點,FreeRTOS 中的列表是一個雙向…

全文搜索算法的思路

一、作用 全文搜索算法適合文本文件的搜索。 二、應用場景 全文搜索算法廣泛應用在各個網站的搜索功能中。 三、全文搜索和正則模糊查詢的區別 1、全文搜索可以把搜索關鍵字進行分割,提取出相關的關鍵詞。 2、正則模糊查詢只能把關鍵字作為整體,不能…

Gigapixel AI 安裝和使用教程

簡介 Topaz Gigapixel AI 是一款功能強大的圖像放大軟件,它可以幫助用戶將低分辨率的圖像放大到更高的分辨率,而不會損失細節。該軟件利用人工智能技術,能夠智能分析圖像并重建丟失的細節,從而生成高質量的放大圖像。 安裝 下載…

系統架構設計師 - 操作系統(1)

操作系統 操作系統(5-6分)操作系統概述進程管理進程和線程的基本概念進程的狀態 ★前趨圖 ★★★★信號量與 PV 操作 ★★★★死鎖及銀行家算法 ★ 大家好呀!我是小笙,本章我主要分享系統架構設計師 - 操作系統(1)知識&#xff0c…

CSS簡述(1)

CSS概述 CSS(層疊樣式表,Cascading Style Sheets)是一種樣式表語言,用于對HTML文檔控制外觀,定義布局。例如、css涉及字體、顏色、邊距、高度、背景圖像、高級定位等方面 CSS的主要用途: 1. 分離內容和樣…

2024.6.1 學習記錄

1、面經復習 2、項目使用guthub action 完成CI/CD,使用rollup打包為es格式 3、代碼隨想錄刷題復習

Go語言-切片底層探索 —— 補充篇:切片和底層數組到底是什么關系?

之前的切片探索中,上篇通過一道算法題目,了解到切片的兩大特性:一是:切片是引用類型,指向底層數組,修改其底層數組的時候,會影響切片中的值。二是:向切片中添加元素的時候&#xff0…

半導體光子電學期末筆記1: 電磁光學基本理論

Chapter 2: 電磁光學基本理論 電磁光學理論概述 真空中麥克斯韋方程組[p9] 在自由空間中,麥克斯韋方程組可以寫成如下形式: { ? H ? 0 ? E ? t (1) ? E ? μ 0 ? H ? t (2) ? ? E 0 (3) ? ? H 0 (4) \begin{cases} \nabla \times \…

Java——異常詳解

異常五個主要關鍵字:throw、try、catch、finally、throws 1. 異常的概念與體系結構 1.1 異常的概念 在Java中,程序執行過程中發生的不正常行為被稱為異常,如: 1. 算數異常 public static void main(String[] args) {System.ou…

基于MingGW64 GCC編譯Windows平臺上的 libuvc

安裝cmake 打開cmake官網 https://cmake.org/download/,下載安裝包: 安裝時選擇將cmake加到系統環境變量里。安裝完成后在新的CMD命令窗口執行cmake --version可看到輸出: D:\>cmake --version cmake version 3.29.3 CMake suite mainta…

牛客網刷題 | BC108 反斜線形圖案

目前主要分為三個專欄,后續還會添加: 專欄如下: C語言刷題解析 C語言系列文章 我的成長經歷 感謝閱讀! 初來乍到,如有錯誤請指出,感謝! 描述 KiKi學習了循環&am…

社交媒體數據恢復:Voxer

一、Voxer數據恢復教程 了解Voxer應用 Voxer是一款專門為iPhone和Android智能手機設計的免費對講機應用,為用戶提供即時的語音、文本、照片等信息發送和接收服務。該應用有點類似短信服務,但用聲音代替文本。當你下載之后,如果不邀請朋友&a…

Github查詢語法

轉載自link 基礎查詢結構 一個關鍵詞會匹配文件內容或文件路徑。 多個關鍵詞會匹配文件內容,只要包含關鍵詞,就會出現在搜索結果中,不論前后順序,是否是一個單詞(多個關鍵詞之間沒有空格)。 還可以使用…

Java中的JVM是什么?簡要說明其工作原理

Java虛擬機(JVM)概述 Java虛擬機(Java Virtual Machine,JVM)是Java技術的核心部分。它是一個抽象的計算機,可以解釋和執行Java字節碼。JVM提供了一個運行Java程序的環境,使得Java程序可以在各種…

【面試】字節碼文件是跨平臺的嗎?

目錄 1. 說明 1. 說明 1.字節碼文件(.class文件)是跨平臺的。2.字節碼文件是Java源代碼經過Java編譯器(javac)編譯后生成的中間代碼文件,這些包含了Java虛擬機(JVM)指令,而不是特定…

重復文件怎么查找并清理?電腦重復文件清理工具分享:4個

在日常使用電腦的過程中,我們不可避免地會遇到各種重復文件的問題。這些重復文件不僅占據了寶貴的存儲空間,還可能導致系統性能下降,甚至引發一些不必要的問題。因此,如何有效地查找并清理這些重復文件成為了許多用戶關注的焦點。…

計算 x 的二進制表示中 1 的個數

計算 x 的二進制表示中 1 的個數 代碼如下: int func(int x){int countx 0;while (x>0){countx;x x & (x - 1);}return countx;} 完整代碼: using System; using System.Collections.Generic; using System.ComponentModel; using System.Dat…

STM32基于HAL庫的HC-SR04模塊超聲波測距

文章目錄 一、HC-SR04模塊介紹二、創建工程1.選擇芯片2.配置RCC、SY![在這里插入圖片描述](https://img-blog.csdnimg.cn/direct/9d2a5b883f0e409eabb804e6da861277.png)3.配置串口14.配置定時器5.配置GPIO 三、Keil代碼1.勾選Use MicroLIB2.創建SR04.c和SR04.h文件3.其他代碼 …

html three.js 引入.stl模型示例

1.新建一個模塊用于放置模型 <div id"chart_map" style"width:800px;height:500px"></div> 2. 引入代碼根據需求更改 <!-- 在head或body標簽內加入以下鏈接 --> <script src"https://cdn.jsdelivr.net/npm/three0.137/build/t…

算法題-字符串排序

題目描述 給定n個字符串&#xff0c;請對n個字符串按照字典序排列。 輸入描述: 輸入第一行為一個正整數n(1≤n≤1000),下面n行為n個字符串(字符串長度≤100),字符串中只含有大小寫字母。 輸出描述: 數據輸出n行&#xff0c;輸出結果為按照字典序排列的字符串。 輸入 #輸…