佳木斯湛栽影视文化发展公司

主頁(yè) > 知識(shí)庫(kù) > redis三種高可用方式部署的實(shí)現(xiàn)

redis三種高可用方式部署的實(shí)現(xiàn)

熱門(mén)標(biāo)簽:網(wǎng)站排名優(yōu)化 Linux服務(wù)器 百度競(jìng)價(jià)排名 地方門(mén)戶網(wǎng)站 AI電銷 鐵路電話系統(tǒng) 服務(wù)外包 呼叫中心市場(chǎng)需求

前言

一、主從復(fù)制

概念

和mysql的主從復(fù)制一樣 都是將服務(wù)器的數(shù)據(jù)復(fù)制到另一個(gè)數(shù)據(jù)庫(kù)中 發(fā)送的稱為master 接受的叫slave 數(shù)據(jù)為單向傳輸 只可以主到從
每臺(tái)Redis服務(wù)器都是主節(jié)點(diǎn);且一個(gè)主節(jié)點(diǎn)可以有多個(gè)從節(jié)點(diǎn)(或沒(méi)有從節(jié)點(diǎn)),但一個(gè)從節(jié)點(diǎn)只能有一個(gè)主節(jié)點(diǎn)。

作用

數(shù)據(jù)冗余 實(shí)現(xiàn)了數(shù)據(jù)的熱備份,是持久化之外的一種數(shù)據(jù)冗余方式
故障切換 當(dāng)主節(jié)點(diǎn)宕機(jī)或者出現(xiàn)錯(cuò)誤時(shí) 由從服務(wù)器來(lái)提供服務(wù) 實(shí)現(xiàn)故障切換
負(fù)載均衡:在主從復(fù)制的基礎(chǔ)上,配合讀寫(xiě)分離,可以由主節(jié)點(diǎn)提供寫(xiě)服務(wù),由從節(jié)點(diǎn)提供讀服務(wù)(即寫(xiě)Redis數(shù)據(jù)時(shí)應(yīng)用連接主節(jié)點(diǎn),讀Redis數(shù)據(jù)時(shí)應(yīng)用連接從節(jié)點(diǎn)),分擔(dān)服務(wù)器負(fù)載;尤其是在寫(xiě)少讀多的場(chǎng)景下,通過(guò)多個(gè)從節(jié)點(diǎn)分擔(dān)讀負(fù)載,可以大大提高Redis服務(wù)器的并發(fā)量。
基礎(chǔ) 給集群和哨兵提供環(huán)境

主從復(fù)制過(guò)程

1 若啟動(dòng)一個(gè)Slave機(jī)器進(jìn)程,則它會(huì)向Master機(jī)器發(fā)送一個(gè)“sync command”命令,請(qǐng)求同步連接。

2 無(wú)論是第一次連接還是重新連接,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ù)文件保存到硬盤(pán)上,然后將其加載到內(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ā)來(lái)的同步請(qǐng)求,則Master會(huì)在后臺(tái)啟動(dòng)一個(gè)進(jìn)程以保存數(shù)據(jù)文件,然后將其發(fā)送給所有的Slave端機(jī)器,確保所有的Slave端機(jī)器都正常。

部署

三臺(tái)服務(wù)器 一主倆從


先部署redis 每臺(tái)配置一致

systemctl stop firewalld
setenforce 0

yum install -y gcc gcc-c++ make

tar zxvf redis-5.0.7.tar.gz -C /opt/

cd /opt/redis-5.0.7/
make
make PREFIX=/usr/local/redis install

cd /opt/redis-5.0.7/utils
./install_server.sh

回車四次,之后輸入可執(zhí)行文件路徑

Please select the redis executable path [] /usr/local/redis/bin/redis-server  	

