溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Redis主從復(fù)制如何實現(xiàn)

發(fā)布時間:2021-12-07 14:41:00 來源:億速云 閱讀:151 作者:iii 欄目:大數(shù)據(jù)

這篇文章主要講解了“Redis主從復(fù)制如何實現(xiàn)”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“Redis主從復(fù)制如何實現(xiàn)”吧!

主從復(fù)制

主從復(fù)制可以在一定程度上擴展redis性能,redis的主從復(fù)制和關(guān)系型數(shù)據(jù)庫的主從復(fù)制類似,從機能夠精確的復(fù)制主機上的內(nèi)容。實現(xiàn)了主從復(fù)制之后,一方面能夠?qū)崿F(xiàn)數(shù)據(jù)的讀寫分離,降低master的壓力,另一方面也能實現(xiàn)數(shù)據(jù)的備份。

配置方式

假設(shè)我有三個redis實例,地址分別如下:

192.168.248.128:6379  
192.168.248.128:6380  
192.168.248.128:6381

即同一臺服務(wù)器上三個實例,配置方式如下:

1.將redis.conf文件更名為redis6379.conf,方便我們區(qū)分,然后把redis6379.conf再復(fù)制兩份,分別為redis6380.conf和redis6381.conf。如下:

Redis主從復(fù)制如何實現(xiàn)  

2.打開redis6379.conf,將如下配置均加上6379,(默認(rèn)是6379的不用修改),如下:

port 6379
pidfile /var/run/redis_6379.pid
logfile "6379.log"
dbfilename dump6379.rdb
appendfilename "appendonly6379.aof"

3.同理,分別打開redis6380.conf和redis6381.conf兩個配置文件,將第二步涉及到6379的分別改為6380和6381。
4.輸入如下命令,啟動三個redis實例:

[root@localhost redis-4.0.8]# redis-server redis6379.conf
[root@localhost redis-4.0.8]# redis-server redis6380.conf
[root@localhost redis-4.0.8]# redis-server redis6381.conf

5.輸入如下命令,分別進入三個實例的控制臺:

[root@localhost redis-4.0.8]# redis-cli -p 6379
[root@localhost redis-4.0.8]# redis-cli -p 6380
[root@localhost redis-4.0.8]# redis-cli -p 6381

此時我就成功配置了三個redis實例了。

6.假設(shè)在這三個實例中,6379是主機,即master,6380和6381是從機,即slave,那么如何配置這種實例關(guān)系呢,很簡單,分別在6380和6381上執(zhí)行如下命令:

127.0.0.1:6381> SLAVEOF 127.0.0.1 6379
OK

這一步也可以通過在兩個從機的redis.conf中添加如下配置來解決:

slaveof 127.0.0.1 6379

OK,主從關(guān)系搭建好后,我們可以通過如下命令可以查看每個實例當(dāng)前的狀態(tài),如下:

127.0.0.1:6379> INFO replication
# Replication
role:master
connected_slaves:2
slave0:ip=127.0.0.1,port=6380,state=online,offset=56,lag=1
slave1:ip=127.0.0.1,port=6381,state=online,offset=56,lag=0
master_replid:26ca818360d6510b717e471f3f0a6f5985b6225d
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:56
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:56

我們可以看到6379是一個主機,上面掛了兩個從機,兩個從機的地址、端口等信息都展現(xiàn)出來了。如果我們在6380上執(zhí)行INFO replication,顯示信息如下:

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:6
master_sync_in_progress:0
slave_repl_offset:630
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:26ca818360d6510b717e471f3f0a6f5985b6225d
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:630
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:630

我們可以看到6380是一個從機,從機的信息以及它的主機的信息都展示出來了。

7.此時,我們在主機中存儲一條數(shù)據(jù),在從機中就可以get到這條數(shù)據(jù)了。

主從復(fù)制注意點

1.如果主機已經(jīng)運行了一段時間了,并且了已經(jīng)存儲了一些數(shù)據(jù)了,此時從機連上來,那么從機會將主機上所有的數(shù)據(jù)進行備份,而不是從連接的那個時間點開始備份。
2.配置了主從復(fù)制之后,主機上可讀可寫,但是從機只能讀取不能寫入(可以通過修改redis.conf中 slave-read-only 的值讓從機也可以執(zhí)行寫操作)。
3.在整個主從結(jié)構(gòu)運行過程中,如果主機不幸掛掉,重啟之后,他依然是主機,主從復(fù)制操作也能夠繼續(xù)進行。

復(fù)制原理

每一個master都有一個replication ID,這是一個較大的偽隨機字符串,標(biāo)記了一個給定的數(shù)據(jù)集。每個master也持有一個偏移量,master將自己產(chǎn)生的復(fù)制流發(fā)送給slave時,發(fā)送多少個字節(jié)的數(shù)據(jù),自身的偏移量就會增加多少,目的是當(dāng)有新的操作修改自己的數(shù)據(jù)集時,它可以以此更新slave的狀態(tài)。復(fù)制偏移量即使在沒有一個slave連接到master時,也會自增,所以基本上每一對給定的Replication ID, offset都會標(biāo)識一個master數(shù)據(jù)集的確切版本。當(dāng)slave連接到master時,它們使用PSYNC命令來發(fā)送它們記錄的舊的master replication ID和它們至今為止處理的偏移量。通過這種方式,master能夠僅發(fā)送slave所需的增量部分。但是如果master的緩沖區(qū)中沒有足夠的命令積壓緩沖記錄,或者如果slave引用了不再知道的歷史記錄(replication ID),則會轉(zhuǎn)而進行一個全量重同步:在這種情況下,slave會得到一個完整的數(shù)據(jù)集副本,從頭開始(參考redis官網(wǎng))。

簡單來說,就是以下幾個步驟:

    1.slave啟動成功連接到master后會發(fā)送一個sync命令。  
    2.Master接到命令啟動后臺的存盤進程,同時收集所有接收到的用于修改數(shù)據(jù)集命令。  
    3.在后臺進程執(zhí)行完畢之后,master將傳送整個數(shù)據(jù)文件到slave,以完成一次完全同步。  
    4.全量復(fù)制:而slave服務(wù)在接收到數(shù)據(jù)庫文件數(shù)據(jù)后,將其存盤并加載到內(nèi)存中。  
    5.增量復(fù)制:Master繼續(xù)將新的所有收集到的修改命令依次傳給slave,完成同步。  
    6.但是只要是重新連接master,一次完全同步(全量復(fù)制)將被自動執(zhí)行。

感謝各位的閱讀,以上就是“Redis主從復(fù)制如何實現(xiàn)”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對Redis主從復(fù)制如何實現(xiàn)這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關(guān)知識點的文章,歡迎關(guān)注!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI