Redis--主從復制

目錄

一、配置

1.1 建立復制

1.2 斷開復制

1.3 安全性

1.4 只讀

1.5 傳輸延遲

二、拓撲

2.1 一主一從結構

2.2 一主多從結構

2.3 樹形主從結構


在分布式系統中為了解決單點問題,通常會把數據復制多個副本部署到其他服務器,滿足故障恢
復和負載均衡等需求。Redis 也是如此,它為我們提供了復制的功能,實現了相同數據的多個 Redis 副本。復制功能是高可用?Redis 的基礎,哨兵和集群都是在復制的基礎上構建的。

一、配置

1.1 建立復制

參與復制的 Redis 實例劃分為主節點(master)和從節點(slave)。每個從結點只能有?個主節點,而?個主節點可以同時具有多個從結點。復制的數據流是單向的,只能由主節點到從節點。配置復制的方式有以下三種:
1. 在配置文件中加入?slaveof {masterHost} {masterPort} 隨 Redis 啟動生效。
2. 在 redis-server 啟動命令時加入?--slaveof {masterHost} {masterPort} 生效。
3. 直接使用?redis 命令:slaveof {masterHost} {masterPort} 生效
接下來,我們將 redis.conf 配置文件復制?份 redis-slave.conf,并且修改其 daemonize 為 yes。
# By default Redis does not run as a daemon. Use 'yes' if you need it.
# Note that Redis will write a pid file in /var/run/redis.pid when daemonized.
daemonize yes
接下來,默認啟動的 redis 作為主 Redis,重新通過命令行啟動?個 Redis 實例作為從 Redis:
# ubuntu
redis-server /etc/redis/redis-slave.conf --port 6380 --slaveof 127.0.0.1 6379# centos
redis-server /etc/redis-slave.conf --port 6380 --slaveof 127.0.0.1 6379
注意: 修改配置主要是修改從機的配置. 主機配置不變
通過 netstat -nlpt 確保兩個 Redis 均已正確啟動。
[root@host ~]# netstat -nlpt
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name 
tcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN 49264/redis-server 
tcp 0 0 127.0.0.1:6380 0.0.0.0:* LISTEN 272418/redis-server
通過 redis-cli 可以連接主 Redis 實例,通過 redis-cli -p 6380 連接從 Redis。并且觀察復制關系。
127.0.0.1:6379> set hello world
OK
127.0.0.1:6379> get hello
"world"
127.0.0.1:6380> get hello
"world"
從運行結果中看到復制已經?作了,針對主節點 6379 的任何修改都可以同步到從節點 6380 中,復制過程如圖所示。

可以通過 info replication 命令查看復制相關狀態。

主節點 6379 復制狀態信息:

127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:1
slave0:ip=127.0.0.1,port=6380,state=online,offset=100,lag=0
master_replid:2fbd35a8b8401b22eb92ff49ad5e42250b3e7a06
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:100
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:100

?從節點 6380 復制狀態信息:

127.0.0.1:6380> info replication
# Replication
role:slave
master_host:127.0.0.1
master_port:6379
master_link_status:up
master_last_io_seconds_ago:1
master_sync_in_progress:0
slave_repl_offset:170
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:2fbd35a8b8401b22eb92ff49ad5e42250b3e7a06
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:170
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:170

1.2 斷開復制

slaveof 命令不但可以建立復制,還可以在從節點執行?slaveof no one 來斷開與主節點復制關系。
例如在 6380 節點上執行?slaveof no one 來斷開復制。
斷開復制主要流程:
1)斷開與主節點復制關系。
2)從節點晉升為主節點。
從節點斷開復制后并不會拋棄原有數據,只是無法再獲取主節點上的數據變化。
通過 slaveof 命令還可以實現切主操作,將當前從節點的數據源切換到另?個主節點。執行
slaveof {newMasterIp} {newMasterPort} 命令即可。
切主操作主要流程:
1)斷開與舊主節點復制關系。
2)與新主節點建立復制關系。
3)刪除從節點當前所有數據。
4)從新主節點進行復制操作。

1.3 安全性

對于數據比較重要的節點,主節點會通過設置 requirepass 參數進行密碼驗證,這時所有的客戶
端訪問必須使用?auth 命令實行校驗。從節點與主節點的復制連接是通過?個特殊標識的客戶端來完成,因此需要配置從節點的masterauth 參數與主節點密碼保持?致,這樣從節點才可以正確地連接到主節點并發起復制流程。

1.4 只讀

默認情況下,從節點使用?slave-read-only=yes 配置為只讀模式。由于復制只能從主節點到從節
點,對于從節點的任何修改主節點都無法感知,修改從節點會造成主從數據不?致。所以建議線上不要修改從節點的只讀模式。

1.5 傳輸延遲

