redis主從復制

隨著項目訪問量的增加,對Redis服務器的操作也越加頻繁,雖然Redis讀寫速度都很快,但是一定程度上也會造成一定的延時,那么為了解決訪問量大的問題,通常會采取的一種方式是主從架構Master/Slave,Master 以寫為主,Slave 以讀為主。

目錄

一、主從復制原理

全同步過程如下:

增量同步過程如下:

二、主從復制配置

一主雙從

1、創建目錄(Linux)

2、復制配置文件

3、創建三個文件

4、啟動服務

5、驗證服務

6、連接服務

7、進行復制

8、配置主從

9、集群測試

主從切換


一、主從復制原理

Redis 一般是使用一個 Master 節點來進行寫操作,而若干個 Slave 節點進行讀操作,Master 和 Slave 分別代表了一個個不同的 Redis Server 實例。

另外定期的數據備份操作也是單獨選擇一個 Slave 去完成,這樣可以最大程度發揮 Redis 的性能,為的是保證數據的弱一致性和最終一致性。

另外,Master 和 Slave 的數據不是一定要即時同步的,但是在一段時間后 Master 和 Slave 的數據是趨于同步的,這就是最終一致性。

image-20200709170335870

全同步過程如下:

  • Slave 發送 Sync 命令到 Master。

  • Master 啟動一個后臺進程,將 Redis 中的數據快照保存到文件中。

  • Master 將保存數據快照期間接收到的寫命令緩存起來。

  • Master 完成寫文件操作后,將該文件發送給 Slave。

  • 使用新的 RDB 或 AOF 文件替換掉舊的 RDB 或 AOF 文件。

  • Master 將這期間收集的增量寫命令發送給 Slave 端。

增量同步過程如下:

  • Master 接收到用戶的操作指令,判斷是否需要傳播到 Slave。

  • 將操作記錄追加到 AOF 文件。

  • 將操作傳播到其他 Slave:對齊主從庫;往響應緩存寫入指令。

  • 將緩存中的數據發送給 Slave。

二、主從復制配置

下面搭建一主雙從的 Redis 集群。

一主雙從

準備三臺虛擬機,配置好主機名、IP地址和Redis環境。本教程中為了演示方便,在一臺虛擬機中配置三個Redis實例。

image-20220721095603266

1、創建目錄(Linux)

我們在根目錄下創建 rediscluster 目錄

mkdir /rediscluster    

2、復制配置文件

把 redis.conf 復制到這個目錄中

cp /etc/redis.conf /rediscluster/redis.conf

3、創建三個文件

在rediscluster目錄下分別創建三個文件: redis-6379.conf、redis-6380.conf 和 redis-6381.conf。

vim redis-6379.conf

文件內容如下:(同樣的方式創建另外兩個文件并做相應的修改)

include /rediscluster/redis.conf
# 修改端口號
port 6379
# 修改pid文件名
pidfile "/var/run/redis_6379.pid"
# 修改持久化文件名
dbfilename "dump_6379.rdb"
dir "/rediscluster"

4、啟動服務

分別啟動三臺 Redis 服務器:

rediscluster]# redis-server redis-6379.conf
rediscluster]# redis-server redis-6380.conf
rediscluster]# redis-server redis-6381.conf

5、驗證服務

rediscluster]# ps -ef | grep redis

6、連接服務

分別使用 redis-cli 來連接這三臺服務(三個窗口):

rediscluster]# redis-cli -p 6379
rediscluster]# redis-cli -p 6380
rediscluster]# redis-cli -p 6381

?

7、進行復制

客戶端連接上后,執行如下命令:

127.0.0.1:6379> info replication
127.0.0.1:6380> info replication
127.0.0.1:6381> info replication

?從圖中可以發現,這三臺都是 master,也就是都是主服務器。

8、配置主從

假設我們希望 6379 是主服務器,而 6380 和 6381 是從服務器,則需要做如下配置。

命令格式:slaveof <ip> <port>

我們分別在 6380 和 6381 客戶端中執行如下命令:

127.0.0.1:6380> slaveof 127.0.0.1 6379
OK
127.0.0.1:6381> slaveof 127.0.0.1 6379
OK

注意:

  1. 在 redis-cli 客戶端中執行 slaveof 命令只會對當前環境生效,重啟后失效。要想永久生效,需要在 redis.conf 配置文件中添加 slaveof <masterip> <masterport> 配置。

  2. 在 Redis 5.0 后,新增了 replicaof 命令,作用與 slaveof 命令效果一致。

