日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

Redis数据库(三)——(主从复制、哨兵模式、集群)

發(fā)布時(shí)間:2024/2/28 数据库 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Redis数据库(三)——(主从复制、哨兵模式、集群) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Redis數(shù)據(jù)庫(三)——(主從復(fù)制、哨兵模式、集群)

  • 一、Redis主從復(fù)制
    • 1、Redis主從模式介紹
    • 2、Redis主從復(fù)制的流程
    • 3、Redis主從復(fù)制的作用
    • 4、Redis主從復(fù)制的搭建
      • 環(huán)境配置/安裝包
      • 安裝Redis(所有主機(jī))
      • 修改Master節(jié)點(diǎn)Redis配置文件
      • 修改Slave節(jié)點(diǎn)Redis配置文件
      • 驗(yàn)證主從效果
  • 二、Redis 哨兵模式
    • 1、哨兵模式的原理
    • 2、哨兵模式主要功能
    • 3、哨兵模式的結(jié)構(gòu)
    • 4、優(yōu)點(diǎn)與缺點(diǎn)
    • 5、哨兵模式的搭建
      • 環(huán)境配置
      • 修改 Redis 配置文件(==所有節(jié)點(diǎn)操作==)
      • 啟動(dòng)哨兵模式
      • 查看哨兵模式信息
      • 故障模擬
      • 驗(yàn)證結(jié)果
  • 三、Redis 群集模式
    • 1、集群模式的搭建
    • 所有節(jié)點(diǎn)
    • 其余節(jié)點(diǎn)
    • 所有節(jié)點(diǎn)

一、Redis主從復(fù)制

1、Redis主從模式介紹

  • 通過持久化功能,redis保證了即使在服務(wù)器重啟的情況下也不會(huì)丟失(或少量丟失)數(shù)據(jù),因?yàn)槌志没瘯?huì)把內(nèi)存中的數(shù)據(jù)保存到硬盤上,重啟會(huì)從硬盤上加載數(shù)據(jù),但是由于數(shù)據(jù)是存儲(chǔ)在一臺(tái)服務(wù)器上的,如果這臺(tái)服務(wù)器出現(xiàn)硬盤故障等問題,也會(huì)導(dǎo)致數(shù)據(jù)丟失。為了避免單點(diǎn)故障,通常的做法是將數(shù)據(jù)庫復(fù)制多個(gè)副本以部署在不同的服務(wù)器上,這樣即使有一臺(tái)服務(wù)器出現(xiàn)故障其他服務(wù)器依然可以繼續(xù)提供服務(wù),為此,redis提供了復(fù)制(replication)功能,可以實(shí)現(xiàn)當(dāng)一臺(tái)數(shù)據(jù)庫中的數(shù)據(jù)更新后,自動(dòng)將更新的數(shù)據(jù)同步到其他數(shù)據(jù)庫上。
  • 在復(fù)制的概念中,數(shù)據(jù)庫分為兩類,一類是主數(shù)據(jù)庫(master),另一類是從數(shù)據(jù)(slave)。主數(shù)據(jù)可以進(jìn)行讀寫操作,當(dāng)寫操作導(dǎo)致數(shù)據(jù)變化時(shí)會(huì)自動(dòng)將數(shù)據(jù)同步給從數(shù)據(jù)庫,而從數(shù)據(jù)庫一般是只讀的,并接受主數(shù)據(jù)同步過來的數(shù)據(jù)。一個(gè)主數(shù)據(jù)庫可以擁有多個(gè)從數(shù)據(jù)庫,而一個(gè)從數(shù)據(jù)庫只能擁有一個(gè)主數(shù)據(jù)庫。