主從節點一般部署在不同機器上,復制時的網絡延遲就成為需要考慮的問題,Redis 為我們提供
了 repl-disable-tcp-nodelay 參數用于控制是否關閉 TCP_NODELAY,默認為 no,即開啟 tcp-
nodelay 功能,說明如下:
當關閉時,主節點產生的命令數據無論大小都會及時地發送給從節點,這樣主從之間延遲會變小,
但增加了網絡帶寬的消耗。適用于主從之間的網絡環境良好的場景,如同機房部署。
當開啟時,主節點會合并較小的 TCP 數據包從而節省帶寬。默認發送時間間隔取決于 Linux 的內
核,?般默認為 40 毫秒。這種配置節省了帶寬但增大主從之間的延遲。適用于主從網絡環境復雜
的場景,如跨機房部署。

二、拓撲

Redis 的復制拓撲結構可以支持單層或多層復制關系,根據拓撲復雜性可以分為以下三種:?主?
從、?主多從、樹狀主從結構。

2.1 一主一從結構

?主?從結構是最簡單的復制拓撲結構,用于主節點出現宕機時從節點提供故障轉移支持,如圖
所示。當應用寫命令并發量較高且需要持久化時,可以只在從節點上開啟 AOF,這樣既可以保證數據安全性同時也避免了持久化對主節點的性能干擾。但需要注意的是,當主節點關閉持久化功能時,如果主節點宕機要避免自動重啟操作。

2.2 一主多從結構

?主多從結構(星形結構)使得應用端可以利用多個從節點實現讀寫分離,如圖所示。對于
讀比重較大的場景,可以把讀命令負載均衡到不同的從節點上來分擔壓力。同時?些耗時的讀命令可以指定?臺專門的從節點執行,避免破壞整體的穩定性。對于寫并發量較高的場景,多個從節點會導致主節點寫命令的多次發送從而加重主節點的負載。

2.3 樹形主從結構

樹形主從結構(分層結構)使得從節點不但可以復制主節點數據,同時可以作為其他從節點的主
節點繼續向下層復制。通過引入復制中間層,可以有效降低住系欸按負載和需要傳送給從節點的數據量,如圖所示。數據寫入節點 A 之后會同步給 B 和 C 節點,B 節點進?步把數據同步給 D 和 E 節點。當主節點需要掛載等多個從節點時為了避免對主節點的性能干擾,可以采用這種拓撲結構。

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

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

相關文章

已注冊商標如何防止被不使用撤銷!

近年來已注冊商標被撤銷越來越多,不乏著名企業或機構,普推知產商標老楊看到前一陣看到央視和百度等申請的商標也被申請撤銷,連續三年不使用撤銷也是正常的商標流程。 已注冊商標被撤銷普推老楊看到案例主要是集中在一些早期申請注冊的好記的商…

解密大模型背后的秘密:訓練、優化與挑戰

解密大模型背后的秘密:訓練、優化與挑戰 在當今的人工智能領域,大模型(Large Language Models, LLMs)已經成為了一個不可忽視的存在。從自然語言處理到圖像生成,再到推薦系統,大模型以其強大的泛化能力和創…

App自動化測試流程方案與架構設計

App自動化測試流程方案與架構設計 一、核心流程設計 #mermaid-svg-kN4GmIvHb8MMT83M {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-kN4GmIvHb8MMT83M .error-icon{fill:#552222;}#mermaid-svg-kN4GmIvHb8MMT83M .e…

字節跳動發布視頻生成基礎大模型 Seaweed-7B

近日,字節跳動發布了其全新視頻生成基礎大模型 Seaweed-7B,該模型由字節 Seed 團隊開發,參數量僅為 70 億,在多個方面展現出卓越性能,為 AI 視頻生成領域帶來了新的突破。 功能特點 支持多種生成方式:Sea…

如何基于區塊鏈進行虛擬電廠運營平臺建設?

本項目旨在基于區塊鏈技術建設虛擬電廠運營平臺,以提升省內大用戶及工業企業和工業園區的需求響應能力,優化能源結構配置,并推動能源交易、需求響應和現貨交易等新型業態的發展。通過建設虛擬電廠,項目將實現工業企業及園區各供用…

LeetCode[459]重復的子字符串(KMP解法)

思路: 最近迷上了KMP算法,所以這道題也是來搞一下KMP算法,總所周知KMP是需要維護一個前綴表,KMP算法不是比較一個字符串包不包含另一個字符串的嗎,這個重復字符串的題也能用?貓爺:毋庸置疑&…

spring-batch批處理框架(2)

文章目錄 八、作業控制8.1 作業啟動8.1.1 SpringBoot 啟動8.1.2 Spring 單元測試啟動8.1.3 RESTful API 啟動 8.2 作業停止方案1:Step 步驟監聽器方式方案2:StepExecution停止標記 8.3 作業重啟8.3.1 禁止重啟8.3.2 限制重啟次數8.3.3 無限重啟 九、Item…

uniapp的通用頁面及組件基本封裝

1.基本布局頁面 適用于自定義Navbar頭部 <template><view :style"{ background : param.bgColor , height: 100% }"><block v-if"param.noHead"><slot name"head"></slot></block><block v-if"!p…

基于MTF的1D-2D-CNN-GRU-Attention時序圖像多模態融合的故障識別,適合研究學習(Matlab完整源碼和數據),附模型研究報告

