最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Linux環(huán)境搭建Redis6.x集群環(huán)境詳解(主從復制)

 更新時間:2026年03月02日 15:16:33   作者:一恍過去  
本文詳細介紹了如何搭建和管理一個Redis集群,包括主從復制、集群配置、批量腳本、集群啟動和關閉、節(jié)點的增刪、投票機制以及主節(jié)點宕機演示,通過這些步驟,可以實現(xiàn)Redis集群的高可用性和性能擴展

1、前言

在進行集群搭建時,需要保證單機版本的redis搭建沒有問題,可以參考《Linux服務器Redis 6.x安裝、配置

2、主從復制好處

  • 讀寫分離,性能擴展
  • 容災快速恢復

主庫負責寫操作,從庫負責讀操作。

3、服務器準備

搭建redis一主一從,分為3組,實際中可以將3組實例搭建到不同服務器上,本次為了演示操作,所有redis實例都在一臺服務器,通過端口進行區(qū)分

? 注意:

如果使用云服務器需要安全組端口和防火墻開放的redis客戶端與reids總線的端口(+10000),比如:reids的端口為7001-7006,那么reids總線的端口為17001-17006,所以需要開放的端口為:7001-7006、17001-17006

4、環(huán)境搭建

4.1、創(chuàng)建集群工作目錄

mkdir /usr/local/redis/cluster -p

4.2、搭建單機環(huán)境

cluster目錄下創(chuàng)建redis7001目錄并且成功搭建一個單機版的redis,端口設置為7001

4.3、集群配置

關閉7001單機實例,修改配置文件

vim /usr/local/redis/cluster/redis7001/config/redis.conf

內容如下:

daemonize  yes
注釋 bind 127.0.0.1
protected-mode no 
daemonize yes
cluster-enabled yes
logfile "/usr/local/redis/cluster/redis7001/log/redis.log"

port 7001
# 直接指定就行,不用手動創(chuàng)建conf文件
cluster-config-file nodes-7001.conf

#集群向外網(wǎng)暴漏的ip(網(wǎng)外IP)及端口
cluster-announce-ip 111.xxx.xxx.175
cluster-announce-port 7001

4.4、復制實例

將redis7001實例目錄復制分別為:redis7002~redis7006

cp redis7001/ redis7002 -r
...
...
cp redis7001/ redis7006 -r

4.5、修改其他實例配置文件

其他實例是從redis7001拷貝而來,所以只需要修改配置文件的不同點即可,如下:

# 將logfile中的redis700x修改為對應的文件夾,比如redis7002
logfile "/usr/local/redis/cluster/redis700x/log/redis.log"

# 將700x修改為對應實例的端口,比如7002
port 700x

# 將700x修改為對應實例的端口,比如7002
cluster-config-file nodes-700x.conf

# 將700x修改為對應實例的端口,比如7002
cluster-announce-port 700x

4.6、創(chuàng)建批量啟動/關閉腳本

由于所有的redis實例都在一臺服務器中,為了方便進行統(tǒng)一的管理,創(chuàng)建批量啟動與關閉的腳本,腳本所在目錄為:/usr/local/redis/cluster

1、集群啟動腳本:

vim start-all.sh

內容:

cd redis7001/bin
./redis-server ../config/redis.conf
cd ../..
cd redis7002/bin
./redis-server ../config/redis.conf
cd ../..
cd redis7003/bin
./redis-server ../config/redis.conf
cd ../..
cd redis7004/bin
./redis-server ../config/redis.conf
cd ../..
cd redis7005/bin
./redis-server ../config/redis.conf
cd ../..
cd redis7006/bin
./redis-server ../config/redis.conf
cd ../..

授權:

chmod u+x start-all.sh

2、集群關閉腳本:

vim shutdow-all.sh

內容:

redis7001/bin/redis-cli -p 7001 shutdown
redis7001/bin/redis-cli -p 7002 shutdown
redis7001/bin/redis-cli -p 7003 shutdown
redis7001/bin/redis-cli -p 7004 shutdown
redis7001/bin/redis-cli -p 7005 shutdown
redis7001/bin/redis-cli -p 7006 shutdown

授權:

chmod u+x shutdow-all.sh

4.7、創(chuàng)建集群

1、啟動所有節(jié)點

sh start-all.sh

2、創(chuàng)建集群連接

# 進入集群目錄
cd /usr/local/redis/cluster/redis7001/bin

