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

Redis主從復(fù)制搭建、哨兵搭建、集群搭建全過程

 更新時(shí)間:2026年03月07日 15:54:05   作者:祁仙森  
本文詳細(xì)介紹了Redis主從復(fù)制和哨兵模式的搭建步驟、配置方法以及主從復(fù)制和哨兵模式的特點(diǎn)和應(yīng)用,主從復(fù)制可以實(shí)現(xiàn)讀寫分離和性能擴(kuò)展,同時(shí)提供了容災(zāi)和快速恢復(fù)功能,哨兵模式可以實(shí)現(xiàn)主節(jié)點(diǎn)的自動故障轉(zhuǎn)移,提高系統(tǒng)的可用性和可靠性

主從復(fù)制

此模式的優(yōu)勢:讀寫分離,性能擴(kuò)展;容災(zāi)快速恢復(fù)

搭建步驟(例子:一主兩從)

首先定義一個(gè)目錄便于后期區(qū)分主從,單節(jié)點(diǎn)服務(wù),集群模式。我就在//home/scene/installPackage目錄下定義了一個(gè)redis-master-slave目錄

將redis.conf拷貝一份到剛剛的redis-master-slave目錄下

cp /etc/redis.conf /home/scene/installPackage/redis-master-slave

配置一主兩從,創(chuàng)建3個(gè)配置文件:redis6379.conf、redis6380.conf、redis6381.conf

先關(guān)閉aof開關(guān),將公共的redis.conf配置文件里的appendonly的值改為no即可;appendonly不關(guān)也可以,或者換名字即可

在三個(gè)文件中寫入配置內(nèi)容

首先第一個(gè),vi redis6379.conf

# 首先引入公共部分配置
include /home/scene/installPackage/redis-master-slave/redis.conf
# 配置pid文件
pidfile /var/run/redis_master_slave_6379.pid
# 配置啟動的端口
port 6379
# RDB文件名稱,保存在當(dāng)前目錄下了
dbfilename dump_master_slave_6379.rdb

參照redis6379.conf配置文件再配置redis6380.conf、redis6381.conf即可,快速的方式

cp redis6379.conf redis6380.conf
##然后使用vi編輯,此處無需實(shí)際編輯,輸入
:%s/6379/6380
即可全局將6379替換成6380,省去時(shí)間,然后再保存即可

啟動服務(wù),分別執(zhí)行(在/home/scene/installPackage/redis-master-slave目錄下)

redis-server redis6379.conf
redis-server redis6380.conf
redis-server redis6381.conf

使用客戶端連接其中服務(wù)redis-cli -p 6379,隨便哪個(gè)端口的服務(wù)都是,在客戶端使用指令info replication查看主從效果,發(fā)現(xiàn)都是獨(dú)立的主服務(wù)

在從機(jī)上(比如此處選擇6379為主節(jié)點(diǎn),6380,6381為從節(jié)點(diǎn))執(zhí)行slaveof 127.0.0.1 6379,即可實(shí)現(xiàn)主從模式,再執(zhí)行info replication查看信息,便可看到主從信息

注意,主從一旦搭建完成,主節(jié)點(diǎn)可讀可寫,從節(jié)點(diǎn)只能讀取,不能寫入,寫入會報(bào)錯(cuò)

永久化實(shí)現(xiàn)6379為主節(jié)點(diǎn),其余兩個(gè)為從節(jié)點(diǎn),配置剛剛的redis6379.conf、redis6380.conf、redis6381.conf

redis6379.conf的內(nèi)容

# 首先引入公共部分配置
include /home/scene/installPackage/redis-master-slave/redis.conf
#任意ip都可以連接
bind 0.0.0.0
#關(guān)閉保護(hù),允許非本地連接
protected-mode no
#進(jìn)程守護(hù)文件,存放該服務(wù)進(jìn)程號相關(guān)信息文件
pidfile /var/run/redis_master_slave_6379.pid
# 配置啟動的端口
port 6379
# RDB文件名稱,保存在當(dāng)前目錄下了
dbfilename dump_master_slave_6379.rdb
#日志文件保存地址
logfile "/var/run/redisms/log/6379/redis_master_slave_6379.log"
#開啟aof日志形式
appendonly yes
#requirepass 密碼設(shè)置可以不設(shè)置,不配置的話,密碼沒有,配置的話密碼是有的
requirepass 123456

redis6380.conf的內(nèi)容

# 首先引入公共部分配置
include /home/scene/installPackage/redis-master-slave/redis.conf
#任意ip都可以連接
bind 0.0.0.0
#關(guān)閉保護(hù),允許非本地連接
protected-mode no
#進(jìn)程守護(hù)文件,存放該服務(wù)進(jìn)程號相關(guān)信息文件
pidfile /var/run/redis_master_slave_6380.pid
# 配置啟動的端口
port 6380
# RDB文件名稱,保存在當(dāng)前目錄下了
dbfilename dump_master_slave_6380.rdb
#日志文件保存地址
logfile "/var/run/redisms/log/6380/redis_master_slave_6380.log"

#主信息,格式應(yīng)該是replicaod <masterip> <materport>
replicaod 127.0.0.1 6379
#如果主節(jié)點(diǎn)開啟了密碼的話,這兒要配置密碼masterauth <master-password>
masterauth 123456

#開啟aof日志形式
appendonly yes
#requirepass 密碼設(shè)置可以不設(shè)置,不配置的話,密碼沒有,配置的話密碼是有的
requirepass 63806380

redis6381.conf配置內(nèi)容

# 首先引入公共部分配置
include /home/scene/installPackage/redis-master-slave/redis.conf
#任意ip都可以連接
bind 0.0.0.0
#關(guān)閉保護(hù),允許非本地連接
protected-mode no
#進(jìn)程守護(hù)文件,存放該服務(wù)進(jìn)程號相關(guān)信息文件
pidfile /var/run/redis_master_slave_6381.pid
# 配置啟動的端口
port 6381
# RDB文件名稱,保存在當(dāng)前目錄下了
dbfilename dump_master_slave_6381.rdb
#日志文件保存地址
logfile "/var/run/redisms/log/6381/redis_master_slave_6381.log"

#主信息,格式應(yīng)該是replicaod <masterip> <materport>
replicaod 127.0.0.1 6379
#如果主節(jié)點(diǎn)開啟了密碼的話,這兒要配置密碼masterauth <master-password>
masterauth 123456

#開啟aof日志形式
appendonly yes
#requirepass 密碼設(shè)置可以不設(shè)置,不配置的話,密碼沒有,配置的話密碼是有的
requirepass 63816381

此時(shí)若配置了密碼的話客戶端連接指令

redis-cli -p 6379 -a 123456
redis-cli -p 6380 -a 63806380
redis-cli -p 6381 -a 63816381

主從模式服務(wù)故障

一主二從情形

情形一:某個(gè)從服務(wù)器掛掉

若有情形,主從復(fù)制模式下(不是永久的在配置文件定義6379為主節(jié)點(diǎn)),上述環(huán)境,若都正常后,突然6380節(jié)點(diǎn)服務(wù)掛了,而后又有6379redis數(shù)據(jù)進(jìn)來,此時(shí)問題就來了

  • 第一個(gè)問題,重啟6380端口服務(wù),6380不是6379的從服務(wù),只有再在6380的客戶端使用指令slaveof 127.0.0.1 6379可以再次使6379變成master服務(wù)
  • 第二個(gè)特點(diǎn),當(dāng)從節(jié)點(diǎn)6380服務(wù)器掛掉之后在重啟,然后指向?yàn)?379的從服務(wù)的時(shí)候,掛掉期間的數(shù)據(jù)還是和主節(jié)點(diǎn)一樣的,不會出現(xiàn)數(shù)據(jù)不同步的情形(也就是說數(shù)據(jù)還是同步過來的)
情形二:主節(jié)點(diǎn)掛掉

當(dāng)主服務(wù)節(jié)點(diǎn)掛掉之后,從服務(wù)節(jié)點(diǎn)不做任何操作,只是在info replication知道主節(jié)點(diǎn)掛了,不會上位

薪火相傳

6379為6381的master,6381為6380的master,類似6379—>6381—>6380,突然6381掛了,6381數(shù)據(jù)就不是實(shí)時(shí)的了,和上面的一主二從模式類似的問題特點(diǎn)

反客為主

當(dāng)主節(jié)點(diǎn)的突然掛了之后,可以手動的使用指令slaveof no one實(shí)現(xiàn)某一節(jié)點(diǎn)變?yōu)橹鞴?jié)點(diǎn)