再次執行 info replication 命令查看,可以發現已經變為了從機了。

9、集群測試

我們在 6379 中添加如下數據:

127.0.0.1:6379> set k1 v1
OK
127.0.0.1:6379> set k2 v2
OK

然后在從機上查詢:

127.0.0.1:6380> get k1
1) "v1"
127.0.0.1:6381> get k1
1) "v1"

發現數據已經同步了。

注意:

  1. 如果我們在從服務器中添加數據,則會報錯。因為從服務器只能讀。

  2. 如果從機宕機了,重啟后會變為主服務器,需要重新執行 slaveof <ip> <port> 命令。

  3. 如果主機宕機了,重啟后一切正常。

主從切換

當一個 master 宕機后,后面的 slave 可以立刻升為 master,其后面的 slave 不用做任何修改。

用 slaveof no one 將從機變為主機。

假設主機 6379 宕機了,我們可以在 6380 上執行如下命令來切換為主機:

127.0.0.1:6380> slaveof no one

查看 6380,已經變為主機了。

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

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

相關文章

3.react useRef使用與常見問題

react useRef使用與常見問題 文章目錄 react useRef使用與常見問題1. Dom操作: useRef()2. 函數組件的轉發: React.forwardRef()3. 對普通值進行記憶, 類似于一個class的實例屬性4. 結合useEffect,只在更新時觸發FAQ 1. Dom操作: useRef() // 1. Dom操作: useRef()let app doc…

一些指令工具

一、adb shell adb shell下一些常用命令行工具&#xff1a; pm&#xff1a;PackageManager&#xff0c;包管理器&#xff0c;用于管理應用程序的安裝、卸載、查詢和更多相關操作。 pm install …// pm uninstall …// pm list packages//設備上已安裝的應用程序 pm dump …//獲…

C運行時錯誤——error realloc(): invalid next size

在LeetCode做題時遇到一個運行時錯誤&#xff0c;將引起問題的原因記錄一下備忘&#xff1a; 我們在malloc或calloc等API分配內存時&#xff0c;libc庫除了分配給我們在參數中設定大小的內存&#xff08;可能會有內存對齊&#xff0c;實際分配的比參數設定的要多&#xff09;&…

填充柄功能

單元格右下角十字符號 順序式填充 輸入1,2&#xff0c;直接拉取即可實現順序1到10. 復制式填充 CtrlD或者拉取&#xff0c;選擇右下角復制單元格。 規律式填充 輸入星期一&#xff0c;星期二&#xff0c;下拉一直可以到星期日 自定義填充 選擇文件-》選項-》自定義序列 輸…

【python辦公自動化】PysimpleGUI中的popup彈窗中的按鈕設置居中

PysimpleGUI中的popup彈窗中的按鈕設置居中 背景問題解決背景 默認的popup彈窗中的OK按鈕是在最下面偏左側一些,有時需要將按鈕放置居中 問題解決 首先找到pysimplegui源代碼文件中popup的部分 然后定位到19388行,源文件內容如下 關于popup彈窗OK按鈕的設置,將pad屬性…

STM32——SPI外設總線

一、SPI外設簡介 STM32內部集成了硬件SPI收發電路&#xff0c;可以由硬件自動執行時鐘生成、數據收發等功能&#xff0c;減輕CPU的負擔【硬件電路自動生成時序】 可配置8位/16位數據幀、高位先行/低位先行 時鐘頻率&#xff1a; fPCLK / (2, 4, 8, 16, 32, 64, 128, 256)【SP…

面試之快速學習STL- vector

1. vector底層實現機制刨析&#xff1a; 簡述&#xff1a;使用三個迭代器表示的&#xff1a; &#xfffc; 這也就解釋了&#xff0c;為什么 vector 容器在進行擴容后&#xff0c;與其相關的指針、引用以及迭代器可能會失效的原因。 insert 整體向后移 erase 整體向前移…

關于uniapp微信小程序scroll-view組件使用show-scrollbar隱藏不了滾動條

這里關于使用 scroll-view組件 時候有滾動條 想要隱藏滾動條但是使用show-scrollbar沒有效果 這時候又使用類名隱藏滾動條 使用id隱藏滾動條都不行 解決方法&#xff1a;在使用 scroll-view組件 的頁面或者app 頁面加上以下代碼就可以了 ::-webkit-scrollbar {displa…

53.Linux day03 文件查看命令,vi/vim常用命令