基于MTF的1D-2D-CNN-GRU-Attention時序圖像多模態融合的故障識別&#xff0c;適合研究學習&#xff08;Matlab完整源碼和數據&#xff09;&#xff0c;附模型研究報告 目錄 基于MTF的1D-2D-CNN-GRU-Attention時序圖像多模態融合的故障識別&#xff0c;適合研究學習&#xff08;…

HTTP/1.1 隊頭堵塞問題

文章目錄 一、隊頭堵塞1、非管線化2、管線化 二、如何解決&#xff1f; 一、隊頭堵塞 1、非管線化 如圖&#xff0c;http 請求必須等到上一個請求響應后才能發送&#xff0c;后面的以此類推&#xff0c;由此可以看出&#xff0c;在一個 tcp 通道中&#xff0c;如果某個 http 請…

施磊老師基于muduo網絡庫的集群聊天服務器(二)

文章目錄 Cmake簡單介紹Cmake與MakefileCmake配置CmakeLists.txt 編寫完整cmake例子文件夾雜亂問題多級目錄Cmakevscode 極其推薦 的 cmake方式 Mysql環境與編程mysql簡單使用User表Friend表AllGroup表GroupUser表OfflineMessage表 集群聊天項目工程目錄創建網絡模塊代碼Chatse…

4.18---緩存相關問題(操作原子性,擊穿,穿透,雪崩,redis優勢)

為什么要用redis做一層緩存&#xff0c;相比直接查mysql有什么優勢&#xff1f; 首先介紹Mysql自帶緩存機制的問題&#xff1a; MySQL 的緩存機制存在一些限制和問題,它自身帶的緩存功能Query Cache只能緩存完全相同的查詢語句&#xff0c;對于稍有不同的查詢語句&#xff0c…

健康養生指南

在快節奏的現代生活中&#xff0c;健康養生成為人們關注的焦點。它不僅關乎身體的強健&#xff0c;更是提升生活質量、預防疾病的關鍵。掌握科學的養生方法&#xff0c;能讓我們在歲月流轉中始終保持活力。 飲食是健康養生的基礎。遵循 “均衡膳食” 原則&#xff0c;每日飲食需…

#去除知乎中“鹽選”付費故事

添加油猴腳本&#xff0c;去除知乎中“鹽選”付費故事 // UserScript // name 鹽選內容隱藏腳本 // namespace http://tampermonkey.net/ // version 0.2 // description 自動隱藏含有“鹽選專欄”或“鹽選”文字的回答卡片 // author YourName // mat…

如何防止接口被刷

目錄 &#x1f6e1;? 一、常見的防刷策略分類 &#x1f527; 二、技術實現細節 ? 1. 基于 IP 限流 ? 2. 給接口加驗證碼 ? 3. 使用 Token 限制接口訪問權限 ? 4. 給接口加冷卻時間&#xff08;驗證碼類經典&#xff09; ? 5. 使用滑動窗口限流算法&#xff08;更精…

github 項目遷移到 gitee

1. 查看遠程倉庫地址 git remote -v 2. 修改遠程倉庫地址 確保 origin 指向你的 Gitee 倉庫&#xff0c;如果不是&#xff0c;修改遠程地址。 git remote set-url origin https://gitee.com/***/project.git 3. 查看本地分支 git branch 4. 推送所有本地分支 git p…

探索大語言模型(LLM):目標、原理、挑戰與解決方案

提示&#xff1a;文章寫完后&#xff0c;目錄可以自動生成&#xff0c;如何生成可參考右邊的幫助文檔 文章目錄 前言語言模型的目標語言模型的數學表示語言模型面臨的挑戰解決參數量巨大的方法1. 馬爾可夫假設2. 神經網絡語言模型3.自監督學習4. 分布式表示 腦圖總結 前言 在自…

Kubernetes》》k8s》》Namespace

Namespace 概述 Namespace&#xff08;命名空間&#xff09; 是 Kubernetes 中用于邏輯隔離集群資源的機制&#xff0c;可將同一集群劃分為多個虛擬環境&#xff0c;適用于多團隊、多項目或多環境&#xff08;如開發、測試、生產&#xff09;的場景。 核心作用&#xff1a; 資…

FFUF指南

ffuf 的核心功能&#xff1a; 目錄/文件發現&#xff1a; 通過暴力破解&#xff08;使用字典&#xff09;探測目標網站的隱藏目錄或文件&#xff0c;例如&#xff1a; ffuf -w /path/to/wordlist.txt -u http://target.com/FUZZ 子域名枚舉&#xff1a; 通過模糊測試發現目標…

Qt通過ODBC和QPSQL兩種方式連接PostgreSQL或PolarDB PostgreSQL版

一、概述 以下主要在Windows下驗證連接PolarDB PostgreSQL版&#xff08;阿里云兼容 PostgreSQL的PolarDB版本&#xff09;。Linux下類似&#xff0c;ODBC方式則需要配置odbcinst.ini和odbc.ini。 二、代碼 以下為完整代碼&#xff0c;包含兩種方式連接數據庫&#xff0c;并…