redis集群主從節(jié)點(diǎn)自動(dòng)切換方式
redis集群主從節(jié)點(diǎn)自動(dòng)切換
最近在將redis作為數(shù)據(jù)庫使用(redis中存放大量數(shù)據(jù))的項(xiàng)目中,偶然發(fā)現(xiàn)redis的主從節(jié)點(diǎn)發(fā)生了變化,但是沒有任務(wù)報(bào)錯(cuò),redis集群的各節(jié)點(diǎn)也沒有fail狀態(tài),因此記錄學(xué)習(xí)一下,redis的深層機(jī)制。
為什么
首先redis是單線程的,所有的命令發(fā)送的redis會(huì)進(jìn)入一個(gè)隊(duì)列,依次執(zhí)行。
當(dāng)數(shù)據(jù)量很大時(shí),執(zhí)行flushall、keys、scan等耗時(shí)較長的命令時(shí),就會(huì)照成redis節(jié)點(diǎn)阻塞。
其次,了解一下redis的集群節(jié)點(diǎn)檢測機(jī)制。redis集群的其他節(jié)點(diǎn),每隔一斷時(shí)間,就會(huì)向集群中的其他節(jié)點(diǎn)發(fā)送ping包,以檢測節(jié)點(diǎn)是否還活著。
如果此時(shí),某個(gè)主節(jié)點(diǎn)阻塞了,收到pong包的時(shí)間超時(shí),大于 cluster-node-timeout,就會(huì)自動(dòng)切換主從節(jié)點(diǎn)。
此時(shí),在redis-cli中查看cluster nodes,會(huì)發(fā)現(xiàn)節(jié)點(diǎn)會(huì)短暫的出現(xiàn)fail狀態(tài)。
當(dāng)主從節(jié)點(diǎn)切換完畢,redis又會(huì)重新掃描一下集群中的所有redis節(jié)點(diǎn),當(dāng)阻塞的redis節(jié)點(diǎn),執(zhí)行完之后,又會(huì)重新回到正常狀態(tài)。
解決
了解了上面說的redis機(jī)制之后,如果想要避免redis節(jié)點(diǎn)自動(dòng)切換就很簡單了,只需要調(diào)大redis.conf中的配置項(xiàng)cluster-node-timeout(默認(rèn)15000 millisec)即可。
Redis的主從復(fù)制
主從復(fù)制
主機(jī)數(shù)據(jù)更新后根據(jù)配置和策略,自動(dòng)同步到從機(jī)的master/slave機(jī)制,Master以寫為主,Slave以讀為主。
一主二從
一主二從原理
1、配從(庫)不配主(庫)
2、配從(庫): slaveof 主庫IP 主庫端口
3、主寫從讀、讀寫分離
4、從連前后同
5、主斷從待命、從斷重新連
一主二從搭建
1、一臺(tái)服務(wù)器模擬三臺(tái)主機(jī):
- 第一步:將redis.conf 拷貝三份,名字分別是,redis6379.conf,redis6380.conf,redis6381.conf
- 第二步:修改三個(gè)文件的port端口,pid文件名,日志文件名,rdb文件名
如:
port 6379 pidfile /var/run/redis_6379.pid logfile “6379.log” dbfilename dump6379.rdb
- 第三步:分別打開三個(gè)窗口模擬三臺(tái)服務(wù)器,開啟redis服務(wù)。
2、查詢主從信息:info replication
3、寫操作6379:
4、設(shè)置主從關(guān)系:
在6380和6381主機(jī)上分別執(zhí)行命令:slaveof 127.0.0.1 6379
另一種方式,就是修改6380和6381的配置文件,在最后加上:
注意:如果主redis設(shè)置了密碼,從庫的redis.conf中還需要設(shè)置masterauth為主redis的密碼。
5、全量復(fù)制:在6380和6381分別執(zhí)行命令get k1
6、增量復(fù)制:6379執(zhí)行命令:set k2 v2。然后6380端口和6381端口,分別執(zhí)行命令:get k2
7、主寫從讀、讀寫分離:在6380和6381上執(zhí)行寫操作set k3 v3
8、主機(jī)宕機(jī):6379執(zhí)行指令shutdown,并查看6380和6381的redis信息 從機(jī)原地待命。
9、主機(jī)宕機(jī)后恢復(fù):重啟6379,并且執(zhí)行寫命令set k4 v4;6380和6381上分別執(zhí)行g(shù)et k4 主機(jī)重啟后,一切正常。
10、從機(jī)宕機(jī):6380執(zhí)行指令shutdown,并查看6379和6381的redis信息
11、從機(jī)宕機(jī)后恢復(fù):重啟6380,并查看6380、6379和6381的redis信息
注意:從機(jī)跟master斷開聯(lián)系,必須重新連接,除非寫進(jìn)配置文件。
12、從機(jī)恢復(fù)連主機(jī)前,主機(jī)寫操作:6379執(zhí)行寫命令set k5 v5,6380和6381分別執(zhí)行命令get k5
13、從機(jī)恢復(fù)連接主機(jī),6380執(zhí)行命令:slaveof 127.0.0.1 6379,并且執(zhí)行命令:get k5
14、從機(jī)上位:
- 第一步:主機(jī)宕機(jī),6379執(zhí)行命令:shutdown
- 第二步:6380斷開主從關(guān)系,執(zhí)行命令:SLAVEOF no one
- 第三步:重新搭建主從,6381執(zhí)行命令:info replication,SLAVEOF 127.0.0.1 6380
- 第四步:之前主機(jī)恢復(fù),重啟6379的Redis服務(wù),并執(zhí)行命令:info replication
在6379主機(jī)宕機(jī)后,6380從機(jī)斷開主從關(guān)系,6381開始還在原地待命;后來6380從機(jī)上位,6381投靠6380,6379主機(jī)即使回來但它已是孤寡老人,空頭司令。
15、天堂變地獄:6379執(zhí)行命令saveof 127.0.0.1 6381,并在6379和6381執(zhí)行info replication
一臺(tái)主機(jī)配多臺(tái)從機(jī),一臺(tái)從機(jī)再配多臺(tái)從機(jī),從而實(shí)現(xiàn)了龐大的集群架構(gòu)。同時(shí)也減輕了一臺(tái)主機(jī)的壓力,缺點(diǎn)是增加了服務(wù)器間的延遲。
復(fù)制原理
全量復(fù)制
slave啟動(dòng)成功連接到master后會(huì)發(fā)送一個(gè)sync命令;Master接到命令啟動(dòng)后臺(tái)的存盤進(jìn)程,同時(shí)收集所有接收到的用于修改數(shù)據(jù)集命令,在后臺(tái)進(jìn)程執(zhí)行完畢之后,master將傳送整個(gè)數(shù)據(jù)文件到slave,以完成一次完全同步;slave服務(wù)在接收到數(shù)據(jù)庫文件數(shù)據(jù)后,將其存盤并加載到內(nèi)存中。
只要是重新連接master,一次完全同步(全量復(fù)制)將被自動(dòng)執(zhí)行。
增量復(fù)制
Master將新的所有收集到的修改命令依次傳給slave,完成同步。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
CentOS系統(tǒng)中Redis數(shù)據(jù)庫的安裝配置指南
Redis是一個(gè)基于主存存儲(chǔ)的數(shù)據(jù)庫,性能很強(qiáng),這里我們就來看一下CentOS系統(tǒng)中Redis數(shù)據(jù)庫的安裝配置指南,包括將Redis作為系統(tǒng)服務(wù)運(yùn)行的技巧等,需要的朋友可以參考下2016-06-06Redis主從復(fù)制實(shí)現(xiàn)原理分析
Redis主從復(fù)制通過Sync和CommandPropagate階段實(shí)現(xiàn)數(shù)據(jù)同步,2.8版本后引入Psync指令,根據(jù)復(fù)制偏移量進(jìn)行全量或部分同步,優(yōu)化了數(shù)據(jù)傳輸效率2025-01-01手動(dòng)實(shí)現(xiàn)Redis的LRU緩存機(jī)制示例詳解
這篇文章主要介紹了手動(dòng)實(shí)現(xiàn)Redis的LRU緩存機(jī)制示例詳解,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-03-03Redis實(shí)現(xiàn)驗(yàn)證碼發(fā)送并限制每日發(fā)送次數(shù)的示例代碼
本文主要介紹了Redis實(shí)現(xiàn)驗(yàn)證碼發(fā)送并限制每日發(fā)送次數(shù)的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-04-04