欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Redis主從復(fù)制的實(shí)現(xiàn)示例

 更新時(shí)間:2024年11月29日 09:30:52   作者:ID_14 HuFei  
Redis主從復(fù)制實(shí)現(xiàn)多機(jī)備份,本文就來(lái)介紹一下Redis主從復(fù)制的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

Redis 主從復(fù)制

主從復(fù)制是高可用Redis的基礎(chǔ),哨兵和集群都是在主從復(fù)制基礎(chǔ)上實(shí)現(xiàn)高可用的。主從復(fù)制主要實(shí)現(xiàn)了數(shù)據(jù)的多機(jī)備份,以及對(duì)于讀操作的負(fù)載均衡和簡(jiǎn)單的故障恢復(fù)。

缺陷:故障恢復(fù)無(wú)法自動(dòng)化;寫(xiě)操作無(wú)法負(fù)載均衡;存儲(chǔ)能力受到單機(jī)的限制。

首次同步(全量復(fù)制)

  • 發(fā)送SYNC命令
    • 當(dāng)從節(jié)點(diǎn)(Slave)決定成為某個(gè)主節(jié)點(diǎn)(Master)的從節(jié)點(diǎn)時(shí),它會(huì)向主節(jié)點(diǎn)發(fā)送一個(gè) SYNC 命令。
  • BGSAVE生成RDB快照
    • 主節(jié)點(diǎn)接收到 SYNC 命令后,會(huì)執(zhí)行 BGSAVE 命令。BGSAVE 命令會(huì)在后臺(tái)生成一個(gè) RDB 快照文件,同時(shí)主節(jié)點(diǎn)繼續(xù)處理其他命令。
    • 在生成 RDB 快照的過(guò)程中,主節(jié)點(diǎn)會(huì)將所有新的寫(xiě)操作記錄到一個(gè)緩沖區(qū)中。
  • 快照文件傳輸
    • 一旦 RDB 快照文件生成完畢,主節(jié)點(diǎn)會(huì)將這個(gè)快照文件發(fā)送給從節(jié)點(diǎn)。
    • 在發(fā)送快照文件的過(guò)程中,主節(jié)點(diǎn)會(huì)繼續(xù)接收并處理新的命令,這些命令會(huì)被記錄到緩沖區(qū)中。
  • 加載快照文件
    • 從節(jié)點(diǎn)接收到 RDB 快照文件后,會(huì)加載這個(gè)文件,將其內(nèi)容應(yīng)用到自己的數(shù)據(jù)集中。
  • 追趕復(fù)制
    • 加載完快照文件后,從節(jié)點(diǎn)會(huì)向主節(jié)點(diǎn)發(fā)送一個(gè) PSYNC 命令,請(qǐng)求獲取主節(jié)點(diǎn)緩沖區(qū)中未發(fā)送的寫(xiě)操作。
    • 主節(jié)點(diǎn)收到 PSYNC 命令后,會(huì)將緩沖區(qū)中的寫(xiě)操作發(fā)送給從節(jié)點(diǎn)。

增量復(fù)制

  • 命令傳播
    • 在完成首次同步后,從節(jié)點(diǎn)會(huì)進(jìn)入命令傳播階段。在這個(gè)階段,主節(jié)點(diǎn)會(huì)將其接收到的所有寫(xiě)操作(例如,SET、DEL等)實(shí)時(shí)地發(fā)送給從節(jié)點(diǎn)。
    • 從節(jié)點(diǎn)會(huì)執(zhí)行這些寫(xiě)操作,以保持與主節(jié)點(diǎn)的數(shù)據(jù)一致性。
  • 心跳檢測(cè)
    • 在命令傳播階段,主從節(jié)點(diǎn)之間會(huì)定期發(fā)送心跳包(通常是PING和PONG命令)來(lái)檢測(cè)連接狀態(tài)。
    • 如果從節(jié)點(diǎn)在一定時(shí)間內(nèi)沒(méi)有收到主節(jié)點(diǎn)的心跳包或命令,它會(huì)認(rèn)為連接已經(jīng)斷開(kāi),并嘗試重新與主節(jié)點(diǎn)建立連接。
  • 重新同步
    • 如果從節(jié)點(diǎn)與主節(jié)點(diǎn)之間的連接斷開(kāi),或者從節(jié)點(diǎn)的數(shù)據(jù)與主節(jié)點(diǎn)不一致(例如,由于網(wǎng)絡(luò)分區(qū)或磁盤(pán)故障),從節(jié)點(diǎn)會(huì)嘗試重新與主節(jié)點(diǎn)進(jìn)行同步。
    • 在重新同步的過(guò)程中,從節(jié)點(diǎn)會(huì)發(fā)送一個(gè) PSYNC 命令給主節(jié)點(diǎn),請(qǐng)求獲取最新的數(shù)據(jù)。
    • 主節(jié)點(diǎn)會(huì)根據(jù)從節(jié)點(diǎn)提供的復(fù)制偏移量(replication offset)來(lái)決定是進(jìn)行全量復(fù)制還是部分復(fù)制(增量復(fù)制)。

