7 主從複製原理與優化
阿新 • • 發佈:2022-03-08
一 什麼是主從複製
機器故障;容量瓶頸;QPS瓶頸
一主一從,一主多從
做讀寫分離
做資料副本
擴充套件資料效能
一個maskter可以有多個slave
一個slave只能有一個master
資料流向是單向的,從master到slave
1.1 原理
1. 副本庫通過slaveof 127.0.0.1 6379命令,連線主庫,併發送SYNC給主庫 2. 主庫收到SYNC,會立即觸發BGSAVE,後臺儲存RDB,傳送給副本庫 3. 副本庫接收後會應用RDB快照 4. 主庫會陸續將中間產生的新的操作,儲存併發送給副本庫 5. 到此,我們主複製集就正常工作了 6. 再此以後,主庫只要發生新的操作,都會以命令傳播的形式自動傳送給副本庫.7. 所有複製相關資訊,從info資訊中都可以查到.即使重啟任何節點,他的主從關係依然都在. 8. 如果發生主從關係斷開時,從庫資料沒有任何損壞,在下次重連之後,從庫傳送PSYNC給主庫 9. 主庫只會將從庫缺失部分的資料同步給從庫應用,達到快速恢復主從的目的
1.2 主庫是否要開啟持久化
如果不開有可能,主庫重啟操作,造成所有主從資料丟失!
1.3 輔助配置(主從資料一致性配置)
min-slaves-to-write 1 min-slaves-max-lag 3 #那麼在從伺服器的數量少於1個,或者三個從伺服器的延遲(lag)值都大於或等於3秒時,主伺服器將拒絕執行寫命令
二 複製的 配置
2.1 slave 命令
6380是從,6379是主 在6380上執行(去從庫配置,配置主庫) slaveof 127.0.0.1 6379 #非同步 slaveof no one #取消複製,不會把之前的資料清除
2.2 配置檔案
slaveof ip port #配置從節點ip和埠 slave-read-only yes #從節點只讀,因為可讀可寫,資料會亂 ''' mkdir -p redis1/conf redis1/data redis2/conf redis2/data redis3/conf redis3/data vim redis.conf daemonize no pidfile redis.pid bind0.0.0.0 protected-mode no port 6379 timeout 0 logfile redis.log dbfilename dump.rdb dir /data slaveof 10.0.0.101 6379 slave-read-only yes cp redis.conf /home/redis2/conf/ docker run -p 6379:6379 --name redis_6379 -v /home/redis1/conf/redis.conf:/etc/redis/redis.conf -v /home/redis1/data:/data -d redis redis-server /etc/redis/redis.conf docker run -p 6378:6379 --name redis_6378 -v /home/redis2/conf/redis.conf:/etc/redis/redis.conf -v /home/redis2/data:/data -d redis redis-server /etc/redis/redis.conf docker run -p 6377:6379 --name redis_6377 -v /home/redis3/conf/redis.conf:/etc/redis/redis.conf -v /home/redis3/data:/data -d redis redis-server /etc/redis/redis.conf info replication '''
四 故障處理
slave故障
master故障
五 複製常見問題
1 讀寫分離
讀流量分攤到從節點
可能遇到問題:複製資料延遲,讀到過期資料,從節點故障
2 主從配置不一致
maxmemory不一致:丟失資料
資料結構優化引數:主節點做了優化,從節點沒有設定優化,會出現一些問題
3 規避全量複製
第一次全量複製,不可避免:小主節點,低峰(夜間)
節點執行id不匹配:主節點重啟(執行id變化)
複製擠壓緩衝區不足:增大複製緩衝區大小,rel_backlog_size
4 規避複製風暴
單主節點複製風暴,主節點重啟,所有從節點複製