2、Redis主從復(fù)制的流程

  • (1)若啟動(dòng)一個(gè)Slave機(jī)器進(jìn)程,則它會(huì)向Master機(jī)器發(fā)送一個(gè)“sync command”命令,請(qǐng)求同步連接。
  • (2)無論是第一次連接還是重新連接,Master機(jī)器都會(huì)啟動(dòng)一個(gè)后臺(tái)進(jìn)程,將數(shù)據(jù)快照保存到數(shù)據(jù)文件中(執(zhí)行rdb操作),同時(shí)Master還會(huì)記錄修改數(shù)據(jù)的所有命令并緩存在數(shù)據(jù)文件中。
  • (3)后臺(tái)進(jìn)程完成緩存操作之后,Maste機(jī)器就會(huì)向Slave機(jī)器發(fā)送數(shù)據(jù)文件,Slave端機(jī)器將數(shù)據(jù)文件保存到硬盤上,然后將其加載到內(nèi)存中,接著Master機(jī)器就會(huì)將修改數(shù)據(jù)的所有操作一并發(fā)送給Slave端機(jī)器。若Slave出現(xiàn)故障導(dǎo)致宕機(jī),則恢復(fù)正常后會(huì)自動(dòng)重新連接。
  • (4)Master機(jī)器收到Slave端機(jī)器的連接后,將其完整的數(shù)據(jù)文件發(fā)送給Slave端機(jī)器,如果Mater同時(shí)收到多個(gè)Slave發(fā)來的同步請(qǐng)求,則Master會(huì)在后臺(tái)啟動(dòng)一個(gè)進(jìn)程以保存數(shù)據(jù)文件,然后將其發(fā)送給所有的Slave端機(jī)器,確保所有的Slave端機(jī)器都正常。

3、Redis主從復(fù)制的作用

  • 數(shù)據(jù)冗余:主從復(fù)制實(shí)現(xiàn)了數(shù)據(jù)的熱備份,是持久化之外的一種數(shù)據(jù)冗余方式。
  • 故障恢復(fù):當(dāng)主節(jié)點(diǎn)出現(xiàn)問題時(shí),可以由從節(jié)點(diǎn)提供服務(wù),實(shí)現(xiàn)快速的故障恢復(fù);實(shí)際上是一種服務(wù)的冗余。
  • 負(fù)載均衡:在主從復(fù)制的基礎(chǔ)上,配合讀寫分離,可以由主節(jié)點(diǎn)提供寫服務(wù),由從節(jié)點(diǎn)提供讀服務(wù)(即寫Redis數(shù)據(jù)時(shí)應(yīng)用連接主節(jié)點(diǎn),讀Redis數(shù)據(jù)時(shí)應(yīng)用連接從節(jié)點(diǎn)),分擔(dān)服務(wù)器負(fù)載;尤其是在寫少讀多的場景下,通過多個(gè)從節(jié)點(diǎn)分擔(dān)讀負(fù)載,可以大大提高Redis服務(wù)器的并發(fā)量。
  • 高可用基石:除了上述作用以外,主從復(fù)制還是哨兵和集群能夠?qū)嵤┑幕A(chǔ),因此說主從復(fù)制是Redis高可用的基礎(chǔ)。

4、Redis主從復(fù)制的搭建

環(huán)境配置/安裝包

安裝包:redis-5.0.7.tar.gz

主機(jī)操作系統(tǒng)IP地址軟件 / 安裝包 / 工具
MasterCentOS7192.168.172.10redis-5.0.7.tar.gz
Slave1CentOS7192.168.172.20redis-5.0.7.tar.gz
Slave2CentOS7192.168.172.30redis-5.0.7.tar.gz

安裝Redis(所有主機(jī))

