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

Redis主從復制搭建、哨兵搭建、集群搭建全過程

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

主從復制

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

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

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

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

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

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

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

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

首先第一個,vi redis6379.conf

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

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

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

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

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

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

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

注意,主從一旦搭建完成,主節(jié)點可讀可寫,從節(jié)點只能讀取,不能寫入,寫入會報錯

永久化實現(xiàn)6379為主節(jié)點,其余兩個為從節(jié)點,配置剛剛的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
#關閉保護,允許非本地連接
protected-mode no
#進程守護文件,存放該服務進程號相關信息文件
pidfile /var/run/redis_master_slave_6379.pid
# 配置啟動的端口
port 6379
# RDB文件名稱,保存在當前目錄下了
dbfilename dump_master_slave_6379.rdb
#日志文件保存地址
logfile "/var/run/redisms/log/6379/redis_master_slave_6379.log"
#開啟aof日志形式
appendonly yes
#requirepass 密碼設置可以不設置,不配置的話,密碼沒有,配置的話密碼是有的
requirepass 123456

redis6380.conf的內(nèi)容

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

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

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

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

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

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

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

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

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

主從模式服務故障

一主二從情形

情形一:某個從服務器掛掉

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

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

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

薪火相傳

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

反客為主

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

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

主從復制原理

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

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

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

哨兵模式

搭建流程

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

sentinel monitor mymaster 127.0.0.1 6379 1

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

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

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

選舉的條件依次為:

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

缺陷——復制延遲

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

Redis集群

集群發(fā)展及特點:早起的Redis版本是通過代理主機的模式搭建集群的,而Redis3版本通過去中心化實現(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
# 設置可連接ip,此處我就只指定本機的了,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
# 設定節(jié)點配置文件名
cluster-config-file nodes6379.conf
# 設定節(jié)點失聯(lián)時間,超過該時間(毫秒),集群自動進行主從切換
cluster-node-timeout 15000

然后復制文件更改后面的配置

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

將六個節(jié)點合成一個集群

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

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

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

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

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表示采用最簡單的方式配置集群,一臺主機,一臺叢從機,正好三組

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

上面的slots插槽的用處

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

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

redis-cli -c -p 6379

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

Redis cluster如何分配這六個節(jié)點

一個集群至少需要三個主節(jié)點

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

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

關于slot槽的分配的情況說明

集群下查看某個鍵的插槽的值

cluster keyslot k1

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

cluster countkeysinslot 12706

故障恢復

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

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

總結(jié)

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

相關文章

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

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

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

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

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

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

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

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

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

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

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

    基于Redis實現(xiàn)分布式鎖以及任務隊列

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

    Redis 徹底禁用RDB持久化操作

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

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

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

    Redis MCP 安裝與配置指南

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

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

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

最新評論

娱乐| 隆子县| 南昌市| 沙湾县| 濮阳市| 松江区| 瑞金市| 富平县| 石嘴山市| 庆城县| 唐河县| 乌鲁木齐市| 黔南| 祁门县| 渝中区| 应用必备| 禄劝| 温泉县| 鄂温| 深水埗区| 大庆市| 于都县| 盖州市| 高邑县| 大化| 教育| 望谟县| 滨州市| 通山县| 乐业县| 翁牛特旗| 云南省| 天水市| 迁安市| 宁南县| 政和县| 舒兰市| 嘉荫县| 新田县| 曲周县| 宝兴县|