太原cms建站系統(tǒng)百度寫一篇文章多少錢
一、Redis的主從復制
1.1 Redis主從復制定義
主從復制是redis實現(xiàn)高可用的基礎(chǔ),哨兵模式和集群都是在主從復制的基礎(chǔ)之上實現(xiàn)高可用;
主從復制實現(xiàn)數(shù)據(jù)的多級備份,以及讀寫分離(主服務器負責寫,從服務器只能讀)
1.2 主從復制流程
(主從復制推薦使用AOF)
1)若啟動一個slave機器進程,則它會向Master機器發(fā)送一個sync command命令,請求同步連接。
2)無論是第一次連接還是重新連接,Master機器都會啟動一個后臺進程,將數(shù)據(jù)快照保存到數(shù)據(jù)文件中(執(zhí)行bgsave操作),同時Master還會記錄修改數(shù)據(jù)的所有命令并緩存在數(shù)據(jù)文件中。
3)后臺進程完成緩存操作之后,Master機器就會向slave機器發(fā)送數(shù)據(jù)文件,slave端機器將數(shù)據(jù)文件保存到硬盤上,然后將其加載到內(nèi)存中,接著Master機器就會將修改數(shù)據(jù)的所有操作一并發(fā)送給slave端機器。若slave出現(xiàn)故障導致宕機,則恢復正常后會自動重新連接。
4)Master機器收到slave端機器的連接后,將其完整的數(shù)據(jù)文件發(fā)送給slave端機器,如果Master同時收到多個slave發(fā)來的同步請求,則Master會在后臺啟動一個進程以保存數(shù)據(jù)文件,然后將其發(fā)送給所有的slave端機器,確保所有的slave端機器都正常。
1.3 主從復制實操(一主二從)
主從復制架構(gòu)
20.0.0.91:MASTER
20.0.0.92:SLAVE1
20.0.0.93:SLAVE2
關(guān)閉防火墻
systemctl stop firewalld
setenforce 0
修改master配置文件
vim /etc/redis/6379.conf
--70--
bind 0.0.0.0
#修改監(jiān)聽地址為0.0.0.0,允許所有網(wǎng)段訪問--137--
daemonize yes
#開啟守護進程,后臺啟動 --172--
logfile /var/log/redis_6379.log
#指定日志文件存放目錄--264--
dir /var/lib/redis/6379
#指定工作目錄--700--
appendonly yes
#開啟AOF持久化功能/etc/init.d/redis_6379 restart
修改slave配置文件
#salve1、slave2相同操作
vim /etc/redis/6379.conf
--70--
bind 0.0.0.0
#修改監(jiān)聽地址為0.0.0.0,允許所有網(wǎng)段訪問--137--
daemonize yes
#開啟守護進程,后臺啟動 --172--
logfile /var/log/redis_6379.log
#指定日志文件存放目錄--264--
dir /var/lib/redis/6379
#指定工作目錄--288--
replicaof 20.0.0.91 6379
#指定要同步的Master節(jié)點的IP和端口--700--
appendonly yes
#開啟AOF持久化功能
??
/etc/init.d/redis_6379 restart #重啟redis
ss -natp | grep redis #查看主從服務器是否已建立連接
測試
測試主從復制以及讀寫分離
?
測試slave斷開時,master寫入數(shù)據(jù),slave恢復正常后能否復制
二、Rdis的哨兵模式
在主從復制的基礎(chǔ)上,哨兵引入了主節(jié)點的自動故障轉(zhuǎn)移。
2.1 哨兵模式的組成
哨兵節(jié)點: 哨兵系統(tǒng)由一個或多個哨兵節(jié)點組成,哨兵節(jié)點是特殊的redis節(jié)點,不存儲數(shù)據(jù)。
數(shù)據(jù)節(jié)點: 主節(jié)點和從節(jié)點都是數(shù)據(jù)節(jié)點。
2.2?哨兵模式的原理
哨兵是一個分布式系統(tǒng),部署在每一個redis的節(jié)點之上,用于在主從結(jié)構(gòu)之間,對每一臺redis的服務進行監(jiān)控。
1).監(jiān)控: 哨兵會不斷地檢查主節(jié)點和從節(jié)點是否運作正常。
每個哨兵節(jié)點每隔一秒,通過ping命令方式,檢測主從之間的心跳線。
主節(jié)點在一定時間內(nèi)沒有回復或者回復了錯誤的消息,此時哨兵就會主觀地認為主節(jié)點下線,
超過半數(shù)的哨兵節(jié)點認為主節(jié)點下線時,才會將主節(jié)點認為客觀下線。
2).自動故障轉(zhuǎn)移: 當主節(jié)點不能正常工作時,哨兵會開始自動故障轉(zhuǎn)移操作,它會將失效主節(jié)點的其中一個從節(jié)點升級為新的主節(jié)點,并讓其它從節(jié)點改為復制新的主節(jié)點。
主節(jié)點的選舉原則:
已經(jīng)下線的從節(jié)點不會被選為主節(jié)點;
選擇配置文件當中優(yōu)先級最高的從節(jié)點作為主節(jié)點(replica-priority 100);
選擇一個復制數(shù)據(jù)最完整的從節(jié)點作為主節(jié)點。
(如何實現(xiàn)切換:主節(jié)點出現(xiàn)故障時,從節(jié)點通過投票的方式選擇一個新的master )
3).通知(提醒): 哨兵可以將故障轉(zhuǎn)移的結(jié)果發(fā)送給客戶端。
2.3 哨兵模式實操
修改哨兵節(jié)點配置文件
#所有節(jié)點相同操作
vim /opt/redis-5.0.7/sentinel.conf
--17--
protected-mode no
#取消注釋,關(guān)閉保護模式--21--
port 26379
#Redis哨兵默認的監(jiān)聽端口--26--
daemonize yes
#指定sentinel為后臺啟動--36--
logfile "/var/log/sentinel.log"
#指定日志文件存放路徑--65--
dir "/var/lib/redis/6379"
#指定數(shù)據(jù)庫存放路徑--84--
sentinel monitor mymaster 20.0.0.91 6379 2
#指定該哨兵節(jié)點監(jiān)控20.0.0.91:6379這個主節(jié)點,該主節(jié)點的名稱是mymaster。
#最后的2的含義與主節(jié)點的故障判定有關(guān):至少需要2個哨兵節(jié)點同意,才能判定主節(jié)點故障并進行故障轉(zhuǎn)移
?
--113--
sentinel down-after-milliseconds mymaster 30000
#判定服務器down掉的時間周期,默認30000毫秒(30秒)--146--
sentinel failover-timeout mymaster 180000
#同一個sentinel對同一個master兩次failover之間的間隔時間(180秒)
啟動哨兵模式并查看哨兵狀態(tài)
#啟動三臺節(jié)點上的哨兵模式
cd /opt/redis-5.0.7/
redis-sentinel sentinel.conf &#在哨兵節(jié)點查看監(jiān)控狀態(tài)
[root@localhost ~]# redis-cli -p 26379 info Sentinel
模擬故障測試
#Master
ps -elf | grep redis
kill -9 pid號 #Master節(jié)點上redis-server的進程號
netstat -natp | grep redis