如何實現redis主從複製?

2021-01-08 牛鷺學院軟體測試

主從複製,主要優勢在於實現了數據備份(主機和從機數據同步一致)、讀寫分離(主機主要負責寫入數據,從機讀數據,在讀大於寫的項目中提高了性能)。最後也為後續集成哨兵機制和集群的實現提供了依據。

一、多臺伺服器上配置主從複製

Redis從5.0以後主從配置屬性發生了變化,在5.0之前配置的是slaveof,5.0以後變成了replicaof

伺服器用途redis埠號備註centos7 192.168.1.6主機Master(寫)6379redis5.0centos7 192.168.1.4從機Slave(讀)6379redis5.0centos7 192.168.1.5從機Slave(讀)6379redis5.0

第一步:安裝redis

三臺伺服器上分別安裝redis,三臺伺服器redis配置為方便可配置一致

第二步:添加主從配置項

主機(192.168.1.6) 不做任何修改,兩臺從機配置文件分配添加一下內容

# replicaof <masterip> <masterport>replicaof 192.168.1.6 6379如果主機添加了密碼,需要在從機添加masterauth 參數,否則提示驗證失敗。

#主master的redis密碼masterauth 123456第三步:啟動服務,測試配置是否正確

啟動三臺伺服器上redis服務。

向主機(192.168.1.6) 添加數據,連接Redis

#redis沒有設置密碼./redis-cli#redis 設置密碼./redis-cli -a "123456"

在1兩臺從機上分別連接redis後。執行

get k1可以看到結果為主機上寫入的name1的值,表示主從複製配置正確。

或者通過info replication 指定來查看主從配置信息

主節點中 cli中執行 info replication

./redis-cliinfo replication獲取以下信息內容

# Replicationrole:masterconnected_slaves:1slave0:ip=192.168.1.4,port=6379,state=online,offset=1078,lag=1master_replid:485ffa2cd3755449a7d16e0a279d60dae51bf9f5master_replid2:0000000000000000000000000000000000000000master_repl_offset:1078second_repl_offset:-1repl_backlog_active:1repl_backlog_size:1048576repl_backlog_first_byte_offset:1repl_backlog_histlen:1078connected_slaves:1(說明master node存在一個連接的slave node節點)slave0 (slave0是關於第一個子節點的配置信息)子節點中 cli中執行 info replication

獲取以下信息內容

# Replicationrole:slavemaster_host:192.168.1.6master_port:6379master_link_status:upmaster_last_io_seconds_ago:0master_sync_in_progress:0slave_repl_offset:560slave_priority:100slave_read_only:1connected_slaves:0master_replid:485ffa2cd3755449a7d16e0a279d60dae51bf9f5master_replid2:0000000000000000000000000000000000000000master_repl_offset:560second_repl_offset:-1repl_backlog_active:1repl_backlog_size:1048576repl_backlog_first_byte_offset:1repl_backlog_histlen:560role:slave (表明這個是子節點)master_host:192.168.1.6 (顯示master node的IP信息)master_port:6379 (埠號)master_link_status:up (表明是否連接上,up表示連接中,down表示連接失敗)第四步:master_link_status:down,即主從複製失敗問題解決

如果master_link_status:up 跳過此步驟

down大概有以下幾種情況,具體情況查看日誌文件

1、protected-mode配置成了yes

replicaof 192.168.1.6 6379masterauth 123456#開啟該參數後,redis只會本地進行訪問,拒絕外部訪問protected-mode no2、如果設置在主中設置了密碼,從中應該配置密碼

3、bind ip地址 表示可以那些伺服器可以訪問

設置為 0.0.0.0 表示都可以訪問如果是127.0.0.1 表示localhost訪問

4、client-output-buffer-limit slave這個參數配置不當

從機日誌文件:「I/O error trying to sync with MASTER:connection lost』」

