Redis数据库(三)——(主从复制、哨兵模式、集群)
Redis數據庫(三)——(主從復制、哨兵模式、集群)
- 一、Redis主從復制
- 1、Redis主從模式介紹
- 2、Redis主從復制的流程
- 3、Redis主從復制的作用
- 4、Redis主從復制的搭建
- 環境配置/安裝包
- 安裝Redis(所有主機)
- 修改Master節點Redis配置文件
- 修改Slave節點Redis配置文件
- 驗證主從效果
- 二、Redis 哨兵模式
- 1、哨兵模式的原理
- 2、哨兵模式主要功能
- 3、哨兵模式的結構
- 4、優點與缺點
- 5、哨兵模式的搭建
- 環境配置
- 修改 Redis 配置文件(==所有節點操作==)
- 啟動哨兵模式
- 查看哨兵模式信息
- 故障模擬
- 驗證結果
- 三、Redis 群集模式
- 1、集群模式的搭建
- 所有節點
- 其余節點
- 所有節點
一、Redis主從復制
1、Redis主從模式介紹
- 通過持久化功能,redis保證了即使在服務器重啟的情況下也不會丟失(或少量丟失)數據,因為持久化會把內存中的數據保存到硬盤上,重啟會從硬盤上加載數據,但是由于數據是存儲在一臺服務器上的,如果這臺服務器出現硬盤故障等問題,也會導致數據丟失。為了避免單點故障,通常的做法是將數據庫復制多個副本以部署在不同的服務器上,這樣即使有一臺服務器出現故障其他服務器依然可以繼續提供服務,為此,redis提供了復制(replication)功能,可以實現當一臺數據庫中的數據更新后,自動將更新的數據同步到其他數據庫上。
- 在復制的概念中,數據庫分為兩類,一類是主數據庫(master),另一類是從數據(slave)。主數據可以進行讀寫操作,當寫操作導致數據變化時會自動將數據同步給從數據庫,而從數據庫一般是只讀的,并接受主數據同步過來的數據。一個主數據庫可以擁有多個從數據庫,而一個從數據庫只能擁有一個主數據庫。
2、Redis主從復制的流程
- (1)若啟動一個Slave機器進程,則它會向Master機器發送一個“sync command”命令,請求同步連接。
- (2)無論是第一次連接還是重新連接,Master機器都會啟動一個后臺進程,將數據快照保存到數據文件中(執行rdb操作),同時Master還會記錄修改數據的所有命令并緩存在數據文件中。
- (3)后臺進程完成緩存操作之后,Maste機器就會向Slave機器發送數據文件,Slave端機器將數據文件保存到硬盤上,然后將其加載到內存中,接著Master機器就會將修改數據的所有操作一并發送給Slave端機器。若Slave出現故障導致宕機,則恢復正常后會自動重新連接。
- (4)Master機器收到Slave端機器的連接后,將其完整的數據文件發送給Slave端機器,如果Mater同時收到多個Slave發來的同步請求,則Master會在后臺啟動一個進程以保存數據文件,然后將其發送給所有的Slave端機器,確保所有的Slave端機器都正常。
3、Redis主從復制的作用
- 數據冗余:主從復制實現了數據的熱備份,是持久化之外的一種數據冗余方式。
- 故障恢復:當主節點出現問題時,可以由從節點提供服務,實現快速的故障恢復;實際上是一種服務的冗余。
- 負載均衡:在主從復制的基礎上,配合讀寫分離,可以由主節點提供寫服務,由從節點提供讀服務(即寫Redis數據時應用連接主節點,讀Redis數據時應用連接從節點),分擔服務器負載;尤其是在寫少讀多的場景下,通過多個從節點分擔讀負載,可以大大提高Redis服務器的并發量。
- 高可用基石:除了上述作用以外,主從復制還是哨兵和集群能夠實施的基礎,因此說主從復制是Redis高可用的基礎。
4、Redis主從復制的搭建
環境配置/安裝包
安裝包:redis-5.0.7.tar.gz
| Master | CentOS7 | 192.168.172.10 | redis-5.0.7.tar.gz |
| Slave1 | CentOS7 | 192.168.172.20 | redis-5.0.7.tar.gz |
| Slave2 | CentOS7 | 192.168.172.30 | redis-5.0.7.tar.gz |
安裝Redis(所有主機)
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回車四次,下一步需要手動輸入Please select the redis executable path [] /usr/local/redis/bin/redis-server ln -s /usr/local/redis/bin/* /usr/local/bin/
修改Master節點Redis配置文件
(192.168.172.10)
vim /etc/redis/6379.conf bind 0.0.0.0 #70行,修改bind 項,0.0.0.0監聽所有網段 daemonize yes #137行,開啟守護進程 logfile /var/log/redis_6379.log #172行,指定日志文件目錄 dir /var/lib/redis/6379 #264行,指定工作目錄 appendonly yes #700行,開啟AOF持久化功能/etc/init.d/redis_6379 restart
修改Slave節點Redis配置文件
(192.168.172.20)、(192.168.172.30)
vim /etc/redis/6379.conf bind 0.0.0.0 #70行,修改bind 項,0.0.0.0監聽所有網卡 daemonize yes #137行,開啟守護進程 logfile /var/log/redis_6379.log #172行,指定日志文件目錄 dir /var/lib/redis/6379 #264行,指定工作目錄 replicaof 192.168.172.10 6379 #288行,指定要同步的Master節點IP和端口 appendonly yes #700行,開啟AOF持久化功能/etc/init.d/redis_6379 restart
驗證主從效果
在Master節點上看日志
tail -f /var/log/redis_6379.log在Master節點上驗證從節點
redis-cli info replication二、Redis 哨兵模式
哨兵是Redis集群架構中非常重要的一個組件,哨兵的出現主要是解決了主從復制出現故障時需要人為干預的問題。
1、哨兵模式的原理
哨兵(sentinel):是一個分布式系統,用于對主從結構中的每臺服務器進行監控,當出現故障時通過投票機制選擇新的 Master 并將所有 Slave 連接到新的 Master。所以整個運行哨兵的集群的數量不得少于3個節點。
2、哨兵模式主要功能
- 集群監控:負責監控Redis master和slave進程是否正常工作
- 消息通知:如果某個Redis實例有故障,那么哨兵負責發送消息作為報警通知給管理員
- 故障轉移:如果master node掛掉了,會自動轉移到slave node上
- 配置中心:如果故障轉移發生了,通知client客戶端新的master地址
使用一個或者多個哨兵(Sentinel)實例組成的系統,對redis節點進行監控,在主節點出現故障的情況下,能將從節點中的一個升級為主節點,進行故障轉義,保證系統的可用性。
3、哨兵模式的結構
哨兵結構由兩部分組成,哨兵節點和數據節點:
- 哨兵節點:哨兵系統由一個或多個哨兵節點組成,哨兵節點是特殊的redis節點,不存儲數據。
- 數據節點:主節點和從節點都是數據節點。
哨兵的啟動依賴于主從模式,所以須把主從模式安裝好的情況下再去做哨兵模式,所有節點上都需要部署哨兵模式,哨兵模式會監控所有的 Redis 工作節點是否正常,當 Master 出現問題的時候,因為其他節點與主節點失去聯系,因此會投票,投票過半就認為這個 Master 的確出現問題,然后會通知哨兵間,然后從 Slaves 中選取一個作為新的 Master。
需要特別注意的是,客觀下線是主節點才有的概念;如果從節點和哨兵節點發生故障,被哨兵主觀下線后,不會再有后續的客觀下線和故障轉移操作。
4、優點與缺點
- 優點:高可用,哨兵模式是基于主從模式的,所有主從模式的優點,哨兵模式都有;主從可以自動切換,系統更健壯,可用性更高
- 缺點:redis 比較難支持在線擴容,在群集容量達到上限時在線擴容會變得很復雜
5、哨兵模式的搭建
環境配置
| Master | CentOS7 | 192.168.172.10 | redis-5.0.7.tar.gz |
| Slave1 | CentOS7 | 192.172.184.20 | redis-5.0.7.tar.gz |
| Slave2 | CentOS7 | 192.168.172.30 | redis-5.0.7.tar.gz |
修改 Redis 配置文件(所有節點操作)
systemctl stop firewalld setenforce 0vim /opt/redis-5.0.7/sentinel.conf protected-mode no #17行,關閉保護模式 port 26379 #21行,Redis哨兵默認的監聽端口 daemonize yes #26行,指定sentinel為后臺啟動 logfile "/var/log/sentinel.log" #36行,指定日志存放路徑 dir "/var/lib/redis/6379" #65行,指定數據庫存放路徑 sentinel monitor mymaster 192.168.172.10 6379 2 #84行,修改 指定該哨兵節點監控192.168.172.10:6379這個主節點,該主節點的名稱是mymaster,最后的2的含義與主節點的故障判定有關:至少需要2個哨兵節點同意,才能判定主節點故障并進行故障轉移 sentinel down-after-milliseconds mymaster 30000 #113行,判定服務器down掉的時間周期,默認30000毫秒(30秒) sentinel failover-timeout mymaster 180000 #146行,故障節點的最大超時時間為180000(180秒)
啟動哨兵模式
PS:先啟master,再啟slave
cd /opt/redis-5.0.7/ redis-sentinel sentinel.conf & 注意!先啟動主服務器,再啟動從服務器先啟動主節點
在啟動從節點
查看哨兵模式信息
redis-cli -p 26379 info SentinelMaster:192.168.172.10
故障模擬
Master:192.168.172.10
查看redis-server進程號 netstat -natp | grep redis kill -9 11343 #Master節點上redis-server的進程號驗證結果
tail -f /var/log/sentinel.log redis-cli -p 26379 INFO Sentinel三、Redis 群集模式
-
redis的哨兵模式基本已經可以實現高可用、讀寫分離,但是在這種模式,每臺redis服務器都存儲相同的數據,很浪費內存資源,所以加入了 Cluster 群集模式,實現了redis的分布式存儲,也就是說,每臺redis節點存儲著不同的內容
-
群集部署建議至少3臺以上的master節點,建議使用3主3從六個節點的模式
-
Cluster 群集由多個redis服務器組成的分布式網絡服務群集,群集中有多個master主節點,每個主節點都可讀可寫,節點之間會互相通信,兩兩相連,redis群集無中心節點
-
在 redis-Cluster 群集中,可以給每個主節點添加從節點,主節點和從節點直接遵循主從模型的特性,當用戶需要處理更多讀請求的時候,添加從節點可以擴展系統的讀性能
-
redis-Cluster 的故障轉移:redis群集的主節點內置了類似 redis sentinel 的節點故障檢測和自動故障轉移功能,當群集中的某個主節點下線時,群集中的其他在線主節點會注意到這點,并且對已經下線的主節點進行故障轉移
-
群集進行故障轉移的方法和 redis sentinel 進行故障轉移的方法基本一樣,不同的是,在集群里面,故障轉移是由集群中其他在線的主節點復制進行的,所以群集不必另外使用 redis sentinel
1、集群模式的搭建
| Master1 | CentOS7 | 192.168.172.10:7001 | redis-5.0.7.tar.gz |
| Master2 | CentOS7 | 192.168.172.20:7002 | redis-5.0.7.tar.gz |
| Master3 | CentOS7 | 192.168.172.30:7003 | redis-5.0.7.tar.gz |
| salve1 | CentOS7 | 192.168.172.40:7004 | redis-5.0.7.tar.gz |
| salve2 | CentOS7 | 192.168.172.50:7005 | redis-5.0.7.tar.gz |
| slave3 | CentOS7 | 192.168.172.60:7006 | redis-5.0.7.tar.gz |
所有節點
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個文件夾的配置文件以此類推修改,注意6個端口都要不一樣。 cd /etc/redis/redis-cluster/redis6379 vim redis.confbind 192.168.172.10 #69行,修改bind項,監聽自己的IP protected-mode no #88行,修改,關閉保護模式 port 7001 #92行,修改,redis監聽端口, daemonize yes #136行,以獨立進程啟動 cluster-enabled yes #832行,取消注釋,開啟群集功能 cluster-config-file nodes-6379.conf #840行,取消注釋,群集名稱文件設置,無需修改 cluster-node-timeout 15000 #846行,取消注釋群集超時時間設置 appendonly yes #699行,修改,開啟AOF持久化
其余節點
vim /etc/redis/redis-cluster/redis6379/redis.conf所有節點
啟動redis節點
cd /etc/redis/redis-cluster/redis6379/ redis-server redis.conf啟動集群
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数据库(三)——(主从复制、哨兵模式、集群)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 内存大战:3200双通道,A品牌VS.B
- 下一篇: 电脑卡顿?告别烦恼,芝奇内存秒速提速