注意

  • 復(fù)制偏移量
    • 主從節(jié)點(diǎn)在復(fù)制過(guò)程中會(huì)維護(hù)一個(gè)復(fù)制偏移量,用于記錄已經(jīng)復(fù)制的數(shù)據(jù)位置。
    • 復(fù)制偏移量有助于從節(jié)點(diǎn)在重新同步時(shí)確定需要從主節(jié)點(diǎn)獲取哪些數(shù)據(jù)。
  • 從節(jié)點(diǎn)只讀
    • 默認(rèn)情況下,從節(jié)點(diǎn)是只讀的。這意味著你不能在從節(jié)點(diǎn)上執(zhí)行寫(xiě)操作(例如,SET命令)。
    • 如果需要在從節(jié)點(diǎn)上執(zhí)行寫(xiě)操作,可以將其配置為可寫(xiě)模式(但通常不推薦這樣做,因?yàn)檫@可能會(huì)破壞數(shù)據(jù)一致性)。
  • 延遲問(wèn)題
    • 由于網(wǎng)絡(luò)延遲和命令傳播時(shí)間的影響,從節(jié)點(diǎn)的數(shù)據(jù)可能會(huì)比主節(jié)點(diǎn)稍微落后一些。
    • 在某些情況下(例如,寫(xiě)操作非常頻繁時(shí)),這種延遲可能會(huì)變得比較明顯。
  • 故障切換
    • 當(dāng)主節(jié)點(diǎn)出現(xiàn)故障時(shí),需要手動(dòng)或自動(dòng)地將一個(gè)從節(jié)點(diǎn)提升為主節(jié)點(diǎn)(例如,使用哨兵或集群機(jī)制)。
    • 在提升從節(jié)點(diǎn)為主節(jié)點(diǎn)之前,需要確保該從節(jié)點(diǎn)的數(shù)據(jù)與主節(jié)點(diǎn)一致(或者盡可能一致)。

搭建Redis主從復(fù)制

環(huán)境準(zhǔn)備:

  • Master節(jié)點(diǎn):192.168.80.10
  • Slave1節(jié)點(diǎn):192.168.80.11
  • Slave2節(jié)點(diǎn):192.168.80.12

安裝Redis

環(huán)境準(zhǔn)備:

systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i 's/enforcing/disabled/' /etc/selinux/config

修改內(nèi)核參數(shù):

vim /etc/sysctl.conf
# 添加以下內(nèi)容
vm.overcommit_memory = 1
net.core.somaxconn = 2048
sysctl -p

安裝Redis:

yum install -y gcc gcc-c++ make
tar zxvf /opt/redis-7.0.9.tar.gz -C /opt/
cd /opt/redis-7.0.9
make
make PREFIX=/usr/local/redis install

創(chuàng)建Redis工作目錄并設(shè)置用戶(hù):

mkdir /usr/local/redis/{conf,log,data}
cp /opt/redis-7.0.9/redis.conf /usr/local/redis/conf/
useradd -M -s /sbin/nologin redis
chown -R redis.redis /usr/local/redis/

設(shè)置環(huán)境變量:

vim /etc/profile
# 添加以下內(nèi)容
PATH=$PATH:/usr/local/redis/bin
source /etc/profile

定義systemd服務(wù)管理腳本:

vim /usr/lib/systemd/system/redis-server.service
# 添加以下內(nèi)容
[Unit]
Description=Redis Server
After=network.target

[Service]
User=redis
Group=redis
Type=forking
TimeoutSec=0
PIDFile=/usr/local/redis/log/redis_6379.pid
ExecStart=/usr/local/redis/bin/redis-server /usr/local/redis/conf/redis.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true

[Install]
WantedBy=multi-user.target

修改Redis配置文件

Master節(jié)點(diǎn)配置:

vim /usr/local/redis/conf/redis.conf
# 修改以下內(nèi)容
bind 0.0.0.0
protected-mode no
port 6379
daemonize yes
pidfile /usr/local/redis/log/redis_6379.pid
logfile "/usr/local/redis/log/redis_6379.log"
dir /usr/local/redis/data
appendonly yes
# requirepass abc123 # 可選,設(shè)置redis密碼

systemctl restart redis-server.service

Slave節(jié)點(diǎn)配置:

vim /usr/local/redis/conf/redis.conf
# 修改以下內(nèi)容
bind 0.0.0.0
protected-mode no
port 6379
daemonize yes
pidfile /usr/local/redis/log/redis_6379.pid
logfile "/usr/local/redis/log/redis_6379.log"
dir /usr/local/redis/data
appendonly yes
replicaof 192.168.80.10 6379
# masterauth abc123 # 可選,設(shè)置Master節(jié)點(diǎn)的密碼,僅在Master節(jié)點(diǎn)設(shè)置了requirepass

systemctl restart redis-server.service

驗(yàn)證主從效果

在Master節(jié)點(diǎn)上看日志:

tail -f /usr/local/redis/log/redis_6379.log 
# 應(yīng)顯示類(lèi)似以下內(nèi)容
Replica 192.168.80.11:6379 asks for synchronization
Replica 192.168.80.12:6379 asks for synchronization
Synchronization with replica 192.168.80.11:6379 succeeded
Synchronization with replica 192.168.80.12:6379 succeeded

在Master節(jié)點(diǎn)上驗(yàn)證從節(jié)點(diǎn):

redis-cli info replication
# 應(yīng)顯示類(lèi)似以下內(nèi)容
# Replication
role:master
connected_slaves:2
slave0:ip=192.168.80.11,port=6379,state=online,offset=1246,lag=0
slave1:ip=192.168.80.12,port=6379,state=online,offset=1246,lag=1

到此這篇關(guān)于Redis主從復(fù)制的實(shí)現(xiàn)示例的文章就介紹到這了,更多相關(guān)Redis主從復(fù)制內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Redis配合SSDB實(shí)現(xiàn)持久化存儲(chǔ)代碼示例

    Redis配合SSDB實(shí)現(xiàn)持久化存儲(chǔ)代碼示例

    這篇文章主要介紹了Redis配合SSDB實(shí)現(xiàn)持久化存儲(chǔ)代碼示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-11-11
  • Redis延遲隊(duì)列的實(shí)現(xiàn)示例

    Redis延遲隊(duì)列的實(shí)現(xiàn)示例

    Redis 延遲隊(duì)列是一種使用 Redis 實(shí)現(xiàn)的消息隊(duì)列,本文主要介紹了Redis延遲隊(duì)列的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2025-01-01
  • redis查詢(xún)keys報(bào)錯(cuò)的實(shí)現(xiàn)

    redis查詢(xún)keys報(bào)錯(cuò)的實(shí)現(xiàn)

    在Redis中使用KEYS命令來(lái)查詢(xún)所有符合特定模式的鍵名是一個(gè)常見(jiàn)需求,本文主要介紹了redis查詢(xún)keys報(bào)錯(cuò)的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下
    2025-04-04
  • Redis中有序集合的內(nèi)部實(shí)現(xiàn)方式的詳細(xì)介紹

    Redis中有序集合的內(nèi)部實(shí)現(xiàn)方式的詳細(xì)介紹

    本文主要介紹了Redis中有序集合的內(nèi)部實(shí)現(xiàn)方式的詳細(xì)介紹,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • 通過(guò)實(shí)例解析布隆過(guò)濾器工作原理及實(shí)例

    通過(guò)實(shí)例解析布隆過(guò)濾器工作原理及實(shí)例

    這篇文章主要介紹了通過(guò)實(shí)例解析布隆過(guò)濾器工作原理及實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-11-11
  • 利用Redis實(shí)現(xiàn)SQL伸縮的方法

    利用Redis實(shí)現(xiàn)SQL伸縮的方法

    本文主要介紹了如何通過(guò)鎖和時(shí)間序列等方面來(lái)提升傳統(tǒng)數(shù)據(jù)庫(kù)的性能等方法,利用Redis實(shí)現(xiàn)SQL伸縮,供有需要的朋友們參考。
    2015-09-09
  • Redis消息隊(duì)列、阻塞隊(duì)列、延時(shí)隊(duì)列的實(shí)現(xiàn)

    Redis消息隊(duì)列、阻塞隊(duì)列、延時(shí)隊(duì)列的實(shí)現(xiàn)

    Redis是一種常用的內(nèi)存數(shù)據(jù)庫(kù),它提供了豐富的功能,通常用于數(shù)據(jù)緩存和分布式隊(duì)列,本文主要介紹了Redis消息隊(duì)列、阻塞隊(duì)列、延時(shí)隊(duì)列的實(shí)現(xiàn),感興趣的可以了解一下
    2023-11-11
  • redis集群搭建_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    redis集群搭建_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    這篇文章主要介紹了redis集群搭建,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-08-08
  • redis底層數(shù)據(jù)結(jié)構(gòu)之skiplist實(shí)現(xiàn)示例

    redis底層數(shù)據(jù)結(jié)構(gòu)之skiplist實(shí)現(xiàn)示例

    這篇文章主要為大家介紹了redis底層數(shù)據(jù)結(jié)構(gòu)之skiplist實(shí)現(xiàn)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-12-12
  • Redis?的內(nèi)存淘汰策略和過(guò)期刪除策略的區(qū)別

    Redis?的內(nèi)存淘汰策略和過(guò)期刪除策略的區(qū)別

    這篇文章主要介紹了Redis?的內(nèi)存淘汰策略和過(guò)期刪除策略的區(qū)別,Redis?是可以對(duì)?key?設(shè)置過(guò)期時(shí)間的,因此需要有相應(yīng)的機(jī)制將已過(guò)期的鍵值對(duì)刪除,而做這個(gè)工作的就是過(guò)期鍵值刪除策略
    2022-07-07

最新評(píng)論