若6379為master,6380、6381兩個(gè)都是6379的從節(jié)點(diǎn),突然6379掛了,然后設(shè)置6380為主節(jié)點(diǎn),在6380客戶端設(shè)置slaveof no one,6380位孤立的主節(jié)點(diǎn),6381還是6379的主節(jié)點(diǎn),除非在6381的客戶端設(shè)置slaveof 127.0.0.1 6380的時(shí)候6381才變成6380的從節(jié)點(diǎn)

主從復(fù)制原理

  • 當(dāng)從服務(wù)連接上主服務(wù)之后,從服務(wù)向主服務(wù)發(fā)送進(jìn)行數(shù)據(jù)同步信息
  • 主節(jié)點(diǎn)接收到從節(jié)點(diǎn)發(fā)送過來的同步信息,把主服務(wù)器數(shù)據(jù)持久化,rdb文件,把rdb文件發(fā)送從服務(wù)器,從服務(wù)器拿到rdb進(jìn)行文件讀取
  • 每次主服務(wù)器進(jìn)行寫操作之后,和從服務(wù)器進(jìn)行數(shù)據(jù)的同步

從服務(wù)器只有第一次是主動去想主服務(wù),后續(xù)出現(xiàn)數(shù)據(jù)操作,都是主服務(wù)同步給從服務(wù)的

也就是第一次是全量復(fù)制(slave服務(wù)在接收到master數(shù)據(jù)庫文件數(shù)據(jù)后,將其存盤并加載到內(nèi)存中),后續(xù)是增量復(fù)制(Master后續(xù)將新的所有收集到的修改命令依次傳給slave完成同步)

哨兵模式

搭建流程

在上面搭建主從模式的基礎(chǔ)上繼續(xù)配置,在/home/scene/installPackage/redis-master-slave目錄下,新建sentinel.conf文件(文件名必須是這個(gè)),填寫以下內(nèi)容

sentinel monitor mymaster 127.0.0.1 6379 1

其中mymaster為監(jiān)控對象起的服務(wù)器名稱,1為至少有多少個(gè)哨兵同一遷移的數(shù)量

啟動哨兵模式,啟動使用指令,前提是在已搭建6379為master,6380、6381為slave的節(jié)點(diǎn)的主從基礎(chǔ)上,再執(zhí)行redis-sentinel sentinel.conf即可

假設(shè)此時(shí)6379服務(wù)掛了,哨兵服務(wù)會有一段時(shí)間間隔的才會監(jiān)控到主服務(wù)掛了,然后選舉6380、6381的節(jié)點(diǎn)去競爭當(dāng)選主服務(wù),假設(shè)6381成功被選舉成為主節(jié)點(diǎn)后,那么6380以及重啟后的6379都會是6381的從節(jié)點(diǎn),注意6379重啟后會有一段延時(shí)才會自動成為6381的從節(jié)點(diǎn),6380在6381被成功選舉成主節(jié)點(diǎn)后,6380也會有一定時(shí)間間隔才成為6381的從節(jié)點(diǎn)

選舉的條件依次為:

  • 選擇優(yōu)先級靠前的(這個(gè)在redis.conf中的replica-prority的值有關(guān),默認(rèn)100,值越小優(yōu)先級越高)
  • 選擇偏移量最大的(偏移量指源主機(jī)數(shù)據(jù)最全的)
  • 選擇runid最小的從服務(wù)(每個(gè)redis實(shí)例啟動后都會隨機(jī)生成一個(gè)40位的runid)

缺陷——復(fù)制延遲

由于所有的寫操作都是先在master上操作,然后同步更新到Slave上,所以從Master同步到Slave機(jī)器有一定的延遲,當(dāng)系統(tǒng)很繁忙的時(shí)候,延遲問題會更加嚴(yán)重,Slave機(jī)器數(shù)量的增加也會使這個(gè)問題更加嚴(yán)重

Redis集群

集群發(fā)展及特點(diǎn):早起的Redis版本是通過代理主機(jī)的模式搭建集群的,而Redis3版本通過去中心化實(shí)現(xiàn)集群的搭建

搭建步驟

  • 為了便于區(qū)分上面的主從的搭建環(huán)境,在/home/scene/installPackage目錄下創(chuàng)建目錄redis-cluser來搭建集群。創(chuàng)建集群模式案例:6379主、6389從;6380主、6390從;6381主、6391從
  • 編寫配置文件redis6379.conf
