日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > 数据库 >内容正文

数据库

Redis 主从复制

發(fā)布時(shí)間:2024/9/30 数据库 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Redis 主从复制 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Redis 主從復(fù)制

?

概念

主從復(fù)制,是指將一臺(tái)Redis服務(wù)器的數(shù)據(jù),復(fù)制到其他的Redis服務(wù)器。前者稱為主節(jié)點(diǎn)(master),后者稱為從節(jié)點(diǎn)(slave); 數(shù)據(jù)的復(fù)制是單向的,只能由主節(jié)點(diǎn)到從節(jié)點(diǎn)
?
默認(rèn)情況下,每臺(tái)Redis服務(wù)器都是主節(jié)點(diǎn);且一個(gè)主節(jié)點(diǎn)可以有多個(gè)從節(jié)點(diǎn)(或沒(méi)有從節(jié)點(diǎn)),但一個(gè)從節(jié)點(diǎn)只能有一個(gè)主節(jié)點(diǎn)。
?

主從復(fù)制的作用

主從復(fù)制的作用主要包括:
?

  • 數(shù)據(jù)冗余:主從復(fù)制實(shí)現(xiàn)了數(shù)據(jù)的熱備份,是持久化之外的一種數(shù)據(jù)冗余方式。
  • 故障恢復(fù):當(dāng)主節(jié)點(diǎn)出現(xiàn)問(wèn)題時(shí),可以由從節(jié)點(diǎn)提供服務(wù),實(shí)現(xiàn)快速的故障恢復(fù);實(shí)際上是一種服務(wù)的冗余。
  • 負(fù)載均衡:在主從復(fù)制的基礎(chǔ)上,配合讀寫(xiě)分離,可以由主節(jié)點(diǎn)提供寫(xiě)服務(wù),由從節(jié)點(diǎn)提供讀服務(wù)(即寫(xiě)Redis數(shù)據(jù)時(shí)應(yīng)用連接主節(jié)點(diǎn),讀Redis數(shù)據(jù)時(shí)應(yīng)用連接從節(jié)點(diǎn)),分擔(dān)服務(wù)器負(fù)載;尤其是在寫(xiě)少讀多的場(chǎng)景下,通過(guò)多個(gè)從節(jié)點(diǎn)分擔(dān)讀負(fù)載,可以大大提高Redis服務(wù)器的并發(fā)量。
  • 高可用基石:除了上述作用以外,主從復(fù)制還是哨兵和集群能夠?qū)嵤┑幕A(chǔ),因此說(shuō)主從復(fù)制是Redis高可用的基礎(chǔ)。
    ?
    一般來(lái)說(shuō), 要將 Redis 運(yùn)用于工程中, 只使用一臺(tái) Redis 是萬(wàn)萬(wàn)不能的(宕機(jī))
  • 主從結(jié)構(gòu)下, 單個(gè) Redis 服務(wù)器會(huì)發(fā)生單點(diǎn)故障, 并且一臺(tái)服務(wù)器需要處理所有的請(qǐng)求負(fù)載, 壓力較大
  • 從容量上看, 單個(gè) Redis 服務(wù)器內(nèi)存容量有限, 就算一臺(tái)Redsi 服務(wù)器的內(nèi)存容量為 256G , 也不能將所有的內(nèi)存用作 Redis 存儲(chǔ)內(nèi)存, 一般來(lái)說(shuō), 單臺(tái)Redis最大使用內(nèi)存不因該超過(guò)20G
    ?
    電商網(wǎng)站上的2商品, 一般都是一次上傳, 無(wú)數(shù)次瀏覽, 專業(yè)術(shù)語(yǔ) 多讀少寫(xiě)
    ?

    ?
    主從復(fù)制, 讀寫(xiě)分離, 80% 的情況下都是在進(jìn)行讀操作, 減緩服務(wù)器壓力, 架構(gòu)中經(jīng)常使用, 一主二從
    ?
    ?
    ?

環(huán)境配置

只配置從庫(kù), 不用配置主庫(kù)
查看一些信息

127.0.0.1:6379> info replication # 查看當(dāng)前庫(kù)信息 # Replication role:master # 角色 master connected_slaves:0 # 沒(méi)有從機(jī) master_repl_offset:0 repl_backlog_active:0 repl_backlog_size:1048576 repl_backlog_first_byte_offset:0 repl_backlog_histlen:0 127.0.0.1:6379>

?
?
復(fù)制三個(gè)配置文件, 然后修改對(duì)應(yīng)的信息

  • 端口
  • pid名字
  • 日志名字
  • dump.rdb名字
    ?
    redis-server redis.windows.conf
    Linux類同
    ?

redis-cli -p 6379
redis-cli -p 6380
redis-cli -p 6381
?

一主二從

默認(rèn)情況下, 每臺(tái)redis 服務(wù)器都是主節(jié)點(diǎn); 我們一般情況下只用配置從機(jī)就可
?