原因:負責發數據給slave的client,如果buffer超過256m或者連續60秒超過64m,就會被立刻強行關閉!!! Traffic大的話一定要設大一點。否則就會出現一個很悲劇的循環,Master傳輸一個大的RDB給Slave,Slave努力的裝載,但還沒裝載完,Master對client的緩存滿了,再來一次。

#主機修改參數項值client-output-buffer-limit slave 1024mb 256mb 05、埠,防火牆問題

#防火牆添加6379埠:firewall-cmd --permanent --zone=public --add-port=6379/tcp

#重啟防火牆:firewall-cmd --reload

#查看默認防火牆狀態(關閉後顯示notrunning,開啟後顯示running)firewall-cmd --state

二、單臺伺服器上配置主從複製

單臺伺服器也可以實現主從複製,本質上是同時啟動幾個redis實例來實現。

區別在於複製幾個redis.conf,每個實例具有一個不同的redis.conf文件。其餘配置與多級一致

啟動redis服務,redis.conf 改位每個實例對應的配置文件名稱,或者每個實例新建一個不同名稱的服務./redis-server redis.conf

三、總結

redis主從複製主要作用讀寫分離和數據備份的作用。主機負責寫入數據,從機負責讀取數據。

如果主機節點崩潰了,造成redis服務關閉,需要人為手動啟動redis服務。

後續集成哨兵模式來實現解決這個問題,實現redis的高可用作用。

四、本實例中redis.conf 文件內容

下面是從機redis.conf 文件內容

如果是主機的話,刪除replicaof 192.168.1.7 6379 即可

#bind 127.0.0.1protected-mode noport 6379tcp-backlog 511timeout 0tcp-keepalive 300daemonize yessupervised nopidfile "/var/run/redis_6379.pid"loglevel noticelogfile "/var/log/redis/redis.log"databases 16always-show-logo yessave 900 1save 300 10save 60 10000stop-writes-on-bgsave-error yesrdbcompression yesrdbchecksum yesdbfilename "dump.rdb"dir "/"replicaof 192.168.1.7 6379masterauth "123456"replica-serve-stale-data yesreplica-read-only yesrepl-diskless-sync norepl-diskless-sync-delay 5repl-disable-tcp-nodelay noreplica-priority 100requirepass "123456"lazyfree-lazy-eviction nolazyfree-lazy-expire nolazyfree-lazy-server-del noreplica-lazy-flush noappendonly noappendfilename "appendonly.aof"appendfsync everysecno-appendfsync-on-rewrite noauto-aof-rewrite-percentage 100auto-aof-rewrite-min-size 64mbaof-load-truncated yesaof-use-rdb-preamble yeslua-time-limit 5000slowlog-log-slower-than 10000slowlog-max-len 128latency-monitor-threshold 0notify-keyspace-events ""hash-max-ziplist-entries 512hash-max-ziplist-value 64list-max-ziplist-size -2list-compress-depth 0set-max-intset-entries 512zset-max-ziplist-entries 128zset-max-ziplist-value 64hll-sparse-max-bytes 3000stream-node-max-bytes 4096stream-node-max-entries 100activerehashing yesclient-output-buffer-limit normal 0 0 0client-output-buffer-limit replica 256mb 64mb 60client-output-buffer-limit pubsub 32mb 8mb 60hz 10dynamic-hz yesaof-rewrite-incremental-fsync yesrdb-save-incremental-fsync yes

