Redis學(xué)習(xí)筆記系列(十)——Redis集群之主從復(fù)制模式

8. Redis集群

Redis單機(jī)部署在測試環(huán)境是可以的,但是如果在生產(chǎn)環(huán)境也是單機(jī)的話,就會(huì)有單點(diǎn)故障,因此需要引入集群,保證redis集群的高可用。Redis集群部署有三種方案:

  • 主從復(fù)制模式
  • 哨兵模式
  • 集群模式

8.1 主從復(fù)制模式

8.1.1 主從復(fù)制結(jié)構(gòu)
Redis主從復(fù)制結(jié)構(gòu)

主從復(fù)制模式中包含一個(gè)主數(shù)據(jù)庫實(shí)例(master)與一個(gè)或多個(gè)從數(shù)據(jù)庫實(shí)例(slave),如上圖??蛻舳丝蓪χ鲾?shù)據(jù)庫進(jìn)行讀寫操作,對從數(shù)據(jù)庫進(jìn)行讀操作,主數(shù)據(jù)庫寫入的數(shù)據(jù)會(huì)實(shí)時(shí)自動(dòng)同步給從數(shù)據(jù)庫。

8.1.2 主從復(fù)制工作機(jī)制

當(dāng)slave啟動(dòng)后,主動(dòng)向master發(fā)送PSYNC命令。master接收到PSYNC命令后在后臺(tái)保存快照(RDB持久化)和緩存保存快照這段時(shí)間的命令,然后將保存的快照文件和緩存的命令發(fā)送給slave。slave接收到快照文件和命令后加載快照文件和緩存的執(zhí)行命令。復(fù)制初始化后,master每次接收到的寫命令都會(huì)同步發(fā)送給slave,保證主從數(shù)據(jù)一致性。

主從復(fù)制工作機(jī)制

8.1.3 搭建過程
  1. 我們在Redis學(xué)習(xí)筆記系列(一)——Redis簡介及安裝一節(jié)中,已經(jīng)介紹過單機(jī)部署的步驟了,現(xiàn)在我們需要再部署兩臺(tái)redis服務(wù)器,其中一臺(tái)redis服務(wù)器做Master節(jié)點(diǎn),另外兩個(gè)節(jié)點(diǎn)作為Slave節(jié)點(diǎn)。每個(gè)節(jié)點(diǎn)的部署方法可參照前面那篇文章。

  2. 修改配置文件。
    修改Master節(jié)點(diǎn)的配置文件redis.conf,允許外部連接,并且開啟密碼驗(yàn)證。

# 是否開啟保護(hù)模式(默認(rèn)開啟)
# 要是配置里沒有指定bind和密碼。
# 開啟該參數(shù)后,redis只會(huì)本地進(jìn)行訪問,拒絕外部訪問。
# 要是開啟了密碼和bind,可以開啟。否則最好關(guān)閉,設(shè)置為no。
protected-mode no

# 指定redis只接收指定IP地址的請求
# 如需處理所有請求(遠(yuǎn)程訪問) bind 0.0.0.0
bind  0.0.0.0

# 設(shè)置密碼
requirepass 123456

修改Slave節(jié)點(diǎn)的配置文件,如下:

# 復(fù)制選項(xiàng),slave復(fù)制對應(yīng)的master
slaveof master 6379

# 如果master設(shè)置了requirepass,那么slave要連上master,需要有master的密碼才行。
# masterauth就是用來配置master的密碼,這樣可以在連上master后進(jìn)行認(rèn)證
masterauth 123456

# 當(dāng)slave同master失去連接或者復(fù)制正在進(jìn)行,slave的運(yùn)行方式
# 1.如果slave-serve-stale-data設(shè)置為yes(默認(rèn)設(shè)置),slave會(huì)繼續(xù)響應(yīng)客戶端的請求。
# 2.如果slave-serve-stale-data設(shè)置為no,除去INFO和SLAVOF命令之外的任何請求都會(huì)返回一個(gè)錯(cuò)誤”SYNC with master in progress”。
slave-serve-stale-data no
  1. 分別啟動(dòng)Master節(jié)點(diǎn)和Slave節(jié)點(diǎn),在Master節(jié)點(diǎn)和Slave節(jié)點(diǎn)分別查看節(jié)點(diǎn)狀態(tài)。
master: redis-cli
127.0.0.1:6379>  auth 123456
OK

# Master節(jié)點(diǎn)
127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=192.168.6.4,port=6379,state=online,offset=179,lag=0
slave1:ip=192.168.6.5,port=6379,state=online,offset=179,lag=1
master_replid:f0202b49b5d88ad57ed0bde33ffbc3b260924330
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:179
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:179

# Slave節(jié)點(diǎn)
127.0.0.1:6379> info replication
# Replication
role:slave
master_host:master
master_port:6379
master_link_status:up
master_last_io_seconds_ago:5
master_sync_in_progress:0
slave_repl_offset:3287
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:f0202b49b5d88ad57ed0bde33ffbc3b260924330
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:3287
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:3287
  1. 測試功能
# Master節(jié)點(diǎn),可讀可寫
127.0.0.1:6379> SET k1 v1
OK
127.0.0.1:6379> GET k1
"v1"

# Slave節(jié)點(diǎn),只可讀
127.0.0.1:6379> GET k1
"v1"
127.0.0.1:6379> SET k1 v2
(error) READONLY You can't write against a read only replica.
8.1.4 優(yōu)缺點(diǎn)分析
  • 優(yōu)點(diǎn):
  1. Master能自動(dòng)將數(shù)據(jù)同步到Slave,可以進(jìn)行讀寫分離,分擔(dān)Master的讀壓力
  2. Master與Slave之間的同步是以非阻塞的方式進(jìn)行的,同步期間,客戶端仍然可以提交查詢或更新請求。
  • 缺點(diǎn):
  1. 不具備自動(dòng)容錯(cuò)與恢復(fù)功能,Master或Slave的宕機(jī)都可能導(dǎo)致客戶端請求失敗,需要等待機(jī)器重啟或手動(dòng)切換客戶端IP才能恢復(fù)。
  2. Master宕機(jī),如果宕機(jī)前數(shù)據(jù)沒有同步完,則切換IP后會(huì)存在數(shù)據(jù)不一致的問題。難以支持在線擴(kuò)容,Redis的容量受限于單機(jī)配置。

寫在最后

如果你覺得我寫的文章幫到了你,歡迎點(diǎn)贊、評論、分享、贊賞哦,你們的鼓勵(lì)是我不斷創(chuàng)作的動(dòng)力~

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容