127.0.0.1:6380> SLAVEOF 127.0.0.1 6379 # 端口 6380 認(rèn)準(zhǔn) 127.0.0.1 6379 為主 OK 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:7 master_sync_in_progress:0 slave_repl_offset:15 slave_priority:100 slave_read_only:1 connected_slaves:0 master_repl_offset:0 repl_backlog_active:0 repl_backlog_size:1048576 repl_backlog_first_byte_offset:0 repl_backlog_histlen:0 127.0.0.1:6380>

?
主機(jī)測(cè)試

127.0.0.1:6379> info replication # Replication role:master connected_slaves:2 slave0:ip=127.0.0.1,port=6380,state=online,offset=169,lag=0 slave1:ip=127.0.0.1,port=6381,state=online,offset=169,lag=0 master_repl_offset:169 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:2 repl_backlog_histlen:168 127.0.0.1:6379>

?
?
?
?
命令行的配置僅僅是暫時(shí)的, 需要永久的話可以在redis配置文件中進(jìn)行修改
?

細(xì)節(jié)

主機(jī)可以寫(xiě), 從機(jī)不能寫(xiě), 從機(jī)只能讀
?
測(cè)試: 主機(jī)斷開(kāi)連接, 從機(jī)依舊連接到主機(jī), 但是沒(méi)有寫(xiě)操作, 這時(shí)候主機(jī)如果回來(lái)了, 從機(jī)依舊可以獲取到主機(jī)所寫(xiě)的信息
?
?
如果使用命令行, 來(lái)配置的主從, 這個(gè)時(shí)候如果重啟了, 那么從機(jī)就會(huì)變成主機(jī), 只要變成從機(jī), 立馬就會(huì)從主機(jī)中獲取值
?

復(fù)制原理

全量同步

Redis全量復(fù)制一般發(fā)生在Slave初始化階段,這時(shí)Slave需要將Master上的所有數(shù)據(jù)都復(fù)制一份。具體步驟如下:

  • 從服務(wù)器連接主服務(wù)器,發(fā)送SYNC命令;
  • 主服務(wù)器接收到SYNC命名后,開(kāi)始執(zhí)行BGSAVE命令生成RDB文件并使用緩沖區(qū)記錄此后執(zhí)行的所有寫(xiě)命令;
  • 主服務(wù)器BGSAVE執(zhí)行完后,向所有從服務(wù)器發(fā)送快照文件,并在發(fā)送期間繼續(xù)記錄被執(zhí)行的寫(xiě)命令;
  • 從服務(wù)器收到快照文件后丟棄所有舊數(shù)據(jù),載入收到的快照;
  • 主服務(wù)器快照發(fā)送完畢后開(kāi)始向從服務(wù)器發(fā)送緩沖區(qū)中的寫(xiě)命令;
  • 從服務(wù)器完成對(duì)快照的載入,開(kāi)始接收命令請(qǐng)求,并執(zhí)行來(lái)自主服務(wù)器緩沖區(qū)的寫(xiě)命令;
    ?
    而slave服務(wù)在接受到數(shù)據(jù)文件后, 將其存到內(nèi)存中
    ?

    ?
    完成上面幾個(gè)步驟后就完成了從服務(wù)器數(shù)據(jù)初始化的所有操作,從服務(wù)器此時(shí)可以接收來(lái)自用戶的讀請(qǐng)求.
    ?

增量同步

Redis增量復(fù)制是指Slave初始化后開(kāi)始正常工作時(shí)主服務(wù)器發(fā)生的寫(xiě)操作同步到從服務(wù)器的過(guò)程.
增量復(fù)制的過(guò)程主要是主服務(wù)器每執(zhí)行一個(gè)寫(xiě)命令就會(huì)向從服務(wù)器發(fā)送相同的寫(xiě)命令,從服務(wù)器接收并執(zhí)行收到的寫(xiě)命令.
?
Master繼續(xù)將新的所有收集到的修改命名依次傳給slave, 完成同步
?
?

Redis主從同步策略

主從剛剛連接的時(shí)候,進(jìn)行全量同步;全同步結(jié)束后,進(jìn)行增量同步。當(dāng)然,如果有需要,slave 在任何時(shí)候都可以發(fā)起全量同步。redis 策略是,無(wú)論如何,首先會(huì)嘗試進(jìn)行增量同步,如不成功,要求從機(jī)進(jìn)行全量同步.
?
?

層層鏈路

上一個(gè)master 連接下一個(gè)slave
?

?
此時(shí)也可以完成主從復(fù)制, 但是80端口的依舊僅僅可以讀(不能寫(xiě))
?
?

如果沒(méi)有主

這個(gè)時(shí)候 80 能不能變成老大
?
手動(dòng)配置

SLAVEOF no one # 使自己變成主機(jī)

?
此時(shí)80就為老大
?

文章已上傳gitee https://gitee.com/codingce/hexo-blog
項(xiàng)目地址: https://github.com/xzMhehe/codingce-java

總結(jié)

以上是生活随笔為你收集整理的Redis 主从复制的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。