相關焦點

  • 淺談Redis主從複製
    Redis作者在2.8的候選版(以下簡稱Redis2.8)中已經將這個部分複製的思路實現了。那麼Redis2.4.16的全量複製與Redis2.8的部分複製是如何實現的呢?如下圖所示,這5個狀態是Slave在主從複製過程涉及到的幾個狀態,其中REDIS_REPL_NONE是Redis啟動時候默認的狀態。
  • redis學習筆記(四)主從數據同步
    在redis恢復數據時我們可以依賴於aof日誌或rdb日誌,但是redis在運行中該如何保證服務的可靠性,就需要依賴redis主從和哨兵集群
  • 面試系列 - Redis 持久化和主從複製總結(二)
    如果沒有開啟持久化,Redis 重啟後數據將全丟失,開啟 Redis 持久化,將數據保存到磁碟上,當 Redis 重啟後,可以從磁碟中恢復數據;        RDB 是默認的持久化方式,根據配置的規則將內存中數據以快照的方式寫入到二進位文件(全量生成一份副本存儲到硬碟上,若配置壓縮,Redis 會使用 LZF 算法進行壓縮,提升主從複製效率
  • 面試官:Redis 主從複製時網絡開小差了怎麼整?
    今天主要講的是主從複製數據一致性相關以及面對網絡中斷如何進行數據同步的問題。不 BB 了,直接上鍾吧!- 思維導圖 -主從模式配置對於 Redis 主從大家可能並不陌生,但是配置的話日常工作中並不會經常操作。在這裡簡單介紹下主從的相關配置。
  • Redis作者攤上事兒了:多人要求修改Redis主從複製術語master/slave
    近日,Redis 作者在 GitHub 上發起了一個「用其他詞彙代替 Redis 的主從複製術語」的 issue。有人認為 Redis 中的術語 master/slave (主人 / 奴隸)冒犯到了別人,要求 Redis 作者 ANTIREZ 修改這個術語,甚至連 ruby on rails 的作者 DHH 都在表態。本文對此 issue 做了簡單翻譯,以饗讀者。
  • Redis5.0:簡單的集群模式——主從模式詳解
    主從模式主從模式是最簡單的集群模式,其實就是複製基本只能解決讀寫分離問題, 主機伺服器一旦宕機基本完蛋,不具備高可用。基本上redis的性能瓶頸主要在於網絡IO和內存主頻上面,單機版Redis在不考慮高可用的情況下基本滿足80%的項目需要,因為單機版Redis可以實現10W/S的請求,除非緩存K-V值過大,通過讀寫分離緩存網卡的壓力,否則這個並發處理能力可以應對大部分項目。
  • Redis 單例、主從模式、sentinel 以及集群的配置方式及優缺點對比
    redis主從模式解決了數據備份和單例可能存在的性能問題,但是其也引入了新的問題。由於主從模式配置了三個redis實例,並且每個實例都使用不同的ip(如果在不同的機器上)和埠號。根據前面所述,主從模式下可以將讀寫操作分配給不同的實例進行從而達到提高系統吞吐量的目的,但也正是因為這種方式造成了使用上的不便,因為每個客戶端連接redis實例的時候都是指定了ip和埠號的,如果所連接的redis實例因為故障下線了,而主從模式也沒有提供一定的手段通知客戶端另外可連接的客戶端地址,因而需要手動更改客戶端配置重新連接。
  • 主從哨兵集群終於給你說明白了
    Redis有三種集群模式,第一個就是主從模式,第二種「哨兵」模式,第三種是 Cluster 集群模式。今天就和大家細細聊聊這三種模式。主從複製當其中一臺伺服器更新之後,伺服器會自動的將這臺更新的數據同步到另外一臺伺服器上。通過持久化的功能,redis可以保證就算是服務宕機重啟了,也只有少量的數據會丟失。
  • 46道Redis面試題,含參考答案!
    所以這個就是 redis cluster,或者是 redis master-slave 架構的主從異步複製導致的 redis 分布式鎖的最大缺陷:在 redis master 實例宕機的時候,可能導致多個客戶端同時完成加鎖。34.使用過 Redis 分布式鎖麼,它是怎麼實現的?
  • Spring Data Redis使用
    了解前面的文章有助於更好的理解本文:1.Linux上安裝Redis2.Redis中的五種數據類型簡介3.Redis字符串(STRING)介紹4.Redis字符串(STRING)中BIT相關命令5.Redis列表與集合6.Redis散列與有序集合7.Redis中的發布訂閱和事務8.Redis快照持久化9.Redis之AOF持久化10.Redis主從複製
  • FAQ系列 如何保證主從複製數據一致性
    導讀MySQL主從複製環境中,如何才能保證主從數據的一致性呢?
  • 面試官:Redis有哪幾種集群方案?原理和優缺點是什麼?
    雖然現在各大雲平臺有提供緩存服務可以直接使用,但了解一下其背後的實現與原理總還是有些必要(比如面試), 本文就一起來學習一下Redis的幾種集群方案。主從複製模式主從複製模式中包含一個主資料庫實例(master)與一個或多個從資料庫實例(slave),如下圖
  • 去pdd面試,redis把我面哭了【附面試答案】
    遇到過redis的hotkey嗎?怎麼處理的?4redis是單線程的嗎?單線程為什麼還這麼快?講一講redis的內存模型?5.我看你還用了RabbitMQ,簡單說一下RabbitMQ的工作原理?如何保證消息的順序執行?Kafka了解嗎?和RabbitMQ有什麼區別?你為啥不用kafka來做,當時怎麼考慮的?
  • Redis Sentinel-深入淺出原理和實戰
    ❞之前的文章聊到了Redis的主從複製,聊到了其相關的原理和缺點,具體的建議可以看看我之前寫的文章Redis的主從複製。總的來說,為了滿足Redis在真正複雜的生產環境的高可用,僅僅是用主從複製是明顯不夠的。
  • 三歪推薦:Redis常見的面試題
    本文公眾號來源:科技繆繆說說Redis基本數據類型有哪些吧字符串:redis沒有直接使用C語言傳統的字符串表示,而是自己實現的叫做簡單動態字符串SDS的抽象類型。跳躍表skiplist:跳躍表是有序集合的底層實現之一,redis中在實現有序集合鍵和集群節點的內部結構中都是用到了跳躍表。
  • 5分鐘完全掌握 Redis
    跳躍表skiplist:跳躍表是有序集合的底層實現之一,redis中在實現有序集合鍵和集群節點的內部結構中都是用到了跳躍表。redis的速度非常的快,單機的redis就可以支撐每秒10幾萬的並發,相對於mysql來說,性能是mysql的幾十倍。速度快的原因主要有幾點:C語言實現,優化過的數據結構,基於幾種基礎的數據結構,redis做了大量的優化,性能極高那為什麼Redis6.0之後又改用多線程呢?
  • Python | Python學習之Redis交互詳解
    前言最近在學習scrapy redis,順便複習了redis。本篇為redis篇,包含實例演示,主從服務配置,python交互等內容。log file /xx/xx/xx/redis-server.log 日誌文件位置slaveof ip port 主從複製的ip埠啟動redis:sudo server redis start停止redis:sudo server redis stop重啟redis:sudo server redis restart加載指定的redis
  • Redis的各項功能解決了哪些問題
    它還內建了複製,lua腳本,LRU,事務等功能,通過redis sentinel實現高可用,通過redis cluster實現了自動分片。以及事務,發布/訂閱,自動故障轉移等等。 綜上所述,Redis提供了豐富的功能,初次見到可能會感覺眼花繚亂,這些功能都是幹嘛用的?都解決了什麼問題?什麼情況下才會用到相應的功能?那麼下面從零開始,一步一步的演進來粗略的解釋下。
  • 史上最全 50 道 Redis 面試題
    有A,B,C三個節點的集群,在沒有複製模型的情況下,如果節點B失敗了,那麼整個集群就會以為缺少5501-11000這個範圍的槽而不可用。12、MySQL裡有2000w數據,redis中只存20w的數據,如何保證redis中的數據都是熱點數據?redis內存數據集大小上升到一定大小的時候,就會施行數據淘汰策略。13、Redis有哪些適合的場景?
  • Redis的集群搭建,原來這麼簡單
    回歸正題,上篇主要說了下Redis的主從複製是如何做的,高可用集群有幾種方式部署(傳送門《原來你是這樣的高可用呀》)。其中針對Redis高可用cluster集群說明時,有一些遺漏的東西,會在本篇前半部分進行說明,後面的內容主要是說怎麼來搭建cluster集群。