systemctl stop firewalld setenforce 0yum install -y gcc gcc-c++ maketar zxvf redis-5.0.7.tar.gz -C /opt/cd /opt/redis-5.0.7/ make && make PREFIX=/usr/local/redis installcd /opt/redis-5.0.7/utils ./install_server.sh回車四次,下一步需要手動(dòng)輸入Please select the redis executable path [] /usr/local/redis/bin/redis-server ln -s /usr/local/redis/bin/* /usr/local/bin/



修改Master節(jié)點(diǎn)Redis配置文件

(192.168.172.10)

vim /etc/redis/6379.conf bind 0.0.0.0 #70行,修改bind 項(xiàng),0.0.0.0監(jiān)聽所有網(wǎng)段 daemonize yes #137行,開啟守護(hù)進(jìn)程 logfile /var/log/redis_6379.log #172行,指定日志文件目錄 dir /var/lib/redis/6379 #264行,指定工作目錄 appendonly yes #700行,開啟AOF持久化功能/etc/init.d/redis_6379 restart





修改Slave節(jié)點(diǎn)Redis配置文件

(192.168.172.20)、(192.168.172.30)

vim /etc/redis/6379.conf bind 0.0.0.0 #70行,修改bind 項(xiàng),0.0.0.0監(jiān)聽所有網(wǎng)卡 daemonize yes #137行,開啟守護(hù)進(jìn)程 logfile /var/log/redis_6379.log #172行,指定日志文件目錄 dir /var/lib/redis/6379 #264行,指定工作目錄 replicaof 192.168.172.10 6379 #288行,指定要同步的Master節(jié)點(diǎn)IP和端口 appendonly yes #700行,開啟AOF持久化功能/etc/init.d/redis_6379 restart


驗(yàn)證主從效果

在Master節(jié)點(diǎn)上看日志

tail -f /var/log/redis_6379.log

在Master節(jié)點(diǎn)上驗(yàn)證從節(jié)點(diǎn)

redis-cli info replication

二、Redis 哨兵模式

哨兵是Redis集群架構(gòu)中非常重要的一個(gè)組件,哨兵的出現(xiàn)主要是解決了主從復(fù)制出現(xiàn)故障時(shí)需要人為干預(yù)的問題。

1、哨兵模式的原理

哨兵(sentinel):是一個(gè)分布式系統(tǒng),用于對(duì)主從結(jié)構(gòu)中的每臺(tái)服務(wù)器進(jìn)行監(jiān)控,當(dāng)出現(xiàn)故障時(shí)通過投票機(jī)制選擇新的 Master 并將所有 Slave 連接到新的 Master。所以整個(gè)運(yùn)行哨兵的集群的數(shù)量不得少于3個(gè)節(jié)點(diǎn)。

2、哨兵模式主要功能

  • 集群監(jiān)控:負(fù)責(zé)監(jiān)控Redis master和slave進(jìn)程是否正常工作
  • 消息通知:如果某個(gè)Redis實(shí)例有故障,那么哨兵負(fù)責(zé)發(fā)送消息作為報(bào)警通知給管理員
  • 故障轉(zhuǎn)移:如果master node掛掉了,會(huì)自動(dòng)轉(zhuǎn)移到slave node上
  • 配置中心:如果故障轉(zhuǎn)移發(fā)生了,通知client客戶端新的master地址

使用一個(gè)或者多個(gè)哨兵(Sentinel)實(shí)例組成的系統(tǒng),對(duì)redis節(jié)點(diǎn)進(jìn)行監(jiān)控,在主節(jié)點(diǎn)出現(xiàn)故障的情況下,能將從節(jié)點(diǎn)中的一個(gè)升級(jí)為主節(jié)點(diǎn),進(jìn)行故障轉(zhuǎn)義,保證系統(tǒng)的可用性。

3、哨兵模式的結(jié)構(gòu)

哨兵結(jié)構(gòu)由兩部分組成,哨兵節(jié)點(diǎn)和數(shù)據(jù)節(jié)點(diǎn):

  • 哨兵節(jié)點(diǎn):哨兵系統(tǒng)由一個(gè)或多個(gè)哨兵節(jié)點(diǎn)組成,哨兵節(jié)點(diǎn)是特殊的redis節(jié)點(diǎn),不存儲(chǔ)數(shù)據(jù)。
  • 數(shù)據(jù)節(jié)點(diǎn):主節(jié)點(diǎn)和從節(jié)點(diǎn)都是數(shù)據(jù)節(jié)點(diǎn)。

哨兵的啟動(dòng)依賴于主從模式,所以須把主從模式安裝好的情況下再去做哨兵模式,所有節(jié)點(diǎn)上都需要部署哨兵模式,哨兵模式會(huì)監(jiān)控所有的 Redis 工作節(jié)點(diǎn)是否正常,當(dāng) Master 出現(xiàn)問題的時(shí)候,因?yàn)槠渌?jié)點(diǎn)與主節(jié)點(diǎn)失去聯(lián)系,因此會(huì)投票,投票過半就認(rèn)為這個(gè) Master 的確出現(xiàn)問題,然后會(huì)通知哨兵間,然后從 Slaves 中選取一個(gè)作為新的 Master。

需要特別注意的是,客觀下線是主節(jié)點(diǎn)才有的概念;如果從節(jié)點(diǎn)和哨兵節(jié)點(diǎn)發(fā)生故障,被哨兵主觀下線后,不會(huì)再有后續(xù)的客觀下線和故障轉(zhuǎn)移操作。

4、優(yōu)點(diǎn)與缺點(diǎn)

  • 優(yōu)點(diǎn):高可用,哨兵模式是基于主從模式的,所有主從模式的優(yōu)點(diǎn),哨兵模式都有;主從可以自動(dòng)切換,系統(tǒng)更健壯,可用性更高
  • 缺點(diǎn):redis 比較難支持在線擴(kuò)容,在群集容量達(dá)到上限時(shí)在線擴(kuò)容會(huì)變得很復(fù)雜

5、哨兵模式的搭建

環(huán)境配置

主機(jī)操作系統(tǒng)IP地址軟件 / 安裝包 / 工具
MasterCentOS7192.168.172.10redis-5.0.7.tar.gz
Slave1CentOS7192.172.184.20redis-5.0.7.tar.gz
Slave2CentOS7192.168.172.30redis-5.0.7.tar.gz

修改 Redis 配置文件(所有節(jié)點(diǎn)操作)

systemctl stop firewalld setenforce 0vim /opt/redis-5.0.7/sentinel.conf protected-mode no #17行,關(guān)閉保護(hù)模式 port 26379 #21行,Redis哨兵默認(rèn)的監(jiān)聽端口 daemonize yes #26行,指定sentinel為后臺(tái)啟動(dòng) logfile "/var/log/sentinel.log" #36行,指定日志存放路徑 dir "/var/lib/redis/6379" #65行,指定數(shù)據(jù)庫存放路徑 sentinel monitor mymaster 192.168.172.10 6379 2 #84行,修改 指定該哨兵節(jié)點(diǎn)監(jiān)控192.168.172.10:6379這個(gè)主節(jié)點(diǎn),該主節(jié)點(diǎn)的名稱是mymaster,最后的2的含義與主節(jié)點(diǎn)的故障判定有關(guān):至少需要2個(gè)哨兵節(jié)點(diǎn)同意,才能判定主節(jié)點(diǎn)故障并進(jìn)行故障轉(zhuǎn)移 sentinel down-after-milliseconds mymaster 30000 #113行,判定服務(wù)器down掉的時(shí)間周期,默認(rèn)30000毫秒(30秒) sentinel failover-timeout mymaster 180000 #146行,故障節(jié)點(diǎn)的最大超時(shí)時(shí)間為180000180秒)



啟動(dòng)哨兵模式

PS:先啟master,再啟slave

cd /opt/redis-5.0.7/ redis-sentinel sentinel.conf & 注意!先啟動(dòng)主服務(wù)器,再啟動(dòng)從服務(wù)器

先啟動(dòng)主節(jié)點(diǎn)

在啟動(dòng)從節(jié)點(diǎn)

查看哨兵模式信息

redis-cli -p 26379 info Sentinel

Master:192.168.172.10

故障模擬

Master:192.168.172.10

查看redis-server進(jìn)程號(hào) netstat -natp | grep redis kill -9 11343 #Master節(jié)點(diǎn)上redis-server的進(jìn)程號(hào)

驗(yàn)證結(jié)果

tail -f /var/log/sentinel.log redis-cli -p 26379 INFO Sentinel

三、Redis 群集模式

  • redis的哨兵模式基本已經(jīng)可以實(shí)現(xiàn)高可用、讀寫分離,但是在這種模式,每臺(tái)redis服務(wù)器都存儲(chǔ)相同的數(shù)據(jù),很浪費(fèi)內(nèi)存資源,所以加入了 Cluster 群集模式,實(shí)現(xiàn)了redis的分布式存儲(chǔ),也就是說,每臺(tái)redis節(jié)點(diǎn)存儲(chǔ)著不同的內(nèi)容

  • 群集部署建議至少3臺(tái)以上的master節(jié)點(diǎn),建議使用3主3從六個(gè)節(jié)點(diǎn)的模式

  • Cluster 群集由多個(gè)redis服務(wù)器組成的分布式網(wǎng)絡(luò)服務(wù)群集,群集中有多個(gè)master主節(jié)點(diǎn),每個(gè)主節(jié)點(diǎn)都可讀可寫,節(jié)點(diǎn)之間會(huì)互相通信,兩兩相連,redis群集無中心節(jié)點(diǎn)

  • 在 redis-Cluster 群集中,可以給每個(gè)主節(jié)點(diǎn)添加從節(jié)點(diǎn),主節(jié)點(diǎn)和從節(jié)點(diǎn)直接遵循主從模型的特性,當(dāng)用戶需要處理更多讀請(qǐng)求的時(shí)候,添加從節(jié)點(diǎn)可以擴(kuò)展系統(tǒng)的讀性能

  • redis-Cluster 的故障轉(zhuǎn)移:redis群集的主節(jié)點(diǎn)內(nèi)置了類似 redis sentinel 的節(jié)點(diǎn)故障檢測和自動(dòng)故障轉(zhuǎn)移功能,當(dāng)群集中的某個(gè)主節(jié)點(diǎn)下線時(shí),群集中的其他在線主節(jié)點(diǎn)會(huì)注意到這點(diǎn),并且對(duì)已經(jīng)下線的主節(jié)點(diǎn)進(jìn)行故障轉(zhuǎn)移

  • 群集進(jìn)行故障轉(zhuǎn)移的方法和 redis sentinel 進(jìn)行故障轉(zhuǎn)移的方法基本一樣,不同的是,在集群里面,故障轉(zhuǎn)移是由集群中其他在線的主節(jié)點(diǎn)復(fù)制進(jìn)行的,所以群集不必另外使用 redis sentinel

1、集群模式的搭建

主機(jī)操作系統(tǒng)IP地址工具
Master1CentOS7192.168.172.10:7001redis-5.0.7.tar.gz
Master2CentOS7192.168.172.20:7002redis-5.0.7.tar.gz
Master3CentOS7192.168.172.30:7003redis-5.0.7.tar.gz
salve1CentOS7192.168.172.40:7004redis-5.0.7.tar.gz
salve2CentOS7192.168.172.50:7005redis-5.0.7.tar.gz
slave3CentOS7192.168.172.60:7006redis-5.0.7.tar.gz

所有節(jié)點(diǎn)

cd /etc/redis/ mkdir -p redis-cluster/redis6379 cp /opt/redis-5.0.7/redis.conf /etc/redis/redis-cluster/redis6379/ cp /opt/redis-5.0.7/src/redis-cli /opt/redis-5.0.7/src/redis-server /etc/redis/redis-cluster/redis6379/

#其他5個(gè)文件夾的配置文件以此類推修改,注意6個(gè)端口都要不一樣。 cd /etc/redis/redis-cluster/redis6379 vim redis.confbind 192.168.172.10 #69行,修改bind項(xiàng),監(jiān)聽自己的IP protected-mode no #88行,修改,關(guān)閉保護(hù)模式 port 7001 #92行,修改,redis監(jiān)聽端口, daemonize yes #136行,以獨(dú)立進(jìn)程啟動(dòng) cluster-enabled yes #832行,取消注釋,開啟群集功能 cluster-config-file nodes-6379.conf #840行,取消注釋,群集名稱文件設(shè)置,無需修改 cluster-node-timeout 15000 #846行,取消注釋群集超時(shí)時(shí)間設(shè)置 appendonly yes #699行,修改,開啟AOF持久化



scp /etc/redis/redis-cluster/redis6379/redis.conf root@192.168.172.20:/etc/redis/redis-cluster/redis6379/redis.conf scp /etc/redis/redis-cluster/redis6379/redis.conf root@192.168.172.30:/etc/redis/redis-cluster/redis6379/redis.conf scp /etc/redis/redis-cluster/redis6379/redis.conf root@192.168.172.40:/etc/redis/redis-cluster/redis6379/redis.conf scp /etc/redis/redis-cluster/redis6379/redis.conf root@192.168.172.50:/etc/redis/redis-cluster/redis6379/redis.conf scp /etc/redis/redis-cluster/redis6379/redis.conf root@192.168.172.60:/etc/redis/redis-cluster/redis6379/redis.conf

其余節(jié)點(diǎn)

vim /etc/redis/redis-cluster/redis6379/redis.conf

所有節(jié)點(diǎn)

啟動(dòng)redis節(jié)點(diǎn)

cd /etc/redis/redis-cluster/redis6379/ redis-server redis.conf

啟動(dòng)集群
redis-cli --cluster create 192.168.172.10:7001 192.168.172.20:7002 192.168.172.30:7003 192.168.172.40:7004 192.168.172.50:7005 192.168.172.60:7006 --cluster-replicas 1

redis-cli -h 192.168.172.10 -p 7001 -c #加-c參數(shù),節(jié)點(diǎn)之間就可以互相跳轉(zhuǎn) cluster slots #查看節(jié)點(diǎn)的哈希槽編號(hào)范圍 set name zhangsan cluster keyslot name #查看name鍵的槽編號(hào)



總結(jié)

以上是生活随笔為你收集整理的Redis数据库(三)——(主从复制、哨兵模式、集群)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。