ln -s /usr/local/redis/bin/* /usr/local/bin/





主節(jié)點(diǎn)配置

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




從節(jié)點(diǎn)配置

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

/etc/init.d/redis_6379 restart






查看結(jié)果

在主節(jié)點(diǎn)查看日志

tail -f /var/log/redis_6379.log


驗(yàn)證

# Replication
role:master
connected_slaves:2
slave0:ip=192.168.25.6,port=6379,state=online,offset=504,lag=1
slave1:ip=192.168.25.5,port=6379,state=online,offset=504,lag=0

二、哨兵模式

 1 概念

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

2.作用

  • 監(jiān)控:哨兵會(huì)不斷地檢查主節(jié)點(diǎn)和從節(jié)點(diǎn)是否運(yùn)作正常。
  • 自動(dòng)故障轉(zhuǎn)移:當(dāng)主節(jié)點(diǎn)不能正常工作時(shí),哨兵會(huì)開(kāi)始自動(dòng)故障轉(zhuǎn)移操作,它會(huì)將失效主節(jié)點(diǎn)的其中一個(gè)從節(jié)點(diǎn)升級(jí)為新的主節(jié)點(diǎn),并讓其他從節(jié)點(diǎn)改為復(fù)制新的主節(jié)點(diǎn)。
  • 通知(提醒):哨兵可以將故障轉(zhuǎn)移的結(jié)果發(fā)送給客戶端。

3 組成

  • 哨兵節(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)問(wèn)題的時(shí)候,因?yàn)槠渌?jié)點(diǎn)與主節(jié)點(diǎn)失去聯(lián)系,因此會(huì)投票,投票過(guò)半就認(rèn)為這個(gè) Master 的確出現(xiàn)問(wèn)題,然后會(huì)通知哨兵間,然后從 Slaves 中選取一個(gè)作為新的 Master。

主觀下線和客觀下線

主觀下線是指哨兵節(jié)點(diǎn)會(huì)每秒一次的頻率向建立了命令節(jié)點(diǎn)的實(shí)例發(fā)送ping命令,如果在 down-after-milliseconds 毫秒內(nèi)沒(méi)有做出有效響應(yīng)包括(pong/loading/masterdown)以外的響應(yīng),哨兵就會(huì)將該實(shí)例在本結(jié)構(gòu)體中的狀態(tài)標(biāo)記為 sri_s_down 主觀下線

客觀下線是指當(dāng)一個(gè)哨兵節(jié)點(diǎn)發(fā)現(xiàn)主節(jié)點(diǎn)處于主觀下線狀態(tài)時(shí),就會(huì)向其他的哨兵節(jié)點(diǎn)發(fā)出詢問(wèn),該節(jié)點(diǎn)是否已經(jīng)主觀下線。如果超過(guò)配置參數(shù) quorum 個(gè)節(jié)點(diǎn)認(rèn)為是主觀下線時(shí),該哨兵節(jié)點(diǎn)就會(huì)將自己維護(hù)的結(jié)構(gòu)體中該主節(jié)點(diǎn)標(biāo)記為 sri_o_down 客觀下線

部署

所有的節(jié)點(diǎn)都要部署哨兵

 vim /opt/redis-5.0.7/sentinel.conf
protected-mode no								#17行,關(guān)閉保護(hù)模式
port 26379										#21行,Redis哨兵默認(rèn)的監(jiān)聽(tīng)端口
daemonize yes									#26行,指定sentinel為后臺(tái)啟動(dòng)
logfile "/var/log/sentinel.log"					#36行,指定日志存放路徑
dir "/var/lib/redis/6379"						#65行,指定數(shù)據(jù)庫(kù)存放路徑
sentinel monitor mymaster 192.168.184.10 6379 2	#84行,修改 指定該哨兵節(jié)點(diǎn)監(jiān)控192.168.184.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í)間為180000(180秒)






開(kāi)啟哨兵

先開(kāi)master 后開(kāi)slave



模擬故障

查詢主節(jié)點(diǎn)redis服務(wù)節(jié)點(diǎn)號(hào)


殺掉主節(jié)點(diǎn)進(jìn)程 并查看日志

kill -9 62009
tail -f /var/log/sentinel.log


查看現(xiàn)在的主節(jié)點(diǎn) 現(xiàn)在主節(jié)點(diǎn)切換到slave1

三 集群

1 概念

集群,即Redis Cluster,是Redis 3.0開(kāi)始引入的分布式存儲(chǔ)方案。

集群由多個(gè)節(jié)點(diǎn)(Node)組成,Redis的數(shù)據(jù)分布在這些節(jié)點(diǎn)中。集群中的節(jié)點(diǎn)分為主節(jié)點(diǎn)和從節(jié)點(diǎn):只有主節(jié)點(diǎn)負(fù)責(zé)讀寫(xiě)請(qǐng)求和集群信息的維護(hù);從節(jié)點(diǎn)只進(jìn)行主節(jié)點(diǎn)數(shù)據(jù)和狀態(tài)信息的復(fù)制。

2 作用

1 數(shù)據(jù)分區(qū):數(shù)據(jù)分區(qū)(或稱數(shù)據(jù)分片)是集群最核心的功能。
集群將數(shù)據(jù)分散到多個(gè)節(jié)點(diǎn),一方面突破了Redis單機(jī)內(nèi)存大小的限制,存儲(chǔ)容量大大增加;另一方面每個(gè)主節(jié)點(diǎn)都可以對(duì)外提供讀服務(wù)和寫(xiě)服務(wù),大大提高了集群的響應(yīng)能力。
Redis單機(jī)內(nèi)存大小受限問(wèn)題,在介紹持久化和主從復(fù)制時(shí)都有提及;例如,如果單機(jī)內(nèi)存太大,bgsave和bgrewriteaof的fork操作可能導(dǎo)致主進(jìn)程阻塞,主從環(huán)境下主機(jī)切換時(shí)可能導(dǎo)致從節(jié)點(diǎn)長(zhǎng)時(shí)間無(wú)法提供服務(wù),全量復(fù)制階段主節(jié)點(diǎn)的復(fù)制緩沖區(qū)可能溢出。
2 高可用:集群支持主從復(fù)制和主節(jié)點(diǎn)的自動(dòng)故障轉(zhuǎn)移(與哨兵類似);當(dāng)任一節(jié)點(diǎn)發(fā)生故障時(shí),集群仍然可以對(duì)外提供服務(wù)。

3、Redis集群的數(shù)據(jù)分片

Redis集群引入了哈希槽的概念
Redis集群有16384個(gè)哈希槽(編號(hào)0-16383)
集群的每個(gè)節(jié)點(diǎn)負(fù)責(zé)一部分哈希槽
每個(gè)Key通過(guò)CRC16校驗(yàn)后對(duì)16384取余來(lái)決定放置哪個(gè)哈希槽,通過(guò)這個(gè)值,去找到對(duì)應(yīng)的插槽所對(duì)應(yīng)的節(jié)點(diǎn),然后直接自動(dòng)跳轉(zhuǎn)到這個(gè)對(duì)應(yīng)的節(jié)點(diǎn)上進(jìn)行存取操作

#以3個(gè)節(jié)點(diǎn)組成的集群為例:
節(jié)點(diǎn)A包含0到5460號(hào)哈希槽
節(jié)點(diǎn)B包含5461到10922號(hào)哈希槽
節(jié)點(diǎn)C包含10923到16383號(hào)哈希槽

Redis集群的主從復(fù)制模型
集群中具有A、B、C三個(gè)節(jié)點(diǎn),如果節(jié)點(diǎn)B失敗了,整個(gè)集群就會(huì)因缺少5461-10922這個(gè)范圍的槽而不可以用。
為每個(gè)節(jié)點(diǎn)添加一個(gè)從節(jié)點(diǎn)A1、B1、C1整個(gè)集群便有三個(gè)Master節(jié)點(diǎn)和三個(gè)slave節(jié)點(diǎn)組成,在節(jié)點(diǎn)B失敗后,集群選舉B1位為的主節(jié)點(diǎn)繼續(xù)服務(wù)。當(dāng)B和B1都失敗后,集群將不可用

部署

注意6個(gè)端口和IP都要不一樣。
vim /etc/redis/6379.conf

bind 192.168.25.4					    70行,修改bind項(xiàng),監(jiān)聽(tīng)自己的IP
protected-mode no						89行,修改,關(guān)閉保護(hù)模式
port 7001								93行,修改,redis監(jiān)聽(tīng)端口,
daemonize yes							137行,以獨(dú)立進(jìn)程啟動(dòng)
cluster-enabled yes						833行,取消注釋,開(kāi)啟群集功能
cluster-config-file nodes-6379.conf		841行,取消注釋,群集名稱文件設(shè)置,無(wú)需修改
cluster-node-timeout 15000				847行,取消注釋群集超時(shí)時(shí)間設(shè)置
appendonly yes							700行,修改,開(kāi)啟AOF持久化

#重啟服務(wù)
/etc/init.d/redis_6379 restart

#加入集群
redis-cli --cluster create 192.168.25.4:7001 192.168.25.5:7003 192.168.25.6:7005 192.168.25.7:7006 192.168.25.8:7007 192.168.25.9:7008 --cluster-replicas 1

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









到此這篇關(guān)于redis三種高可用方式部署的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)redis 高可用方式部署內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • 淺談Redis在微服務(wù)架構(gòu)中的幾種應(yīng)用場(chǎng)景
  • Redis5之后版本的高可用集群搭建的實(shí)現(xiàn)
  • 詳解三分鐘快速搭建分布式高可用的Redis集群
  • Redis為什么快如何實(shí)現(xiàn)高可用及持久化
  • Redis服務(wù)之高可用組件sentinel詳解
  • Redis Sentinel實(shí)現(xiàn)高可用配置的詳細(xì)步驟
  • 解析高可用Redis服務(wù)架構(gòu)分析與搭建方案

標(biāo)簽:湘潭 衡水 黃山 蘭州 崇左 仙桃 銅川 湖南

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《redis三種高可用方式部署的實(shí)現(xiàn)》,本文關(guān)鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266
    承德市| 富民县| 辽源市| 凌海市| 攀枝花市| 红安县| 桦甸市| 平罗县| 荣成市| 乌拉特前旗| 高清| 龙山县| 广安市| 崇信县| 东乌珠穆沁旗| 天水市| 辰溪县| 丹棱县| 马关县| 安宁市| 衡山县| 临澧县| 广饶县| 闵行区| 吉木萨尔县| 包头市| 札达县| 海口市| 镇赉县| 昌都县| 沈丘县| 师宗县| 黑山县| 黄梅县| 临泽县| 长子县| 惠安县| 禹城市| 福州市| 淮南市| 阿拉善盟|