# 首先引入公共部分配置
include /home/scene/installPackage/redis-cluster/redis.conf
# 設(shè)置可連接ip,此處我就只指定本機(jī)的了,0.0.0.0是都可以訪問,但是安全不高
bind 127.0.0.1 170.100.131.41
# 配置pid文件,pid之前的文件路徑必須手動生成,否則啟動沒有效果,ps -ef |grep redis會沒有看到后臺pid
pidfile "/var/run/redis_cluster_6379.pid"
# 配置啟動的端口
port 6379
# RDB文件名稱
dbfilename "dump_cluster_6379.rdb"
# 開啟集群模式
cluster-enabled yes
# 設(shè)定節(jié)點(diǎn)配置文件名
cluster-config-file nodes6379.conf
# 設(shè)定節(jié)點(diǎn)失聯(lián)時(shí)間,超過該時(shí)間(毫秒),集群自動進(jìn)行主從切換
cluster-node-timeout 15000

然后復(fù)制文件更改后面的配置

  • 啟動各服務(wù)
redis-server redis6379.conf
redis-server redis6380.conf
redis-server redis6381.conf
redis-server redis6389.conf
redis-server redis6390.conf
redis-server redis6391.conf

將六個(gè)節(jié)點(diǎn)合成一個(gè)集群

組合之前,確保所有Redis實(shí)例啟動后,配置的node-XXXX.conf都正常生成

5和6版本已經(jīng)不需要ruby環(huán)境,已經(jīng)將redis-trib.rb的功能集成到了redis-cli,而5之前的版本搭建集群需要ruby環(huán)境

進(jìn)入到最初解壓后然后make的目錄下,我的是/home/scene/installPackage/redis-6.2.6,

然后進(jìn)入到該目錄的src目錄下,里面有個(gè)redis-cli文件,在該目錄下,執(zhí)行指令,ip地址一定要實(shí)際地址

redis-cli --cluster create --cluster-replicas 1 170.100.131.41:6379 170.100.131.41:6380 170.100.131.41:6381 170.100.131.41:6389 170.100.131.41:6390 170.100.131.41:6391

replicas 1表示采用最簡單的方式配置集群,一臺主機(jī),一臺叢從機(jī),正好三組

若執(zhí)行的時(shí)候出現(xiàn)Could not connect to Redis at xx.xx.xx.xx:xx: Connection refused的時(shí)候,先查看配置文件的bind是否開放此ip,再檢查還有防火墻端口,執(zhí)行效果如下,我這兒生成一個(gè)All 16384 slots covered.

上面的slots插槽的用處

一個(gè)redis集群包含16384個(gè)插槽(hash slot),數(shù)據(jù)庫中的每個(gè)鍵都屬于這16384個(gè)插槽的其中一個(gè);集群使用公式CRC16(key)%16384來計(jì)算鍵key屬于哪個(gè)槽

集群的方式在客戶端連接,使用指令,在普通的連接指令加-c參數(shù)即可

redis-cli -c -p 6379

連接成功后使用指令cluster nodes查看集群信息

Redis cluster如何分配這六個(gè)節(jié)點(diǎn)

一個(gè)集群至少需要三個(gè)主節(jié)點(diǎn)

選項(xiàng)--cluster-replicas 1表示希望為集群中的每個(gè)主節(jié)點(diǎn)創(chuàng)建一個(gè)從節(jié)點(diǎn)

分配原則盡量保證每個(gè)主數(shù)據(jù)庫運(yùn)行在不通的ip地址,每個(gè)從庫和主庫不在一個(gè)ip地址上

關(guān)于slot槽的分配的情況說明

集群下查看某個(gè)鍵的插槽的值

cluster keyslot k1

查看某個(gè)插槽的鍵的個(gè)數(shù),注意一定要切換到主節(jié)點(diǎn)對應(yīng)的插槽區(qū)間的那個(gè)節(jié)點(diǎn)去查詢,不然會返回0

cluster countkeysinslot 12706

故障恢復(fù)

情形一:如上集群6379主、6389從;6380主、6390從;6381主、6391從,有6379的主節(jié)點(diǎn)服務(wù)突然掛了,就集群中就將對應(yīng)的6389由從節(jié)點(diǎn)轉(zhuǎn)變?yōu)橹鞴?jié)點(diǎn),當(dāng)6379再啟動的時(shí)候就會變成6389的從節(jié)點(diǎn)

