Redis 之五:Redis 的主從復制

概念

主從復制,是指將一臺 Redis 服務器的數據,復制到其他的Redis服務器。前者稱為主節點(master),后者稱為從節點(slave);數據的復制是單向的,只能由主節點到從節點。

默認情況下,每臺Redis服務器都是主節點;且一個主節點可以有多個從節點(或沒有從節點),但一個從節點只能有一個主節點。

主從復制的作用

主從復制的作用主要包括:

  1. 數據冗余:主從復制實現了數據的熱備份,是持久化之外的一種數據冗余方式。
  2. 故障恢復:當主節點出現問題時,可以由從節點提供服務,實現快速的故障恢復;實際上是一種服務的冗余。
  3. 負載均衡:在主從復制的基礎上,配合讀寫分離,可以由主節點提供寫服務,由從節點提供讀服務(即寫Redis數據時應用連接主節點,讀Redis數據時應用連接從節點),分擔服務器負載;尤其是在寫少讀多的場景下,通過多個從節點分擔讀負載,可以大大提高Redis服務器的并發量。
  4. 高可用基石:除了上述作用以外,主從復制還是哨兵和集群能夠實施的基礎,因此說主從復制是Redis高可用的基礎。

如何使用主從復制

為了更直觀的理解主從復制,在介紹其內部原理之前,先說明我們需要如何操作才能開啟主從復制。

1. 建立復制

需要注意,主從復制的開啟,完全是在從節點發起的;不需要我們在主節點做任何事情。

從節點開啟主從復制,有 3 種方式:

(1)配置文件

在從服務器的配置文件中加入:slaveof

(2)啟動命令

redis-server啟動命令后加入 --slaveof

(3)客戶端命令

Redis服務器啟動后,直接通過客戶端執行命令:slaveof ,則該Redis實例成為從節點。

上述 3 種方式是等效的,下面以客戶端命令的方式為例,看一下當執行了slaveof 后,Redis 主節點和從節點的變化。

2. 實例

準備工作:啟動兩個節點

1) 復制配置文件

[root@localhost bin]# ls        ### 進入redis 安裝目錄下可執行目錄
dump.rdb  redis-benchmark  redis-check-aof  redis-check-rdb  redis-cli  redis.conf  redis-sentinel  redis-server
[root@localhost bin]# cp redis.conf redis1.conf        ### 復制配置文件作為其中一個從機
[root@localhost bin]# cp redis.conf redis2.conf        ### 復制配置文件作為其中一個從機
[root@localhost bin]# vi redis1.conf                 ### 修改redis1.conf端口為 6381
##***** :/6379 搜索即可找到

此時之前的 redis 實例端口為6379 ,現在又多一個6381。

接下來分別啟動各自服務。

啟動6379:

[root@localhost bin]# redis-server redis.conf      ###******* 注意使用各自的配置文件
16624:C 05 Aug 2021 09:11:14.767 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
16624:C 05 Aug 2021 09:11:14.767 # Redis version=6.0.6, bits=64, commit=00000000, modified=0, pid=16624, just started
16624:C 05 Aug 2021 09:11:14.767 # Configuration loaded
[root@localhost bin]# redis-cli -p 6379 
127.0.0.1:6379> info replication              ###******* 查看主從情況 
# Replication
role:master                                     ###******* 默認自己都為master 主節點
connected_slaves:0
master_replid:e2995fc02165a6f45644b6076aa4ae7c75ccf3d6
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:28
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:28
127.0.0.1:6379> 

再啟動6381:

[root@localhost bin]# redis-server redis1.conf                     #***** 使用第二個實例配置文件啟動
16641:C 05 Aug 2021 09:12:07.514 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
16641:C 05 Aug 2021 09:12:07.515 # Redis version=6.0.6, bits=64, commit=00000000, modified=0, pid=16641, just started
16641:C 05 Aug 2021 09:12:07.515 # Configuration loaded[root@localhost bin]# redis-cli -p 6381                            ##**** 使用6381
127.0.0.1:6381> info replication
# Replication
role:master                                                        ##**** 一樣顯示主節點
connected_slaves:0
master_replid:fdc1b15ab0d76bca91227af2c0ebf8198a7c8541
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:0
second_repl_offset:-1
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0
127.0.0.1:6381> 

從上面看出,兩個Redis節點啟動后(分別稱為6379節點和6381節點),默認都是主節點。

3. 主從配置

此時在6381節點執行 slaveof 命令,使之變為從節點:

127.0.0.1:6381> slaveof 127.0.0.1 6379            ## 建立主從關系,附屬6379
OK127.0.0.1:6381> info replication            
# Replication
role:slave                                        ## 顯示變為了從節點了
master_host:127.0.0.1
master_port:6379
master_link_status:up                            ## 和主節點保持了連接狀態
master_last_io_seconds_ago:0
master_sync_in_progress:0
slave_repl_offset:70
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:e2995fc02165a6f45644b6076aa4ae7c75ccf3d6
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:70
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:29
repl_backlog_histlen:42
127.0.0.1:6381> 