# 在搭建集群時,要求至少有三個主節(jié)點(因為投票機制),6個實例自動分配主從關系
# --cluster-replicas 1,表示主庫有多少個從庫,為1就表示有一個從庫
./redis-cli --cluster create 162.14.119.135:7001 162.14.119.135:7002 162.14.119.135:7003 162.14.119.135:7004 162.14.119.135:7005 162.14.119.135:7006 --cluster-replicas 1

3、集群連接測試

連接進入任意節(jié)點

cd redis7001/bin
./redis-cli -h 162.14.119.135 -c -p 7001

可以看到在7001節(jié)點,set一個值,會自動跳轉到7002節(jié)點,并且可以取出值,表示當前值存入在7002的節(jié)點中;

我們再次使用./redis-cli -h 162.14.119.135 -c -p 7001進入7001節(jié)點,并且獲取name值,可以看到redis會自動從7002節(jié)點取值;

5、整合SpringBoot

SpringBoot整合reids單機版本可以參考《SpringBoot整合Redis》,其實整合集群版與單機版的區(qū)別在于yaml文件的配置,配置如下:

spring:
  redis:
    cluster:
      nodes:
        - 162.14.119.135:7001
        - 162.14.119.135:7002
        - 162.14.119.135:7003
        - 162.14.119.135:7004
        - 162.14.119.135:7005
        - 162.14.119.135:7006
    #連接超時時間
    timeout: 3600ms
    #密碼
    password:
    lettuce:
      pool:
        # 連接池最大連接數(shù)(使用負值表示沒有限制)
        max-active: 8
        # 連接池最大阻塞等待時間(使用負值表示沒有限制)
        max-wait: -1ms
        # 連接池中的最大空閑連接
        max-idle: 8
        # 連接池中的最小空閑連接
        min-idle: 1
      #關閉超時
      shutdown-timeout: 500ms

6、刪除、新增節(jié)點

刪除節(jié)點前,需要redis-cli --cluster check ip:port查詢集群情況,獲取相應的節(jié)點的id和主從關系。

6.1、刪除從節(jié)點

刪除命令:redis-cli --cluster del-node ip:port id

# 比如刪除7006從節(jié)點
./redis-cli --cluster del-node 162.14.119.135:7006 fbb17810c3df7038baf9e9f9a83b7d4a38283c29

6.2、新增從節(jié)點

當被刪除掉的節(jié)點重新啟動之后不能自動加入集群,本身已經(jīng)是個獨立的master節(jié)點了;

新增的從節(jié)點可以是之前的刪除的節(jié)點,也可以是新增的redis實例;

如果想要加入集群,則需要先在該節(jié)點執(zhí)行cluster reset,再用add-node進行添加,進行增量同步復制;

為了方便演示,我們直接將之前刪除的'7006'節(jié)點重新加入到集群中,如果不想加入之前刪除的節(jié)點,可以新增一個實例然后加入到集群中;

重置節(jié)點:

# 保證已經(jīng)刪除的節(jié)點是啟動狀態(tài),比如7006節(jié)點
# 進入7006客戶端
./redis-cli -h 162.14.119.135 -c -p 7006

# 執(zhí)行重置命令
cluster reset

加入集群:

# 加入集群命令,指定7006加入到7002節(jié)點下:
./redis-cli --cluster add-node 162.14.119.135:7006 162.14.119.135:7002 --cluster-slave --cluster-master-id d882c3ab7f37613663d7f063c4d7eae5cefd7fb7

#add-node: 后面的分別跟著新加入的slave和slave對應的master
#cluster-slave:表示加入的是slave節(jié)點
#--cluster-master-id:表示slave對應的master的node ID
#如果不通過 --cluster-master-id指定主節(jié)點ID 會隨機分配到任意一個主節(jié)點

查看集群情況:

# 再次查看集群情況:
./redis-cli --cluster check 162.14.119.135:7001

6.3、刪除主節(jié)點

刪除主節(jié)點時需要做更多操作,需要將槽點進行轉移,然后才能進行刪除,具體參考以下截圖

比如,刪除7003主節(jié)點,該主節(jié)點的ID為9f1e025a88826db82a4b6fc60a707dcbf7b2d6eb

# 槽點轉移
./redis-cli --cluster reshard 162.14.119.135:7003

以下截圖,為其他系統(tǒng)搭建時的截圖,但是操作原理、步驟和刪除7003節(jié)點時一致