情形二:當(dāng)突然6379主節(jié)點(diǎn)和其對應(yīng)的6389從節(jié)點(diǎn)都掛了的話,會根據(jù)redis.conf配置文件中的cluster-require-full-coverage的值來判定,如果值為yes,那么整個(gè)集群都會掛掉;如果值為no,也就是對應(yīng)掛了的該段槽范圍(此次案例中的啟動是0-5460的槽值)不能正常提供服務(wù),其余的還是正常的

總結(jié)

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

相關(guān)文章

  • Redis實(shí)現(xiàn)短信登錄的企業(yè)實(shí)戰(zhàn)

    Redis實(shí)現(xiàn)短信登錄的企業(yè)實(shí)戰(zhàn)

    本文主要介紹了Redis實(shí)現(xiàn)短信登錄的企業(yè)實(shí)戰(zhàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • CentOS7.5使用mysql_multi方式安裝MySQL5.7.28多實(shí)例(詳解)

    CentOS7.5使用mysql_multi方式安裝MySQL5.7.28多實(shí)例(詳解)

    這篇文章主要介紹了CentOS7.5使用mysql_multi方式安裝MySQL5.7.28多實(shí)例,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-01-01
  • Redis批量刪除Key的三種方式小結(jié)

    Redis批量刪除Key的三種方式小結(jié)

    本文主要介紹了Redis批量刪除Key的三種方式小結(jié),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • Redis實(shí)戰(zhàn)之商城購物車功能的實(shí)現(xiàn)代碼

    Redis實(shí)戰(zhàn)之商城購物車功能的實(shí)現(xiàn)代碼

    這篇文章主要介紹了Redis實(shí)戰(zhàn)之商城購物車功能的實(shí)現(xiàn)代碼,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-02-02
  • 詳解如何在YAML文件中配置Redis

    詳解如何在YAML文件中配置Redis

    在現(xiàn)代軟件開發(fā)中,配置文件是非常重要的一部分,其中,YAML(YAML Ain't Markup Language)是一種常用的配置文件格式,具有可讀性強(qiáng)、易于理解和編寫的特點(diǎn),在本篇文章中,我們將探討如何在YAML文件中配置Redis,需要的朋友可以參考下
    2024-09-09
  • 基于Redis實(shí)現(xiàn)分布式鎖以及任務(wù)隊(duì)列

    基于Redis實(shí)現(xiàn)分布式鎖以及任務(wù)隊(duì)列

    這篇文章主要介紹了基于Redis實(shí)現(xiàn)分布式鎖以及任務(wù)隊(duì)列,需要的朋友可以參考下
    2015-11-11
  • Redis 徹底禁用RDB持久化操作

    Redis 徹底禁用RDB持久化操作

    這篇文章主要介紹了Redis 徹底禁用RDB持久化的操作,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • Redis并發(fā)訪問問題詳細(xì)講解

    Redis并發(fā)訪問問題詳細(xì)講解

    本文主要介紹了Redis如何應(yīng)對并發(fā)訪問,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-12-12
  • Redis MCP 安裝與配置指南

    Redis MCP 安裝與配置指南

    本文將詳細(xì)介紹如何安裝和配置 Redis MCP,包括快速啟動、源碼安裝、Docker 安裝、以及相關(guān)的配置參數(shù)和環(huán)境變量設(shè)置,感興趣的朋友一起看看吧
    2025-07-07
  • redis通過redis-dump鏡像實(shí)現(xiàn)數(shù)據(jù)遷移

    redis通過redis-dump鏡像實(shí)現(xiàn)數(shù)據(jù)遷移

    本文主要介紹了redis通過redis-dump鏡像實(shí)現(xiàn)數(shù)據(jù)遷移,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-04-04

最新評論

马龙县| 东阳市| 长宁区| 万全县| 浦城县| 开鲁县| SHOW| 香港| 天气| 璧山县| 晴隆县| 聂拉木县| 登封市| 政和县| 元氏县| 来凤县| 北海市| 沂源县| 廊坊市| 仪征市| 濮阳县| 寿光市| 西吉县| 定州市| 永安市| 遵义县| 望奎县| 抚松县| 娄底市| 临湘市| 云和县| 枞阳县| 张家川| 峡江县| 交城县| 大埔区| 紫金县| 太和县| 奈曼旗| 徐汇区| 克拉玛依市|