再看 6379 節點:

127.0.0.1:6379> info replication
# Replication
role:master                                            
connected_slaves:1                                    # 所屬從節點有一個
slave0:ip=127.0.0.1,port=6381,state=online,offset=196,lag=1
master_replid:e2995fc02165a6f45644b6076aa4ae7c75ccf3d6
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:196
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:196

測試讀寫操作:

先在從節點查詢一個不存在的 key,然后去主節點添加此 key ,會發現會自動同步到各個從節點

127.0.0.1:6381>  get age
(nil)127.0.0.1:6381> get age        ### 當主節點存入age 后 ,再取值,發現已經自動同步到從機了
"23"
127.0.0.1:6381> set age 24
(error) READONLY You can't write against a read only replica.  
127.0.0.1:6381> 

注意:上面的error提示中,說明從節點是只能讀,不能寫的。所謂主從復制。讀寫分離

4. 啟動命令方式

redis-server啟動命令后加入 --slaveof

上面的方式,使用客戶端命令方式來實現的主從的配置。

下面使用啟動時指定主從關系。

redis-server myredis/redis1.conf --slaveof 127.0.0.1 6379?啟動 Redis 服務時,指定所屬的主節點為 6379 端口上的服務

[root@wang ~]# redis-server myredis/redis1.conf --slaveof 127.0.0.1 6379
29087:C 25 Aug 2021 16:04:29.836 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
29087:C 25 Aug 2021 16:04:29.836 # Redis version=6.0.6, bits=64, commit=00000000, modified=0, pid=29087, just started
29087:C 25 Aug 2021 16:04:29.836 # Configuration loaded
[root@wang ~]# redis-cli -p 6381
127.0.0.1:6381> info replication
# Replication
role:slave
master_host:127.0.0.1
master_port:6379
master_link_status:up
master_last_io_seconds_ago:2
master_sync_in_progress:0
slave_repl_offset:1007
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:f05b6c77978f163ae77ebed3dcd0bb85790ed197
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:1007
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
5. 配置文件方式

可以在啟動的配置文件中 redis1.config 中追加下面的一行配置 :

slaveof 127.0.0.1 6379

[root@wang myredis]# echo "slaveof 127.0.0.1 6379" >> redis1.conf 
[root@wang myredis]# tail -5 redis1.conf 

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/713324.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/713324.shtml
英文地址,請注明出處:http://en.pswp.cn/news/713324.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【0272】postgres內核分配 MyBackendId 實現原理(MyBackendId、MyProc、shmInvalBuffer)(三)

相關文章: 【0255】揭曉pg內核中MyBackendId的分配機制(后端進程Id,BackendId)(一) 【0256】揭曉pg內核中MyBackendId的分配機制(后端進程Id,BackendId)(二) 第一個backend process前,shmInvalBuffer的值情況 (gdb) p *shmInvalBuffer $153 = {minMsgNum =

webpack-cli

webpack-cli做了什么 webpack-cli 是 Webpack 提供的命令行工具,用于在命令行中執行 Webpack 相關的操作。webpack-cli 主要完成以下幾項工作: 解析和處理命令行參數:webpack-cli 負責解析用戶在命令行中輸入的參數,包括配置文件…

云天勵飛戰略投資神州云海,布局機器人市場

日前,AI上市企業云天勵飛(688343.SH)完成了對深圳市神州云海智能科技有限公司(以下簡稱“神州云海”)的B輪戰略投資。 公開資料顯示,自2015年于深圳創立以來,神州云海始終聚焦人工智能與服務機器人廣闊的應用市場,依托自主的核心算法能力,深耕機器人硬件本體研發,整合上下游產…

Java學習筆記001——入門基礎知識

Java語言是一種高級編程語言,它采用了面向對象編程的思想,具有跨平臺性和安全性等優點。現如今,Java語言成為了世界上最流行的編程語言之一。 前一段學習Python語言,本文是學習java的第一篇筆記。 1. java運行環境搭建&#xff…

RabbitMQ-TTL/死信隊列/延遲隊列高級特性

文章目錄 TTL死信隊列消息成為死信的三種情況隊列如何綁定死信交換機 延遲隊列RabbitMQ如何實現延遲隊列 總結來源B站黑馬程序員 TTL TTLTTL(Time To Live):存活時間/過期時間當信息到達存活時間后,還沒有被消費,會被自動清除。RabbitMQ可以對消息設置過…

Win10系統如何重置系統

Win10系統如何重置 大家可以使用Win10內建的重設電腦設定,如以下操作: 首先,可以先到桌面左下角的【開始】 選擇【設定】 在【設定】裡找到【更新與安全性】 在左側欄有一項【復原】 在復原的標題下,副標題有一項【重設此電腦】…

【algorithm】算法基礎課---排序算法(附筆記 | 建議收藏)

🚀write in front🚀 📝個人主頁:認真寫博客的夏目淺石. 🎁歡迎各位→點贊👍 收藏?? 留言📝 📣系列專欄:AcWing算法學習筆記 💬總結:希望你看完…

tvm交叉編譯參考資料整理

環境 ubuntu20.04,ndk交叉編譯部署到adnroid手機 參考: TVM部署神經網絡模型到android端_tvm android-CSDN博客 使用TVM在android中進行Mobilenet SSD部署 - 知乎

深度探析低代碼:助力“數智轉型”賦能中國制造

隨著數字化和智能化技術的飛速發展,我國制造業正面臨著從傳統制造向智能制造的轉型升級。在這個過程中,低代碼技術作為一種創新性的軟件開發模式,逐漸成為助力我國制造業數智轉型的關鍵驅動力。本文將從低代碼技術的原理、應用場景以及在我國…

?The Sandbox的南極之旅|鏈接世界:從南極洲到元宇宙

真正的發現之旅不在于尋找新的景觀,而在于擁有新的眼光。 - 馬塞爾-普魯斯特 在這個數字世界和物理世界日益交織的時代,The Sandbox 的聯合創始人 Arthur Madrid 和 Sebastien Borget 踏上了遠離數字空間的旅程,前往地球上未被開發的寶藏地點…

無用工作、UBI與AI

有些隱晦和黑暗的事實無法陳述,因為任何的系統中“無用”的結局都是被無情的拋棄和淘汰,AI監督下的人類結局更是如此。 什么是無用工作? 無用無效工作通常指的是那些看似忙碌但實際上對社會或個人沒有實質性貢獻的工作。這類工作可能包括以下…

2024環境工程、能源系統與化學材料國際會議(ICEEESCM 2024)

2024環境工程、能源系統與化學材料國際會議(ICEEESCM 2024) 一、【會議簡介】 2024環境工程、能源系統與化學材料國際會議(ICEEESCM 2024)將于2024年在西安舉行。會議將圍繞環境工程、能源系統與化學材料等議題展開討論,旨在為從事環境工程…

ABB雙語言共享充電寶投資理財源碼/共享充電寶系統源碼/共享充電寶市場分析/五級分銷返利+地圖顯示模式

ABB雙語言共享充電寶投資理財源碼/五級分銷返利地圖顯示模式/vue編譯后前端 測試環境:Linux系統CentOS7.6、寶塔、PHP7.3、MySQL5.6,根目錄public,偽靜態laravel5, 源碼下載:https://download.csdn.net/download/m0_…

人臉高清算法GFPGAN之TensorRT推理

1. 綜述 最近由于做數字人項目,采用的是wav2lip GFPGAN進行人臉面部高清,但GFPGAN模型本身比較大,所以想著使用TensorRT來代替原始的pth推理看看能否提升運行速度,于是便開始了這趟windows1之下進行GFPGAN的trt推理的折騰之旅。…

varFormatter 數據格式化庫 以性能優先的 快速的 內存對象格式轉換

varFormatter 數據格式化 技術 開源技術欄 對象/變量格式化工具庫,其支持將一個對象進行按照 JSON XML HTML 等格式進行轉換,并獲取到結果字符串! 目錄 文章目錄 varFormatter 數據格式化 技術目錄介紹獲取方式 使用實例格式化組件的基本使…

圖書推薦||Word文稿之美

讓你的文檔從平凡到出眾! 本書內容 《Word文稿之美》是一本全面介紹Word排版技巧和應用的實用指南。從初步認識數字排版到高效利用模板、圖文配置和表格與圖表的排版技巧,再到快速修正錯誤和保護文件,全面系統地講解數字排版的技術和能力&…

靶機滲透之My File Server: 1

Name: My File Server: 1Date release: 21 Feb 2020Author: Akanksha Sachin VermaSeries: My File ServerDownload: https://drive.google.com/uc?id1w0grAomPuFaIohBcUwDiI3QIi4fj4kje&exportdownload 對于vulnhub中的靶機,我們都需先下載鏡像,然…

Redis 在 Linux 系統下安裝部署的兩種方式詳細說明

小伙伴們好,歡迎關注,一起學習,無限進步 Redis安裝和配置 1、首先在官網下載好redis-6.0.9.tar.gzhttp://redis.io/ 或者使用 wget 命令下載:wget http://download.redis.io/releases/redis-6.0.9.tar.gz 2、下載使用上傳到阿里…

Entry First Day 入職恩孚第一天

入職第一天,電腦還沒配置好就去了工廠。 熟悉了一下設備,切了幾個小玩意, hello world 一下。 了解了串行端口的Nodejs的庫 https://github.com/serialport/node-serialport,以后要用這個東西和硬件通訊,安裝&#…

css實現居中

基礎代碼&#xff1a; <div class"box"><div class"content"></div> </div> css實現居中的幾種方式&#xff1a; 1、flex布局&#xff08;水平垂直&#xff09; .box {width: 200px;height: 200px;background-color: pink;disp…