今天進行了新的學習。 目錄 1.cat a.查看單個文件的內容&#xff1a; b.查看多個文件的內容&#xff1a; c.將多個文件的內容連接并輸出到一個新文件&#xff1a; d.顯示帶有行號的文件內容&#xff1a; 2.more 3.less 4.head 5.tail 6.命令模式 7.插入模式 8.圖…

BBS項目day04 文章詳情頁、點贊點菜、評論功能

一、路由 from django.contrib import admin from django.urls import path, re_path from app01 import views from django.views.static import serve from django.conf import settingsurlpatterns [path(admin/, admin.site.urls),# 注冊path(register/, views.register)…

【3Ds Max】布料命令的簡單使用

簡介 在3ds Max中&#xff0c;"布料"&#xff08;Cloth&#xff09;是一種模擬技術&#xff0c;用于模擬物體的布料、織物或軟體的行為&#xff0c;例如衣物、帆布等。通過應用布料模擬&#xff0c;您可以模擬出物體在重力、碰撞和其他外力作用下的變形和動態效果。…

蘋果審核:傳完包,郵箱收到 ITMS-90078: Missing Push Notification Entitlement

郵件原文&#xff1a; We identified one or more issues with a recent delivery for your app, "***" 1.0. Your delivery was successful, but you may wish to correct the following issues in your next delivery: ITMS-90078: Missing Push Notification En…

Java尋找數組的中心下標

目錄 1.題目描述 2.題解 分析 具體實現 1.題目描述 給你一個整數數組 nums &#xff0c;請計算數組的 中心下標 。 數組 中心下標 是數組的一個下標&#xff0c;其左側所有元素相加的和等于右側所有元素相加的和。 如果中心下標位于數組最左端&#xff0c;那么左側數之和…

【C++ 記憶站】引用

文章目錄 一、引用概念二、引用特性1、引用在定義時必須初始化2、一個變量可以有多個引用3、引用一旦引用一個實體&#xff0c;再不能引用其他實體 三、常引用四、使用場景1、做參數1、輸出型參數2、大對象傳參 2、做返回值1、傳值返回2、傳引用返回 五、傳值、傳引用效率比較六…

label引用圖片出現??

參考latex 引用圖片“\ref figure”_latex \ref加上前綴fig_Junruiqwertyuiop的博客-CSDN博客 label需要放在caption后面&#xff0c;如 \caption{Overview of BERT.} \label{BERT} 猜測&#xff0c;label可能會根據圖表或者公式的caption與圖表或公式綁定并編號&#xff0…

【MT32F006】MT32F006之CS1237采集秤傳感器

本文最后修改時間&#xff1a;2023年06月07日 一、本節簡介 本文介紹如何使用MT32F006連接CS1237芯片采集秤傳感器。 二、實驗平臺 庫版本&#xff1a;V1.0.0 編譯軟件&#xff1a;MDK5.37 硬件平臺&#xff1a;MT32F006開發板&#xff08;主芯片MT32F006&#xff09; 仿真…

Chrome命令行開關

Electron 支持的命令行開關 –client-certificatepath 設置客戶端的證書文件 path . –ignore-connections-limitdomains 忽略用 , 分隔的 domains 列表的連接限制. –disable-http-cache 禁止請求 HTTP 時使用磁盤緩存. –remote-debugging-portport 在指定的 端口 通…

ORACLE中判斷表是否存在再刪除表避免報錯與MySql和SqlServer的不同

不同數據庫中drop a table if it exists的不同&#xff1a; In MySQL it is pretty easy to drop a table if it exists already. In Oracle and Microsoft’s SQL Server it is a little more complicated. Today I want to present you the solutions for these two DBMS’.…

常見的CRM系統報價

一個CRM系統大概多少錢&#xff1f;CRM系統的價格因為不同的廠商、功能、部署方式、用戶數等因素而有很大的差異&#xff0c;沒有一個固定的標準。但是&#xff0c;我們可以根據一些常見的CRM軟件的報價&#xff0c;對CRM價格有一個大致的了解。 一、CRM的部署方式 CRM系統的…

【RocketMQ】快速入門

文章目錄 消費模式同步消息異步消息單向消息延遲消息批量消息順序消息事務消息Tag標簽和Key鍵Tag的使用Key的使用 首先引入rocketmq的依賴 <dependency><groupId>org.apache.rocketmq</groupId><artifactId>rocketmq-client</artifactId><ve…