Redis主從配置和底層實現原理解析 實戰記錄

2022-09-22 02:00:11 字數 2678 閱讀 2970

我們使用redis的時候往往都是主從模式或者集群架構,不會使用單台redis服務。

我們使用master節點寫輸入,然後將資料同步到sl**e節點,從節點可以提供讀取或者備份的功能,分擔master節點壓力。

redis主從架構搭建,配置從節點步驟

1、 複製乙份redis.conf檔案為redis-6380.conf

cp ./r程式設計客棧edis.conf ./conf/redis-6380.conf

2、開啟redis-6380.conf配置檔案,將相關配置修改為如下值:

port 6380

pidfile /var/run/redis_6380.pid # 把pid程序號寫入pidfile配置的檔案

logfile "6380.log"

dir /usr/local/redis‐5.0.3/data/6380 # 指定資料存放heqyonym目錄

# 需要注釋掉bind

# bind 127.0.0.1(bind繫結的是自己機器網絡卡的ip,如果有多塊網絡卡可以配多個ip,代表允許客戶端通過機器的哪些網絡卡ip去訪問,內網一般可以不配置bind,注釋掉即可)

3、在redis-6380.conf中配置主從複製

replicaof 192.168.0.60 6379 # 從本機6379的redis例項複製資料,redis 5.0之前使用sl**eof. 這裡的ip是redis服務ip

replica‐read‐only yes # 配置從節點唯讀

注意:如果的時候發現從節點中始終是空,即沒有同步到主節點的資料,可能是192.168.0.60的設定問題,如果是主從都在一台伺服器上,可以試試改成127.0.0.1.

4、啟動從節點

注意一下命令,我這裡是相對路徑。

./src/redis-server ./conf/redis-6380.conf

然後我們檢視redis服務例項,發現6379和6380都已經啟動了。

5、連線從節點

[root@localhost redis-6.2.3]# ./src/redis-cli -p 6380

127.0.0.1:6380>

檢視是否同步了資料:

127.0.0.1:6380> keys *

1) "test3"

2) "tul2"

3) "tul"

4) "tul3"

5) "test1"

6) "yaolao"

7) "test2"

127.0.0.1:6380>

注意:如果的時候發現從節點中始終是空,即沒有同步到主節點的資料,可能是192.168.0.60的設定問題,如果是主從都在一台伺服器上,可以試試改成127.0.0.1試試。、

6、測試在6379例項上寫資料,6380例項是否能及時同步新修改資料

7、可以自己再配置乙個6381的從節點

至此。,我們的主從配置就完成了。我們可以自己去配置多個從節點。

如果你為master配置了乙個sl**e,不管這個sl**e是否是第一次連線上master,它都會傳送乙個psync命令給master請求複製資料。

master收到psync命令後,會在後台進行資料持久化通過bgs**e生成最新的rdb快照檔案,持久化期間,master會繼續接收客戶端的請求,它會把這些可能修改資料集的請求快取在記憶體中。當持久化進行完畢以後,master會把這份rdb檔案資料集傳送給sl**e,sl**e會把接收到的資料進行持久化生成rdb,然後再載入到記憶體中。然後,master再將之前快取在記憶體中的命令傳送給sl**e。

當master與sl**e之間的連線由於某些原因而斷開時,sl**e能夠自動重連master,如果master收到了多

個sl**e併發連線請求,它只會進行一次持久化,而不是乙個連線一次,然後再把這乙份持久化的資料傳送

給多個併發連線的sl**e。

主從複製(全量複製)流程圖

psync命令是redis底層的c語言實現的。

當master和sl**e斷開重連後,一般都會對整份資料進行複製。但從redis2.8版本開始,redis改用可以支援部分資料複製的命令psync去master同步資料,sl**e與master能夠在網路連線斷開重連後只進行部分資料複製(斷點續傳)。

master會在其記憶體中建立乙個複製資料用的快取佇列,快取最近一段時間的資料,master和它所有的sl**e都維護了複製的資料下標offset和master的程序id,因此,當網路連線斷開後,sl**e會請求master繼續進行未完成的複製,從所記錄的資料下標開始。如果master程序id變化了,或者從節點資料下標offset太舊,已經不在master的快取佇列裡了,那麼www.cppcns.com將會進行一次全量資料的複製。

主從複製(部分複製,斷點續傳)流程圖:

如果sl**e節點掛了之後,只想同步新增的資料(不需要同步全部)。

最新的命令redis會寫到repl backlog buffer(預設大小是1mb)這個緩衝區中。

offset是偏移量,即上次複製產生的偏移量,再一次複製新的資料的時候只需要從這個偏移量後面開始複製即可。注意,這種只適合幾分鐘之內的。

如果從緩衝區沒有找到傳過來的這個偏移量,說明從節點可能掛了非常久的時間,這時候需要做全量複製,而不是斷點續傳了。

如果有很多從節點,為了緩解主從複製風暴(多個從節點同時複製主節點導致主節點壓力過大),可以做如下架構,讓部分從節點與從節點(與主節點同步)同步資料,即配置主從的ip位址可以寫某個從節點的,而不是都寫mast節點的ip.

redis主從配置和哨兵

如果redis需要實現高可用.前提條件就是實現資料的同步 1 拷貝配置shards資料夾 改名為sentinel 2 主從搭建策略 6379主機.6380從機 6381從機 3 狀態資訊檢查 4 主從掛載 5 檢查主從掛載狀態 2.1哨兵的作用 通過哨兵機制,可以實現redis的高可用,如果主節點宕...

Redis主從配置

redis主從配置 進入正題,這篇會將redis以 windows10服務形式提供服務 搭建乙個簡單的主從複製 m 6379 s 6380 6381 redis 我這裡使用的是 redis3.2.100.zip 解壓後如下圖 直接雙擊redis server.exe即啟動乙個 redis 服務例項,...

redis 主從配置

1,修改 etc redis redis.conf 檔案,cd etc redis vim redis.conf bind 192.168.59.128 繫結主機的ip位址 2,重啟redis服務 service redis stop 先停止redis服務 redis server redis.co...