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

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

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

1、前言

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

2、主從復(fù)制好處

  • 讀寫分離,性能擴(kuò)展
  • 容災(zāi)快速恢復(fù)

主庫負(fù)責(zé)寫操作,從庫負(fù)責(zé)讀操作。

3、服務(wù)器準(zhǔn)備

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

? 注意:

如果使用云服務(wù)器需要安全組端口和防火墻開放的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、搭建單機(jī)環(huán)境

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

4.3、集群配置

關(guān)閉7001單機(jī)實(shí)例,修改配置文件

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

內(nèi)容如下:

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
# 直接指定就行,不用手動(dòng)創(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、復(fù)制實(shí)例

將redis7001實(shí)例目錄復(fù)制分別為:redis7002~redis7006

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

4.5、修改其他實(shí)例配置文件

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

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

# 將700x修改為對應(yīng)實(shí)例的端口,比如7002
port 700x

# 將700x修改為對應(yīng)實(shí)例的端口,比如7002
cluster-config-file nodes-700x.conf

# 將700x修改為對應(yīng)實(shí)例的端口,比如7002
cluster-announce-port 700x

4.6、創(chuàng)建批量啟動(dòng)/關(guān)閉腳本

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

1、集群啟動(dòng)腳本:

vim start-all.sh

內(nèi)容:

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 ../..

授權(quán):

chmod u+x start-all.sh

2、集群關(guān)閉腳本:

vim shutdow-all.sh

內(nèi)容:

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

授權(quán):

chmod u+x shutdow-all.sh

4.7、創(chuàng)建集群

1、啟動(dòng)所有節(jié)點(diǎn)

sh start-all.sh

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

# 進(jìn)入集群目錄
cd /usr/local/redis/cluster/redis7001/bin

# 在搭建集群時(shí),要求至少有三個(gè)主節(jié)點(diǎn)(因?yàn)橥镀睓C(jī)制),6個(gè)實(shí)例自動(dòng)分配主從關(guān)系
# --cluster-replicas 1,表示主庫有多少個(gè)從庫,為1就表示有一個(gè)從庫
./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、集群連接測試

連接進(jìn)入任意節(jié)點(diǎn)

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

可以看到在7001節(jié)點(diǎn),set一個(gè)值,會(huì)自動(dòng)跳轉(zhuǎn)到7002節(jié)點(diǎn),并且可以取出值,表示當(dāng)前值存入在7002的節(jié)點(diǎn)中;

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

5、整合SpringBoot

SpringBoot整合reids單機(jī)版本可以參考《SpringBoot整合Redis》,其實(shí)整合集群版與單機(jī)版的區(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
    #連接超時(shí)時(shí)間
    timeout: 3600ms
    #密碼
    password:
    lettuce:
      pool:
        # 連接池最大連接數(shù)(使用負(fù)值表示沒有限制)
        max-active: 8
        # 連接池最大阻塞等待時(shí)間(使用負(fù)值表示沒有限制)
        max-wait: -1ms
        # 連接池中的最大空閑連接
        max-idle: 8
        # 連接池中的最小空閑連接
        min-idle: 1
      #關(guān)閉超時(shí)
      shutdown-timeout: 500ms

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

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

6.1、刪除從節(jié)點(diǎn)

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

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

6.2、新增從節(jié)點(diǎn)

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

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

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

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

重置節(jié)點(diǎn):

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

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

加入集群:

# 加入集群命令,指定7006加入到7002節(jié)點(diǎn)下:
./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對應(yīng)的master
#cluster-slave:表示加入的是slave節(jié)點(diǎn)
#--cluster-master-id:表示slave對應(yīng)的master的node ID
#如果不通過 --cluster-master-id指定主節(jié)點(diǎn)ID 會(huì)隨機(jī)分配到任意一個(gè)主節(jié)點(diǎn)

查看集群情況:

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

6.3、刪除主節(jié)點(diǎn)

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

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

# 槽點(diǎn)轉(zhuǎn)移
./redis-cli --cluster reshard 162.14.119.135:7003

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

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

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

6.4、新增主節(jié)點(diǎn)

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

前置條件:

redis7001拷貝一份為redis7007,并且修改redis7007的配置文件,然后啟動(dòng)實(shí)例; 

加入集群:

# 將7007加入到集群,后面的111.229.160.175:7001為集群中的任意主節(jié)點(diǎn)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

分配槽點(diǎn):

# 分配槽點(diǎn)時(shí),過程較復(fù)雜,具體流程如下截圖:
./redis-cli --cluster reshard 162.14.119.135:7007

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

分配從節(jié)點(diǎn):

在為主節(jié)點(diǎn)分配槽點(diǎn)時(shí),如果集群中有多余的從節(jié)點(diǎn),會(huì)自動(dòng)成為新增主節(jié)點(diǎn)的從節(jié)點(diǎn);

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

7、投票機(jī)制

每個(gè)哈希槽都有一個(gè)主節(jié)點(diǎn)和多個(gè)從節(jié)點(diǎn)

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

什么時(shí)候整個(gè)集群不可用:

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

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

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

8、主節(jié)點(diǎn)宕機(jī)演示

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

宕機(jī)前

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

宕機(jī)后

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

注意: 可以通過cluster-node-timeout設(shè)置時(shí)間;

宕機(jī)后恢復(fù)

模擬重新啟動(dòng)7001節(jié)點(diǎn),7001會(huì)自動(dòng)成為7004節(jié)點(diǎn)的從節(jié)點(diǎn);

9、重置集群

1、關(guān)閉集群中所有的實(shí)例

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ù)自動(dòng)分片到不同的redis主節(jié)點(diǎn)實(shí)例上,然后主節(jié)點(diǎn)同步到從節(jié)點(diǎn)中,實(shí)現(xiàn)數(shù)據(jù)的高可用。

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

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

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

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

總結(jié)

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

相關(guān)文章

  • redis.config配置文件

    redis.config配置文件

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

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

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

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

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

    Redisson 主從一致性問題詳解

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

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

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

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

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

    Redis持久化與主從復(fù)制的實(shí)踐

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

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

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

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

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

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

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

最新評論

于都县| 静海县| 城口县| 温宿县| 永新县| 阳新县| 庄河市| 迁安市| 盈江县| 青铜峡市| 安新县| 嘉义县| 陕西省| 青神县| 盱眙县| 石嘴山市| 蒙阴县| 盘山县| 凤凰县| 大城县| 建始县| 隆尧县| 白玉县| 青州市| 调兵山市| 九寨沟县| 临湘市| 南溪县| 区。| 宁波市| 富宁县| 任丘市| 奈曼旗| 磐安县| 石城县| 闽清县| 韶山市| 四会市| 白玉县| 开鲁县| 孝感市|