云建設(shè)平臺seo快速排名外包
Redis | 主從模式
1. 簡介
Redis主從模式(Replication)是Redis提供的一種數(shù)據(jù)備份和高可用性解決方案。通過主從復(fù)制,可以將一個(gè)Redis服務(wù)器的數(shù)據(jù)復(fù)制到其他多個(gè)從服務(wù)器,從而實(shí)現(xiàn)數(shù)據(jù)的備份和讀寫分離,提高系統(tǒng)的性能和可用性。
主從模式的工作原理如下:
- 主節(jié)點(diǎn)(Master):主節(jié)點(diǎn)是主要的數(shù)據(jù)寫入節(jié)點(diǎn),負(fù)責(zé)接收客戶端的寫入操作(寫操作包括SET、INCR等),并將寫入的數(shù)據(jù)同步到從節(jié)點(diǎn)。
- 從節(jié)點(diǎn)(Slave):從節(jié)點(diǎn)負(fù)責(zé)復(fù)制主節(jié)點(diǎn)的數(shù)據(jù)。它接收主節(jié)點(diǎn)發(fā)送過來的寫操作命令,并執(zhí)行相同的寫操作,以保持?jǐn)?shù)據(jù)的一致性。
- 數(shù)據(jù)同步:主節(jié)點(diǎn)會將寫操作的命令發(fā)送給所有連接的從節(jié)點(diǎn),從節(jié)點(diǎn)執(zhí)行相同的寫操作,從而保持?jǐn)?shù)據(jù)同步。
- 只讀操作:客戶端的只讀操作(例如GET等)可以由從節(jié)點(diǎn)處理,從而減輕主節(jié)點(diǎn)的壓力,提高讀取性能。
主從模式的優(yōu)勢在于數(shù)據(jù)備份和讀寫分離:
- 數(shù)據(jù)備份:通過復(fù)制數(shù)據(jù)到從節(jié)點(diǎn),即使主節(jié)點(diǎn)發(fā)生故障,數(shù)據(jù)仍然可用,并且可以通過從節(jié)點(diǎn)恢復(fù)數(shù)據(jù)。
- 讀寫分離:通過從節(jié)點(diǎn)處理只讀操作,可以減輕主節(jié)點(diǎn)的負(fù)擔(dān),提高讀取性能。
2. 配置
2.1. 配置主節(jié)點(diǎn)
注意:不配置默認(rèn)也是主節(jié)點(diǎn)
啟動參數(shù)方式
在主節(jié)點(diǎn)的redis-server
執(zhí)行程序啟動時(shí)添加--replicaof no one
啟動參數(shù),表示當(dāng)前節(jié)點(diǎn)為主節(jié)點(diǎn)。
redis-server --replicaof no one
配置文件方式
在主節(jié)點(diǎn)的redis.conf
文件中設(shè)置replicaof
選項(xiàng)為no one
,表示當(dāng)前節(jié)點(diǎn)為主節(jié)點(diǎn)。
replicaof no one
2.2. 配置從節(jié)點(diǎn)
啟動參數(shù)方式
在主節(jié)點(diǎn)的redis-server
執(zhí)行程序啟動時(shí)添加--replicaof <master_ip> <master_port>
啟動參數(shù),設(shè)置當(dāng)前節(jié)點(diǎn)的主節(jié)點(diǎn)。
如果主節(jié)點(diǎn)有密碼還需要添加--masterauth <master_password>
。
配置文件方式
在從節(jié)點(diǎn)的redis.conf
文件中設(shè)置replicaof
選項(xiàng)為主節(jié)點(diǎn)的地址和端口。
replicaof <master_ip> <master_port>
如果主節(jié)點(diǎn)有密碼還需要添加masterauth
在redis.conf
masterauth <master_password>
3. 演示
docker-compose.yaml
version: "3.8"
services:redis1:container_name: redis1image: redis:7.0command:- redis-server- --requirepass 123456- --bind * -::*redis2:container_name: redis2image: redis:7.0command:- redis-server- --requirepass 123456- --bind * -::*- --masterauth 123456- --replicaof redis1 6379depends_on:- redis1redis3:container_name: redis3image: redis:7.0command:- redis-server- --requirepass 123456- --bind * -::*- --masterauth 123456- --replicaof redis1 6379depends_on:- redis1
-
進(jìn)入窗口控制臺:
docker exec -it redis1 bash
-
控制臺內(nèi)部操作:
root@1c0cccc0d756:/data# redis-cli 127.0.0.1:6379> AUTH 123456 OK 127.0.0.1:6379> INFO replication # Replication role:master connected_slaves:2 slave0:ip=172.18.0.3,port=6379,state=online,offset=1694,lag=0 slave1:ip=172.18.0.4,port=6379,state=online,offset=1694,lag=0 master_failover_state:no-failover master_replid:0158f9bf36c9db3b95829e29139fa71b1ecd2b84 master_replid2:0000000000000000000000000000000000000000 master_repl_offset:1694 second_repl_offset:-1 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:1 repl_backlog_histlen:1694
4. 注意
主從復(fù)制是異步的,從節(jié)點(diǎn)可能會有一定的延遲。如果主節(jié)點(diǎn)故障,可以將一個(gè)從節(jié)點(diǎn)提升為主節(jié)點(diǎn),繼續(xù)提供服務(wù)。但在進(jìn)行主從切換時(shí),需要考慮數(shù)據(jù)一致性和可能丟失的寫操作。