# 刪除7003節(jié)點,當主節(jié)點槽點轉移完成后盡可以刪除節(jié)點了,執(zhí)行命令:
./redis-cli --cluster del-node 162.14.119.135:7003 9f1e025a88826db82a4b6fc60a707dcbf7b2d6eb

再次執(zhí)行check查看集群情況時,已經(jīng)沒有了7003節(jié)點

6.4、新增主節(jié)點

在之前的新增從節(jié)點中演示,新增之前刪除過的節(jié)點,本次新增主節(jié)點采用新增實例的方式進行。

前置條件:

redis7001拷貝一份為redis7007,并且修改redis7007的配置文件,然后啟動實例; 

加入集群:

# 將7007加入到集群,后面的111.229.160.175:7001為集群中的任意主節(jié)點ip:port
./redis-cli --cluster add-node 162.14.119.135:7007 162.14.119.135:7001

查看集群情況:

./redis-cli --cluster check 162.14.119.135:7001

分配槽點:

# 分配槽點時,過程較復雜,具體流程如下截圖:
./redis-cli --cluster reshard 162.14.119.135:7007

以下截圖,為其他系統(tǒng)搭建時的截圖,但是操作原理、步驟和新增7007節(jié)點時一致

分配從節(jié)點:

在為主節(jié)點分配槽點時,如果集群中有多余的從節(jié)點,會自動成為新增主節(jié)點的從節(jié)點;

沒有的話,可以采用新增從節(jié)點的方式進行指定,具體流程可以參考6.2、新增從節(jié)點;

7、投票機制

每個哈希槽都有一個主節(jié)點和多個從節(jié)點

  • **比如:**如果有六個節(jié)點,則分A,B,C三個為主節(jié)點,A1,B1,C1三個為對應的從節(jié)點,當A發(fā)生故障后,集群會提升A1為主節(jié)點,A1會繼承A節(jié)點的數(shù)據(jù),其實A1就相當于A的一個副本,讓集群繼續(xù)工作。
  • 投票過程是集群中所有主節(jié)點參與,如果半數(shù)以上主節(jié)點與故障主節(jié)點通信超時,則認為當前該主節(jié)點掛掉,所以集群中至少需要3個主節(jié)點,每個主節(jié)點至少需要一個從節(jié)點,所有至少就是需要6個redis實例。

什么時候整個集群不可用:

a:如果集群任意主節(jié)點掛掉,且沒有從節(jié)點.集群進入fail狀態(tài)

b:如果集群超過半數(shù)以上主節(jié)點掛掉,無論是否有從節(jié)點,集群都進入fail狀態(tài).

ps: 當集群不可用時,所有對集群的操作做都不可用,收到((error) CLUSTERDOWN The cluster is down)錯誤。

8、主節(jié)點宕機演示

  • 當某個主節(jié)點掛了以后,對應的從節(jié)點會自動升級為主節(jié)點,然后再次啟動這個節(jié)點后,節(jié)點會自動加入到集群中,并且成為某個主節(jié)點(從原有從節(jié)點升級為主節(jié)點的節(jié)點)的從節(jié)點。
  • 如果從節(jié)點掛了以后,然后再次啟動這個節(jié)點后,可以將當前節(jié)點加入到集群中,并且繼續(xù)成為原有主節(jié)點的從節(jié)點。

宕機前

我們可以看到:主節(jié)點7001,從節(jié)點7004;

宕機后

7001宕機后[模擬手動關閉],過一段時間(默認15S),7004從節(jié)點會自動變?yōu)橹鞴?jié)點并且會繼承主節(jié)點的數(shù)據(jù),后續(xù)當7001節(jié)點上線以后,會自動變成7004節(jié)點的從節(jié)點。

注意: 可以通過cluster-node-timeout設置時間;

宕機后恢復

模擬重新啟動7001節(jié)點,7001會自動成為7004節(jié)點的從節(jié)點;

9、重置集群

1、關閉集群中所有的實例

2、刪除bin目錄下的aof、rdb、nodes.conf文件

3、重新建立集群:

# 新建集群
./redis-cli --cluster create 162.14.119.135:7001 162.14.119.135:7002 162.14.119.135:7003 162.14.119.135:7004 162.14.119.135:7005 162.14.119.135:7006 --cluster-replicas 1

# 查看集群情況
./redis-cli --cluster check 162.14.119.135:7001

10、集群原理

redis集群就是將數(shù)據(jù)自動分片到不同的redis主節(jié)點實例上,然后主節(jié)點同步到從節(jié)點中,實現(xiàn)數(shù)據(jù)的高可用。

一個 Redis 集群包含 16384 個插槽(hash slot), 數(shù)據(jù)庫中的每個鍵都屬于這 16384 個插槽的其中一個;

集群通過hash算法來計算鍵 key 屬于哪個槽,將value存放到指定插槽或者從指定插槽中獲取value;

集群中的每個節(jié)點負責處理一部分插槽。 舉個例子, 如果一個集群可以有3個主節(jié)點, 其中:

  • 節(jié)點 A 負責處理 0 號至 5460 號插槽。
  • 節(jié)點 B 負責處理 5461 號至 10922 號插槽。
  • 節(jié)點 C 負責處理 10923 號至 16383 號插槽。

總結

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • redis.config配置文件

    redis.config配置文件

    在使用Redis時,我們通常需要對Redis進行一些配置,以確保其能夠正常運行并滿足我們的需求,本文主要介紹了redis.config配置文件,感興趣的可以了解一下
    2023-11-11
  • 一篇吃透Redis緩存穿透、雪崩、擊穿問題

    一篇吃透Redis緩存穿透、雪崩、擊穿問題

    這篇文主要介紹了Redis緩存穿透,緩存雪崩,緩存擊穿的問題解決方法,文中有詳細的圖文介紹,對大家了解Redis有一定的幫助,需要的朋友可以參考下
    2023-05-05
  • Redis中五種數(shù)據(jù)類型簡單操作

    Redis中五種數(shù)據(jù)類型簡單操作

    這篇文章主要介紹了Redis中五種數(shù)據(jù)類型簡單操作的相關資料,需要的朋友可以參考下
    2017-04-04
  • Redisson 主從一致性問題詳解

    Redisson 主從一致性問題詳解

    這篇文章主要為大家介紹了Redisson 主從一致性問題詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-08-08
  • Redis?Hash序列化存儲的問題及解決方案

    Redis?Hash序列化存儲的問題及解決方案

    這篇文章主要介紹了Redis?Hash序列化存儲的問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • Redis總結筆記(一):安裝和常用命令

    Redis總結筆記(一):安裝和常用命令

    這篇文章主要介紹了Redis總結筆記(一):安裝和常用命令,本文著重總結了常用命令,如對value操作的命令、對String操作的命令、對List操作的命令、對Set操作的命令等,需要的朋友可以參考下
    2015-01-01
  • Redis持久化與主從復制的實踐

    Redis持久化與主從復制的實踐

    這篇文章主要介紹了Redis持久化與主從復制的實踐,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-04-04
  • 淺談Redis位圖(Bitmap)及Redis二進制中的問題

    淺談Redis位圖(Bitmap)及Redis二進制中的問題

    這篇文章主要介紹了Redis位圖(Bitmap)及Redis二進制中的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • Redis Lua腳本實現(xiàn)分布式鎖方式

    Redis Lua腳本實現(xiàn)分布式鎖方式

    文章主要介紹了在分布式系統(tǒng)中使用Lua腳本實現(xiàn)Redis分布式鎖的方法,包括可重入鎖的實現(xiàn)和注意事項,以及紅鎖算法在Redis集群狀態(tài)下的潛在問題
    2026-05-05
  • Redis使用SETNX命令實現(xiàn)分布式鎖

    Redis使用SETNX命令實現(xiàn)分布式鎖

    分布式鎖是一種用于在分布式系統(tǒng)中控制多個節(jié)點對共享資源進行訪問的機制,本文主要為大家詳細介紹了Redis如何使用SETNX命令實現(xiàn)分布式鎖,需要的可以參考下
    2025-01-01

最新評論

罗定市| 松阳县| 永德县| 桐庐县| 军事| 蚌埠市| 邻水| 同心县| 西宁市| 平潭县| 察雅县| 麟游县| 丽江市| 茶陵县| 嘉荫县| 延长县| 磐安县| 封开县| 乳源| 嘉祥县| 荣昌县| 普格县| 靖州| 阿城市| 贵阳市| 延寿县| 宜兰县| 丰县| 中方县| 甘孜县| 汉阴县| 凌海市| 辽阳县| 凉山| 陇南市| 彭阳县| 四会市| 健康| 宁陕县| 长岛县| 昌图县|